@@ -1448,6 +1448,88 @@ var bindTests = []struct {
14481448 map [string ]string {"_myVar" : "pubVar" }, // alias MyVar to PubVar
14491449 nil ,
14501450 },
1451+ {
1452+ "MultiContracts" ,
1453+ `
1454+ pragma solidity ^0.5.11;
1455+ pragma experimental ABIEncoderV2;
1456+
1457+ library ExternalLib {
1458+ struct SharedStruct{
1459+ uint256 f1;
1460+ bytes32 f2;
1461+ }
1462+ }
1463+
1464+ contract ContractOne {
1465+ function foo(ExternalLib.SharedStruct memory s) pure public {
1466+ // Do stuff
1467+ }
1468+ }
1469+
1470+ contract ContractTwo {
1471+ function bar(ExternalLib.SharedStruct memory s) pure public {
1472+ // Do stuff
1473+ }
1474+ }
1475+ ` ,
1476+ []string {
1477+ `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c80639d8a8ba81461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a72315820749274eb7f6c01010d5322af4e1668b0a154409eb7968bd6cae5524c7ed669bb6c6578706572696d656e74616cf564736f6c634300050c0040` ,
1478+ `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c8063db8ba08c1461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a723158209bc28ee7ea97c131a13330d77ec73b4493b5c59c648352da81dd288b021192596c6578706572696d656e74616cf564736f6c634300050c0040` ,
1479+ `606c6026600b82828239805160001a6073141515601857fe5b30600052607381538281f350fe73000000000000000000000000000000000000000030146080604052600436106023575b60006000fdfea365627a7a72315820518f0110144f5b3de95697d05e456a064656890d08e6f9cff47f3be710cc46a36c6578706572696d656e74616cf564736f6c634300050c0040` ,
1480+ },
1481+ []string {
1482+ `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]` ,
1483+ `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"bar","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]` ,
1484+ `[]` ,
1485+ },
1486+ `
1487+ "math/big"
1488+
1489+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
1490+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
1491+ "github.com/ethereum/go-ethereum/crypto"
1492+ "github.com/ethereum/go-ethereum/core"
1493+ ` ,
1494+ `
1495+ key, _ := crypto.GenerateKey()
1496+ addr := crypto.PubkeyToAddress(key.PublicKey)
1497+
1498+ // Deploy registrar contract
1499+ sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 10000000)
1500+ defer sim.Close()
1501+
1502+ transactOpts := bind.NewKeyedTransactor(key)
1503+ _, _, c1, err := DeployContractOne(transactOpts, sim)
1504+ if err != nil {
1505+ t.Fatal("Failed to deploy contract")
1506+ }
1507+ sim.Commit()
1508+ err = c1.Foo(nil, ExternalLibSharedStruct{
1509+ F1: big.NewInt(100),
1510+ F2: [32]byte{0x01, 0x02, 0x03},
1511+ })
1512+ if err != nil {
1513+ t.Fatal("Failed to invoke function")
1514+ }
1515+ _, _, c2, err := DeployContractTwo(transactOpts, sim)
1516+ if err != nil {
1517+ t.Fatal("Failed to deploy contract")
1518+ }
1519+ sim.Commit()
1520+ err = c2.Bar(nil, ExternalLibSharedStruct{
1521+ F1: big.NewInt(100),
1522+ F2: [32]byte{0x01, 0x02, 0x03},
1523+ })
1524+ if err != nil {
1525+ t.Fatal("Failed to invoke function")
1526+ }
1527+ ` ,
1528+ nil ,
1529+ nil ,
1530+ nil ,
1531+ []string {"ContractOne" , "ContractTwo" , "ExternalLib" },
1532+ },
14511533}
14521534
14531535// Tests that packages generated by the binder can be successfully compiled and
0 commit comments