|
|
@ -367,6 +367,56 @@ func TestInputVariableInputLength(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestInputFixedArrayAndVariableInputLength(t *testing.T) { |
|
|
|
|
|
|
|
const definition = `[ |
|
|
|
|
|
|
|
{ "type" : "function", "name" : "fixedArrStr", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] }, |
|
|
|
|
|
|
|
{ "type" : "function", "name" : "fixedArrBytes", "constant" : true, "inputs" : [ { "name" : "str", "type" : "bytes" }, { "name" : "fixedArr", "type" : "uint256[2]" } ] } |
|
|
|
|
|
|
|
]` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abi, err := JSON(strings.NewReader(definition)) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Error(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test fixed array of uint256 and a string
|
|
|
|
|
|
|
|
arrin := [2]*big.Int{big.NewInt(1), big.NewInt(2)} |
|
|
|
|
|
|
|
strin := "hello world" |
|
|
|
|
|
|
|
fixedArrStrPack, err := abi.Pack("fixedArrStr", strin, arrin) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Error(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
offset := make([]byte, 32) |
|
|
|
|
|
|
|
offset[31] = 96 |
|
|
|
|
|
|
|
length := make([]byte, 32) |
|
|
|
|
|
|
|
length[31] = byte(len(strin)) |
|
|
|
|
|
|
|
strvalue := common.RightPadBytes([]byte(strin), 32) |
|
|
|
|
|
|
|
arrinvalue1 := common.LeftPadBytes(arrin[0].Bytes(), 32) |
|
|
|
|
|
|
|
arrinvalue2 := common.LeftPadBytes(arrin[1].Bytes(), 32) |
|
|
|
|
|
|
|
exp := append(offset, arrinvalue1...) |
|
|
|
|
|
|
|
exp = append(exp, arrinvalue2...) |
|
|
|
|
|
|
|
exp = append(exp, append(length, strvalue...)...) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ignore first 4 bytes of the output. This is the function identifier
|
|
|
|
|
|
|
|
fixedArrStrPack = fixedArrStrPack[4:] |
|
|
|
|
|
|
|
if !bytes.Equal(fixedArrStrPack, exp) { |
|
|
|
|
|
|
|
t.Errorf("expected %x, got %x\n", exp, fixedArrStrPack) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test fixed array of uint256 and a byte array
|
|
|
|
|
|
|
|
bytesin := []byte(strin) |
|
|
|
|
|
|
|
fixedArrBytesPack, err := abi.Pack("fixedArrBytes", bytesin, arrin) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Error(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ignore first 4 bytes of the output. This is the function identifier
|
|
|
|
|
|
|
|
fixedArrBytesPack = fixedArrBytesPack[4:] |
|
|
|
|
|
|
|
if !bytes.Equal(fixedArrBytesPack, exp) { |
|
|
|
|
|
|
|
t.Errorf("expected %x, got %x\n", exp, fixedArrBytesPack) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestDefaultFunctionParsing(t *testing.T) { |
|
|
|
func TestDefaultFunctionParsing(t *testing.T) { |
|
|
|
const definition = `[{ "name" : "balance" }]` |
|
|
|
const definition = `[{ "name" : "balance" }]` |
|
|
|
|
|
|
|
|
|
|
|