more docs. fix nested library contract. fix associated test case.
This commit is contained in:
parent
b2aec5af41
commit
ab97d38da5
|
@ -0,0 +1,6 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.26;
|
||||
|
||||
contract C {
|
||||
|
||||
}
|
|
@ -26,8 +26,9 @@ var (
|
|||
// TODO: turn this into a list, now that the pattern is embedded in each MetaData object
|
||||
var C1LibraryDeps = map[string]*bind.MetaData{
|
||||
"ffc1393672b8ed81d0c8093ffcb0e7fbe8": L1MetaData,
|
||||
"2ce896a6dd38932d354f317286f90bc675": L2MetaData,
|
||||
"d03b97f5e1a564374023a72ac7d1806773": L3MetaData,
|
||||
"d600bc30c225801bf5b413866ae334453d": L5MetaData,
|
||||
"5f33a1fab8ea7d932b4bc8c5e7dcd90bc2": L4MetaData,
|
||||
}
|
||||
|
||||
// TODO: convert this type to value type after everything works.
|
||||
|
@ -35,7 +36,7 @@ var C1LibraryDeps = map[string]*bind.MetaData{
|
|||
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__$d600bc30c225801bf5b413866ae334453d$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea264697066735822122068ad2fa18c18d049dd707b5914a0aa9abd5c5f624e2f4886a07f9440f05fb91864736f6c634300081a0033",
|
||||
Bin: "0x6080604052348015600e575f80fd5b506040516103983803806103988339818101604052810190602e91906066565b5050609d565b5f80fd5b5f819050919050565b6048816038565b81146051575f80fd5b50565b5f815190506060816041565b92915050565b5f806040838503121560795760786034565b5b5f6084858286016054565b92505060206093858286016054565b9150509250929050565b6102ee806100aa5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632ad112721461002d575b5f80fd5b6100476004803603810190610042919061019e565b61005d565b60405161005491906101d8565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad112725f6040518263ffffffff1660e01b81526004016100979190610200565b602060405180830381865af41580156100b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d6919061022d565b73__$5f33a1fab8ea7d932b4bc8c5e7dcd90bc2$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea26469706673582212209d07b322f13a9a05a62ccf2e925d28587ba6709742c985a55dad244e25b5cdd564736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// C1 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -91,7 +92,7 @@ var C2LibraryDeps = map[string]*bind.MetaData{
|
|||
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$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea2646970667358221220607a5019c269337b096c81ff7e87c99fc5415a2b6f40cc072d5e88396706090e64736f6c634300081a0033",
|
||||
Bin: "0x6080604052348015600e575f80fd5b506040516103983803806103988339818101604052810190602e91906066565b5050609d565b5f80fd5b5f819050919050565b6048816038565b81146051575f80fd5b50565b5f815190506060816041565b92915050565b5f806040838503121560795760786034565b5b5f6084858286016054565b92505060206093858286016054565b9150509250929050565b6102ee806100aa5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632ad112721461002d575b5f80fd5b6100476004803603810190610042919061019e565b61005d565b60405161005491906101d8565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad112725f6040518263ffffffff1660e01b81526004016100979190610200565b602060405180830381865af41580156100b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d6919061022d565b73__$6070639404c39b5667691bb1f9177e1eac$__632ad11272856040518263ffffffff1660e01b815260040161010d9190610200565b602060405180830381865af4158015610128573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014c919061022d565b6101569190610285565b6101609190610285565b9050919050565b5f80fd5b5f819050919050565b61017d8161016b565b8114610187575f80fd5b50565b5f8135905061019881610174565b92915050565b5f602082840312156101b3576101b2610167565b5b5f6101c08482850161018a565b91505092915050565b6101d28161016b565b82525050565b5f6020820190506101eb5f8301846101c9565b92915050565b6101fa8161016b565b82525050565b5f6020820190506102135f8301846101f1565b92915050565b5f8151905061022781610174565b92915050565b5f6020828403121561024257610241610167565b5b5f61024f84828501610219565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61028f8261016b565b915061029a8361016b565b92508282019050808211156102b2576102b1610258565b5b9291505056fea26469706673582212203f624c062b23db1417622d9d64f8bb382c9e4613e15338001e190945d6e7f2c864736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// C2 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -143,7 +144,7 @@ var L1LibraryDeps = map[string]*bind.MetaData{}
|
|||
var L1MetaData = &bind.MetaData{
|
||||
ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
|
||||
Pattern: "ffc1393672b8ed81d0c8093ffcb0e7fbe8",
|
||||
Bin: "0x61011c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c80632ad11272146036575b5f80fd5b604c600480360381019060489190609c565b6060565b6040516057919060cf565b60405180910390f35b5f60019050919050565b5f80fd5b5f819050919050565b607e81606e565b81146087575f80fd5b50565b5f813590506096816077565b92915050565b5f6020828403121560ae5760ad606a565b5b5f60b984828501608a565b91505092915050565b60c981606e565b82525050565b5f60208201905060e05f83018460c2565b9291505056fea264697066735822122078914f7e9af117523b8392de05343b4af49014337eaffc86ff537b0ff54fd1ed64736f6c634300081a0033",
|
||||
Bin: "0x61011c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c80632ad11272146036575b5f80fd5b604c600480360381019060489190609c565b6060565b6040516057919060cf565b60405180910390f35b5f60019050919050565b5f80fd5b5f819050919050565b607e81606e565b81146087575f80fd5b50565b5f813590506096816077565b92915050565b5f6020828403121560ae5760ad606a565b5b5f60b984828501608a565b91505092915050565b60c981606e565b82525050565b5f60208201905060e05f83018460c2565b9291505056fea26469706673582212204b676b17ea48d7d33ea6c1612dfbcd963e273670638c919797e980a6e42d6e5a64736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L1 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -195,7 +196,7 @@ var L2LibraryDeps = map[string]*bind.MetaData{}
|
|||
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: "0x61011c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c80632ad11272146036575b5f80fd5b604c600480360381019060489190609c565b6060565b6040516057919060cf565b60405180910390f35b5f60019050919050565b5f80fd5b5f819050919050565b607e81606e565b81146087575f80fd5b50565b5f813590506096816077565b92915050565b5f6020828403121560ae5760ad606a565b5b5f60b984828501608a565b91505092915050565b60c981606e565b82525050565b5f60208201905060e05f83018460c2565b9291505056fea26469706673582212205248bdbd4b939a2e899770a55b8b960ed9b95b22e949c50b4e0f94e27f1a764164736f6c634300081a0033",
|
||||
Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220c6f7a5f2e4ef9458b4081d7a828ede24efb394c00dad7182493a56186a60b62f64736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L2 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -247,7 +248,7 @@ var L2bLibraryDeps = map[string]*bind.MetaData{}
|
|||
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$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220f2bec4e215b51a06ae5161d6a1fa3130877fb447fe26cf7cc5d1791ed58ec8ba64736f6c634300081a0033",
|
||||
Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220a36a724bd2bb81778a0380d6d4b41d69d81d8b6d3d2a672e14cfa22a6e98253e64736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L2b is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -299,7 +300,7 @@ var L3LibraryDeps = map[string]*bind.MetaData{}
|
|||
var L3MetaData = &bind.MetaData{
|
||||
ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
|
||||
Pattern: "d03b97f5e1a564374023a72ac7d1806773",
|
||||
Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$ffc1393672b8ed81d0c8093ffcb0e7fbe8$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea26469706673582212201a3e05a0b6b9da6c9f39bee5a339d955347a2c736f2a1e6350c33c2c3ba9764864736f6c634300081a0033",
|
||||
Bin: "0x61011c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c80632ad11272146036575b5f80fd5b604c600480360381019060489190609c565b6060565b6040516057919060cf565b60405180910390f35b5f60019050919050565b5f80fd5b5f819050919050565b607e81606e565b81146087575f80fd5b50565b5f813590506096816077565b92915050565b5f6020828403121560ae5760ad606a565b5b5f60b984828501608a565b91505092915050565b60c981606e565b82525050565b5f60208201905060e05f83018460c2565b9291505056fea264697066735822122061067055c16517eded3faafba31b658871b20986f922183b577ffe64c8290c9764736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L3 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -351,7 +352,7 @@ var L4LibraryDeps = map[string]*bind.MetaData{}
|
|||
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: "0x61011c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106032575f3560e01c80632ad11272146036575b5f80fd5b604c600480360381019060489190609c565b6060565b6040516057919060cf565b60405180910390f35b5f60019050919050565b5f80fd5b5f819050919050565b607e81606e565b81146087575f80fd5b50565b5f813590506096816077565b92915050565b5f6020828403121560ae5760ad606a565b5b5f60b984828501608a565b91505092915050565b60c981606e565b82525050565b5f60208201905060e05f83018460c2565b9291505056fea2646970667358221220776962c71be9e15d17f5a247c2429fddd2e4b2a533e34d9c5e2e324ee6bd76af64736f6c634300081a0033",
|
||||
Bin: "0x6102d161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d91906101a9565b610068565b60405161005f91906101e3565b60405180910390f35b5f600173__$d03b97f5e1a564374023a72ac7d1806773$__632ad11272846040518263ffffffff1660e01b81526004016100a291906101e3565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610210565b73__$2ce896a6dd38932d354f317286f90bc675$__632ad11272856040518263ffffffff1660e01b815260040161011891906101e3565b602060405180830381865af4158015610133573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101579190610210565b6101619190610268565b61016b9190610268565b9050919050565b5f80fd5b5f819050919050565b61018881610176565b8114610192575f80fd5b50565b5f813590506101a38161017f565b92915050565b5f602082840312156101be576101bd610172565b5b5f6101cb84828501610195565b91505092915050565b6101dd81610176565b82525050565b5f6020820190506101f65f8301846101d4565b92915050565b5f8151905061020a8161017f565b92915050565b5f6020828403121561022557610224610172565b5b5f610232848285016101fc565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61027282610176565b915061027d83610176565b92508282019050808211156102955761029461023b565b5b9291505056fea2646970667358221220e49c024cf6cef8343d5af652ab39f89e7edf1930ba53e986741ac84a03a709ff64736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L4 is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -403,7 +404,7 @@ var L4bLibraryDeps = map[string]*bind.MetaData{}
|
|||
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$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220efbb5a71ca406bdf7337c785a57fcc2211efa82182e9330541e41f7f3cbbfd6864736f6c634300081a0033",
|
||||
Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$fd1474cf57f7ed48491e8bfdfd0d172adf$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea2646970667358221220819bc379f2acc661e3dba3915bee83164e666ab39a92d0bcbf56b2438c35f2e164736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L4b is an auto generated Go binding around an Ethereum contract.
|
||||
|
@ -447,55 +448,3 @@ func (_L4b *L4b) UnpackDo(data []byte) (*big.Int, error) {
|
|||
|
||||
}
|
||||
|
||||
// TODO: turn this into a list, now that the pattern is embedded in each MetaData object
|
||||
var L5LibraryDeps = map[string]*bind.MetaData{}
|
||||
|
||||
// TODO: convert this type to value type after everything works.
|
||||
// L5MetaData contains all meta data concerning the L5 contract.
|
||||
var L5MetaData = &bind.MetaData{
|
||||
ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"Do\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
|
||||
Pattern: "d600bc30c225801bf5b413866ae334453d",
|
||||
Bin: "0x61025161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c80632ad1127214610038575b5f80fd5b610052600480360381019061004d9190610129565b610068565b60405161005f9190610163565b60405180910390f35b5f600173__$d03b97f5e1a564374023a72ac7d1806773$__632ad11272846040518263ffffffff1660e01b81526004016100a29190610163565b602060405180830381865af41580156100bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e19190610190565b6100eb91906101e8565b9050919050565b5f80fd5b5f819050919050565b610108816100f6565b8114610112575f80fd5b50565b5f81359050610123816100ff565b92915050565b5f6020828403121561013e5761013d6100f2565b5b5f61014b84828501610115565b91505092915050565b61015d816100f6565b82525050565b5f6020820190506101765f830184610154565b92915050565b5f8151905061018a816100ff565b92915050565b5f602082840312156101a5576101a46100f2565b5b5f6101b28482850161017c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101f2826100f6565b91506101fd836100f6565b9250828201905080821115610215576102146101bb565b5b9291505056fea26469706673582212209c255a72b1a53a20d1e2234d9692aba8973d3aa7271f120c00fe0fde8226532f64736f6c634300081a0033",
|
||||
}
|
||||
|
||||
// L5 is an auto generated Go binding around an Ethereum contract.
|
||||
type L5 struct {
|
||||
abi abi.ABI
|
||||
}
|
||||
|
||||
// NewL5 creates a new instance of L5.
|
||||
func NewL5() (*L5, error) {
|
||||
parsed, err := L5MetaData.GetAbi()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &L5{abi: *parsed}, nil
|
||||
}
|
||||
|
||||
// TODO: create custom exported types where unpack would generate a struct return.
|
||||
|
||||
// TODO: test constructor with inputs
|
||||
func (_L5 *L5) PackConstructor() ([]byte, error) {
|
||||
return _L5.abi.Pack("")
|
||||
}
|
||||
|
||||
// Do is a free data retrieval call binding the contract method 0x2ad11272.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (_L5 *L5) PackDo(val *big.Int) ([]byte, error) {
|
||||
return _L5.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
func (_L5 *L5) UnpackDo(data []byte) (*big.Int, error) {
|
||||
out, err := _L5.abi.Unpack("Do", data)
|
||||
|
||||
if err != nil {
|
||||
return *new(*big.Int), err
|
||||
}
|
||||
|
||||
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
|
||||
|
||||
return out0, err
|
||||
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -18,31 +18,25 @@ library L1 {
|
|||
|
||||
library L2 {
|
||||
function Do(uint256 val) public pure returns (uint256) {
|
||||
return uint256(1);
|
||||
return L1.Do(val) + uint256(1);
|
||||
}
|
||||
}
|
||||
|
||||
library L3 {
|
||||
function Do(uint256 val) public pure returns (uint256) {
|
||||
return L1.Do(uint256(val)) + uint256(1);
|
||||
return uint256(1);
|
||||
}
|
||||
}
|
||||
|
||||
library L4 {
|
||||
function Do(uint256 val) public pure returns (uint256) {
|
||||
return uint256(1);
|
||||
}
|
||||
}
|
||||
|
||||
library L5 {
|
||||
function Do(uint256 val) public pure returns (uint256) {
|
||||
return L3.Do(uint256(val)) + uint256(1);
|
||||
return L2.Do(uint256(val)) + L3.Do(uint256(val)) + uint256(1);
|
||||
}
|
||||
}
|
||||
|
||||
contract C1 {
|
||||
function Do(uint256 val) public pure returns (uint256 res) {
|
||||
return L5.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1);
|
||||
return L4.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1);
|
||||
}
|
||||
|
||||
constructor(uint256 v1, uint256 v2) {
|
||||
|
|
|
@ -18,6 +18,8 @@ type ContractInstance struct {
|
|||
Backend bind.ContractBackend
|
||||
}
|
||||
|
||||
// deployContract deploys a hex-encoded contract with the given constructor
|
||||
// input. It returns the deployment transaction, address on success.
|
||||
func deployContract(backend bind.ContractBackend, auth *bind.TransactOpts, constructor []byte, contract string) (deploymentTx *types.Transaction, deploymentAddr common.Address, err error) {
|
||||
contractBinBytes, err := hex.DecodeString(contract[2:])
|
||||
if err != nil {
|
||||
|
@ -30,6 +32,9 @@ func deployContract(backend bind.ContractBackend, auth *bind.TransactOpts, const
|
|||
return tx, addr, nil
|
||||
}
|
||||
|
||||
// deployLibs iterates the set contracts (map of pattern to hex-encoded
|
||||
// contract deploy code). each value in contracts is deployed, and the
|
||||
// resulting addresses/deployment-txs are returned on success.
|
||||
func deployLibs(backend bind.ContractBackend, auth *bind.TransactOpts, contracts map[string]string) (deploymentTxs map[common.Address]*types.Transaction, deployAddrs map[string]common.Address, err error) {
|
||||
deploymentTxs = make(map[common.Address]*types.Transaction)
|
||||
deployAddrs = make(map[string]common.Address)
|
||||
|
@ -51,6 +56,10 @@ func deployLibs(backend bind.ContractBackend, auth *bind.TransactOpts, contracts
|
|||
return deploymentTxs, deployAddrs, nil
|
||||
}
|
||||
|
||||
// linkContract takes an unlinked contract deploy code (contract) a map of
|
||||
// linked-and-deployed library dependencies, replaces references to library
|
||||
// deps in the contract code, and returns the contract deployment bytecode on
|
||||
// success.
|
||||
func linkContract(contract string, linkedLibs map[string]common.Address) (deployableContract string, err error) {
|
||||
reMatchSpecificPattern, err := regexp.Compile("__\\$([a-f0-9]+)\\$__")
|
||||
if err != nil {
|
||||
|
@ -65,7 +74,13 @@ func linkContract(contract string, linkedLibs map[string]common.Address) (deploy
|
|||
return contract, nil
|
||||
}
|
||||
|
||||
func linkLibs(deps *map[string]string, linked *map[string]common.Address) (deployableDeps map[string]string) {
|
||||
// linkLibs iterates the set of dependencies that have yet to be
|
||||
// linked/deployed (pending), replacing references to library dependencies
|
||||
// if those dependencies are fully linked/deployed (in 'linked').
|
||||
//
|
||||
// contracts that have become fully linked in the current invocation are
|
||||
// returned in the resulting map.
|
||||
func linkLibs(pending *map[string]string, linked map[string]common.Address) (deployableDeps map[string]string) {
|
||||
reMatchSpecificPattern, err := regexp.Compile("__\\$([a-f0-9]+)\\$__")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -76,49 +91,61 @@ func linkLibs(deps *map[string]string, linked *map[string]common.Address) (deplo
|
|||
}
|
||||
deployableDeps = make(map[string]string)
|
||||
|
||||
for pattern, dep := range *deps {
|
||||
for pattern, dep := range *pending {
|
||||
// link references to dependent libraries that have been deployed
|
||||
for _, match := range reMatchSpecificPattern.FindAllStringSubmatch(dep, -1) {
|
||||
matchingPattern := match[1]
|
||||
addr, ok := (*linked)[matchingPattern]
|
||||
addr, ok := linked[matchingPattern]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
(*deps)[pattern] = strings.ReplaceAll(dep, "__$"+matchingPattern+"$__", addr.String()[2:])
|
||||
(*pending)[pattern] = strings.ReplaceAll(dep, "__$"+matchingPattern+"$__", addr.String()[2:])
|
||||
}
|
||||
// if the library code became fully linked, deploy it
|
||||
if !reMatchAnyPattern.MatchString((*deps)[pattern]) {
|
||||
deployableDeps[pattern] = (*deps)[pattern]
|
||||
delete(*deps, pattern)
|
||||
// if the library code became fully linked, move it from pending->linked.
|
||||
if !reMatchAnyPattern.MatchString((*pending)[pattern]) {
|
||||
deployableDeps[pattern] = (*pending)[pattern]
|
||||
delete(*pending, pattern)
|
||||
}
|
||||
}
|
||||
return deployableDeps
|
||||
}
|
||||
|
||||
// ContractDeployParams represents state needed to deploy a contract:
|
||||
// the metdata and constructor input (which can be nil if no input is specified).
|
||||
type ContractDeployParams struct {
|
||||
Meta *bind.MetaData
|
||||
Constructor []byte
|
||||
Meta *bind.MetaData
|
||||
// Input is the ABI-encoded constructor input for the contract deployment.
|
||||
Input []byte
|
||||
}
|
||||
|
||||
// DeploymentParams represents parameters needed to deploy a
|
||||
// set of contracts, their dependency libraries. It takes an optional override
|
||||
// list to specify libraries that have already been deployed on-chain.
|
||||
type DeploymentParams struct {
|
||||
// Contracts is the set of contract deployment parameters for contracts
|
||||
// that are about to be deployed.
|
||||
Contracts []ContractDeployParams
|
||||
// map of library pattern -> metadata
|
||||
// Libraries is a map of pattern to metadata for library contracts that
|
||||
// are to be deployed.
|
||||
Libraries map[string]*bind.MetaData
|
||||
// map of library pattern -> address
|
||||
// Overrides is an optional map of pattern to deployment address.
|
||||
// Contracts/libraries that refer to dependencies in the override
|
||||
// set are linked to the provided address (an already-deployed contract).
|
||||
Overrides map[string]common.Address
|
||||
}
|
||||
|
||||
// DeploymentResult contains the relevant information from the deployment of
|
||||
// multiple contracts: their deployment txs and addresses.
|
||||
type DeploymentResult struct {
|
||||
// map of contract type name -> deploy transaction
|
||||
// map of contract library pattern -> deploy transaction
|
||||
Txs map[string]*types.Transaction
|
||||
// map of contract type name -> deployed address
|
||||
// map of contract library pattern -> deployed address
|
||||
Addrs map[string]common.Address
|
||||
}
|
||||
|
||||
// TODO: * pass single set of contracts (dont differentiate between contract/lib in parameters)
|
||||
// - return map of pattern->address
|
||||
// - in template, export a pattern for each contract (whether library/contract).
|
||||
func LinkAndDeployContractWithOverrides(auth *bind.TransactOpts, backend bind.ContractBackend, deployParams DeploymentParams) (res *DeploymentResult, err error) {
|
||||
// LinkAndDeploy deploys a specified set of contracts and their dependent
|
||||
// libraries.
|
||||
func LinkAndDeploy(auth *bind.TransactOpts, backend bind.ContractBackend, deployParams DeploymentParams) (res *DeploymentResult, err error) {
|
||||
libMetas := deployParams.Libraries
|
||||
overrides := deployParams.Overrides
|
||||
|
||||
|
@ -128,30 +155,29 @@ func LinkAndDeployContractWithOverrides(auth *bind.TransactOpts, backend bind.Co
|
|||
}
|
||||
|
||||
// re-express libraries as a map of pattern -> pre-link binary
|
||||
libs := make(map[string]string)
|
||||
pending := make(map[string]string)
|
||||
for pattern, meta := range libMetas {
|
||||
libs[pattern] = meta.Bin
|
||||
pending[pattern] = meta.Bin
|
||||
}
|
||||
|
||||
// initialize the set of already-deployed contracts with given override addresses
|
||||
linked := make(map[string]common.Address)
|
||||
deployed := make(map[string]common.Address)
|
||||
for pattern, deployAddr := range overrides {
|
||||
linked[pattern] = deployAddr
|
||||
if _, ok := libs[pattern]; ok {
|
||||
delete(libs, pattern)
|
||||
deployed[pattern] = deployAddr
|
||||
if _, ok := pending[pattern]; ok {
|
||||
delete(pending, pattern)
|
||||
}
|
||||
}
|
||||
|
||||
// link and deploy dynamic libraries
|
||||
for {
|
||||
deployableDeps := linkLibs(&libs, &linked)
|
||||
deployableDeps := linkLibs(&pending, deployed)
|
||||
if len(deployableDeps) == 0 {
|
||||
break
|
||||
}
|
||||
deployTxs, deployAddrs, err := deployLibs(backend, auth, deployableDeps)
|
||||
for pattern, addr := range deployAddrs {
|
||||
linked[pattern] = addr
|
||||
|
||||
deployed[pattern] = addr
|
||||
res.Addrs[pattern] = addr
|
||||
res.Txs[pattern] = deployTxs[addr]
|
||||
}
|
||||
|
@ -161,12 +187,12 @@ func LinkAndDeployContractWithOverrides(auth *bind.TransactOpts, backend bind.Co
|
|||
}
|
||||
|
||||
for _, contractParams := range deployParams.Contracts {
|
||||
linkedContract, err := linkContract(contractParams.Meta.Bin, linked)
|
||||
linkedContract, err := linkContract(contractParams.Meta.Bin, deployed)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
// link and deploy the contracts
|
||||
contractTx, contractAddr, err := deployContract(backend, auth, contractParams.Constructor, linkedContract)
|
||||
contractTx, contractAddr, err := deployContract(backend, auth, contractParams.Input, linkedContract)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
|
|
@ -3,23 +3,19 @@ package v2
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind/testdata/v2/nested_libraries"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind/testdata/v2/v2_generated_testcase"
|
||||
"github.com/ethereum/go-ethereum/eth/ethconfig"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/eth/ethconfig"
|
||||
"github.com/ethereum/go-ethereum/ethclient/simulated"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"io"
|
||||
"math/big"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -161,14 +157,7 @@ func TestDeployment(t *testing.T) {
|
|||
Client: backend.Client(),
|
||||
}
|
||||
|
||||
log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stdout, log.LevelDebug, true)))
|
||||
|
||||
// TODO: allow for the flexibility of deploying only libraries.
|
||||
// also, i kind of hate this conversion. But the API of LinkAndDeployContractWithOverrides feels cleaner this way... idk.
|
||||
libMetas := make(map[string]*bind.MetaData)
|
||||
for pattern, metadata := range nested_libraries.C1LibraryDeps {
|
||||
libMetas[pattern] = metadata
|
||||
}
|
||||
//log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stdout, log.LevelDebug, true)))
|
||||
|
||||
ctrct, err := nested_libraries.NewC1()
|
||||
if err != nil {
|
||||
|
@ -183,8 +172,8 @@ func TestDeployment(t *testing.T) {
|
|||
deploymentParams := DeploymentParams{
|
||||
Contracts: []ContractDeployParams{
|
||||
{
|
||||
Meta: nested_libraries.C1MetaData,
|
||||
Constructor: constructorInput,
|
||||
Meta: nested_libraries.C1MetaData,
|
||||
Input: constructorInput,
|
||||
},
|
||||
},
|
||||
Libraries: nested_libraries.C1LibraryDeps,
|
||||
|
@ -196,12 +185,9 @@ func TestDeployment(t *testing.T) {
|
|||
}
|
||||
bindBackend.Commit()
|
||||
|
||||
// assert that only 4 txs were produced.
|
||||
/*
|
||||
if len(deployedLibs)+1 != 4 {
|
||||
panic(fmt.Sprintf("whoops %d\n", len(deployedLibs)))
|
||||
}
|
||||
*/
|
||||
if len(res.Addrs) != 5 {
|
||||
t.Fatalf("deployment should have generated 5 addresses. got %d", len(res.Addrs))
|
||||
}
|
||||
for _, tx := range res.Txs {
|
||||
_, err = bind.WaitDeployed(context.Background(), &bindBackend, tx)
|
||||
if err != nil {
|
||||
|
@ -227,30 +213,66 @@ func TestDeployment(t *testing.T) {
|
|||
From: common.Address{},
|
||||
Context: context.Background(),
|
||||
}
|
||||
c1Code, err := bindBackend.PendingCodeAt(context.Background(), contractAddr)
|
||||
if err != nil {
|
||||
t.Fatalf("error getting pending code at %x: %v", contractAddr, err)
|
||||
}
|
||||
fmt.Printf("contract code:\n%x\n", c1Code)
|
||||
fmt.Printf("contract input:\n%x\n", doInput)
|
||||
callRes, err := boundC.CallRaw(callOpts, doInput)
|
||||
if err != nil {
|
||||
t.Fatalf("err calling contract: %v", err)
|
||||
}
|
||||
unpacked, err := c.UnpackDo(callRes)
|
||||
internalCallCount, err := c.UnpackDo(callRes)
|
||||
if err != nil {
|
||||
t.Fatalf("err unpacking result: %v", err)
|
||||
}
|
||||
|
||||
// TODO: test transact
|
||||
fmt.Println(unpacked.String())
|
||||
if internalCallCount.Uint64() != 6 {
|
||||
t.Fatalf("expected internal call count of 6. got %d.", internalCallCount.Uint64())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeploymentWithOverrides(t *testing.T) {
|
||||
// test that libs sharing deps, if overrides not specified we will deploy multiple versions of the dependent deps
|
||||
// test that libs sharing deps, if overrides specified... overrides work.
|
||||
}
|
||||
/*
|
||||
func TestDeploymentWithOverrides(t *testing.T) {
|
||||
testAddr := crypto.PubkeyToAddress(testKey.PublicKey)
|
||||
backend := simulated.NewBackend(
|
||||
types.GenesisAlloc{
|
||||
testAddr: {Balance: big.NewInt(10000000000000000)},
|
||||
},
|
||||
func(nodeConf *node.Config, ethConf *ethconfig.Config) {
|
||||
ethConf.Genesis.Difficulty = big.NewInt(0)
|
||||
},
|
||||
)
|
||||
defer backend.Close()
|
||||
|
||||
_, err := JSON(strings.NewReader(v2_generated_testcase.V2GeneratedTestcaseMetaData.ABI))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
signer := types.LatestSigner(params.AllDevChainProtocolChanges)
|
||||
opts := bind.TransactOpts{
|
||||
From: testAddr,
|
||||
Nonce: nil,
|
||||
Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) {
|
||||
signature, err := crypto.Sign(signer.Hash(tx).Bytes(), testKey)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
signedTx, err := tx.WithSignature(signer, signature)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return signedTx, nil
|
||||
},
|
||||
Context: context.Background(),
|
||||
}
|
||||
// we should just be able to use the backend directly, instead of using
|
||||
// this deprecated interface. However, the simulated backend no longer
|
||||
// implements backends.SimulatedBackend...
|
||||
bindBackend := backends.SimulatedBackend{
|
||||
Backend: backend,
|
||||
Client: backend.Client(),
|
||||
}
|
||||
// more deployment test case ideas:
|
||||
// 1) deploy libraries, then deploy contract first with libraries as overrides
|
||||
// 2) deploy contract without library dependencies.
|
||||
}
|
||||
*/
|
||||
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 New Issue