@@ -1448,6 +1448,88 @@ var bindTests = []struct {
1448
1448
map [string ]string {"_myVar" : "pubVar" }, // alias MyVar to PubVar
1449
1449
nil ,
1450
1450
},
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
+ },
1451
1533
}
1452
1534
1453
1535
// Tests that packages generated by the binder can be successfully compiled and
0 commit comments