|
|
|
@ -58,12 +58,28 @@ var jsonEventPledge = []byte(`{ |
|
|
|
|
"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
|
|
|
|
|
var transferData1 = "00000000000000000000000000000000000000000000000000000000000f4240" |
|
|
|
|
|
|
|
|
|
// "0x00Ce0d46d924CC8437c806721496599FC3FFA268", 2218516807680, "usd"
|
|
|
|
|
var pledgeData1 = "00000000000000000000000000ce0d46d924cc8437c806721496599fc3ffa2680000000000000000000000000000000000000000000000000000020489e800007573640000000000000000000000000000000000000000000000000000000000" |
|
|
|
|
|
|
|
|
|
// 1000000,2218516807680,1000001
|
|
|
|
|
var mixedCaseData1 = "00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000020489e8000000000000000000000000000000000000000000000000000000000000000f4241" |
|
|
|
|
|
|
|
|
|
func TestEventId(t *testing.T) { |
|
|
|
|
var table = []struct { |
|
|
|
|
definition string |
|
|
|
@ -121,6 +137,27 @@ func TestEventTupleUnpack(t *testing.T) { |
|
|
|
|
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 { |
|
|
|
|
Who common.Address |
|
|
|
|
Wad *big.Int |
|
|
|
@ -133,9 +170,16 @@ func TestEventTupleUnpack(t *testing.T) { |
|
|
|
|
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) |
|
|
|
|
bigintExpected := big.NewInt(1000000) |
|
|
|
|
bigintExpected2 := big.NewInt(2218516807680) |
|
|
|
|
bigintExpected3 := big.NewInt(1000001) |
|
|
|
|
addr := common.HexToAddress("0x00Ce0d46d924CC8437c806721496599FC3FFA268") |
|
|
|
|
var testCases = []struct { |
|
|
|
|
data string |
|
|
|
@ -158,6 +202,34 @@ func TestEventTupleUnpack(t *testing.T) { |
|
|
|
|
jsonEventTransfer, |
|
|
|
|
"", |
|
|
|
|
"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, |
|
|
|
|
&EventPledge{}, |
|
|
|
@ -216,6 +288,13 @@ func TestEventTupleUnpack(t *testing.T) { |
|
|
|
|
jsonEventPledge, |
|
|
|
|
"abi: cannot unmarshal tuple into map[string]interface {}", |
|
|
|
|
"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 { |
|
|
|
@ -227,7 +306,7 @@ func TestEventTupleUnpack(t *testing.T) { |
|
|
|
|
assert.Nil(err, "Should be able to unpack event data.") |
|
|
|
|
assert.Equal(tc.expected, tc.dest, tc.name) |
|
|
|
|
} else { |
|
|
|
|
assert.EqualError(err, tc.error) |
|
|
|
|
assert.EqualError(err, tc.error, tc.name) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|