|
@@ -58,12 +58,28 @@ var jsonEventPledge = []byte(`{
|
|
|
"type": "event"
|
|
"type": "event"
|
|
|
}`)
|
|
}`)
|
|
|
|
|
|
|
|
|
|
+var jsonEventMixedCase = []byte(`{
|
|
|
|
|
+ "anonymous": false,
|
|
|
|
|
+ "inputs": [{
|
|
|
|
|
+ "indexed": false, "name": "value", "type": "uint256"
|
|
|
|
|
+ }, {
|
|
|
|
|
+ "indexed": false, "name": "_value", "type": "uint256"
|
|
|
|
|
+ }, {
|
|
|
|
|
+ "indexed": false, "name": "Value", "type": "uint256"
|
|
|
|
|
+ }],
|
|
|
|
|
+ "name": "MixedCase",
|
|
|
|
|
+ "type": "event"
|
|
|
|
|
+ }`)
|
|
|
|
|
+
|
|
|
// 1000000
|
|
// 1000000
|
|
|
var transferData1 = "00000000000000000000000000000000000000000000000000000000000f4240"
|
|
var transferData1 = "00000000000000000000000000000000000000000000000000000000000f4240"
|
|
|
|
|
|
|
|
// "0x00Ce0d46d924CC8437c806721496599FC3FFA268", 2218516807680, "usd"
|
|
// "0x00Ce0d46d924CC8437c806721496599FC3FFA268", 2218516807680, "usd"
|
|
|
var pledgeData1 = "00000000000000000000000000ce0d46d924cc8437c806721496599fc3ffa2680000000000000000000000000000000000000000000000000000020489e800007573640000000000000000000000000000000000000000000000000000000000"
|
|
var pledgeData1 = "00000000000000000000000000ce0d46d924cc8437c806721496599fc3ffa2680000000000000000000000000000000000000000000000000000020489e800007573640000000000000000000000000000000000000000000000000000000000"
|
|
|
|
|
|
|
|
|
|
+// 1000000,2218516807680,1000001
|
|
|
|
|
+var mixedCaseData1 = "00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000020489e8000000000000000000000000000000000000000000000000000000000000000f4241"
|
|
|
|
|
+
|
|
|
func TestEventId(t *testing.T) {
|
|
func TestEventId(t *testing.T) {
|
|
|
var table = []struct {
|
|
var table = []struct {
|
|
|
definition string
|
|
definition string
|
|
@@ -121,6 +137,27 @@ func TestEventTupleUnpack(t *testing.T) {
|
|
|
Value *big.Int
|
|
Value *big.Int
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ type EventTransferWithTag struct {
|
|
|
|
|
+ // this is valid because `value` is not exportable,
|
|
|
|
|
+ // so value is only unmarshalled into `Value1`.
|
|
|
|
|
+ value *big.Int
|
|
|
|
|
+ Value1 *big.Int `abi:"value"`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ type BadEventTransferWithSameFieldAndTag struct {
|
|
|
|
|
+ Value *big.Int
|
|
|
|
|
+ Value1 *big.Int `abi:"value"`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ type BadEventTransferWithDuplicatedTag struct {
|
|
|
|
|
+ Value1 *big.Int `abi:"value"`
|
|
|
|
|
+ Value2 *big.Int `abi:"value"`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ type BadEventTransferWithEmptyTag struct {
|
|
|
|
|
+ Value *big.Int `abi:""`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
type EventPledge struct {
|
|
type EventPledge struct {
|
|
|
Who common.Address
|
|
Who common.Address
|
|
|
Wad *big.Int
|
|
Wad *big.Int
|
|
@@ -133,9 +170,16 @@ func TestEventTupleUnpack(t *testing.T) {
|
|
|
Currency [3]byte
|
|
Currency [3]byte
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ type EventMixedCase struct {
|
|
|
|
|
+ Value1 *big.Int `abi:"value"`
|
|
|
|
|
+ Value2 *big.Int `abi:"_value"`
|
|
|
|
|
+ Value3 *big.Int `abi:"Value"`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
bigint := new(big.Int)
|
|
bigint := new(big.Int)
|
|
|
bigintExpected := big.NewInt(1000000)
|
|
bigintExpected := big.NewInt(1000000)
|
|
|
bigintExpected2 := big.NewInt(2218516807680)
|
|
bigintExpected2 := big.NewInt(2218516807680)
|
|
|
|
|
+ bigintExpected3 := big.NewInt(1000001)
|
|
|
addr := common.HexToAddress("0x00Ce0d46d924CC8437c806721496599FC3FFA268")
|
|
addr := common.HexToAddress("0x00Ce0d46d924CC8437c806721496599FC3FFA268")
|
|
|
var testCases = []struct {
|
|
var testCases = []struct {
|
|
|
data string
|
|
data string
|
|
@@ -158,6 +202,34 @@ func TestEventTupleUnpack(t *testing.T) {
|
|
|
jsonEventTransfer,
|
|
jsonEventTransfer,
|
|
|
"",
|
|
"",
|
|
|
"Can unpack ERC20 Transfer event into slice",
|
|
"Can unpack ERC20 Transfer event into slice",
|
|
|
|
|
+ }, {
|
|
|
|
|
+ transferData1,
|
|
|
|
|
+ &EventTransferWithTag{},
|
|
|
|
|
+ &EventTransferWithTag{Value1: bigintExpected},
|
|
|
|
|
+ jsonEventTransfer,
|
|
|
|
|
+ "",
|
|
|
|
|
+ "Can unpack ERC20 Transfer event into structure with abi: tag",
|
|
|
|
|
+ }, {
|
|
|
|
|
+ transferData1,
|
|
|
|
|
+ &BadEventTransferWithDuplicatedTag{},
|
|
|
|
|
+ &BadEventTransferWithDuplicatedTag{},
|
|
|
|
|
+ jsonEventTransfer,
|
|
|
|
|
+ "struct: abi tag in 'Value2' already mapped",
|
|
|
|
|
+ "Can not unpack ERC20 Transfer event with duplicated abi tag",
|
|
|
|
|
+ }, {
|
|
|
|
|
+ transferData1,
|
|
|
|
|
+ &BadEventTransferWithSameFieldAndTag{},
|
|
|
|
|
+ &BadEventTransferWithSameFieldAndTag{},
|
|
|
|
|
+ jsonEventTransfer,
|
|
|
|
|
+ "abi: multiple variables maps to the same abi field 'value'",
|
|
|
|
|
+ "Can not unpack ERC20 Transfer event with a field and a tag mapping to the same abi variable",
|
|
|
|
|
+ }, {
|
|
|
|
|
+ transferData1,
|
|
|
|
|
+ &BadEventTransferWithEmptyTag{},
|
|
|
|
|
+ &BadEventTransferWithEmptyTag{},
|
|
|
|
|
+ jsonEventTransfer,
|
|
|
|
|
+ "struct: abi tag in 'Value' is empty",
|
|
|
|
|
+ "Can not unpack ERC20 Transfer event with an empty tag",
|
|
|
}, {
|
|
}, {
|
|
|
pledgeData1,
|
|
pledgeData1,
|
|
|
&EventPledge{},
|
|
&EventPledge{},
|
|
@@ -216,6 +288,13 @@ func TestEventTupleUnpack(t *testing.T) {
|
|
|
jsonEventPledge,
|
|
jsonEventPledge,
|
|
|
"abi: cannot unmarshal tuple into map[string]interface {}",
|
|
"abi: cannot unmarshal tuple into map[string]interface {}",
|
|
|
"Can not unpack Pledge event into map",
|
|
"Can not unpack Pledge event into map",
|
|
|
|
|
+ }, {
|
|
|
|
|
+ mixedCaseData1,
|
|
|
|
|
+ &EventMixedCase{},
|
|
|
|
|
+ &EventMixedCase{Value1: bigintExpected, Value2: bigintExpected2, Value3: bigintExpected3},
|
|
|
|
|
+ jsonEventMixedCase,
|
|
|
|
|
+ "",
|
|
|
|
|
+ "Can unpack abi variables with mixed case",
|
|
|
}}
|
|
}}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
for _, tc := range testCases {
|
|
@@ -227,7 +306,7 @@ func TestEventTupleUnpack(t *testing.T) {
|
|
|
assert.Nil(err, "Should be able to unpack event data.")
|
|
assert.Nil(err, "Should be able to unpack event data.")
|
|
|
assert.Equal(tc.expected, tc.dest, tc.name)
|
|
assert.Equal(tc.expected, tc.dest, tc.name)
|
|
|
} else {
|
|
} else {
|
|
|
- assert.EqualError(err, tc.error)
|
|
|
|
|
|
|
+ assert.EqualError(err, tc.error, tc.name)
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|