@@ -1785,6 +1785,77 @@ var bindTests = []struct {
1785
1785
nil ,
1786
1786
nil ,
1787
1787
},
1788
+ // Test resolving single struct argument
1789
+ {
1790
+ `NewSingleStructArgument` ,
1791
+ `
1792
+ pragma solidity ^0.8.0;
1793
+
1794
+ contract NewSingleStructArgument {
1795
+ struct MyStruct{
1796
+ uint256 a;
1797
+ uint256 b;
1798
+ }
1799
+ event StructEvent(MyStruct s);
1800
+ function TestEvent() public {
1801
+ emit StructEvent(MyStruct({a: 1, b: 2}));
1802
+ }
1803
+ }
1804
+ ` ,
1805
+ []string {"608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806324ec1d3f14602d575b600080fd5b60336035565b005b7fb4b2ff75e30cb4317eaae16dd8a187dd89978df17565104caa6c2797caae27d460405180604001604052806001815260200160028152506040516078919060ba565b60405180910390a1565b6040820160008201516096600085018260ad565b50602082015160a7602085018260ad565b50505050565b60b48160d3565b82525050565b600060408201905060cd60008301846082565b92915050565b600081905091905056fea26469706673582212208823628796125bf9941ce4eda18da1be3cf2931b231708ab848e1bd7151c0c9a64736f6c63430008070033" },
1806
+ []string {`[{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"indexed":false,"internalType":"struct Test.MyStruct","name":"s","type":"tuple"}],"name":"StructEvent","type":"event"},{"inputs":[],"name":"TestEvent","outputs":[],"stateMutability":"nonpayable","type":"function"}]` },
1807
+ `
1808
+ "math/big"
1809
+
1810
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
1811
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
1812
+ "github.com/ethereum/go-ethereum/core"
1813
+ "github.com/ethereum/go-ethereum/crypto"
1814
+ "github.com/ethereum/go-ethereum/eth/ethconfig"
1815
+ ` ,
1816
+ `
1817
+ var (
1818
+ key, _ = crypto.GenerateKey()
1819
+ user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
1820
+ sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil)
1821
+ )
1822
+ defer sim.Close()
1823
+
1824
+ _, _, d, err := DeployNewSingleStructArgument(user, sim)
1825
+ if err != nil {
1826
+ t.Fatalf("Failed to deploy contract %v", err)
1827
+ }
1828
+ sim.Commit()
1829
+
1830
+ _, err = d.TestEvent(user)
1831
+ if err != nil {
1832
+ t.Fatalf("Failed to call contract %v", err)
1833
+ }
1834
+ sim.Commit()
1835
+
1836
+ it, err := d.FilterStructEvent(nil)
1837
+ if err != nil {
1838
+ t.Fatalf("Failed to filter contract event %v", err)
1839
+ }
1840
+ var count int
1841
+ for it.Next() {
1842
+ if it.Event.S.A.Cmp(big.NewInt(1)) != 0 {
1843
+ t.Fatal("Unexpected contract event")
1844
+ }
1845
+ if it.Event.S.B.Cmp(big.NewInt(2)) != 0 {
1846
+ t.Fatal("Unexpected contract event")
1847
+ }
1848
+ count += 1
1849
+ }
1850
+ if count != 1 {
1851
+ t.Fatal("Unexpected contract event number")
1852
+ }
1853
+ ` ,
1854
+ nil ,
1855
+ nil ,
1856
+ nil ,
1857
+ nil ,
1858
+ },
1788
1859
}
1789
1860
1790
1861
// Tests that packages generated by the binder can be successfully compiled and
0 commit comments