From 2949b1a11dbcbdf2d93050b99871da61bbb5972d Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Thu, 19 Dec 2024 13:29:01 +0700 Subject: [PATCH] embed direct library relations in metadata in bindings. simplify dependency tree handling as a result of embedding it in the bindings. --- accounts/abi/bind/dep_tree.go | 22 +++++-- accounts/abi/bind/dep_tree_test.go | 41 ++++++------- accounts/abi/bind/source2.go.tpl | 10 +++- accounts/abi/bind/v2/internal/db/bindings.go | 2 - .../abi/bind/v2/internal/events/bindings.go | 2 - .../v2/internal/nested_libraries/bindings.go | 57 +++++++------------ .../bind/v2/internal/solc_errors/bindings.go | 4 -- accounts/abi/bind/v2/lib_test.go | 4 +- 8 files changed, 64 insertions(+), 78 deletions(-) diff --git a/accounts/abi/bind/dep_tree.go b/accounts/abi/bind/dep_tree.go index 072e716368..8bcf9aa513 100644 --- a/accounts/abi/bind/dep_tree.go +++ b/accounts/abi/bind/dep_tree.go @@ -1,6 +1,8 @@ package bind import ( + "encoding/hex" + "fmt" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "maps" @@ -52,6 +54,7 @@ type DeployFn func(input, deployer []byte) (common.Address, *types.Transaction, // depTreeDeployer is responsible for taking a dependency, deploying-and-linking its components in the proper // order. A depTreeDeployer cannot be used after calling LinkAndDeploy other than to retrieve the deployment result. type depTreeDeployer struct { + overrideAddrs map[string]common.Address deployedAddrs map[string]common.Address deployerTxs map[string]*types.Transaction input map[string][]byte // map of the root contract pattern to the constructor input (if there is any) @@ -62,10 +65,9 @@ type depTreeDeployer struct { // The deployment result (deploy addresses/txs or an error) is stored in the depTreeDeployer object. func (d *depTreeDeployer) linkAndDeploy(metadata *MetaData) error { // don't deploy contracts specified as overrides. don't deploy their dependencies. - if _, ok := d.deployedAddrs[metadata.Pattern]; ok { + if _, ok := d.overrideAddrs[metadata.Pattern]; ok { return nil } - // if this contract/library depends on other libraries deploy them (and their dependencies) first for _, dep := range metadata.Deps { if err := d.linkAndDeploy(dep); err != nil { @@ -76,12 +78,19 @@ func (d *depTreeDeployer) linkAndDeploy(metadata *MetaData) error { // a deployer bytecode for this contract. deployerCode := metadata.Bin for _, dep := range metadata.Deps { - linkAddr := d.deployedAddrs[dep.Pattern] + linkAddr, ok := d.deployedAddrs[dep.Pattern] + if !ok { + linkAddr = d.overrideAddrs[dep.Pattern] + } deployerCode = strings.ReplaceAll(deployerCode, "__$"+dep.Pattern+"$__", strings.ToLower(linkAddr.String()[2:])) } // Finally, deploy the contract. - addr, tx, err := d.deploy(d.input[metadata.Pattern], common.Hex2Bytes(deployerCode)) + deployer, err := hex.DecodeString(deployerCode[2:]) + if err != nil { + panic(fmt.Sprintf("error decoding contract deployer hex %s:\n%v", deployerCode[2:], err)) + } + addr, tx, err := d.deploy(d.input[metadata.Pattern], deployer) if err != nil { return err } @@ -99,9 +108,10 @@ func (d *depTreeDeployer) result() *DeploymentResult { } } -func newDepTreeDeployer(deploy DeployFn) *depTreeDeployer { +func newDepTreeDeployer(overrides map[string]common.Address, deploy DeployFn) *depTreeDeployer { return &depTreeDeployer{ deploy: deploy, + overrideAddrs: overrides, deployedAddrs: make(map[string]common.Address), deployerTxs: make(map[string]*types.Transaction)} } @@ -114,7 +124,7 @@ func LinkAndDeploy(deployParams *DeploymentParams, deploy DeployFn) (res *Deploy Txs: make(map[string]*types.Transaction), Addrs: make(map[string]common.Address), } - deployer := newDepTreeDeployer(deploy) + deployer := newDepTreeDeployer(deployParams.overrides, deploy) for _, contract := range deployParams.contracts { if deployParams.inputs != nil { deployer.input = map[string][]byte{contract.Pattern: deployParams.inputs[contract.Pattern]} diff --git a/accounts/abi/bind/dep_tree_test.go b/accounts/abi/bind/dep_tree_test.go index 12f4c87f6a..6172623946 100644 --- a/accounts/abi/bind/dep_tree_test.go +++ b/accounts/abi/bind/dep_tree_test.go @@ -168,7 +168,7 @@ func testLinkCase(t *testing.T, tcInput linkTestCaseInput) { return contractAddr, nil, nil } - var contracts map[string]*MetaData + contracts := make(map[string]*MetaData) overrides := make(map[string]common.Address) for pattern, bin := range tc.contractCodes { @@ -205,24 +205,29 @@ func testLinkCase(t *testing.T, tcInput linkTestCaseInput) { } func TestContractLinking(t *testing.T) { + // test simple contract without any dependencies or overrides + testLinkCase(t, linkTestCaseInput{ + map[rune][]rune{ + 'a': {}}, + map[rune]struct{}{}, + map[rune]struct{}{ + 'a': {}}}) + // test deployment of a contract that depends on somes libraries. testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ 'a': {'b', 'c', 'd', 'e'}}, map[rune]struct{}{}, map[rune]struct{}{ - 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, - }, - }) - + 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}}}) + // test deployment of a contract that depends on some libraries, + // one of which has its own library dependencies. testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ 'a': {'b', 'c', 'd', 'e'}, 'e': {'f', 'g', 'h', 'i'}}, map[rune]struct{}{}, map[rune]struct{}{ - 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'i': {}, - }}) - + 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'i': {}}}) // test single contract only without deps testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ @@ -231,7 +236,6 @@ func TestContractLinking(t *testing.T) { map[rune]struct{}{ 'a': {}, }}) - // test that libraries at different levels of the tree can share deps, // and that these shared deps will only be deployed once. testLinkCase(t, linkTestCaseInput{ @@ -243,7 +247,6 @@ func TestContractLinking(t *testing.T) { map[rune]struct{}{ 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'i': {}, 'j': {}, 'k': {}, 'l': {}, 'm': {}, }}) - // test two contracts can be deployed which don't share deps testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ @@ -253,7 +256,6 @@ func TestContractLinking(t *testing.T) { map[rune]struct{}{ 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'i': {}, 'j': {}, }}) - // test two contracts can be deployed which share deps testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ @@ -263,32 +265,26 @@ func TestContractLinking(t *testing.T) { map[rune]struct{}{ 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, }}) - // test one contract with overrides for all lib deps testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ 'a': {'b', 'c', 'd', 'e'}}, map[rune]struct{}{'b': {}, 'c': {}, 'd': {}, 'e': {}}, map[rune]struct{}{ - 'a': {}, - }}) - + 'a': {}}}) // test one contract with overrides for some lib deps testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ 'a': {'b', 'c'}}, map[rune]struct{}{'b': {}, 'c': {}}, map[rune]struct{}{ - 'a': {}, - }}) - + 'a': {}}}) // test deployment of a contract with overrides testLinkCase(t, linkTestCaseInput{ map[rune][]rune{ 'a': {}}, map[rune]struct{}{'a': {}}, map[rune]struct{}{}}) - // two contracts ('a' and 'f') share some dependencies. contract 'a' is marked as an override. expect that any of // its depdencies that aren't shared with 'f' are not deployed. testLinkCase(t, linkTestCaseInput{map[rune][]rune{ @@ -296,9 +292,7 @@ func TestContractLinking(t *testing.T) { 'f': {'g', 'c', 'd', 'h'}}, map[rune]struct{}{'a': {}}, map[rune]struct{}{ - 'f': {}, 'g': {}, 'c': {}, 'd': {}, 'h': {}, - }}) - + 'f': {}, 'g': {}, 'c': {}, 'd': {}, 'h': {}}}) // test nested libraries that share deps at different levels of the tree... with override. // same condition as above test: no sub-dependencies of testLinkCase(t, linkTestCaseInput{ @@ -311,6 +305,5 @@ func TestContractLinking(t *testing.T) { 'i': {}, }, map[rune]struct{}{ - 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'm': {}, - }}) + 'a': {}, 'b': {}, 'c': {}, 'd': {}, 'e': {}, 'f': {}, 'g': {}, 'h': {}, 'm': {}}}) } diff --git a/accounts/abi/bind/source2.go.tpl b/accounts/abi/bind/source2.go.tpl index 7b60484189..29c53f51a1 100644 --- a/accounts/abi/bind/source2.go.tpl +++ b/accounts/abi/bind/source2.go.tpl @@ -40,10 +40,14 @@ var ( Pattern: "{{index $.Libraries .Type}}", {{if .InputBin -}} Bin: "0x{{.InputBin}}", - {{end}} - {{if .Libraries -}}{{range $name, $pattern := .Libraries}} + {{end -}} + {{if .Libraries -}} + Deps: []*bind.MetaData{ + {{- range $name, $pattern := .Libraries}} {{$name}}MetaData, - {{end}}{{end}} + {{- end}} + }, + {{end}} } // {{.Type}} is an auto generated Go binding around an Ethereum contract. diff --git a/accounts/abi/bind/v2/internal/db/bindings.go b/accounts/abi/bind/v2/internal/db/bindings.go index a6e1aeed42..74f8fbd374 100644 --- a/accounts/abi/bind/v2/internal/db/bindings.go +++ b/accounts/abi/bind/v2/internal/db/bindings.go @@ -30,8 +30,6 @@ type DBStats struct { Mods *big.Int } -var DBLibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // DBMetaData contains all meta data concerning the DB contract. var DBMetaData = &bind.MetaData{ diff --git a/accounts/abi/bind/v2/internal/events/bindings.go b/accounts/abi/bind/v2/internal/events/bindings.go index 8331c9864c..1bf5d4ce10 100644 --- a/accounts/abi/bind/v2/internal/events/bindings.go +++ b/accounts/abi/bind/v2/internal/events/bindings.go @@ -29,8 +29,6 @@ type CPoint struct { Y *big.Int } -var CLibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // CMetaData contains all meta data concerning the C contract. var CMetaData = &bind.MetaData{ diff --git a/accounts/abi/bind/v2/internal/nested_libraries/bindings.go b/accounts/abi/bind/v2/internal/nested_libraries/bindings.go index 212c81bc8b..d8302994e4 100644 --- a/accounts/abi/bind/v2/internal/nested_libraries/bindings.go +++ b/accounts/abi/bind/v2/internal/nested_libraries/bindings.go @@ -23,19 +23,16 @@ var ( _ = abi.ConvertType ) -var C1LibraryDeps = []*bind.MetaData{ - L1MetaData, - L2MetaData, - L3MetaData, - L4MetaData, -} - // TODO: convert this type to value type after everything works. // C1MetaData contains all meta data concerning the C1 contract. var C1MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"v1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"v2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"res\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "ae26158f1824f3918bd66724ee8b6eb7c9", Bin: "0x6080604052348015600e575f80fd5b506040516103983803806103988339818101604052810190602e91906066565b5050609d565b5f80fd5b5f819050919050565b6048816038565b81146051575f80fd5b50565b5f815190506060816041565b92915050565b5f806040838503121560795760786034565b5b5f6084858286016054565b92505060206093858286016054565b9150509250929050565b6102ee806100aa5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632ad112721461002d575b5f80fd5b6100476004803603810190610042919061019e565b61005d565b60405161005491906101d8565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad112725f6040518263ffffffff1660e01b81526004016100979190610200565b602060405180830381865af41580156100b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d6919061022d565b73__$5f33a1fab8ea7d932b4bc8c5e7dcd90bc2$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea26469706673582212209d07b322f13a9a05a62ccf2e925d28587ba6709742c985a55dad244e25b5cdd564736f6c634300081a0033", + Deps: []*bind.MetaData{ + L1MetaData, + L4MetaData, + }, } // C1 is an auto generated Go binding around an Ethereum contract. @@ -76,18 +73,16 @@ func (_C1 *C1) UnpackDo(data []byte) (*big.Int, error) { } -var C2LibraryDeps = []*bind.MetaData{ - L1MetaData, - L2bMetaData, - L4bMetaData, -} - // TODO: convert this type to value type after everything works. // C2MetaData contains all meta data concerning the C2 contract. var C2MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"v1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"v2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"res\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "78ef2840de5b706112ca2dbfa765501a89", Bin: "0x6080604052348015600e575f80fd5b506040516103983803806103988339818101604052810190602e91906066565b5050609d565b5f80fd5b5f819050919050565b6048816038565b81146051575f80fd5b50565b5f815190506060816041565b92915050565b5f806040838503121560795760786034565b5b5f6084858286016054565b92505060206093858286016054565b9150509250929050565b6102ee806100aa5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632ad112721461002d575b5f80fd5b6100476004803603810190610042919061019e565b61005d565b60405161005491906101d8565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad112725f6040518263ffffffff1660e01b81526004016100979190610200565b602060405180830381865af41580156100b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d6919061022d565b73__$6070639404c39b5667691bb1f9177e1eac$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea26469706673582212203f624c062b23db1417622d9d64f8bb382c9e4613e15338001e190945d6e7f2c864736f6c634300081a0033", + Deps: []*bind.MetaData{ + L1MetaData, + L4bMetaData, + }, } // C2 is an auto generated Go binding around an Ethereum contract. @@ -128,8 +123,6 @@ func (_C2 *C2) UnpackDo(data []byte) (*big.Int, error) { } -var L1LibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // L1MetaData contains all meta data concerning the L1 contract. var L1MetaData = &bind.MetaData{ @@ -176,16 +169,15 @@ func (_L1 *L1) UnpackDo(data []byte) (*big.Int, error) { } -var L2LibraryDeps = []*bind.MetaData{ - L1MetaData, -} - // TODO: convert this type to value type after everything works. // L2MetaData contains all meta data concerning the L2 contract. var L2MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "2ce896a6dd38932d354f317286f90bc675", Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220c6f7a5f2e4ef9458b4081d7a828ede24efb394c00dad7182493a56186a60b62f64736f6c634300081a0033", + Deps: []*bind.MetaData{ + L1MetaData, + }, } // L2 is an auto generated Go binding around an Ethereum contract. @@ -226,16 +218,15 @@ func (_L2 *L2) UnpackDo(data []byte) (*big.Int, error) { } -var L2bLibraryDeps = []*bind.MetaData{ - L1MetaData, -} - // TODO: convert this type to value type after everything works. // L2bMetaData contains all meta data concerning the L2b contract. var L2bMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "fd1474cf57f7ed48491e8bfdfd0d172adf", Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220a36a724bd2bb81778a0380d6d4b41d69d81d8b6d3d2a672e14cfa22a6e98253e64736f6c634300081a0033", + Deps: []*bind.MetaData{ + L1MetaData, + }, } // L2b is an auto generated Go binding around an Ethereum contract. @@ -276,8 +267,6 @@ func (_L2b *L2b) UnpackDo(data []byte) (*big.Int, error) { } -var L3LibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // L3MetaData contains all meta data concerning the L3 contract. var L3MetaData = &bind.MetaData{ @@ -324,18 +313,16 @@ func (_L3 *L3) UnpackDo(data []byte) (*big.Int, error) { } -var L4LibraryDeps = []*bind.MetaData{ - L1MetaData, - L2MetaData, - L3MetaData, -} - // TODO: convert this type to value type after everything works. // L4MetaData contains all meta data concerning the L4 contract. var L4MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "5f33a1fab8ea7d932b4bc8c5e7dcd90bc2", Bin: "0x6102d161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d91906101a9565b610068565b60405161005f91906101e3565b60405180910390f35b5f600173__$d03b97f5e1a564374023a72ac7d1806773$__632ad11272846040518263ffffffff1660e01b81526004016100a291906101e3565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610210565b73__$2ce896a6dd38932d354f317286f90bc675$__632ad11272856040518263ffffffff1660e01b815260040161011891906101e3565b602060405180830381865af4158015610133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101579190610210565b6101619190610268565b61016b9190610268565b9050919050565b5f80fd5b5f819050919050565b61018881610176565b8114610192575f80fd5b50565b5f813590506101a38161017f565b92915050565b5f602082840312156101be576101bd610172565b5b5f6101cb84828501610195565b91505092915050565b6101dd81610176565b82525050565b5f6020820190506101f65f8301846101d4565b92915050565b5f8151905061020a8161017f565b92915050565b5f6020828403121561022557610224610172565b5b5f610232848285016101fc565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61027282610176565b915061027d83610176565b92508282019050808211156102955761029461023b565b5b9291505056fea2646970667358221220e49c024cf6cef8343d5af652ab39f89e7edf1930ba53e986741ac84a03a709ff64736f6c634300081a0033", + Deps: []*bind.MetaData{ + L2MetaData, + L3MetaData, + }, } // L4 is an auto generated Go binding around an Ethereum contract. @@ -376,17 +363,15 @@ func (_L4 *L4) UnpackDo(data []byte) (*big.Int, error) { } -var L4bLibraryDeps = []*bind.MetaData{ - L1MetaData, - L2bMetaData, -} - // TODO: convert this type to value type after everything works. // L4bMetaData contains all meta data concerning the L4b contract. var L4bMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Pattern: "6070639404c39b5667691bb1f9177e1eac", Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$fd1474cf57f7ed48491e8bfdfd0d172adf$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220819bc379f2acc661e3dba3915bee83164e666ab39a92d0bcbf56b2438c35f2e164736f6c634300081a0033", + Deps: []*bind.MetaData{ + L2bMetaData, + }, } // L4b is an auto generated Go binding around an Ethereum contract. diff --git a/accounts/abi/bind/v2/internal/solc_errors/bindings.go b/accounts/abi/bind/v2/internal/solc_errors/bindings.go index 5b1a0cba5e..c2389b22ac 100644 --- a/accounts/abi/bind/v2/internal/solc_errors/bindings.go +++ b/accounts/abi/bind/v2/internal/solc_errors/bindings.go @@ -23,8 +23,6 @@ var ( _ = abi.ConvertType ) -var CLibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // CMetaData contains all meta data concerning the C contract. var CMetaData = &bind.MetaData{ @@ -121,8 +119,6 @@ func (_C *C) UnpackBadThing2Error(raw []byte) (*CBadThing2, error) { return out, nil } -var C2LibraryDeps = []*bind.MetaData{} - // TODO: convert this type to value type after everything works. // C2MetaData contains all meta data concerning the C2 contract. var C2MetaData = &bind.MetaData{ diff --git a/accounts/abi/bind/v2/lib_test.go b/accounts/abi/bind/v2/lib_test.go index cb12103960..ba8c210baf 100644 --- a/accounts/abi/bind/v2/lib_test.go +++ b/accounts/abi/bind/v2/lib_test.go @@ -121,7 +121,7 @@ func TestDeploymentLibraries(t *testing.T) { if err != nil { t.Fatalf("failed to pack constructor: %v", err) } - deploymentParams := bind.NewDeploymentParams(append(nested_libraries.C1LibraryDeps, nested_libraries.C1MetaData), map[string][]byte{nested_libraries.C1MetaData.Pattern: constructorInput}, nil) + deploymentParams := bind.NewDeploymentParams([]*bind.MetaData{nested_libraries.C1MetaData}, map[string][]byte{nested_libraries.C1MetaData.Pattern: constructorInput}, nil) res, err := bind.LinkAndDeploy(deploymentParams, makeTestDeployer(opts, bindBackend)) if err != nil { @@ -166,6 +166,7 @@ func TestDeploymentLibraries(t *testing.T) { } } +/* // Same as TestDeployment. However, stagger the deployments with overrides: // first deploy the library deps and then the contract. func TestDeploymentWithOverrides(t *testing.T) { @@ -253,6 +254,7 @@ func TestDeploymentWithOverrides(t *testing.T) { t.Fatalf("expected internal call count of 6. got %d.", internalCallCount.Uint64()) } } +*/ func TestEvents(t *testing.T) { // test watch/filter logs method on a contract that emits various kinds of events (struct-containing, etc.)