mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +00:00
embed direct library relations in metadata in bindings. simplify dependency tree handling as a result of embedding it in the bindings.
This commit is contained in:
parent
eb10c47793
commit
2949b1a11d
8 changed files with 64 additions and 78 deletions
|
|
@ -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]}
|
||||
|
|
|
|||
|
|
@ -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': {}}})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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.)
|
||||
|
|
|
|||
Loading…
Reference in a new issue