From 76ed81cd6b8d2182a8bcab5736693dba68389fee Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Wed, 8 Jan 2025 14:48:46 +0100 Subject: [PATCH 01/10] wip --- x/evm/keeper/funtoken_from_erc20.go | 26 ++++-- x/evm/keeper/validate_contract.go | 111 +++++++++++++++++++++++++ x/evm/keeper/validate_contract_test.go | 97 +++++++++++++++++++++ 3 files changed, 228 insertions(+), 6 deletions(-) create mode 100644 x/evm/keeper/validate_contract.go create mode 100644 x/evm/keeper/validate_contract_test.go diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index f1fa3b0b26..6f917a40d1 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -87,9 +87,10 @@ type ( // This function performs the following steps: // 1. Checks if the ERC20 token is already registered as a FunToken. // 2. Retrieves the metadata of the existing ERC20 token. -// 3. Verifies that the corresponding bank coin denom is not already registered. -// 4. Sets the bank coin denom metadata in the state. -// 5. Creates and inserts the new FunToken mapping. +// 3. Verifies that the ERC20 token include expected functions. +// 4. Verifies that the corresponding bank coin denom is not already registered. +// 5. Sets the bank coin denom metadata in the state. +// 6. Creates and inserts the new FunToken mapping. // // Parameters: // - ctx: The SDK context for the transaction. @@ -121,7 +122,12 @@ func (k *Keeper) createFunTokenFromERC20( bankDenom := fmt.Sprintf("erc20/%s", erc20.String()) - // 3 | Coin already registered with FunToken? + // 3 | Verify that the ERC20 token include expected functions + if err := k.checkErc20ImplementsAllRequired(ctx, erc20); err != nil { + return funtoken, err + } + + // 4 | Coin already registered with FunToken? _, isFound := k.Bank.GetDenomMetaData(ctx, bankDenom) if isFound { return funtoken, fmt.Errorf("bank coin denom already registered with denom \"%s\"", bankDenom) @@ -130,7 +136,7 @@ func (k *Keeper) createFunTokenFromERC20( return funtoken, fmt.Errorf("funtoken mapping already created for bank denom \"%s\"", bankDenom) } - // 4 | Set bank coin denom metadata in state + // 5 | Set bank coin denom metadata in state bankMetadata := erc20Info.ToBankMetadata(bankDenom, erc20) err = bankMetadata.Validate() @@ -139,7 +145,7 @@ func (k *Keeper) createFunTokenFromERC20( } k.Bank.SetDenomMetaData(ctx, bankMetadata) - // 5 | Officially create the funtoken mapping + // 6 | Officially create the funtoken mapping funtoken = &evm.FunToken{ Erc20Addr: eth.EIP55Addr{ Address: erc20, @@ -153,6 +159,14 @@ func (k *Keeper) createFunTokenFromERC20( ) } +func (k *Keeper) checkErc20ImplementsAllRequired( + ctx sdk.Context, erc20 gethcommon.Address, +) error { + // Check if the ERC20 token implements the required functions + // This is a placeholder for actual implementation + return nil +} + // ToBankMetadata produces the "bank.Metadata" corresponding to a FunToken // mapping created from an ERC20 token. // diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go new file mode 100644 index 0000000000..fedd453d39 --- /dev/null +++ b/x/evm/keeper/validate_contract.go @@ -0,0 +1,111 @@ +package keeper + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + gethparams "github.com/ethereum/go-ethereum/params" + + "github.com/NibiruChain/nibiru/v2/x/evm" +) + +// HasMethodInContract does a staticcall with the given `method`'s selector + dummy args. +// If the call reverts with something like "function selector not recognized", returns false. +// +// In your real code, this likely needs to invoke `k.evmKeeper.CallEVM` or similar. +func (k Keeper) HasMethodInContract( + goCtx context.Context, + contractAddr common.Address, + method abi.Method, +) (bool, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // 1. Build input (4-byte selector + encoded args). + // We choose dummy arguments based on the method signature. + // For example, if method = "balanceOf(address)", we pass a zero address or some known address. + // For method = "transfer(address,uint256)", pass a dummy address and zero uint256, etc. + // + // To illustrate, let's say we pass "0x000000000000000000000000000000000000dEaD" for addresses, + // and 0 for all numeric arguments. This is *just* for signature detection. + dummyArgs := make([]interface{}, len(method.Inputs)) + for i, inputDef := range method.Inputs { + switch inputDef.Type.T { + case abi.AddressTy: + dummyArgs[i] = common.HexToAddress("0x000000000000000000000000000000000000dEaD") + case abi.UintTy, abi.IntTy: + dummyArgs[i] = 0 + default: + dummyArgs[i] = 0 + } + } + + input, err := method.Inputs.Pack(dummyArgs...) + if err != nil { + return false, fmt.Errorf("packing dummy args: %w", err) + } + + // Prepend the 4-byte method selector + sig := method.ID + callData := append(sig, input...) + + // 2. Make a call message + callMsg := evm.JsonTxArgs{ + From: &common.Address{}, + To: &contractAddr, + Input: (*hexutil.Bytes)(&callData), + } + + jsonTxArgs, err := json.Marshal(&callMsg) + if err != nil { + return false, fmt.Errorf("marshaling call message: %w", err) + } + + ethCallRequest := evm.EthCallRequest{ + Args: jsonTxArgs, + GasCap: gethparams.TxGas, + ProposerAddress: sdk.ConsAddress(ctx.BlockHeader().ProposerAddress), + ChainId: k.EthChainID(ctx).Int64(), + } + + _, err = k.EstimateGasForEvmCallType(goCtx, ðCallRequest, evm.CallTypeRPC) + + // Distinguish an error that indicates "function not found" vs. a normal revert + if strings.Contains(err.Error(), "invalid opcode") || strings.Contains(err.Error(), "does not exist") { + return false, nil + } + + // 4. If we got a "function not found" style revert, return false. + if strings.Contains(err.Error(), "selector not recognized") { + return false, nil + } + + fmt.Println("err: ", err) + + // If we arrive here, that means the call at least recognized the function signature + // (the contract may revert for other reasons, but the method "exists"). + return true, nil +} + +// checkAllMethods ensure the contract at `contractAddr` has all the methods in `abiMethods`. +func (k Keeper) CheckAllethods( + ctx context.Context, + contractAddr common.Address, + abiMethods []abi.Method, +) error { + for name, method := range abiMethods { + hasMethod, err := k.HasMethodInContract(ctx, contractAddr, method) + if err != nil { + return err + } + if !hasMethod { + return fmt.Errorf("Method %q not found in contract at %s", name, contractAddr) + } + } + return nil +} diff --git a/x/evm/keeper/validate_contract_test.go b/x/evm/keeper/validate_contract_test.go new file mode 100644 index 0000000000..fc462a6c18 --- /dev/null +++ b/x/evm/keeper/validate_contract_test.go @@ -0,0 +1,97 @@ +package keeper_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/stretchr/testify/require" + + "github.com/NibiruChain/nibiru/v2/x/evm/embeds" + "github.com/NibiruChain/nibiru/v2/x/evm/evmtest" +) + +// TestHasMethodInContract_RealKeeper deploys a real ERC20 contract and tests +// the presence/absence of a couple of methods using the actual keeper logic. +func TestHasMethodInContract_RealKeeper(t *testing.T) { + // 1) Build standard test dependencies + deps := evmtest.NewTestDeps() + ctx := sdk.WrapSDKContext(deps.Ctx) + k := deps.App.EvmKeeper + + // 2) Deploy the standard ERC20 (Minter) contract + deployResp, err := evmtest.DeployContract( + &deps, + embeds.SmartContract_ERC20Minter, + "ExampleToken", + "EXM", + uint8(18), + ) + require.NoError(t, err, "error deploying ERC20 test contract") + + // 3) The embedded ERC20 ABI includes balanceOf, transfer, decimals, etc. + erc20Abi := embeds.SmartContract_ERC20Minter.ABI + + // For demonstration, let's see if the contract implements "balanceOf" + methodBalanceOf, ok := erc20Abi.Methods["balanceOf"] + require.True(t, ok, `"balanceOf" not found in the ERC20 ABI?`) + + // Now let's see if the keeper says "balanceOf" is recognized + hasMethod, err := k.HasMethodInContract(ctx, deployResp.ContractAddr, methodBalanceOf) + require.NoError(t, err) + require.True(t, hasMethod, "expected contract to have 'balanceOf'") + + // 4) Next, let's test a fake method that doesn't exist + fakeMethod := methodBalanceOf + fakeMethod.Name = "someFakeMethod" + fakeMethod.ID = []byte{0xde, 0xad, 0xbe, 0xef} // random 4-byte selector + + hasMethod, err = k.HasMethodInContract(ctx, deployResp.ContractAddr, fakeMethod) + require.NoError(t, err, "non-existent method calls shouldn't produce a real EVM error") + require.False(t, hasMethod, "expected the contract to NOT have 'someFakeMethod'") +} + +// TestCheckAllMethods_RealKeeper uses your keeper’s checkAllethods (assuming +// you renamed it from “checkAllMethods” to a public name). +func TestCheckAllMethods_RealKeeper(t *testing.T) { + // Build test dependencies and context + deps := evmtest.NewTestDeps() + ctx := sdk.WrapSDKContext(deps.Ctx) + k := deps.App.EvmKeeper + + // Deploy a standard ERC20 contract + deployResp, err := evmtest.DeployContract( + &deps, + embeds.SmartContract_ERC20Minter, + "DemoToken", + "DMO", + uint8(6), + ) + require.NoError(t, err) + + // Example: We want to check that it has "balanceOf" and "transfer", but *not* "fakeMethod" + erc20Abi := embeds.SmartContract_ERC20Minter.ABI + + // Gather the actual method objects from the ABI + balanceOfMethod, hasBalanceOf := erc20Abi.Methods["balanceOf"] + require.True(t, hasBalanceOf) + transferMethod, hasTransfer := erc20Abi.Methods["transfer"] + require.True(t, hasTransfer) + + // Let's also define a known-fake method + fakeMethod := abi.Method{ + Name: "fakeMethod", + ID: []byte{0xfa, 0x75, 0x55, 0x0f}, // random + } + + // Scenario 1: "balanceOf" + "transfer" => no error + allMethods := []abi.Method{balanceOfMethod, transferMethod} + err = k.CheckAllethods(ctx, deployResp.ContractAddr, allMethods) + require.NoError(t, err, "both balanceOf and transfer exist in standard ERC20") + + // Scenario 2: "balanceOf" + "fakeMethod" => we expect an error on second + calls := []abi.Method{balanceOfMethod, fakeMethod} + err = k.CheckAllethods(ctx, deployResp.ContractAddr, calls) + require.Error(t, err, "contract does not have 'fakeMethod'") + require.Contains(t, err.Error(), "fakeMethod not found in contract") +} From 20ef16be2079f93ea213ef94b924785d1ae1b2ed Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Wed, 8 Jan 2025 15:45:00 +0100 Subject: [PATCH 02/10] wip --- x/evm/keeper/validate_contract.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go index fedd453d39..2de8887b9d 100644 --- a/x/evm/keeper/validate_contract.go +++ b/x/evm/keeper/validate_contract.go @@ -75,6 +75,11 @@ func (k Keeper) HasMethodInContract( _, err = k.EstimateGasForEvmCallType(goCtx, ðCallRequest, evm.CallTypeRPC) + if err == nil { + fmt.Println("err: ", err) + return false, fmt.Errorf("error calling contract: %w", err) + } + // Distinguish an error that indicates "function not found" vs. a normal revert if strings.Contains(err.Error(), "invalid opcode") || strings.Contains(err.Error(), "does not exist") { return false, nil From 597cbdb4f46c24ed43852a295f0ad0cb481ec1a9 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Tue, 14 Jan 2025 11:19:47 +0100 Subject: [PATCH 03/10] fix: fix method checker --- x/evm/keeper/msg_server.go | 1 + x/evm/keeper/validate_contract.go | 35 +++++++++++--------------- x/evm/keeper/validate_contract_test.go | 13 +++++++--- x/evm/precompile/funtoken_test.go | 1 - 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index f9a279eaf6..03d6e29d6c 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -298,6 +298,7 @@ func (k *Keeper) ApplyEvmMsg(ctx sdk.Context, } sender := vm.AccountRef(msg.From()) + contractCreation := msg.To() == nil intrinsicGas, err := core.IntrinsicGas( diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go index 2de8887b9d..8a82225934 100644 --- a/x/evm/keeper/validate_contract.go +++ b/x/evm/keeper/validate_contract.go @@ -4,13 +4,13 @@ import ( "context" "encoding/json" "fmt" + "math/big" "strings" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - gethparams "github.com/ethereum/go-ethereum/params" "github.com/NibiruChain/nibiru/v2/x/evm" ) @@ -39,9 +39,15 @@ func (k Keeper) HasMethodInContract( case abi.AddressTy: dummyArgs[i] = common.HexToAddress("0x000000000000000000000000000000000000dEaD") case abi.UintTy, abi.IntTy: - dummyArgs[i] = 0 + dummyArgs[i] = big.NewInt(0) + case abi.BoolTy: + dummyArgs[i] = false + case abi.StringTy: + dummyArgs[i] = "" default: - dummyArgs[i] = 0 + // For any types you don't specifically handle, either supply some default + // or handle them according to what your use case needs. + dummyArgs[i] = nil } } @@ -56,7 +62,7 @@ func (k Keeper) HasMethodInContract( // 2. Make a call message callMsg := evm.JsonTxArgs{ - From: &common.Address{}, + From: &contractAddr, To: &contractAddr, Input: (*hexutil.Bytes)(&callData), } @@ -68,7 +74,7 @@ func (k Keeper) HasMethodInContract( ethCallRequest := evm.EthCallRequest{ Args: jsonTxArgs, - GasCap: gethparams.TxGas, + GasCap: 2100000, ProposerAddress: sdk.ConsAddress(ctx.BlockHeader().ProposerAddress), ChainId: k.EthChainID(ctx).Int64(), } @@ -76,25 +82,14 @@ func (k Keeper) HasMethodInContract( _, err = k.EstimateGasForEvmCallType(goCtx, ðCallRequest, evm.CallTypeRPC) if err == nil { - fmt.Println("err: ", err) - return false, fmt.Errorf("error calling contract: %w", err) + return true, nil } - // Distinguish an error that indicates "function not found" vs. a normal revert - if strings.Contains(err.Error(), "invalid opcode") || strings.Contains(err.Error(), "does not exist") { - return false, nil + if strings.Contains(err.Error(), "caller is not the owner") { + return true, nil } - // 4. If we got a "function not found" style revert, return false. - if strings.Contains(err.Error(), "selector not recognized") { - return false, nil - } - - fmt.Println("err: ", err) - - // If we arrive here, that means the call at least recognized the function signature - // (the contract may revert for other reasons, but the method "exists"). - return true, nil + return false, nil } // checkAllMethods ensure the contract at `contractAddr` has all the methods in `abiMethods`. diff --git a/x/evm/keeper/validate_contract_test.go b/x/evm/keeper/validate_contract_test.go index fc462a6c18..464a83afda 100644 --- a/x/evm/keeper/validate_contract_test.go +++ b/x/evm/keeper/validate_contract_test.go @@ -36,7 +36,7 @@ func TestHasMethodInContract_RealKeeper(t *testing.T) { methodBalanceOf, ok := erc20Abi.Methods["balanceOf"] require.True(t, ok, `"balanceOf" not found in the ERC20 ABI?`) - // Now let's see if the keeper says "balanceOf" is recognized + // // Now let's see if the keeper says "balanceOf" is recognized hasMethod, err := k.HasMethodInContract(ctx, deployResp.ContractAddr, methodBalanceOf) require.NoError(t, err) require.True(t, hasMethod, "expected contract to have 'balanceOf'") @@ -44,7 +44,7 @@ func TestHasMethodInContract_RealKeeper(t *testing.T) { // 4) Next, let's test a fake method that doesn't exist fakeMethod := methodBalanceOf fakeMethod.Name = "someFakeMethod" - fakeMethod.ID = []byte{0xde, 0xad, 0xbe, 0xef} // random 4-byte selector + fakeMethod.ID = []byte{0xef} hasMethod, err = k.HasMethodInContract(ctx, deployResp.ContractAddr, fakeMethod) require.NoError(t, err, "non-existent method calls shouldn't produce a real EVM error") @@ -93,5 +93,12 @@ func TestCheckAllMethods_RealKeeper(t *testing.T) { calls := []abi.Method{balanceOfMethod, fakeMethod} err = k.CheckAllethods(ctx, deployResp.ContractAddr, calls) require.Error(t, err, "contract does not have 'fakeMethod'") - require.Contains(t, err.Error(), "fakeMethod not found in contract") + require.Contains(t, err.Error(), "not found in contract") + + // Scenario 3: check all abi methods + for name, method := range erc20Abi.Methods { + hasMethod, err := k.HasMethodInContract(ctx, deployResp.ContractAddr, method) + require.NoError(t, err) + require.True(t, hasMethod, "expected contract to have %q", name) + } } diff --git a/x/evm/precompile/funtoken_test.go b/x/evm/precompile/funtoken_test.go index 53f1b247f8..a1d7ef7195 100644 --- a/x/evm/precompile/funtoken_test.go +++ b/x/evm/precompile/funtoken_test.go @@ -435,7 +435,6 @@ func (s *FuntokenSuite) TestSendToEvm() { s.T().Log("1) Create a new FunToken from coin 'ulibi'") bankDenom := "ulibi" funtoken := evmtest.CreateFunTokenForBankCoin(&deps, bankDenom, &s.Suite) - fmt.Println(funtoken) erc20Addr := funtoken.Erc20Addr.Address s.T().Log("2) Fund the sender with some ulibi on the bank side") From 7857969968ddcd7432633802e0c2a6a6f3ac0172 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Thu, 30 Jan 2025 21:42:47 +0100 Subject: [PATCH 04/10] feat: make each funtoken creation check for ERC20 functions --- .../TestERC20MinterMissingFunction.json | 416 ++++++++++++++++++ .../TestERC20MinterMissingFunction.sol | 72 +++ x/evm/embeds/embeds.go | 9 + x/evm/embeds/embeds_test.go | 1 + x/evm/keeper/funtoken_from_erc20.go | 36 +- x/evm/keeper/funtoken_from_erc20_test.go | 32 +- x/evm/keeper/validate_contract.go | 13 +- 7 files changed, 539 insertions(+), 40 deletions(-) create mode 100644 x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json create mode 100644 x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json new file mode 100644 index 0000000000..d1618d814b --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json @@ -0,0 +1,416 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC20Minter", + "sourceName": "contracts/TestERC20MinterMissingFunction.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFromAuthority", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50604051620022fd380380620022fd833981810160405281019062000037919062000356565b828281600390816200004a91906200063b565b5080600490816200005c91906200063b565b5050506200007f620000736200009960201b60201c565b620000a160201b60201c565b62000090816200016760201b60201c565b50505062000722565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600560146101000a81548160ff021916908360ff16021790555050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001ee82620001a3565b810181811067ffffffffffffffff8211171562000210576200020f620001b4565b5b80604052505050565b60006200022562000185565b9050620002338282620001e3565b919050565b600067ffffffffffffffff821115620002565762000255620001b4565b5b6200026182620001a3565b9050602081019050919050565b60005b838110156200028e57808201518184015260208101905062000271565b60008484015250505050565b6000620002b1620002ab8462000238565b62000219565b905082815260208101848484011115620002d057620002cf6200019e565b5b620002dd8482856200026e565b509392505050565b600082601f830112620002fd57620002fc62000199565b5b81516200030f8482602086016200029a565b91505092915050565b600060ff82169050919050565b620003308162000318565b81146200033c57600080fd5b50565b600081519050620003508162000325565b92915050565b6000806000606084860312156200037257620003716200018f565b5b600084015167ffffffffffffffff81111562000393576200039262000194565b5b620003a186828701620002e5565b935050602084015167ffffffffffffffff811115620003c557620003c462000194565b5b620003d386828701620002e5565b9250506040620003e6868287016200033f565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044357607f821691505b602082108103620004595762000458620003fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000484565b620004cf868362000484565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051c620005166200051084620004e7565b620004f1565b620004e7565b9050919050565b6000819050919050565b6200053883620004fb565b62000550620005478262000523565b84845462000491565b825550505050565b600090565b6200056762000558565b620005748184846200052d565b505050565b5b818110156200059c57620005906000826200055d565b6001810190506200057a565b5050565b601f821115620005eb57620005b5816200045f565b620005c08462000474565b81016020851015620005d0578190505b620005e8620005df8562000474565b83018262000579565b50505b505050565b600082821c905092915050565b60006200061060001984600802620005f0565b1980831691505092915050565b60006200062b8383620005fd565b9150826002028217905092915050565b6200064682620003f0565b67ffffffffffffffff811115620006625762000661620001b4565b5b6200066e82546200042a565b6200067b828285620005a0565b600060209050601f831160018114620006b357600084156200069e578287015190505b620006aa85826200061d565b8655506200071a565b601f198416620006c3866200045f565b60005b82811015620006ed57848901518255600182019150602085019450602081019050620006c6565b868310156200070d578489015162000709601f891682620005fd565b8355505b6001600288020188555050505b505050505050565b611bcb80620007326000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102cd578063a457c2d7146102eb578063a9059cbb1461031b578063dd62ed3e1461034b578063f2fde38b1461037b57610116565b806370a0823114610259578063715018a61461028957806379cc6790146102935780638da5cb5b146102af57610116565b806324bd8aaf116100e957806324bd8aaf146101b7578063313ce567146101d357806339509351146101f157806342966c68146102215780636a6278421461023d57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610397565b60405161013091906111c3565b60405180910390f35b610153600480360381019061014e919061127e565b610429565b60405161016091906112d9565b60405180910390f35b61017161044c565b60405161017e9190611303565b60405180910390f35b6101a1600480360381019061019c919061131e565b610456565b6040516101ae91906112d9565b60405180910390f35b6101d160048036038101906101cc919061127e565b610485565b005b6101db61049b565b6040516101e8919061138d565b60405180910390f35b61020b6004803603810190610206919061127e565b6104b2565b60405161021891906112d9565b60405180910390f35b61023b600480360381019061023691906113a8565b6104e9565b005b610257600480360381019061025291906113d5565b6104fd565b005b610273600480360381019061026e91906113d5565b610513565b6040516102809190611303565b60405180910390f35b61029161055b565b005b6102ad60048036038101906102a8919061127e565b61056f565b005b6102b761058f565b6040516102c49190611411565b60405180910390f35b6102d56105b9565b6040516102e291906111c3565b60405180910390f35b6103056004803603810190610300919061127e565b61064b565b60405161031291906112d9565b60405180910390f35b6103356004803603810190610330919061127e565b6106c2565b60405161034291906112d9565b60405180910390f35b6103656004803603810190610360919061142c565b6106e5565b6040516103729190611303565b60405180910390f35b610395600480360381019061039091906113d5565b61076c565b005b6060600380546103a69061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546103d29061149b565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050905090565b6000806104346107ef565b90506104418185856107f7565b600191505092915050565b6000600254905090565b6000806104616107ef565b905061046e8582856109c0565b610479858585610a4c565b60019150509392505050565b61048d610cc2565b6104978282610d40565b5050565b6000600560149054906101000a900460ff16905090565b6000806104bd6107ef565b90506104de8185856104cf85896106e5565b6104d991906114fb565b6107f7565b600191505092915050565b6104fa6104f46107ef565b82610d40565b50565b610505610cc2565b610510816000610f0d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610563610cc2565b61056d6000611063565b565b6105818261057b6107ef565b836109c0565b61058b8282610d40565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105c89061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061149b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000806106566107ef565b9050600061066482866106e5565b9050838110156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115a1565b60405180910390fd5b6106b682868684036107f7565b60019250505092915050565b6000806106cd6107ef565b90506106da818585610a4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610774610cc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90611633565b60405180910390fd5b6107ec81611063565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906116c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90611757565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109b39190611303565b60405180910390a3505050565b60006109cc84846106e5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465781811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906117c3565b60405180910390fd5b610a4584848484036107f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611855565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906118e7565b60405180910390fd5b610b35838383611129565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290611979565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca99190611303565b60405180910390a3610cbc84848461112e565b50505050565b610cca6107ef565b73ffffffffffffffffffffffffffffffffffffffff16610ce861058f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906119e5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690611a77565b60405180910390fd5b610dbb82600083611129565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890611b09565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ef49190611303565b60405180910390a3610f088360008461112e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390611b75565b60405180910390fd5b610f8860008383611129565b8060026000828254610f9a91906114fb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161104b9190611303565b60405180910390a361105f6000838361112e565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116d578082015181840152602081019050611152565b60008484015250505050565b6000601f19601f8301169050919050565b600061119582611133565b61119f818561113e565b93506111af81856020860161114f565b6111b881611179565b840191505092915050565b600060208201905081810360008301526111dd818461118a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611215826111ea565b9050919050565b6112258161120a565b811461123057600080fd5b50565b6000813590506112428161121c565b92915050565b6000819050919050565b61125b81611248565b811461126657600080fd5b50565b60008135905061127881611252565b92915050565b60008060408385031215611295576112946111e5565b5b60006112a385828601611233565b92505060206112b485828601611269565b9150509250929050565b60008115159050919050565b6112d3816112be565b82525050565b60006020820190506112ee60008301846112ca565b92915050565b6112fd81611248565b82525050565b600060208201905061131860008301846112f4565b92915050565b600080600060608486031215611337576113366111e5565b5b600061134586828701611233565b935050602061135686828701611233565b925050604061136786828701611269565b9150509250925092565b600060ff82169050919050565b61138781611371565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000602082840312156113be576113bd6111e5565b5b60006113cc84828501611269565b91505092915050565b6000602082840312156113eb576113ea6111e5565b5b60006113f984828501611233565b91505092915050565b61140b8161120a565b82525050565b60006020820190506114266000830184611402565b92915050565b60008060408385031215611443576114426111e5565b5b600061145185828601611233565b925050602061146285828601611233565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b357607f821691505b6020821081036114c6576114c561146c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061150682611248565b915061151183611248565b9250828201905080821115611529576115286114cc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061158b60258361113e565b91506115968261152f565b604082019050919050565b600060208201905081810360008301526115ba8161157e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061161d60268361113e565b9150611628826115c1565b604082019050919050565b6000602082019050818103600083015261164c81611610565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116af60248361113e565b91506116ba82611653565b604082019050919050565b600060208201905081810360008301526116de816116a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174160228361113e565b915061174c826116e5565b604082019050919050565b6000602082019050818103600083015261177081611734565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117ad601d8361113e565b91506117b882611777565b602082019050919050565b600060208201905081810360008301526117dc816117a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061183f60258361113e565b915061184a826117e3565b604082019050919050565b6000602082019050818103600083015261186e81611832565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118d160238361113e565b91506118dc82611875565b604082019050919050565b60006020820190508181036000830152611900816118c4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061196360268361113e565b915061196e82611907565b604082019050919050565b6000602082019050818103600083015261199281611956565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119cf60208361113e565b91506119da82611999565b602082019050919050565b600060208201905081810360008301526119fe816119c2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a6160218361113e565b9150611a6c82611a05565b604082019050919050565b60006020820190508181036000830152611a9081611a54565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611af360228361113e565b9150611afe82611a97565b604082019050919050565b60006020820190508181036000830152611b2281611ae6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b5f601f8361113e565b9150611b6a82611b29565b602082019050919050565b60006020820190508181036000830152611b8e81611b52565b905091905056fea26469706673582212203cc87c2ad2da70c9ea8dfa2305991e1a7a7ead929d1ee75bf6268a92cdac79a264736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102cd578063a457c2d7146102eb578063a9059cbb1461031b578063dd62ed3e1461034b578063f2fde38b1461037b57610116565b806370a0823114610259578063715018a61461028957806379cc6790146102935780638da5cb5b146102af57610116565b806324bd8aaf116100e957806324bd8aaf146101b7578063313ce567146101d357806339509351146101f157806342966c68146102215780636a6278421461023d57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610397565b60405161013091906111c3565b60405180910390f35b610153600480360381019061014e919061127e565b610429565b60405161016091906112d9565b60405180910390f35b61017161044c565b60405161017e9190611303565b60405180910390f35b6101a1600480360381019061019c919061131e565b610456565b6040516101ae91906112d9565b60405180910390f35b6101d160048036038101906101cc919061127e565b610485565b005b6101db61049b565b6040516101e8919061138d565b60405180910390f35b61020b6004803603810190610206919061127e565b6104b2565b60405161021891906112d9565b60405180910390f35b61023b600480360381019061023691906113a8565b6104e9565b005b610257600480360381019061025291906113d5565b6104fd565b005b610273600480360381019061026e91906113d5565b610513565b6040516102809190611303565b60405180910390f35b61029161055b565b005b6102ad60048036038101906102a8919061127e565b61056f565b005b6102b761058f565b6040516102c49190611411565b60405180910390f35b6102d56105b9565b6040516102e291906111c3565b60405180910390f35b6103056004803603810190610300919061127e565b61064b565b60405161031291906112d9565b60405180910390f35b6103356004803603810190610330919061127e565b6106c2565b60405161034291906112d9565b60405180910390f35b6103656004803603810190610360919061142c565b6106e5565b6040516103729190611303565b60405180910390f35b610395600480360381019061039091906113d5565b61076c565b005b6060600380546103a69061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546103d29061149b565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050905090565b6000806104346107ef565b90506104418185856107f7565b600191505092915050565b6000600254905090565b6000806104616107ef565b905061046e8582856109c0565b610479858585610a4c565b60019150509392505050565b61048d610cc2565b6104978282610d40565b5050565b6000600560149054906101000a900460ff16905090565b6000806104bd6107ef565b90506104de8185856104cf85896106e5565b6104d991906114fb565b6107f7565b600191505092915050565b6104fa6104f46107ef565b82610d40565b50565b610505610cc2565b610510816000610f0d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610563610cc2565b61056d6000611063565b565b6105818261057b6107ef565b836109c0565b61058b8282610d40565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105c89061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061149b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000806106566107ef565b9050600061066482866106e5565b9050838110156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115a1565b60405180910390fd5b6106b682868684036107f7565b60019250505092915050565b6000806106cd6107ef565b90506106da818585610a4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610774610cc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90611633565b60405180910390fd5b6107ec81611063565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906116c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90611757565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109b39190611303565b60405180910390a3505050565b60006109cc84846106e5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465781811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906117c3565b60405180910390fd5b610a4584848484036107f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611855565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906118e7565b60405180910390fd5b610b35838383611129565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290611979565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca99190611303565b60405180910390a3610cbc84848461112e565b50505050565b610cca6107ef565b73ffffffffffffffffffffffffffffffffffffffff16610ce861058f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906119e5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690611a77565b60405180910390fd5b610dbb82600083611129565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890611b09565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ef49190611303565b60405180910390a3610f088360008461112e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390611b75565b60405180910390fd5b610f8860008383611129565b8060026000828254610f9a91906114fb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161104b9190611303565b60405180910390a361105f6000838361112e565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116d578082015181840152602081019050611152565b60008484015250505050565b6000601f19601f8301169050919050565b600061119582611133565b61119f818561113e565b93506111af81856020860161114f565b6111b881611179565b840191505092915050565b600060208201905081810360008301526111dd818461118a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611215826111ea565b9050919050565b6112258161120a565b811461123057600080fd5b50565b6000813590506112428161121c565b92915050565b6000819050919050565b61125b81611248565b811461126657600080fd5b50565b60008135905061127881611252565b92915050565b60008060408385031215611295576112946111e5565b5b60006112a385828601611233565b92505060206112b485828601611269565b9150509250929050565b60008115159050919050565b6112d3816112be565b82525050565b60006020820190506112ee60008301846112ca565b92915050565b6112fd81611248565b82525050565b600060208201905061131860008301846112f4565b92915050565b600080600060608486031215611337576113366111e5565b5b600061134586828701611233565b935050602061135686828701611233565b925050604061136786828701611269565b9150509250925092565b600060ff82169050919050565b61138781611371565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000602082840312156113be576113bd6111e5565b5b60006113cc84828501611269565b91505092915050565b6000602082840312156113eb576113ea6111e5565b5b60006113f984828501611233565b91505092915050565b61140b8161120a565b82525050565b60006020820190506114266000830184611402565b92915050565b60008060408385031215611443576114426111e5565b5b600061145185828601611233565b925050602061146285828601611233565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b357607f821691505b6020821081036114c6576114c561146c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061150682611248565b915061151183611248565b9250828201905080821115611529576115286114cc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061158b60258361113e565b91506115968261152f565b604082019050919050565b600060208201905081810360008301526115ba8161157e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061161d60268361113e565b9150611628826115c1565b604082019050919050565b6000602082019050818103600083015261164c81611610565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116af60248361113e565b91506116ba82611653565b604082019050919050565b600060208201905081810360008301526116de816116a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174160228361113e565b915061174c826116e5565b604082019050919050565b6000602082019050818103600083015261177081611734565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117ad601d8361113e565b91506117b882611777565b602082019050919050565b600060208201905081810360008301526117dc816117a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061183f60258361113e565b915061184a826117e3565b604082019050919050565b6000602082019050818103600083015261186e81611832565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118d160238361113e565b91506118dc82611875565b604082019050919050565b60006020820190508181036000830152611900816118c4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061196360268361113e565b915061196e82611907565b604082019050919050565b6000602082019050818103600083015261199281611956565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119cf60208361113e565b91506119da82611999565b602082019050919050565b600060208201905081810360008301526119fe816119c2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a6160218361113e565b9150611a6c82611a05565b604082019050919050565b60006020820190508181036000830152611a9081611a54565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611af360228361113e565b9150611afe82611a97565b604082019050919050565b60006020820190508181036000830152611b2281611ae6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b5f601f8361113e565b9150611b6a82611b29565b602082019050919050565b60006020820190508181036000830152611b8e81611b52565b905091905056fea26469706673582212203cc87c2ad2da70c9ea8dfa2305991e1a7a7ead929d1ee75bf6268a92cdac79a264736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol b/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol new file mode 100644 index 0000000000..1edf80fe1c --- /dev/null +++ b/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.19; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + * @dev {ERC20} token, including: + * + * - an "owner" that can mint tokens + * - ability for holders to burn (destroy) their tokens + * + * The contract owner is set automatically in the constructor as the + * deployer due to "Ownable". + * + * The Context contract is inherited indirectly through "ERC20" and "Ownable". + */ +contract ERC20Minter is ERC20, ERC20Burnable, Ownable { + uint8 private _decimals; + + /** + * @dev Grants "owner" status to the account that deploys the contract and + * customizes tokens decimals. + * + * See {ERC20-constructor}. + */ + constructor(string memory name, string memory symbol, uint8 decimals_) + ERC20(name, symbol) { + _setupDecimals(decimals_); + } + + /** + * @dev Sets `_decimals` as `decimals_ once at Deployment' + */ + function _setupDecimals(uint8 decimals_) private { + _decimals = decimals_; + } + + /** + * @dev Overrides the `decimals()` method with custom `_decimals` + */ + function decimals() public view virtual override returns (uint8) { + return _decimals; + } + + /** + * @dev Creates `amount` new tokens for `to`. + * It's missing the amount value + * + * See {ERC20-_mint}. + * + */ + function mint(address to) public virtual onlyOwner { + _mint(to, 0); + } + + /** + * @dev Destroys `amount` new tokens for `to`. Suitable when the contract owner + * should have authority to burn tokens from an account directly, such as in + * the case of regulatory compliance, or actions selected via + * decentralized governance. + * + * See {ERC20-_burn}. + * + */ + function burnFromAuthority(address from, uint256 amount) public virtual onlyOwner { + _burn(from, amount); + } + +} diff --git a/x/evm/embeds/embeds.go b/x/evm/embeds/embeds.go index 1514e0dcc6..b461dbcfc6 100644 --- a/x/evm/embeds/embeds.go +++ b/x/evm/embeds/embeds.go @@ -29,6 +29,8 @@ var ( testErc20MaliciousNameJson []byte //go:embed artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json testErc20MaliciousTransferJson []byte + //go:embed artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json + testErc20MissingFunctionJson []byte //go:embed artifacts/contracts/TestFunTokenPrecompileLocalGas.sol/TestFunTokenPrecompileLocalGas.json testFunTokenPrecompileLocalGasJson []byte //go:embed artifacts/contracts/TestERC20TransferThenPrecompileSend.sol/TestERC20TransferThenPrecompileSend.json @@ -90,6 +92,13 @@ var ( Name: "TestERC20MaliciousTransfer.sol", EmbedJSON: testErc20MaliciousTransferJson, } + // SmartContract_TestERC20MissingFunction is a test contract + // which simulates malicious ERC20 behavior by adding gas intensive operation + // for function transfer() intended to attack funtoken conversion from erc20 to bank coin + SmartContract_TestERC20MissingFunction = CompiledEvmContract{ + Name: "TestERC20MissingFunction.sol", + EmbedJSON: testErc20MissingFunctionJson, + } // SmartContract_TestFunTokenPrecompileLocalGas is a test contract // which allows precompile execution with custom local gas set (calling precompile within contract) SmartContract_TestFunTokenPrecompileLocalGas = CompiledEvmContract{ diff --git a/x/evm/embeds/embeds_test.go b/x/evm/embeds/embeds_test.go index cf1f0177f6..485ce27201 100644 --- a/x/evm/embeds/embeds_test.go +++ b/x/evm/embeds/embeds_test.go @@ -16,6 +16,7 @@ func TestLoadContracts(t *testing.T) { embeds.SmartContract_TestERC20.MustLoad() embeds.SmartContract_TestERC20MaliciousName.MustLoad() embeds.SmartContract_TestERC20MaliciousTransfer.MustLoad() + embeds.SmartContract_TestERC20MissingFunction.MustLoad() embeds.SmartContract_TestFunTokenPrecompileLocalGas.MustLoad() embeds.SmartContract_TestNativeSendThenPrecompileSendJson.MustLoad() embeds.SmartContract_TestERC20TransferThenPrecompileSend.MustLoad() diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index 6f917a40d1..20259f3214 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" bank "github.com/cosmos/cosmos-sdk/x/bank/types" + gethabi "github.com/ethereum/go-ethereum/accounts/abi" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/NibiruChain/nibiru/v2/eth" @@ -123,7 +124,8 @@ func (k *Keeper) createFunTokenFromERC20( bankDenom := fmt.Sprintf("erc20/%s", erc20.String()) // 3 | Verify that the ERC20 token include expected functions - if err := k.checkErc20ImplementsAllRequired(ctx, erc20); err != nil { + abi := embeds.SmartContract_ERC20Minter.ABI + if err := k.checkErc20ImplementsAllRequired(ctx, erc20, abi); err != nil { return funtoken, err } @@ -159,11 +161,35 @@ func (k *Keeper) createFunTokenFromERC20( ) } -func (k *Keeper) checkErc20ImplementsAllRequired( - ctx sdk.Context, erc20 gethcommon.Address, +func (k Keeper) checkErc20ImplementsAllRequired( + ctx sdk.Context, erc20Addr gethcommon.Address, abi *gethabi.ABI, ) error { - // Check if the ERC20 token implements the required functions - // This is a placeholder for actual implementation + methodNames := []string{"name", + "symbol", + "decimals", + "totalSupply", + "balanceOf", + "transfer", + "allowance", + "approve", + "transferFrom", + "increaseAllowance", + "decreaseAllowance", + } + + for _, methodName := range methodNames { + method, ok := abi.Methods[methodName] + if !ok { + return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) + } + hasMethod, err := k.HasMethodInContract(ctx, erc20Addr, method) + if err != nil { + return err + } + if !hasMethod { + return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) + } + } return nil } diff --git a/x/evm/keeper/funtoken_from_erc20_test.go b/x/evm/keeper/funtoken_from_erc20_test.go index cc5b47d0a3..f855e5c81c 100644 --- a/x/evm/keeper/funtoken_from_erc20_test.go +++ b/x/evm/keeper/funtoken_from_erc20_test.go @@ -421,35 +421,9 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { Sender: deps.Sender.NibiruAddr.String(), }, ) - s.Require().NoError(err) - - deps.ResetGasMeter() - - s.T().Log("happy: call attackBalance()") - res, err := deps.EvmKeeper.CallContract( - deps.Ctx, - embeds.SmartContract_TestInfiniteRecursionERC20.ABI, - deps.Sender.EthAddr, - &erc20Addr.Address, - false, - 10_000_000, - "attackBalance", - ) - s.Require().NoError(err) - s.Require().NotNil(res) - s.Require().Empty(res.VmError) - - s.T().Log("sad: call attackBalance()") - _, err = deps.EvmKeeper.CallContract( - deps.Ctx, - embeds.SmartContract_TestInfiniteRecursionERC20.ABI, - deps.Sender.EthAddr, - &erc20Addr.Address, - true, - 10_000_000, - "attackTransfer", - ) - s.Require().ErrorContains(err, "execution reverted") + // Can't create since the gas cap will be reached for transfer function + s.Require().Error(err) + s.Require().ErrorContains(err, "method 'transfer' not found in contract") } // TestSendERC20WithFee creates a funtoken from a malicious contract which charges a 10% fee on any transfer. diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go index 8a82225934..bb76347107 100644 --- a/x/evm/keeper/validate_contract.go +++ b/x/evm/keeper/validate_contract.go @@ -73,8 +73,10 @@ func (k Keeper) HasMethodInContract( } ethCallRequest := evm.EthCallRequest{ - Args: jsonTxArgs, - GasCap: 2100000, + Args: jsonTxArgs, + // This gas cap is big enough, if out of gas, something is suspicious + // in the transfer function. + GasCap: 690000000000000000, ProposerAddress: sdk.ConsAddress(ctx.BlockHeader().ProposerAddress), ChainId: k.EthChainID(ctx).Int64(), } @@ -85,11 +87,10 @@ func (k Keeper) HasMethodInContract( return true, nil } - if strings.Contains(err.Error(), "caller is not the owner") { - return true, nil + if strings.Contains(err.Error(), "Estimate gas VMError: execution reverted, but unable to parse reason") { + return false, nil } - - return false, nil + return true, nil } // checkAllMethods ensure the contract at `contractAddr` has all the methods in `abiMethods`. From a99cd91891abbc17f3a7e083204acc5b5e010e12 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Thu, 30 Jan 2025 22:01:54 +0100 Subject: [PATCH 05/10] feat: add tests for missing function check --- evm-e2e/contracts/TestERC20.sol | 17 +- x/evm/embeds/abi/ERC20Minter.json | 18 - .../contracts/TestERC20.sol/TestERC20.json | 22 +- .../TestERC20MaliciousTransfer.json | 22 +- .../ERC20Minter.json | 403 +++++++++++++++++ .../TestERC20MinterMissingFunction.json | 416 ------------------ .../TestERC20TransferWithFee.json | 22 +- x/evm/embeds/contracts/TestERC20.sol | 9 +- .../contracts/TestERC20MaliciousTransfer.sol | 20 +- .../TestERC20MinterMissingFunction.sol | 92 ++-- .../contracts/TestERC20TransferWithFee.sol | 12 +- x/evm/embeds/embeds.go | 3 +- x/evm/keeper/funtoken_from_erc20.go | 1 + x/evm/keeper/funtoken_from_erc20_test.go | 41 ++ x/evm/keeper/validate_contract.go | 2 +- x/evm/keeper/validate_contract_test.go | 8 +- 16 files changed, 595 insertions(+), 513 deletions(-) create mode 100644 x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json delete mode 100644 x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json diff --git a/evm-e2e/contracts/TestERC20.sol b/evm-e2e/contracts/TestERC20.sol index bea5328433..fdc7688465 100644 --- a/evm-e2e/contracts/TestERC20.sol +++ b/evm-e2e/contracts/TestERC20.sol @@ -2,15 +2,18 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {ERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; contract TestERC20 is ERC20 { + // Define the supply of TestERC20: 1,000,000 + uint256 constant initialSupply = 1000000 * (10 ** 18); - // Define the supply of TestERC20: 1,000,000 - uint256 constant initialSupply = 1000000 * (10**18); + // Constructor will be called on contract creation + constructor() ERC20('TestERC20', 'FOO') { + _mint(msg.sender, initialSupply); + } - // Constructor will be called on contract creation - constructor() ERC20("TestERC20", "FOO") { - _mint(msg.sender, initialSupply); - } + function mint(address to, uint256 amount) public { + _mint(to, amount); + } } diff --git a/x/evm/embeds/abi/ERC20Minter.json b/x/evm/embeds/abi/ERC20Minter.json index e79d7bb1ee..10e2246655 100644 --- a/x/evm/embeds/abi/ERC20Minter.json +++ b/x/evm/embeds/abi/ERC20Minter.json @@ -266,24 +266,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "name", diff --git a/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json b/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json index a1e9d42220..2ef9964e89 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json @@ -186,6 +186,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "name", @@ -279,8 +297,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374455243323000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464f4f000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620004b7565b508060049081620000a19190620004b7565b505050620000c03369d3c21bcecceda1000000620000c660201b60201c565b620006b9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012f90620005ff565b60405180910390fd5b6200014c600083836200023360201b60201c565b806002600082825462000160919062000650565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200021391906200069c565b60405180910390a36200022f600083836200023860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bf57607f821691505b602082108103620002d557620002d462000277565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000300565b6200034b868362000300565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000398620003926200038c8462000363565b6200036d565b62000363565b9050919050565b6000819050919050565b620003b48362000377565b620003cc620003c3826200039f565b8484546200030d565b825550505050565b600090565b620003e3620003d4565b620003f0818484620003a9565b505050565b5b8181101562000418576200040c600082620003d9565b600181019050620003f6565b5050565b601f82111562000467576200043181620002db565b6200043c84620002f0565b810160208510156200044c578190505b620004646200045b85620002f0565b830182620003f5565b50505b505050565b600082821c905092915050565b60006200048c600019846008026200046c565b1980831691505092915050565b6000620004a7838362000479565b9150826002028217905092915050565b620004c2826200023d565b67ffffffffffffffff811115620004de57620004dd62000248565b5b620004ea8254620002a6565b620004f78282856200041c565b600060209050601f8311600181146200052f57600084156200051a578287015190505b62000526858262000499565b86555062000596565b601f1984166200053f86620002db565b60005b82811015620005695784890151825560018201915060208501945060208101905062000542565b8683101562000589578489015162000585601f89168262000479565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005e7601f836200059e565b9150620005f482620005af565b602082019050919050565b600060208201905081810360008301526200061a81620005d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065d8262000363565b91506200066a8362000363565b925082820190508082111562000685576200068462000621565b5b92915050565b620006968162000363565b82525050565b6000602082019050620006b360008301846200068b565b92915050565b61122f80620006c96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b0c565b60405180910390f35b6100e660048036038101906100e19190610bc7565b610308565b6040516100f39190610c22565b60405180910390f35b61010461032b565b6040516101119190610c4c565b60405180910390f35b610134600480360381019061012f9190610c67565b610335565b6040516101419190610c22565b60405180910390f35b610152610364565b60405161015f9190610cd6565b60405180910390f35b610182600480360381019061017d9190610bc7565b61036d565b60405161018f9190610c22565b60405180910390f35b6101b260048036038101906101ad9190610cf1565b6103a4565b6040516101bf9190610c4c565b60405180910390f35b6101d06103ec565b6040516101dd9190610b0c565b60405180910390f35b61020060048036038101906101fb9190610bc7565b61047e565b60405161020d9190610c22565b60405180910390f35b610230600480360381019061022b9190610bc7565b6104f5565b60405161023d9190610c22565b60405180910390f35b610260600480360381019061025b9190610d1e565b610518565b60405161026d9190610c4c565b60405180910390f35b60606003805461028590610d8d565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d8d565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610ded565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d8d565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e93565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c4c565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611023565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611147565b60405180910390fd5b6108e5838383610a72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a599190610c4c565b60405180910390a3610a6c848484610a77565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ab6578082015181840152602081019050610a9b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ade82610a7c565b610ae88185610a87565b9350610af8818560208601610a98565b610b0181610ac2565b840191505092915050565b60006020820190508181036000830152610b268184610ad3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b5e82610b33565b9050919050565b610b6e81610b53565b8114610b7957600080fd5b50565b600081359050610b8b81610b65565b92915050565b6000819050919050565b610ba481610b91565b8114610baf57600080fd5b50565b600081359050610bc181610b9b565b92915050565b60008060408385031215610bde57610bdd610b2e565b5b6000610bec85828601610b7c565b9250506020610bfd85828601610bb2565b9150509250929050565b60008115159050919050565b610c1c81610c07565b82525050565b6000602082019050610c376000830184610c13565b92915050565b610c4681610b91565b82525050565b6000602082019050610c616000830184610c3d565b92915050565b600080600060608486031215610c8057610c7f610b2e565b5b6000610c8e86828701610b7c565b9350506020610c9f86828701610b7c565b9250506040610cb086828701610bb2565b9150509250925092565b600060ff82169050919050565b610cd081610cba565b82525050565b6000602082019050610ceb6000830184610cc7565b92915050565b600060208284031215610d0757610d06610b2e565b5b6000610d1584828501610b7c565b91505092915050565b60008060408385031215610d3557610d34610b2e565b5b6000610d4385828601610b7c565b9250506020610d5485828601610b7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610da557607f821691505b602082108103610db857610db7610d5e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df882610b91565b9150610e0383610b91565b9250828201905080821115610e1b57610e1a610dbe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e7d602583610a87565b9150610e8882610e21565b604082019050919050565b60006020820190508181036000830152610eac81610e70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602483610a87565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602283610a87565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061100d601d83610a87565b915061101882610fd7565b602082019050919050565b6000602082019050818103600083015261103c81611000565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061109f602583610a87565b91506110aa82611043565b604082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611131602383610a87565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111c3602683610a87565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b905091905056fea26469706673582212209daf0c2b0a4ff52e932f2c8ac4b752a1b3d828de9c9661a370cb5d05214e85b664736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b0c565b60405180910390f35b6100e660048036038101906100e19190610bc7565b610308565b6040516100f39190610c22565b60405180910390f35b61010461032b565b6040516101119190610c4c565b60405180910390f35b610134600480360381019061012f9190610c67565b610335565b6040516101419190610c22565b60405180910390f35b610152610364565b60405161015f9190610cd6565b60405180910390f35b610182600480360381019061017d9190610bc7565b61036d565b60405161018f9190610c22565b60405180910390f35b6101b260048036038101906101ad9190610cf1565b6103a4565b6040516101bf9190610c4c565b60405180910390f35b6101d06103ec565b6040516101dd9190610b0c565b60405180910390f35b61020060048036038101906101fb9190610bc7565b61047e565b60405161020d9190610c22565b60405180910390f35b610230600480360381019061022b9190610bc7565b6104f5565b60405161023d9190610c22565b60405180910390f35b610260600480360381019061025b9190610d1e565b610518565b60405161026d9190610c4c565b60405180910390f35b60606003805461028590610d8d565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d8d565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610ded565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d8d565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e93565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c4c565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611023565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611147565b60405180910390fd5b6108e5838383610a72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a599190610c4c565b60405180910390a3610a6c848484610a77565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ab6578082015181840152602081019050610a9b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ade82610a7c565b610ae88185610a87565b9350610af8818560208601610a98565b610b0181610ac2565b840191505092915050565b60006020820190508181036000830152610b268184610ad3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b5e82610b33565b9050919050565b610b6e81610b53565b8114610b7957600080fd5b50565b600081359050610b8b81610b65565b92915050565b6000819050919050565b610ba481610b91565b8114610baf57600080fd5b50565b600081359050610bc181610b9b565b92915050565b60008060408385031215610bde57610bdd610b2e565b5b6000610bec85828601610b7c565b9250506020610bfd85828601610bb2565b9150509250929050565b60008115159050919050565b610c1c81610c07565b82525050565b6000602082019050610c376000830184610c13565b92915050565b610c4681610b91565b82525050565b6000602082019050610c616000830184610c3d565b92915050565b600080600060608486031215610c8057610c7f610b2e565b5b6000610c8e86828701610b7c565b9350506020610c9f86828701610b7c565b9250506040610cb086828701610bb2565b9150509250925092565b600060ff82169050919050565b610cd081610cba565b82525050565b6000602082019050610ceb6000830184610cc7565b92915050565b600060208284031215610d0757610d06610b2e565b5b6000610d1584828501610b7c565b91505092915050565b60008060408385031215610d3557610d34610b2e565b5b6000610d4385828601610b7c565b9250506020610d5485828601610b7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610da557607f821691505b602082108103610db857610db7610d5e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df882610b91565b9150610e0383610b91565b9250828201905080821115610e1b57610e1a610dbe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e7d602583610a87565b9150610e8882610e21565b604082019050919050565b60006020820190508181036000830152610eac81610e70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602483610a87565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602283610a87565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061100d601d83610a87565b915061101882610fd7565b602082019050919050565b6000602082019050818103600083015261103c81611000565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061109f602583610a87565b91506110aa82611043565b604082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611131602383610a87565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111c3602683610a87565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b905091905056fea26469706673582212209daf0c2b0a4ff52e932f2c8ac4b752a1b3d828de9c9661a370cb5d05214e85b664736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374455243323000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464f4f000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620004b7565b508060049081620000a19190620004b7565b505050620000c03369d3c21bcecceda1000000620000c660201b60201c565b620006b9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012f90620005ff565b60405180910390fd5b6200014c600083836200023360201b60201c565b806002600082825462000160919062000650565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200021391906200069c565b60405180910390a36200022f600083836200023860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bf57607f821691505b602082108103620002d557620002d462000277565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000300565b6200034b868362000300565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000398620003926200038c8462000363565b6200036d565b62000363565b9050919050565b6000819050919050565b620003b48362000377565b620003cc620003c3826200039f565b8484546200030d565b825550505050565b600090565b620003e3620003d4565b620003f0818484620003a9565b505050565b5b8181101562000418576200040c600082620003d9565b600181019050620003f6565b5050565b601f82111562000467576200043181620002db565b6200043c84620002f0565b810160208510156200044c578190505b620004646200045b85620002f0565b830182620003f5565b50505b505050565b600082821c905092915050565b60006200048c600019846008026200046c565b1980831691505092915050565b6000620004a7838362000479565b9150826002028217905092915050565b620004c2826200023d565b67ffffffffffffffff811115620004de57620004dd62000248565b5b620004ea8254620002a6565b620004f78282856200041c565b600060209050601f8311600181146200052f57600084156200051a578287015190505b62000526858262000499565b86555062000596565b601f1984166200053f86620002db565b60005b82811015620005695784890151825560018201915060208501945060208101905062000542565b8683101562000589578489015162000585601f89168262000479565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005e7601f836200059e565b9150620005f482620005af565b602082019050919050565b600060208201905081810360008301526200061a81620005d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065d8262000363565b91506200066a8362000363565b925082820190508082111562000685576200068462000621565b5b92915050565b620006968162000363565b82525050565b6000602082019050620006b360008301846200068b565b92915050565b61142680620006c96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610c97565b60405180910390f35b6100f160048036038101906100ec9190610d52565b61032f565b6040516100fe9190610dad565b60405180910390f35b61010f610352565b60405161011c9190610dd7565b60405180910390f35b61013f600480360381019061013a9190610df2565b61035c565b60405161014c9190610dad565b60405180910390f35b61015d61038b565b60405161016a9190610e61565b60405180910390f35b61018d60048036038101906101889190610d52565b610394565b60405161019a9190610dad565b60405180910390f35b6101bd60048036038101906101b89190610d52565b6103cb565b005b6101d960048036038101906101d49190610e7c565b6103d9565b6040516101e69190610dd7565b60405180910390f35b6101f7610421565b6040516102049190610c97565b60405180910390f35b61022760048036038101906102229190610d52565b6104b3565b6040516102349190610dad565b60405180910390f35b61025760048036038101906102529190610d52565b61052a565b6040516102649190610dad565b60405180910390f35b61028760048036038101906102829190610ea9565b61054d565b6040516102949190610dd7565b60405180910390f35b6060600380546102ac90610f18565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f18565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a5565b61037f858585610831565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f78565b6105dc565b600191505092915050565b6103d58282610aa7565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f18565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f18565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061101e565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610831565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610642906110b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190611142565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107989190610dd7565b60405180910390a3505050565b60006107b1848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082b578181101561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906111ae565b60405180910390fd5b61082a84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790611240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906112d2565b60405180910390fd5b61091a838383610bfd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790611364565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a8e9190610dd7565b60405180910390a3610aa1848484610c02565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d906113d0565b60405180910390fd5b610b2260008383610bfd565b8060026000828254610b349190610f78565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be59190610dd7565b60405180910390a3610bf960008383610c02565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c41578082015181840152602081019050610c26565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c6982610c07565b610c738185610c12565b9350610c83818560208601610c23565b610c8c81610c4d565b840191505092915050565b60006020820190508181036000830152610cb18184610c5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce982610cbe565b9050919050565b610cf981610cde565b8114610d0457600080fd5b50565b600081359050610d1681610cf0565b92915050565b6000819050919050565b610d2f81610d1c565b8114610d3a57600080fd5b50565b600081359050610d4c81610d26565b92915050565b60008060408385031215610d6957610d68610cb9565b5b6000610d7785828601610d07565b9250506020610d8885828601610d3d565b9150509250929050565b60008115159050919050565b610da781610d92565b82525050565b6000602082019050610dc26000830184610d9e565b92915050565b610dd181610d1c565b82525050565b6000602082019050610dec6000830184610dc8565b92915050565b600080600060608486031215610e0b57610e0a610cb9565b5b6000610e1986828701610d07565b9350506020610e2a86828701610d07565b9250506040610e3b86828701610d3d565b9150509250925092565b600060ff82169050919050565b610e5b81610e45565b82525050565b6000602082019050610e766000830184610e52565b92915050565b600060208284031215610e9257610e91610cb9565b5b6000610ea084828501610d07565b91505092915050565b60008060408385031215610ec057610ebf610cb9565b5b6000610ece85828601610d07565b9250506020610edf85828601610d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3057607f821691505b602082108103610f4357610f42610ee9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f8382610d1c565b9150610f8e83610d1c565b9250828201905080821115610fa657610fa5610f49565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611008602583610c12565b915061101382610fac565b604082019050919050565b6000602082019050818103600083015261103781610ffb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061109a602483610c12565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061112c602283610c12565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611198601d83610c12565b91506111a382611162565b602082019050919050565b600060208201905081810360008301526111c78161118b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061122a602583610c12565b9150611235826111ce565b604082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602383610c12565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061134e602683610c12565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113ba601f83610c12565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b905091905056fea2646970667358221220b66afe449715946391f543cc99f4517498de9096d263179feb5963ff082371c064736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610c97565b60405180910390f35b6100f160048036038101906100ec9190610d52565b61032f565b6040516100fe9190610dad565b60405180910390f35b61010f610352565b60405161011c9190610dd7565b60405180910390f35b61013f600480360381019061013a9190610df2565b61035c565b60405161014c9190610dad565b60405180910390f35b61015d61038b565b60405161016a9190610e61565b60405180910390f35b61018d60048036038101906101889190610d52565b610394565b60405161019a9190610dad565b60405180910390f35b6101bd60048036038101906101b89190610d52565b6103cb565b005b6101d960048036038101906101d49190610e7c565b6103d9565b6040516101e69190610dd7565b60405180910390f35b6101f7610421565b6040516102049190610c97565b60405180910390f35b61022760048036038101906102229190610d52565b6104b3565b6040516102349190610dad565b60405180910390f35b61025760048036038101906102529190610d52565b61052a565b6040516102649190610dad565b60405180910390f35b61028760048036038101906102829190610ea9565b61054d565b6040516102949190610dd7565b60405180910390f35b6060600380546102ac90610f18565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f18565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a5565b61037f858585610831565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f78565b6105dc565b600191505092915050565b6103d58282610aa7565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f18565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f18565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061101e565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610831565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610642906110b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190611142565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107989190610dd7565b60405180910390a3505050565b60006107b1848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082b578181101561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906111ae565b60405180910390fd5b61082a84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790611240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906112d2565b60405180910390fd5b61091a838383610bfd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790611364565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a8e9190610dd7565b60405180910390a3610aa1848484610c02565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d906113d0565b60405180910390fd5b610b2260008383610bfd565b8060026000828254610b349190610f78565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be59190610dd7565b60405180910390a3610bf960008383610c02565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c41578082015181840152602081019050610c26565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c6982610c07565b610c738185610c12565b9350610c83818560208601610c23565b610c8c81610c4d565b840191505092915050565b60006020820190508181036000830152610cb18184610c5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce982610cbe565b9050919050565b610cf981610cde565b8114610d0457600080fd5b50565b600081359050610d1681610cf0565b92915050565b6000819050919050565b610d2f81610d1c565b8114610d3a57600080fd5b50565b600081359050610d4c81610d26565b92915050565b60008060408385031215610d6957610d68610cb9565b5b6000610d7785828601610d07565b9250506020610d8885828601610d3d565b9150509250929050565b60008115159050919050565b610da781610d92565b82525050565b6000602082019050610dc26000830184610d9e565b92915050565b610dd181610d1c565b82525050565b6000602082019050610dec6000830184610dc8565b92915050565b600080600060608486031215610e0b57610e0a610cb9565b5b6000610e1986828701610d07565b9350506020610e2a86828701610d07565b9250506040610e3b86828701610d3d565b9150509250925092565b600060ff82169050919050565b610e5b81610e45565b82525050565b6000602082019050610e766000830184610e52565b92915050565b600060208284031215610e9257610e91610cb9565b5b6000610ea084828501610d07565b91505092915050565b60008060408385031215610ec057610ebf610cb9565b5b6000610ece85828601610d07565b9250506020610edf85828601610d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3057607f821691505b602082108103610f4357610f42610ee9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f8382610d1c565b9150610f8e83610d1c565b9250828201905080821115610fa657610fa5610f49565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611008602583610c12565b915061101382610fac565b604082019050919050565b6000602082019050818103600083015261103781610ffb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061109a602483610c12565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061112c602283610c12565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611198601d83610c12565b91506111a382611162565b602082019050919050565b600060208201905081810360008301526111c78161118b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061122a602583610c12565b9150611235826111ce565b604082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602383610c12565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061134e602683610c12565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113ba601f83610c12565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b905091905056fea2646970667358221220b66afe449715946391f543cc99f4517498de9096d263179feb5963ff082371c064736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json b/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json index 48019e35dc..c5b66cd45a 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json @@ -202,6 +202,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "name", @@ -295,8 +313,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162001c5538038062001c558339818101604052810190620000379190620003cc565b828281600390816200004a9190620006b1565b5080600490816200005c9190620006b1565b5050506200007b3369d3c21bcecceda10000006200008460201b60201c565b505050620008b3565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620007f9565b60405180910390fd5b6200010a60008383620001f160201b60201c565b80600260008282546200011e91906200084a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d1919062000896565b60405180910390a3620001ed60008383620001f660201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002648262000219565b810181811067ffffffffffffffff821117156200028657620002856200022a565b5b80604052505050565b60006200029b620001fb565b9050620002a9828262000259565b919050565b600067ffffffffffffffff821115620002cc57620002cb6200022a565b5b620002d78262000219565b9050602081019050919050565b60005b8381101562000304578082015181840152602081019050620002e7565b60008484015250505050565b6000620003276200032184620002ae565b6200028f565b90508281526020810184848401111562000346576200034562000214565b5b62000353848285620002e4565b509392505050565b600082601f8301126200037357620003726200020f565b5b81516200038584826020860162000310565b91505092915050565b600060ff82169050919050565b620003a6816200038e565b8114620003b257600080fd5b50565b600081519050620003c6816200039b565b92915050565b600080600060608486031215620003e857620003e762000205565b5b600084015167ffffffffffffffff8111156200040957620004086200020a565b5b62000417868287016200035b565b935050602084015167ffffffffffffffff8111156200043b576200043a6200020a565b5b62000449868287016200035b565b92505060406200045c86828701620003b5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b957607f821691505b602082108103620004cf57620004ce62000471565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004fa565b620005458683620004fa565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005926200058c62000586846200055d565b62000567565b6200055d565b9050919050565b6000819050919050565b620005ae8362000571565b620005c6620005bd8262000599565b84845462000507565b825550505050565b600090565b620005dd620005ce565b620005ea818484620005a3565b505050565b5b81811015620006125762000606600082620005d3565b600181019050620005f0565b5050565b601f82111562000661576200062b81620004d5565b6200063684620004ea565b8101602085101562000646578190505b6200065e6200065585620004ea565b830182620005ef565b50505b505050565b600082821c905092915050565b6000620006866000198460080262000666565b1980831691505092915050565b6000620006a1838362000673565b9150826002028217905092915050565b620006bc8262000466565b67ffffffffffffffff811115620006d857620006d76200022a565b5b620006e48254620004a0565b620006f182828562000616565b600060209050601f83116001811462000729576000841562000714578287015190505b62000720858262000693565b86555062000790565b601f1984166200073986620004d5565b60005b8281101562000763578489015182556001820191506020850194506020810190506200073c565b868310156200078357848901516200077f601f89168262000673565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007e1601f8362000798565b9150620007ee82620007a9565b602082019050919050565b600060208201905081810360008301526200081481620007d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000857826200055d565b915062000864836200055d565b92508282019050808211156200087f576200087e6200081b565b5b92915050565b62000890816200055d565b82525050565b6000602082019050620008ad600083018462000885565b92915050565b61139280620008c36000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b9e565b60405180910390f35b6100e660048036038101906100e19190610c59565b610308565b6040516100f39190610cb4565b60405180910390f35b61010461032b565b6040516101119190610cde565b60405180910390f35b610134600480360381019061012f9190610cf9565b610335565b6040516101419190610cb4565b60405180910390f35b610152610364565b60405161015f9190610d68565b60405180910390f35b610182600480360381019061017d9190610c59565b61036d565b60405161018f9190610cb4565b60405180910390f35b6101b260048036038101906101ad9190610d83565b6103a4565b6040516101bf9190610cde565b60405180910390f35b6101d06103ec565b6040516101dd9190610b9e565b60405180910390f35b61020060048036038101906101fb9190610c59565b61047e565b60405161020d9190610cb4565b60405180910390f35b610230600480360381019061022b9190610c59565b6104f5565b60405161023d9190610cb4565b60405180910390f35b610260600480360381019061025b9190610db0565b610511565b60405161026d9190610cde565b60405180910390f35b60606003805461028590610e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e1f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610598565b90506103208185856105a0565b600191505092915050565b6000600254905090565b600080610340610598565b905061034d858285610769565b6103588585856107f5565b60019150509392505050565b60006012905090565b600080610378610598565b905061039981858561038a8589610511565b6103949190610e7f565b6105a0565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e1f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e1f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b600080610489610598565b905060006104978286610511565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f25565b60405180910390fd5b6104e982868684036105a0565b60019250505092915050565b60006104ff610a6b565b6105098383610ae1565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610fb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590611049565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161075c9190610cde565b60405180910390a3505050565b60006107758484610511565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107ef57818110156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906110b5565b60405180910390fd5b6107ee84848484036105a0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90611147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca906111d9565b60405180910390fd5b6108de838383610b04565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061126b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a529190610cde565b60405180910390a3610a65848484610b09565b50505050565b60006001905060005b620186a0811015610acc576001600283610a8e919061128b565b610a989190610e7f565b9150600282610aa791906112fc565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610a74565b5060008103610ade57610add61132d565b5b50565b600080610aec610598565b9050610af98185856107f5565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b48578082015181840152602081019050610b2d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7082610b0e565b610b7a8185610b19565b9350610b8a818560208601610b2a565b610b9381610b54565b840191505092915050565b60006020820190508181036000830152610bb88184610b65565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bf082610bc5565b9050919050565b610c0081610be5565b8114610c0b57600080fd5b50565b600081359050610c1d81610bf7565b92915050565b6000819050919050565b610c3681610c23565b8114610c4157600080fd5b50565b600081359050610c5381610c2d565b92915050565b60008060408385031215610c7057610c6f610bc0565b5b6000610c7e85828601610c0e565b9250506020610c8f85828601610c44565b9150509250929050565b60008115159050919050565b610cae81610c99565b82525050565b6000602082019050610cc96000830184610ca5565b92915050565b610cd881610c23565b82525050565b6000602082019050610cf36000830184610ccf565b92915050565b600080600060608486031215610d1257610d11610bc0565b5b6000610d2086828701610c0e565b9350506020610d3186828701610c0e565b9250506040610d4286828701610c44565b9150509250925092565b600060ff82169050919050565b610d6281610d4c565b82525050565b6000602082019050610d7d6000830184610d59565b92915050565b600060208284031215610d9957610d98610bc0565b5b6000610da784828501610c0e565b91505092915050565b60008060408385031215610dc757610dc6610bc0565b5b6000610dd585828601610c0e565b9250506020610de685828601610c0e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3757607f821691505b602082108103610e4a57610e49610df0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e8a82610c23565b9150610e9583610c23565b9250828201905080821115610ead57610eac610e50565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602583610b19565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602483610b19565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611033602283610b19565b915061103e82610fd7565b604082019050919050565b6000602082019050818103600083015261106281611026565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061109f601d83610b19565b91506110aa82611069565b602082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611131602583610b19565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006111c3602383610b19565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611255602683610b19565b9150611260826111f9565b604082019050919050565b6000602082019050818103600083015261128481611248565b9050919050565b600061129682610c23565b91506112a183610c23565b92508282026112af81610c23565b915082820484148315176112c6576112c5610e50565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130782610c23565b915061131283610c23565b925082611322576113216112cd565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e34d9015349ff6af20fee44587dc5ba21b370ca2a6239a1dc6440ecaddfd47a364736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b9e565b60405180910390f35b6100e660048036038101906100e19190610c59565b610308565b6040516100f39190610cb4565b60405180910390f35b61010461032b565b6040516101119190610cde565b60405180910390f35b610134600480360381019061012f9190610cf9565b610335565b6040516101419190610cb4565b60405180910390f35b610152610364565b60405161015f9190610d68565b60405180910390f35b610182600480360381019061017d9190610c59565b61036d565b60405161018f9190610cb4565b60405180910390f35b6101b260048036038101906101ad9190610d83565b6103a4565b6040516101bf9190610cde565b60405180910390f35b6101d06103ec565b6040516101dd9190610b9e565b60405180910390f35b61020060048036038101906101fb9190610c59565b61047e565b60405161020d9190610cb4565b60405180910390f35b610230600480360381019061022b9190610c59565b6104f5565b60405161023d9190610cb4565b60405180910390f35b610260600480360381019061025b9190610db0565b610511565b60405161026d9190610cde565b60405180910390f35b60606003805461028590610e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e1f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610598565b90506103208185856105a0565b600191505092915050565b6000600254905090565b600080610340610598565b905061034d858285610769565b6103588585856107f5565b60019150509392505050565b60006012905090565b600080610378610598565b905061039981858561038a8589610511565b6103949190610e7f565b6105a0565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e1f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e1f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b600080610489610598565b905060006104978286610511565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f25565b60405180910390fd5b6104e982868684036105a0565b60019250505092915050565b60006104ff610a6b565b6105098383610ae1565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610fb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590611049565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161075c9190610cde565b60405180910390a3505050565b60006107758484610511565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107ef57818110156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906110b5565b60405180910390fd5b6107ee84848484036105a0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90611147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca906111d9565b60405180910390fd5b6108de838383610b04565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061126b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a529190610cde565b60405180910390a3610a65848484610b09565b50505050565b60006001905060005b620186a0811015610acc576001600283610a8e919061128b565b610a989190610e7f565b9150600282610aa791906112fc565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610a74565b5060008103610ade57610add61132d565b5b50565b600080610aec610598565b9050610af98185856107f5565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b48578082015181840152602081019050610b2d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7082610b0e565b610b7a8185610b19565b9350610b8a818560208601610b2a565b610b9381610b54565b840191505092915050565b60006020820190508181036000830152610bb88184610b65565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bf082610bc5565b9050919050565b610c0081610be5565b8114610c0b57600080fd5b50565b600081359050610c1d81610bf7565b92915050565b6000819050919050565b610c3681610c23565b8114610c4157600080fd5b50565b600081359050610c5381610c2d565b92915050565b60008060408385031215610c7057610c6f610bc0565b5b6000610c7e85828601610c0e565b9250506020610c8f85828601610c44565b9150509250929050565b60008115159050919050565b610cae81610c99565b82525050565b6000602082019050610cc96000830184610ca5565b92915050565b610cd881610c23565b82525050565b6000602082019050610cf36000830184610ccf565b92915050565b600080600060608486031215610d1257610d11610bc0565b5b6000610d2086828701610c0e565b9350506020610d3186828701610c0e565b9250506040610d4286828701610c44565b9150509250925092565b600060ff82169050919050565b610d6281610d4c565b82525050565b6000602082019050610d7d6000830184610d59565b92915050565b600060208284031215610d9957610d98610bc0565b5b6000610da784828501610c0e565b91505092915050565b60008060408385031215610dc757610dc6610bc0565b5b6000610dd585828601610c0e565b9250506020610de685828601610c0e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3757607f821691505b602082108103610e4a57610e49610df0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e8a82610c23565b9150610e9583610c23565b9250828201905080821115610ead57610eac610e50565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602583610b19565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602483610b19565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611033602283610b19565b915061103e82610fd7565b604082019050919050565b6000602082019050818103600083015261106281611026565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061109f601d83610b19565b91506110aa82611069565b602082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611131602583610b19565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006111c3602383610b19565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611255602683610b19565b9150611260826111f9565b604082019050919050565b6000602082019050818103600083015261128481611248565b9050919050565b600061129682610c23565b91506112a183610c23565b92508282026112af81610c23565b915082820484148315176112c6576112c5610e50565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130782610c23565b915061131283610c23565b925082611322576113216112cd565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e34d9015349ff6af20fee44587dc5ba21b370ca2a6239a1dc6440ecaddfd47a364736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e4c38038062001e4c8339818101604052810190620000379190620003cc565b828281600390816200004a9190620006b1565b5080600490816200005c9190620006b1565b5050506200007b3369d3c21bcecceda10000006200008460201b60201c565b505050620008b3565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620007f9565b60405180910390fd5b6200010a60008383620001f160201b60201c565b80600260008282546200011e91906200084a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d1919062000896565b60405180910390a3620001ed60008383620001f660201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002648262000219565b810181811067ffffffffffffffff821117156200028657620002856200022a565b5b80604052505050565b60006200029b620001fb565b9050620002a9828262000259565b919050565b600067ffffffffffffffff821115620002cc57620002cb6200022a565b5b620002d78262000219565b9050602081019050919050565b60005b8381101562000304578082015181840152602081019050620002e7565b60008484015250505050565b6000620003276200032184620002ae565b6200028f565b90508281526020810184848401111562000346576200034562000214565b5b62000353848285620002e4565b509392505050565b600082601f8301126200037357620003726200020f565b5b81516200038584826020860162000310565b91505092915050565b600060ff82169050919050565b620003a6816200038e565b8114620003b257600080fd5b50565b600081519050620003c6816200039b565b92915050565b600080600060608486031215620003e857620003e762000205565b5b600084015167ffffffffffffffff8111156200040957620004086200020a565b5b62000417868287016200035b565b935050602084015167ffffffffffffffff8111156200043b576200043a6200020a565b5b62000449868287016200035b565b92505060406200045c86828701620003b5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b957607f821691505b602082108103620004cf57620004ce62000471565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004fa565b620005458683620004fa565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005926200058c62000586846200055d565b62000567565b6200055d565b9050919050565b6000819050919050565b620005ae8362000571565b620005c6620005bd8262000599565b84845462000507565b825550505050565b600090565b620005dd620005ce565b620005ea818484620005a3565b505050565b5b81811015620006125762000606600082620005d3565b600181019050620005f0565b5050565b601f82111562000661576200062b81620004d5565b6200063684620004ea565b8101602085101562000646578190505b6200065e6200065585620004ea565b830182620005ef565b50505b505050565b600082821c905092915050565b6000620006866000198460080262000666565b1980831691505092915050565b6000620006a1838362000673565b9150826002028217905092915050565b620006bc8262000466565b67ffffffffffffffff811115620006d857620006d76200022a565b5b620006e48254620004a0565b620006f182828562000616565b600060209050601f83116001811462000729576000841562000714578287015190505b62000720858262000693565b86555062000790565b601f1984166200073986620004d5565b60005b8281101562000763578489015182556001820191506020850194506020810190506200073c565b868310156200078357848901516200077f601f89168262000673565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007e1601f8362000798565b9150620007ee82620007a9565b602082019050919050565b600060208201905081810360008301526200081481620007d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000857826200055d565b915062000864836200055d565b92508282019050808211156200087f576200087e6200081b565b5b92915050565b62000890816200055d565b82525050565b6000602082019050620008ad600083018462000885565b92915050565b61158980620008c36000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d29565b60405180910390f35b6100f160048036038101906100ec9190610de4565b61032f565b6040516100fe9190610e3f565b60405180910390f35b61010f610352565b60405161011c9190610e69565b60405180910390f35b61013f600480360381019061013a9190610e84565b61035c565b60405161014c9190610e3f565b60405180910390f35b61015d61038b565b60405161016a9190610ef3565b60405180910390f35b61018d60048036038101906101889190610de4565b610394565b60405161019a9190610e3f565b60405180910390f35b6101bd60048036038101906101b89190610de4565b6103cb565b005b6101d960048036038101906101d49190610f0e565b6103d9565b6040516101e69190610e69565b60405180910390f35b6101f7610421565b6040516102049190610d29565b60405180910390f35b61022760048036038101906102229190610de4565b6104b3565b6040516102349190610e3f565b60405180910390f35b61025760048036038101906102529190610de4565b61052a565b6040516102649190610e3f565b60405180910390f35b61028760048036038101906102829190610f3b565b610546565b6040516102949190610e69565b60405180910390f35b6060600380546102ac90610faa565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610faa565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105cd565b90506103478185856105d5565b600191505092915050565b6000600254905090565b6000806103676105cd565b905061037485828561079e565b61037f85858561082a565b60019150509392505050565b60006012905090565b60008061039f6105cd565b90506103c08185856103b18589610546565b6103bb919061100a565b6105d5565b600191505092915050565b6103d58282610aa0565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610faa565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610faa565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105cd565b905060006104cc8286610546565b905083811015610511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610508906110b0565b60405180910390fd5b61051e82868684036105d5565b60019250505092915050565b6000610534610bf6565b61053e8383610c6c565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90611142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa906111d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107919190610e69565b60405180910390a3505050565b60006107aa8484610546565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108245781811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611240565b60405180910390fd5b61082384848484036105d5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906112d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90611364565b60405180910390fd5b610913838383610c8f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906113f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a879190610e69565b60405180910390a3610a9a848484610c94565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690611462565b60405180910390fd5b610b1b60008383610c8f565b8060026000828254610b2d919061100a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bde9190610e69565b60405180910390a3610bf260008383610c94565b5050565b60006001905060005b620186a0811015610c57576001600283610c199190611482565b610c23919061100a565b9150600282610c3291906114f3565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610bff565b5060008103610c6957610c68611524565b5b50565b600080610c776105cd565b9050610c8481858561082a565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cd3578082015181840152602081019050610cb8565b60008484015250505050565b6000601f19601f8301169050919050565b6000610cfb82610c99565b610d058185610ca4565b9350610d15818560208601610cb5565b610d1e81610cdf565b840191505092915050565b60006020820190508181036000830152610d438184610cf0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7b82610d50565b9050919050565b610d8b81610d70565b8114610d9657600080fd5b50565b600081359050610da881610d82565b92915050565b6000819050919050565b610dc181610dae565b8114610dcc57600080fd5b50565b600081359050610dde81610db8565b92915050565b60008060408385031215610dfb57610dfa610d4b565b5b6000610e0985828601610d99565b9250506020610e1a85828601610dcf565b9150509250929050565b60008115159050919050565b610e3981610e24565b82525050565b6000602082019050610e546000830184610e30565b92915050565b610e6381610dae565b82525050565b6000602082019050610e7e6000830184610e5a565b92915050565b600080600060608486031215610e9d57610e9c610d4b565b5b6000610eab86828701610d99565b9350506020610ebc86828701610d99565b9250506040610ecd86828701610dcf565b9150509250925092565b600060ff82169050919050565b610eed81610ed7565b82525050565b6000602082019050610f086000830184610ee4565b92915050565b600060208284031215610f2457610f23610d4b565b5b6000610f3284828501610d99565b91505092915050565b60008060408385031215610f5257610f51610d4b565b5b6000610f6085828601610d99565b9250506020610f7185828601610d99565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fc257607f821691505b602082108103610fd557610fd4610f7b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101582610dae565b915061102083610dae565b925082820190508082111561103857611037610fdb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061109a602583610ca4565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061112c602483610ca4565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006111be602283610ca4565b91506111c982611162565b604082019050919050565b600060208201905081810360008301526111ed816111b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061122a601d83610ca4565b9150611235826111f4565b602082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602583610ca4565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061134e602383610ca4565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113e0602683610ca4565b91506113eb82611384565b604082019050919050565b6000602082019050818103600083015261140f816113d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061144c601f83610ca4565b915061145782611416565b602082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600061148d82610dae565b915061149883610dae565b92508282026114a681610dae565b915082820484148315176114bd576114bc610fdb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114fe82610dae565b915061150983610dae565b925082611519576115186114c4565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e76fb589ed4b1208c45aacc6133d06b5d24f6b70605a26c56b567d6154f8736764736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d29565b60405180910390f35b6100f160048036038101906100ec9190610de4565b61032f565b6040516100fe9190610e3f565b60405180910390f35b61010f610352565b60405161011c9190610e69565b60405180910390f35b61013f600480360381019061013a9190610e84565b61035c565b60405161014c9190610e3f565b60405180910390f35b61015d61038b565b60405161016a9190610ef3565b60405180910390f35b61018d60048036038101906101889190610de4565b610394565b60405161019a9190610e3f565b60405180910390f35b6101bd60048036038101906101b89190610de4565b6103cb565b005b6101d960048036038101906101d49190610f0e565b6103d9565b6040516101e69190610e69565b60405180910390f35b6101f7610421565b6040516102049190610d29565b60405180910390f35b61022760048036038101906102229190610de4565b6104b3565b6040516102349190610e3f565b60405180910390f35b61025760048036038101906102529190610de4565b61052a565b6040516102649190610e3f565b60405180910390f35b61028760048036038101906102829190610f3b565b610546565b6040516102949190610e69565b60405180910390f35b6060600380546102ac90610faa565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610faa565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105cd565b90506103478185856105d5565b600191505092915050565b6000600254905090565b6000806103676105cd565b905061037485828561079e565b61037f85858561082a565b60019150509392505050565b60006012905090565b60008061039f6105cd565b90506103c08185856103b18589610546565b6103bb919061100a565b6105d5565b600191505092915050565b6103d58282610aa0565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610faa565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610faa565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105cd565b905060006104cc8286610546565b905083811015610511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610508906110b0565b60405180910390fd5b61051e82868684036105d5565b60019250505092915050565b6000610534610bf6565b61053e8383610c6c565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90611142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa906111d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107919190610e69565b60405180910390a3505050565b60006107aa8484610546565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108245781811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611240565b60405180910390fd5b61082384848484036105d5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906112d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90611364565b60405180910390fd5b610913838383610c8f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906113f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a879190610e69565b60405180910390a3610a9a848484610c94565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690611462565b60405180910390fd5b610b1b60008383610c8f565b8060026000828254610b2d919061100a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bde9190610e69565b60405180910390a3610bf260008383610c94565b5050565b60006001905060005b620186a0811015610c57576001600283610c199190611482565b610c23919061100a565b9150600282610c3291906114f3565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610bff565b5060008103610c6957610c68611524565b5b50565b600080610c776105cd565b9050610c8481858561082a565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cd3578082015181840152602081019050610cb8565b60008484015250505050565b6000601f19601f8301169050919050565b6000610cfb82610c99565b610d058185610ca4565b9350610d15818560208601610cb5565b610d1e81610cdf565b840191505092915050565b60006020820190508181036000830152610d438184610cf0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7b82610d50565b9050919050565b610d8b81610d70565b8114610d9657600080fd5b50565b600081359050610da881610d82565b92915050565b6000819050919050565b610dc181610dae565b8114610dcc57600080fd5b50565b600081359050610dde81610db8565b92915050565b60008060408385031215610dfb57610dfa610d4b565b5b6000610e0985828601610d99565b9250506020610e1a85828601610dcf565b9150509250929050565b60008115159050919050565b610e3981610e24565b82525050565b6000602082019050610e546000830184610e30565b92915050565b610e6381610dae565b82525050565b6000602082019050610e7e6000830184610e5a565b92915050565b600080600060608486031215610e9d57610e9c610d4b565b5b6000610eab86828701610d99565b9350506020610ebc86828701610d99565b9250506040610ecd86828701610dcf565b9150509250925092565b600060ff82169050919050565b610eed81610ed7565b82525050565b6000602082019050610f086000830184610ee4565b92915050565b600060208284031215610f2457610f23610d4b565b5b6000610f3284828501610d99565b91505092915050565b60008060408385031215610f5257610f51610d4b565b5b6000610f6085828601610d99565b9250506020610f7185828601610d99565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fc257607f821691505b602082108103610fd557610fd4610f7b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101582610dae565b915061102083610dae565b925082820190508082111561103857611037610fdb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061109a602583610ca4565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061112c602483610ca4565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006111be602283610ca4565b91506111c982611162565b604082019050919050565b600060208201905081810360008301526111ed816111b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061122a601d83610ca4565b9150611235826111f4565b602082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602583610ca4565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061134e602383610ca4565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113e0602683610ca4565b91506113eb82611384565b604082019050919050565b6000602082019050818103600083015261140f816113d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061144c601f83610ca4565b915061145782611416565b602082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600061148d82610dae565b915061149883610dae565b92508282026114a681610dae565b915082820484148315176114bd576114bc610fdb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114fe82610dae565b915061150983610dae565b925082611519576115186114c4565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e76fb589ed4b1208c45aacc6133d06b5d24f6b70605a26c56b567d6154f8736764736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json new file mode 100644 index 0000000000..bc17418f19 --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json @@ -0,0 +1,403 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC20Minter", + "sourceName": "contracts/TestERC20MinterMissingFunction.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFromAuthority", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50604051620020fe380380620020fe833981810160405281019062000037919062000356565b828281600390816200004a91906200063b565b5080600490816200005c91906200063b565b5050506200007f620000736200009960201b60201c565b620000a160201b60201c565b62000090816200016760201b60201c565b50505062000722565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600560146101000a81548160ff021916908360ff16021790555050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001ee82620001a3565b810181811067ffffffffffffffff8211171562000210576200020f620001b4565b5b80604052505050565b60006200022562000185565b9050620002338282620001e3565b919050565b600067ffffffffffffffff821115620002565762000255620001b4565b5b6200026182620001a3565b9050602081019050919050565b60005b838110156200028e57808201518184015260208101905062000271565b60008484015250505050565b6000620002b1620002ab8462000238565b62000219565b905082815260208101848484011115620002d057620002cf6200019e565b5b620002dd8482856200026e565b509392505050565b600082601f830112620002fd57620002fc62000199565b5b81516200030f8482602086016200029a565b91505092915050565b600060ff82169050919050565b620003308162000318565b81146200033c57600080fd5b50565b600081519050620003508162000325565b92915050565b6000806000606084860312156200037257620003716200018f565b5b600084015167ffffffffffffffff81111562000393576200039262000194565b5b620003a186828701620002e5565b935050602084015167ffffffffffffffff811115620003c557620003c462000194565b5b620003d386828701620002e5565b9250506040620003e6868287016200033f565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044357607f821691505b602082108103620004595762000458620003fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000484565b620004cf868362000484565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051c620005166200051084620004e7565b620004f1565b620004e7565b9050919050565b6000819050919050565b6200053883620004fb565b62000550620005478262000523565b84845462000491565b825550505050565b600090565b6200056762000558565b620005748184846200052d565b505050565b5b818110156200059c57620005906000826200055d565b6001810190506200057a565b5050565b601f821115620005eb57620005b5816200045f565b620005c08462000474565b81016020851015620005d0578190505b620005e8620005df8562000474565b83018262000579565b50505b505050565b600082821c905092915050565b60006200061060001984600802620005f0565b1980831691505092915050565b60006200062b8383620005fd565b9150826002028217905092915050565b6200064682620003f0565b67ffffffffffffffff811115620006625762000661620001b4565b5b6200066e82546200042a565b6200067b828285620005a0565b600060209050601f831160018114620006b357600084156200069e578287015190505b620006aa85826200061d565b8655506200071a565b601f198416620006c3866200045f565b60005b82811015620006ed57848901518255600182019150602085019450602081019050620006c6565b868310156200070d578489015162000709601f891682620005fd565b8355505b6001600288020188555050505b505050505050565b6119cc80620007326000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b806324bd8aaf116100de57806324bd8aaf146101ac578063313ce567146101c857806339509351146101e657806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611030565b60405180910390f35b610148600480360381019061014391906110eb565b610402565b6040516101559190611146565b60405180910390f35b610166610425565b6040516101739190611170565b60405180910390f35b6101966004803603810190610191919061118b565b61042f565b6040516101a39190611146565b60405180910390f35b6101c660048036038101906101c191906110eb565b61045e565b005b6101d0610474565b6040516101dd91906111fa565b60405180910390f35b61020060048036038101906101fb91906110eb565b61048b565b60405161020d9190611146565b60405180910390f35b610230600480360381019061022b9190611215565b6104c2565b005b61024c60048036038101906102479190611242565b6104d6565b6040516102599190611170565b60405180910390f35b61026a61051e565b005b610286600480360381019061028191906110eb565b610532565b005b610290610552565b60405161029d919061127e565b60405180910390f35b6102ae61057c565b6040516102bb9190611030565b60405180910390f35b6102de60048036038101906102d991906110eb565b61060e565b6040516102eb9190611146565b60405180910390f35b61030e600480360381019061030991906110eb565b610685565b60405161031b9190611146565b60405180910390f35b61033e60048036038101906103399190611299565b6106a8565b60405161034b9190611170565b60405180910390f35b61036e60048036038101906103699190611242565b61072f565b005b60606003805461037f90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611308565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107b2565b905061041a8185856107ba565b600191505092915050565b6000600254905090565b60008061043a6107b2565b9050610447858285610983565b610452858585610a0f565b60019150509392505050565b610466610c85565b6104708282610d03565b5050565b6000600560149054906101000a900460ff16905090565b6000806104966107b2565b90506104b78185856104a885896106a8565b6104b29190611368565b6107ba565b600191505092915050565b6104d36104cd6107b2565b82610d03565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610526610c85565b6105306000610ed0565b565b6105448261053e6107b2565b83610983565b61054e8282610d03565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461058b90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790611308565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000806106196107b2565b9050600061062782866106a8565b90508381101561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061140e565b60405180910390fd5b61067982868684036107ba565b60019250505092915050565b6000806106906107b2565b905061069d818585610a0f565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610737610c85565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906114a0565b60405180910390fd5b6107af81610ed0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090611532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f906115c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109769190611170565b60405180910390a3505050565b600061098f84846106a8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a0957818110156109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f290611630565b60405180910390fd5b610a0884848484036107ba565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906116c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490611754565b60405180910390fd5b610af8838383610f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906117e6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c6c9190611170565b60405180910390a3610c7f848484610f9b565b50505050565b610c8d6107b2565b73ffffffffffffffffffffffffffffffffffffffff16610cab610552565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611852565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906118e4565b60405180910390fd5b610d7e82600083610f96565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611976565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb79190611170565b60405180910390a3610ecb83600084610f9b565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fda578082015181840152602081019050610fbf565b60008484015250505050565b6000601f19601f8301169050919050565b600061100282610fa0565b61100c8185610fab565b935061101c818560208601610fbc565b61102581610fe6565b840191505092915050565b6000602082019050818103600083015261104a8184610ff7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061108282611057565b9050919050565b61109281611077565b811461109d57600080fd5b50565b6000813590506110af81611089565b92915050565b6000819050919050565b6110c8816110b5565b81146110d357600080fd5b50565b6000813590506110e5816110bf565b92915050565b6000806040838503121561110257611101611052565b5b6000611110858286016110a0565b9250506020611121858286016110d6565b9150509250929050565b60008115159050919050565b6111408161112b565b82525050565b600060208201905061115b6000830184611137565b92915050565b61116a816110b5565b82525050565b60006020820190506111856000830184611161565b92915050565b6000806000606084860312156111a4576111a3611052565b5b60006111b2868287016110a0565b93505060206111c3868287016110a0565b92505060406111d4868287016110d6565b9150509250925092565b600060ff82169050919050565b6111f4816111de565b82525050565b600060208201905061120f60008301846111eb565b92915050565b60006020828403121561122b5761122a611052565b5b6000611239848285016110d6565b91505092915050565b60006020828403121561125857611257611052565b5b6000611266848285016110a0565b91505092915050565b61127881611077565b82525050565b6000602082019050611293600083018461126f565b92915050565b600080604083850312156112b0576112af611052565b5b60006112be858286016110a0565b92505060206112cf858286016110a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061132057607f821691505b602082108103611333576113326112d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611373826110b5565b915061137e836110b5565b925082820190508082111561139657611395611339565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006113f8602583610fab565b91506114038261139c565b604082019050919050565b60006020820190508181036000830152611427816113eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061148a602683610fab565b91506114958261142e565b604082019050919050565b600060208201905081810360008301526114b98161147d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061151c602483610fab565b9150611527826114c0565b604082019050919050565b6000602082019050818103600083015261154b8161150f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115ae602283610fab565b91506115b982611552565b604082019050919050565b600060208201905081810360008301526115dd816115a1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061161a601d83610fab565b9150611625826115e4565b602082019050919050565b600060208201905081810360008301526116498161160d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006116ac602583610fab565b91506116b782611650565b604082019050919050565b600060208201905081810360008301526116db8161169f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061173e602383610fab565b9150611749826116e2565b604082019050919050565b6000602082019050818103600083015261176d81611731565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006117d0602683610fab565b91506117db82611774565b604082019050919050565b600060208201905081810360008301526117ff816117c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061183c602083610fab565b915061184782611806565b602082019050919050565b6000602082019050818103600083015261186b8161182f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006118ce602183610fab565b91506118d982611872565b604082019050919050565b600060208201905081810360008301526118fd816118c1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611960602283610fab565b915061196b82611904565b604082019050919050565b6000602082019050818103600083015261198f81611953565b905091905056fea26469706673582212200721c690656bd73c31eacd8251486d41e4a219ce71a5395ac03a28830e9338ba64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b806324bd8aaf116100de57806324bd8aaf146101ac578063313ce567146101c857806339509351146101e657806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611030565b60405180910390f35b610148600480360381019061014391906110eb565b610402565b6040516101559190611146565b60405180910390f35b610166610425565b6040516101739190611170565b60405180910390f35b6101966004803603810190610191919061118b565b61042f565b6040516101a39190611146565b60405180910390f35b6101c660048036038101906101c191906110eb565b61045e565b005b6101d0610474565b6040516101dd91906111fa565b60405180910390f35b61020060048036038101906101fb91906110eb565b61048b565b60405161020d9190611146565b60405180910390f35b610230600480360381019061022b9190611215565b6104c2565b005b61024c60048036038101906102479190611242565b6104d6565b6040516102599190611170565b60405180910390f35b61026a61051e565b005b610286600480360381019061028191906110eb565b610532565b005b610290610552565b60405161029d919061127e565b60405180910390f35b6102ae61057c565b6040516102bb9190611030565b60405180910390f35b6102de60048036038101906102d991906110eb565b61060e565b6040516102eb9190611146565b60405180910390f35b61030e600480360381019061030991906110eb565b610685565b60405161031b9190611146565b60405180910390f35b61033e60048036038101906103399190611299565b6106a8565b60405161034b9190611170565b60405180910390f35b61036e60048036038101906103699190611242565b61072f565b005b60606003805461037f90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611308565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107b2565b905061041a8185856107ba565b600191505092915050565b6000600254905090565b60008061043a6107b2565b9050610447858285610983565b610452858585610a0f565b60019150509392505050565b610466610c85565b6104708282610d03565b5050565b6000600560149054906101000a900460ff16905090565b6000806104966107b2565b90506104b78185856104a885896106a8565b6104b29190611368565b6107ba565b600191505092915050565b6104d36104cd6107b2565b82610d03565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610526610c85565b6105306000610ed0565b565b6105448261053e6107b2565b83610983565b61054e8282610d03565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461058b90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790611308565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000806106196107b2565b9050600061062782866106a8565b90508381101561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061140e565b60405180910390fd5b61067982868684036107ba565b60019250505092915050565b6000806106906107b2565b905061069d818585610a0f565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610737610c85565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906114a0565b60405180910390fd5b6107af81610ed0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090611532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f906115c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109769190611170565b60405180910390a3505050565b600061098f84846106a8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a0957818110156109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f290611630565b60405180910390fd5b610a0884848484036107ba565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906116c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490611754565b60405180910390fd5b610af8838383610f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906117e6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c6c9190611170565b60405180910390a3610c7f848484610f9b565b50505050565b610c8d6107b2565b73ffffffffffffffffffffffffffffffffffffffff16610cab610552565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611852565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906118e4565b60405180910390fd5b610d7e82600083610f96565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611976565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb79190611170565b60405180910390a3610ecb83600084610f9b565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fda578082015181840152602081019050610fbf565b60008484015250505050565b6000601f19601f8301169050919050565b600061100282610fa0565b61100c8185610fab565b935061101c818560208601610fbc565b61102581610fe6565b840191505092915050565b6000602082019050818103600083015261104a8184610ff7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061108282611057565b9050919050565b61109281611077565b811461109d57600080fd5b50565b6000813590506110af81611089565b92915050565b6000819050919050565b6110c8816110b5565b81146110d357600080fd5b50565b6000813590506110e5816110bf565b92915050565b6000806040838503121561110257611101611052565b5b6000611110858286016110a0565b9250506020611121858286016110d6565b9150509250929050565b60008115159050919050565b6111408161112b565b82525050565b600060208201905061115b6000830184611137565b92915050565b61116a816110b5565b82525050565b60006020820190506111856000830184611161565b92915050565b6000806000606084860312156111a4576111a3611052565b5b60006111b2868287016110a0565b93505060206111c3868287016110a0565b92505060406111d4868287016110d6565b9150509250925092565b600060ff82169050919050565b6111f4816111de565b82525050565b600060208201905061120f60008301846111eb565b92915050565b60006020828403121561122b5761122a611052565b5b6000611239848285016110d6565b91505092915050565b60006020828403121561125857611257611052565b5b6000611266848285016110a0565b91505092915050565b61127881611077565b82525050565b6000602082019050611293600083018461126f565b92915050565b600080604083850312156112b0576112af611052565b5b60006112be858286016110a0565b92505060206112cf858286016110a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061132057607f821691505b602082108103611333576113326112d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611373826110b5565b915061137e836110b5565b925082820190508082111561139657611395611339565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006113f8602583610fab565b91506114038261139c565b604082019050919050565b60006020820190508181036000830152611427816113eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061148a602683610fab565b91506114958261142e565b604082019050919050565b600060208201905081810360008301526114b98161147d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061151c602483610fab565b9150611527826114c0565b604082019050919050565b6000602082019050818103600083015261154b8161150f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115ae602283610fab565b91506115b982611552565b604082019050919050565b600060208201905081810360008301526115dd816115a1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061161a601d83610fab565b9150611625826115e4565b602082019050919050565b600060208201905081810360008301526116498161160d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006116ac602583610fab565b91506116b782611650565b604082019050919050565b600060208201905081810360008301526116db8161169f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061173e602383610fab565b9150611749826116e2565b604082019050919050565b6000602082019050818103600083015261176d81611731565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006117d0602683610fab565b91506117db82611774565b604082019050919050565b600060208201905081810360008301526117ff816117c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061183c602083610fab565b915061184782611806565b602082019050919050565b6000602082019050818103600083015261186b8161182f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006118ce602183610fab565b91506118d982611872565b604082019050919050565b600060208201905081810360008301526118fd816118c1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611960602283610fab565b915061196b82611904565b604082019050919050565b6000602082019050818103600083015261198f81611953565b905091905056fea26469706673582212200721c690656bd73c31eacd8251486d41e4a219ce71a5395ac03a28830e9338ba64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json deleted file mode 100644 index d1618d814b..0000000000 --- a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json +++ /dev/null @@ -1,416 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ERC20Minter", - "sourceName": "contracts/TestERC20MinterMissingFunction.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFromAuthority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620022fd380380620022fd833981810160405281019062000037919062000356565b828281600390816200004a91906200063b565b5080600490816200005c91906200063b565b5050506200007f620000736200009960201b60201c565b620000a160201b60201c565b62000090816200016760201b60201c565b50505062000722565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600560146101000a81548160ff021916908360ff16021790555050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001ee82620001a3565b810181811067ffffffffffffffff8211171562000210576200020f620001b4565b5b80604052505050565b60006200022562000185565b9050620002338282620001e3565b919050565b600067ffffffffffffffff821115620002565762000255620001b4565b5b6200026182620001a3565b9050602081019050919050565b60005b838110156200028e57808201518184015260208101905062000271565b60008484015250505050565b6000620002b1620002ab8462000238565b62000219565b905082815260208101848484011115620002d057620002cf6200019e565b5b620002dd8482856200026e565b509392505050565b600082601f830112620002fd57620002fc62000199565b5b81516200030f8482602086016200029a565b91505092915050565b600060ff82169050919050565b620003308162000318565b81146200033c57600080fd5b50565b600081519050620003508162000325565b92915050565b6000806000606084860312156200037257620003716200018f565b5b600084015167ffffffffffffffff81111562000393576200039262000194565b5b620003a186828701620002e5565b935050602084015167ffffffffffffffff811115620003c557620003c462000194565b5b620003d386828701620002e5565b9250506040620003e6868287016200033f565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044357607f821691505b602082108103620004595762000458620003fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000484565b620004cf868362000484565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051c620005166200051084620004e7565b620004f1565b620004e7565b9050919050565b6000819050919050565b6200053883620004fb565b62000550620005478262000523565b84845462000491565b825550505050565b600090565b6200056762000558565b620005748184846200052d565b505050565b5b818110156200059c57620005906000826200055d565b6001810190506200057a565b5050565b601f821115620005eb57620005b5816200045f565b620005c08462000474565b81016020851015620005d0578190505b620005e8620005df8562000474565b83018262000579565b50505b505050565b600082821c905092915050565b60006200061060001984600802620005f0565b1980831691505092915050565b60006200062b8383620005fd565b9150826002028217905092915050565b6200064682620003f0565b67ffffffffffffffff811115620006625762000661620001b4565b5b6200066e82546200042a565b6200067b828285620005a0565b600060209050601f831160018114620006b357600084156200069e578287015190505b620006aa85826200061d565b8655506200071a565b601f198416620006c3866200045f565b60005b82811015620006ed57848901518255600182019150602085019450602081019050620006c6565b868310156200070d578489015162000709601f891682620005fd565b8355505b6001600288020188555050505b505050505050565b611bcb80620007326000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102cd578063a457c2d7146102eb578063a9059cbb1461031b578063dd62ed3e1461034b578063f2fde38b1461037b57610116565b806370a0823114610259578063715018a61461028957806379cc6790146102935780638da5cb5b146102af57610116565b806324bd8aaf116100e957806324bd8aaf146101b7578063313ce567146101d357806339509351146101f157806342966c68146102215780636a6278421461023d57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610397565b60405161013091906111c3565b60405180910390f35b610153600480360381019061014e919061127e565b610429565b60405161016091906112d9565b60405180910390f35b61017161044c565b60405161017e9190611303565b60405180910390f35b6101a1600480360381019061019c919061131e565b610456565b6040516101ae91906112d9565b60405180910390f35b6101d160048036038101906101cc919061127e565b610485565b005b6101db61049b565b6040516101e8919061138d565b60405180910390f35b61020b6004803603810190610206919061127e565b6104b2565b60405161021891906112d9565b60405180910390f35b61023b600480360381019061023691906113a8565b6104e9565b005b610257600480360381019061025291906113d5565b6104fd565b005b610273600480360381019061026e91906113d5565b610513565b6040516102809190611303565b60405180910390f35b61029161055b565b005b6102ad60048036038101906102a8919061127e565b61056f565b005b6102b761058f565b6040516102c49190611411565b60405180910390f35b6102d56105b9565b6040516102e291906111c3565b60405180910390f35b6103056004803603810190610300919061127e565b61064b565b60405161031291906112d9565b60405180910390f35b6103356004803603810190610330919061127e565b6106c2565b60405161034291906112d9565b60405180910390f35b6103656004803603810190610360919061142c565b6106e5565b6040516103729190611303565b60405180910390f35b610395600480360381019061039091906113d5565b61076c565b005b6060600380546103a69061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546103d29061149b565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050905090565b6000806104346107ef565b90506104418185856107f7565b600191505092915050565b6000600254905090565b6000806104616107ef565b905061046e8582856109c0565b610479858585610a4c565b60019150509392505050565b61048d610cc2565b6104978282610d40565b5050565b6000600560149054906101000a900460ff16905090565b6000806104bd6107ef565b90506104de8185856104cf85896106e5565b6104d991906114fb565b6107f7565b600191505092915050565b6104fa6104f46107ef565b82610d40565b50565b610505610cc2565b610510816000610f0d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610563610cc2565b61056d6000611063565b565b6105818261057b6107ef565b836109c0565b61058b8282610d40565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105c89061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061149b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000806106566107ef565b9050600061066482866106e5565b9050838110156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115a1565b60405180910390fd5b6106b682868684036107f7565b60019250505092915050565b6000806106cd6107ef565b90506106da818585610a4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610774610cc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90611633565b60405180910390fd5b6107ec81611063565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906116c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90611757565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109b39190611303565b60405180910390a3505050565b60006109cc84846106e5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465781811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906117c3565b60405180910390fd5b610a4584848484036107f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611855565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906118e7565b60405180910390fd5b610b35838383611129565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290611979565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca99190611303565b60405180910390a3610cbc84848461112e565b50505050565b610cca6107ef565b73ffffffffffffffffffffffffffffffffffffffff16610ce861058f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906119e5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690611a77565b60405180910390fd5b610dbb82600083611129565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890611b09565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ef49190611303565b60405180910390a3610f088360008461112e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390611b75565b60405180910390fd5b610f8860008383611129565b8060026000828254610f9a91906114fb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161104b9190611303565b60405180910390a361105f6000838361112e565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116d578082015181840152602081019050611152565b60008484015250505050565b6000601f19601f8301169050919050565b600061119582611133565b61119f818561113e565b93506111af81856020860161114f565b6111b881611179565b840191505092915050565b600060208201905081810360008301526111dd818461118a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611215826111ea565b9050919050565b6112258161120a565b811461123057600080fd5b50565b6000813590506112428161121c565b92915050565b6000819050919050565b61125b81611248565b811461126657600080fd5b50565b60008135905061127881611252565b92915050565b60008060408385031215611295576112946111e5565b5b60006112a385828601611233565b92505060206112b485828601611269565b9150509250929050565b60008115159050919050565b6112d3816112be565b82525050565b60006020820190506112ee60008301846112ca565b92915050565b6112fd81611248565b82525050565b600060208201905061131860008301846112f4565b92915050565b600080600060608486031215611337576113366111e5565b5b600061134586828701611233565b935050602061135686828701611233565b925050604061136786828701611269565b9150509250925092565b600060ff82169050919050565b61138781611371565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000602082840312156113be576113bd6111e5565b5b60006113cc84828501611269565b91505092915050565b6000602082840312156113eb576113ea6111e5565b5b60006113f984828501611233565b91505092915050565b61140b8161120a565b82525050565b60006020820190506114266000830184611402565b92915050565b60008060408385031215611443576114426111e5565b5b600061145185828601611233565b925050602061146285828601611233565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b357607f821691505b6020821081036114c6576114c561146c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061150682611248565b915061151183611248565b9250828201905080821115611529576115286114cc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061158b60258361113e565b91506115968261152f565b604082019050919050565b600060208201905081810360008301526115ba8161157e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061161d60268361113e565b9150611628826115c1565b604082019050919050565b6000602082019050818103600083015261164c81611610565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116af60248361113e565b91506116ba82611653565b604082019050919050565b600060208201905081810360008301526116de816116a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174160228361113e565b915061174c826116e5565b604082019050919050565b6000602082019050818103600083015261177081611734565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117ad601d8361113e565b91506117b882611777565b602082019050919050565b600060208201905081810360008301526117dc816117a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061183f60258361113e565b915061184a826117e3565b604082019050919050565b6000602082019050818103600083015261186e81611832565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118d160238361113e565b91506118dc82611875565b604082019050919050565b60006020820190508181036000830152611900816118c4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061196360268361113e565b915061196e82611907565b604082019050919050565b6000602082019050818103600083015261199281611956565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119cf60208361113e565b91506119da82611999565b602082019050919050565b600060208201905081810360008301526119fe816119c2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a6160218361113e565b9150611a6c82611a05565b604082019050919050565b60006020820190508181036000830152611a9081611a54565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611af360228361113e565b9150611afe82611a97565b604082019050919050565b60006020820190508181036000830152611b2281611ae6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b5f601f8361113e565b9150611b6a82611b29565b602082019050919050565b60006020820190508181036000830152611b8e81611b52565b905091905056fea26469706673582212203cc87c2ad2da70c9ea8dfa2305991e1a7a7ead929d1ee75bf6268a92cdac79a264736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102cd578063a457c2d7146102eb578063a9059cbb1461031b578063dd62ed3e1461034b578063f2fde38b1461037b57610116565b806370a0823114610259578063715018a61461028957806379cc6790146102935780638da5cb5b146102af57610116565b806324bd8aaf116100e957806324bd8aaf146101b7578063313ce567146101d357806339509351146101f157806342966c68146102215780636a6278421461023d57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610397565b60405161013091906111c3565b60405180910390f35b610153600480360381019061014e919061127e565b610429565b60405161016091906112d9565b60405180910390f35b61017161044c565b60405161017e9190611303565b60405180910390f35b6101a1600480360381019061019c919061131e565b610456565b6040516101ae91906112d9565b60405180910390f35b6101d160048036038101906101cc919061127e565b610485565b005b6101db61049b565b6040516101e8919061138d565b60405180910390f35b61020b6004803603810190610206919061127e565b6104b2565b60405161021891906112d9565b60405180910390f35b61023b600480360381019061023691906113a8565b6104e9565b005b610257600480360381019061025291906113d5565b6104fd565b005b610273600480360381019061026e91906113d5565b610513565b6040516102809190611303565b60405180910390f35b61029161055b565b005b6102ad60048036038101906102a8919061127e565b61056f565b005b6102b761058f565b6040516102c49190611411565b60405180910390f35b6102d56105b9565b6040516102e291906111c3565b60405180910390f35b6103056004803603810190610300919061127e565b61064b565b60405161031291906112d9565b60405180910390f35b6103356004803603810190610330919061127e565b6106c2565b60405161034291906112d9565b60405180910390f35b6103656004803603810190610360919061142c565b6106e5565b6040516103729190611303565b60405180910390f35b610395600480360381019061039091906113d5565b61076c565b005b6060600380546103a69061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546103d29061149b565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050905090565b6000806104346107ef565b90506104418185856107f7565b600191505092915050565b6000600254905090565b6000806104616107ef565b905061046e8582856109c0565b610479858585610a4c565b60019150509392505050565b61048d610cc2565b6104978282610d40565b5050565b6000600560149054906101000a900460ff16905090565b6000806104bd6107ef565b90506104de8185856104cf85896106e5565b6104d991906114fb565b6107f7565b600191505092915050565b6104fa6104f46107ef565b82610d40565b50565b610505610cc2565b610510816000610f0d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610563610cc2565b61056d6000611063565b565b6105818261057b6107ef565b836109c0565b61058b8282610d40565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105c89061149b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061149b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b6000806106566107ef565b9050600061066482866106e5565b9050838110156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a0906115a1565b60405180910390fd5b6106b682868684036107f7565b60019250505092915050565b6000806106cd6107ef565b90506106da818585610a4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610774610cc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90611633565b60405180910390fd5b6107ec81611063565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906116c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90611757565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109b39190611303565b60405180910390a3505050565b60006109cc84846106e5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465781811015610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906117c3565b60405180910390fd5b610a4584848484036107f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611855565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906118e7565b60405180910390fd5b610b35838383611129565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290611979565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ca99190611303565b60405180910390a3610cbc84848461112e565b50505050565b610cca6107ef565b73ffffffffffffffffffffffffffffffffffffffff16610ce861058f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906119e5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690611a77565b60405180910390fd5b610dbb82600083611129565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890611b09565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ef49190611303565b60405180910390a3610f088360008461112e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390611b75565b60405180910390fd5b610f8860008383611129565b8060026000828254610f9a91906114fb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161104b9190611303565b60405180910390a361105f6000838361112e565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116d578082015181840152602081019050611152565b60008484015250505050565b6000601f19601f8301169050919050565b600061119582611133565b61119f818561113e565b93506111af81856020860161114f565b6111b881611179565b840191505092915050565b600060208201905081810360008301526111dd818461118a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611215826111ea565b9050919050565b6112258161120a565b811461123057600080fd5b50565b6000813590506112428161121c565b92915050565b6000819050919050565b61125b81611248565b811461126657600080fd5b50565b60008135905061127881611252565b92915050565b60008060408385031215611295576112946111e5565b5b60006112a385828601611233565b92505060206112b485828601611269565b9150509250929050565b60008115159050919050565b6112d3816112be565b82525050565b60006020820190506112ee60008301846112ca565b92915050565b6112fd81611248565b82525050565b600060208201905061131860008301846112f4565b92915050565b600080600060608486031215611337576113366111e5565b5b600061134586828701611233565b935050602061135686828701611233565b925050604061136786828701611269565b9150509250925092565b600060ff82169050919050565b61138781611371565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000602082840312156113be576113bd6111e5565b5b60006113cc84828501611269565b91505092915050565b6000602082840312156113eb576113ea6111e5565b5b60006113f984828501611233565b91505092915050565b61140b8161120a565b82525050565b60006020820190506114266000830184611402565b92915050565b60008060408385031215611443576114426111e5565b5b600061145185828601611233565b925050602061146285828601611233565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b357607f821691505b6020821081036114c6576114c561146c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061150682611248565b915061151183611248565b9250828201905080821115611529576115286114cc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061158b60258361113e565b91506115968261152f565b604082019050919050565b600060208201905081810360008301526115ba8161157e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061161d60268361113e565b9150611628826115c1565b604082019050919050565b6000602082019050818103600083015261164c81611610565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116af60248361113e565b91506116ba82611653565b604082019050919050565b600060208201905081810360008301526116de816116a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061174160228361113e565b915061174c826116e5565b604082019050919050565b6000602082019050818103600083015261177081611734565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117ad601d8361113e565b91506117b882611777565b602082019050919050565b600060208201905081810360008301526117dc816117a0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061183f60258361113e565b915061184a826117e3565b604082019050919050565b6000602082019050818103600083015261186e81611832565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118d160238361113e565b91506118dc82611875565b604082019050919050565b60006020820190508181036000830152611900816118c4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061196360268361113e565b915061196e82611907565b604082019050919050565b6000602082019050818103600083015261199281611956565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119cf60208361113e565b91506119da82611999565b602082019050919050565b600060208201905081810360008301526119fe816119c2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a6160218361113e565b9150611a6c82611a05565b604082019050919050565b60006020820190508181036000830152611a9081611a54565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611af360228361113e565b9150611afe82611a97565b604082019050919050565b60006020820190508181036000830152611b2281611ae6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b5f601f8361113e565b9150611b6a82611b29565b602082019050919050565b60006020820190508181036000830152611b8e81611b52565b905091905056fea26469706673582212203cc87c2ad2da70c9ea8dfa2305991e1a7a7ead929d1ee75bf6268a92cdac79a264736f6c63430008180033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json b/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json index a3ad2ea1e4..5d9b893d55 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json @@ -197,6 +197,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "name", @@ -290,8 +308,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162001c7b38038062001c7b833981810160405281019062000037919062000385565b818181600390816200004a919062000655565b5080600490816200005c919062000655565b50505062000073336103e86200007b60201b60201c565b505062000857565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e4906200079d565b60405180910390fd5b6200010160008383620001e860201b60201c565b8060026000828254620001159190620007ee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001c891906200083a565b60405180910390a3620001e460008383620001ed60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025b8262000210565b810181811067ffffffffffffffff821117156200027d576200027c62000221565b5b80604052505050565b600062000292620001f2565b9050620002a0828262000250565b919050565b600067ffffffffffffffff821115620002c357620002c262000221565b5b620002ce8262000210565b9050602081019050919050565b60005b83811015620002fb578082015181840152602081019050620002de565b60008484015250505050565b60006200031e6200031884620002a5565b62000286565b9050828152602081018484840111156200033d576200033c6200020b565b5b6200034a848285620002db565b509392505050565b600082601f8301126200036a576200036962000206565b5b81516200037c84826020860162000307565b91505092915050565b600080604083850312156200039f576200039e620001fc565b5b600083015167ffffffffffffffff811115620003c057620003bf62000201565b5b620003ce8582860162000352565b925050602083015167ffffffffffffffff811115620003f257620003f162000201565b5b620004008582860162000352565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045d57607f821691505b60208210810362000473576200047262000415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049e565b620004e986836200049e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000536620005306200052a8462000501565b6200050b565b62000501565b9050919050565b6000819050919050565b620005528362000515565b6200056a62000561826200053d565b848454620004ab565b825550505050565b600090565b6200058162000572565b6200058e81848462000547565b505050565b5b81811015620005b657620005aa60008262000577565b60018101905062000594565b5050565b601f8211156200060557620005cf8162000479565b620005da846200048e565b81016020851015620005ea578190505b62000602620005f9856200048e565b83018262000593565b50505b505050565b600082821c905092915050565b60006200062a600019846008026200060a565b1980831691505092915050565b600062000645838362000617565b9150826002028217905092915050565b62000660826200040a565b67ffffffffffffffff8111156200067c576200067b62000221565b5b62000688825462000444565b62000695828285620005ba565b600060209050601f831160018114620006cd5760008415620006b8578287015190505b620006c4858262000637565b86555062000734565b601f198416620006dd8662000479565b60005b828110156200070757848901518255600182019150602085019450602081019050620006e0565b8683101562000727578489015162000723601f89168262000617565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000785601f836200073c565b915062000792826200074d565b602082019050919050565b60006020820190508181036000830152620007b88162000776565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007fb8262000501565b9150620008088362000501565b9250828201905080821115620008235762000822620007bf565b5b92915050565b620008348162000501565b82525050565b600060208201905062000851600083018462000829565b92915050565b61141480620008676000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b89565b60405180910390f35b6100e660048036038101906100e19190610c44565b610308565b6040516100f39190610c9f565b60405180910390f35b61010461032b565b6040516101119190610cc9565b60405180910390f35b610134600480360381019061012f9190610ce4565b610335565b6040516101419190610c9f565b60405180910390f35b610152610364565b60405161015f9190610d53565b60405180910390f35b610182600480360381019061017d9190610c44565b61036d565b60405161018f9190610c9f565b60405180910390f35b6101b260048036038101906101ad9190610d6e565b6103a4565b6040516101bf9190610cc9565b60405180910390f35b6101d06103ec565b6040516101dd9190610b89565b60405180910390f35b61020060048036038101906101fb9190610c44565b61047e565b60405161020d9190610c9f565b60405180910390f35b610230600480360381019061022b9190610c44565b6104f5565b60405161023d9190610c9f565b60405180910390f35b610260600480360381019061025b9190610d9b565b610595565b60405161026d9190610cc9565b60405180910390f35b60606003805461028590610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e0a565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361061c565b9050610320818585610624565b600191505092915050565b6000600254905090565b60008061034061061c565b905061034d8582856107ed565b610358858585610879565b60019150509392505050565b60006012905090565b60008061037861061c565b905061039981858561038a8589610595565b6103949190610e6a565b610624565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e0a565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961061c565b905060006104978286610595565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f10565b60405180910390fd5b6104e98286868403610624565b60019250505092915050565b60008061050061061c565b905060008311610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c90610fa2565b60405180910390fd5b60006064600a856105569190610fc2565b6105609190611033565b9050600081856105709190611064565b905061057d833084610879565b610588838783610879565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061110a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f99061119c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107e09190610cc9565b60405180910390a3505050565b60006107f98484610595565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108735781811015610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611208565b60405180910390fd5b6108728484848403610624565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df9061129a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061132c565b60405180910390fd5b610962838383610aef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906113be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad69190610cc9565b60405180910390a3610ae9848484610af4565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b33578082015181840152602081019050610b18565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b5b82610af9565b610b658185610b04565b9350610b75818560208601610b15565b610b7e81610b3f565b840191505092915050565b60006020820190508181036000830152610ba38184610b50565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bdb82610bb0565b9050919050565b610beb81610bd0565b8114610bf657600080fd5b50565b600081359050610c0881610be2565b92915050565b6000819050919050565b610c2181610c0e565b8114610c2c57600080fd5b50565b600081359050610c3e81610c18565b92915050565b60008060408385031215610c5b57610c5a610bab565b5b6000610c6985828601610bf9565b9250506020610c7a85828601610c2f565b9150509250929050565b60008115159050919050565b610c9981610c84565b82525050565b6000602082019050610cb46000830184610c90565b92915050565b610cc381610c0e565b82525050565b6000602082019050610cde6000830184610cba565b92915050565b600080600060608486031215610cfd57610cfc610bab565b5b6000610d0b86828701610bf9565b9350506020610d1c86828701610bf9565b9250506040610d2d86828701610c2f565b9150509250925092565b600060ff82169050919050565b610d4d81610d37565b82525050565b6000602082019050610d686000830184610d44565b92915050565b600060208284031215610d8457610d83610bab565b5b6000610d9284828501610bf9565b91505092915050565b60008060408385031215610db257610db1610bab565b5b6000610dc085828601610bf9565b9250506020610dd185828601610bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e2257607f821691505b602082108103610e3557610e34610ddb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7582610c0e565b9150610e8083610c0e565b9250828201905080821115610e9857610e97610e3b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610efa602583610b04565b9150610f0582610e9e565b604082019050919050565b60006020820190508181036000830152610f2981610eed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000610f8c602983610b04565b9150610f9782610f30565b604082019050919050565b60006020820190508181036000830152610fbb81610f7f565b9050919050565b6000610fcd82610c0e565b9150610fd883610c0e565b9250828202610fe681610c0e565b91508282048414831517610ffd57610ffc610e3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061103e82610c0e565b915061104983610c0e565b92508261105957611058611004565b5b828204905092915050565b600061106f82610c0e565b915061107a83610c0e565b925082820390508181111561109257611091610e3b565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110f4602483610b04565b91506110ff82611098565b604082019050919050565b60006020820190508181036000830152611123816110e7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611186602283610b04565b91506111918261112a565b604082019050919050565b600060208201905081810360008301526111b581611179565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111f2601d83610b04565b91506111fd826111bc565b602082019050919050565b60006020820190508181036000830152611221816111e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611284602583610b04565b915061128f82611228565b604082019050919050565b600060208201905081810360008301526112b381611277565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611316602383610b04565b9150611321826112ba565b604082019050919050565b6000602082019050818103600083015261134581611309565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113a8602683610b04565b91506113b38261134c565b604082019050919050565b600060208201905081810360008301526113d78161139b565b905091905056fea2646970667358221220a163955cd8b44c46d18ec3c2ccad0a81dbb6f9a839f8fde7ac6328ed63ead16d64736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b89565b60405180910390f35b6100e660048036038101906100e19190610c44565b610308565b6040516100f39190610c9f565b60405180910390f35b61010461032b565b6040516101119190610cc9565b60405180910390f35b610134600480360381019061012f9190610ce4565b610335565b6040516101419190610c9f565b60405180910390f35b610152610364565b60405161015f9190610d53565b60405180910390f35b610182600480360381019061017d9190610c44565b61036d565b60405161018f9190610c9f565b60405180910390f35b6101b260048036038101906101ad9190610d6e565b6103a4565b6040516101bf9190610cc9565b60405180910390f35b6101d06103ec565b6040516101dd9190610b89565b60405180910390f35b61020060048036038101906101fb9190610c44565b61047e565b60405161020d9190610c9f565b60405180910390f35b610230600480360381019061022b9190610c44565b6104f5565b60405161023d9190610c9f565b60405180910390f35b610260600480360381019061025b9190610d9b565b610595565b60405161026d9190610cc9565b60405180910390f35b60606003805461028590610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e0a565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361061c565b9050610320818585610624565b600191505092915050565b6000600254905090565b60008061034061061c565b905061034d8582856107ed565b610358858585610879565b60019150509392505050565b60006012905090565b60008061037861061c565b905061039981858561038a8589610595565b6103949190610e6a565b610624565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e0a565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961061c565b905060006104978286610595565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f10565b60405180910390fd5b6104e98286868403610624565b60019250505092915050565b60008061050061061c565b905060008311610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c90610fa2565b60405180910390fd5b60006064600a856105569190610fc2565b6105609190611033565b9050600081856105709190611064565b905061057d833084610879565b610588838783610879565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061110a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f99061119c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107e09190610cc9565b60405180910390a3505050565b60006107f98484610595565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108735781811015610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611208565b60405180910390fd5b6108728484848403610624565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df9061129a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061132c565b60405180910390fd5b610962838383610aef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906113be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad69190610cc9565b60405180910390a3610ae9848484610af4565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b33578082015181840152602081019050610b18565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b5b82610af9565b610b658185610b04565b9350610b75818560208601610b15565b610b7e81610b3f565b840191505092915050565b60006020820190508181036000830152610ba38184610b50565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bdb82610bb0565b9050919050565b610beb81610bd0565b8114610bf657600080fd5b50565b600081359050610c0881610be2565b92915050565b6000819050919050565b610c2181610c0e565b8114610c2c57600080fd5b50565b600081359050610c3e81610c18565b92915050565b60008060408385031215610c5b57610c5a610bab565b5b6000610c6985828601610bf9565b9250506020610c7a85828601610c2f565b9150509250929050565b60008115159050919050565b610c9981610c84565b82525050565b6000602082019050610cb46000830184610c90565b92915050565b610cc381610c0e565b82525050565b6000602082019050610cde6000830184610cba565b92915050565b600080600060608486031215610cfd57610cfc610bab565b5b6000610d0b86828701610bf9565b9350506020610d1c86828701610bf9565b9250506040610d2d86828701610c2f565b9150509250925092565b600060ff82169050919050565b610d4d81610d37565b82525050565b6000602082019050610d686000830184610d44565b92915050565b600060208284031215610d8457610d83610bab565b5b6000610d9284828501610bf9565b91505092915050565b60008060408385031215610db257610db1610bab565b5b6000610dc085828601610bf9565b9250506020610dd185828601610bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e2257607f821691505b602082108103610e3557610e34610ddb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7582610c0e565b9150610e8083610c0e565b9250828201905080821115610e9857610e97610e3b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610efa602583610b04565b9150610f0582610e9e565b604082019050919050565b60006020820190508181036000830152610f2981610eed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000610f8c602983610b04565b9150610f9782610f30565b604082019050919050565b60006020820190508181036000830152610fbb81610f7f565b9050919050565b6000610fcd82610c0e565b9150610fd883610c0e565b9250828202610fe681610c0e565b91508282048414831517610ffd57610ffc610e3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061103e82610c0e565b915061104983610c0e565b92508261105957611058611004565b5b828204905092915050565b600061106f82610c0e565b915061107a83610c0e565b925082820390508181111561109257611091610e3b565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110f4602483610b04565b91506110ff82611098565b604082019050919050565b60006020820190508181036000830152611123816110e7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611186602283610b04565b91506111918261112a565b604082019050919050565b600060208201905081810360008301526111b581611179565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111f2601d83610b04565b91506111fd826111bc565b602082019050919050565b60006020820190508181036000830152611221816111e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611284602583610b04565b915061128f82611228565b604082019050919050565b600060208201905081810360008301526112b381611277565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611316602383610b04565b9150611321826112ba565b604082019050919050565b6000602082019050818103600083015261134581611309565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113a8602683610b04565b91506113b38261134c565b604082019050919050565b600060208201905081810360008301526113d78161139b565b905091905056fea2646970667358221220a163955cd8b44c46d18ec3c2ccad0a81dbb6f9a839f8fde7ac6328ed63ead16d64736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e7238038062001e72833981810160405281019062000037919062000385565b818181600390816200004a919062000655565b5080600490816200005c919062000655565b50505062000073336103e86200007b60201b60201c565b505062000857565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e4906200079d565b60405180910390fd5b6200010160008383620001e860201b60201c565b8060026000828254620001159190620007ee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001c891906200083a565b60405180910390a3620001e460008383620001ed60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025b8262000210565b810181811067ffffffffffffffff821117156200027d576200027c62000221565b5b80604052505050565b600062000292620001f2565b9050620002a0828262000250565b919050565b600067ffffffffffffffff821115620002c357620002c262000221565b5b620002ce8262000210565b9050602081019050919050565b60005b83811015620002fb578082015181840152602081019050620002de565b60008484015250505050565b60006200031e6200031884620002a5565b62000286565b9050828152602081018484840111156200033d576200033c6200020b565b5b6200034a848285620002db565b509392505050565b600082601f8301126200036a576200036962000206565b5b81516200037c84826020860162000307565b91505092915050565b600080604083850312156200039f576200039e620001fc565b5b600083015167ffffffffffffffff811115620003c057620003bf62000201565b5b620003ce8582860162000352565b925050602083015167ffffffffffffffff811115620003f257620003f162000201565b5b620004008582860162000352565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045d57607f821691505b60208210810362000473576200047262000415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049e565b620004e986836200049e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000536620005306200052a8462000501565b6200050b565b62000501565b9050919050565b6000819050919050565b620005528362000515565b6200056a62000561826200053d565b848454620004ab565b825550505050565b600090565b6200058162000572565b6200058e81848462000547565b505050565b5b81811015620005b657620005aa60008262000577565b60018101905062000594565b5050565b601f8211156200060557620005cf8162000479565b620005da846200048e565b81016020851015620005ea578190505b62000602620005f9856200048e565b83018262000593565b50505b505050565b600082821c905092915050565b60006200062a600019846008026200060a565b1980831691505092915050565b600062000645838362000617565b9150826002028217905092915050565b62000660826200040a565b67ffffffffffffffff8111156200067c576200067b62000221565b5b62000688825462000444565b62000695828285620005ba565b600060209050601f831160018114620006cd5760008415620006b8578287015190505b620006c4858262000637565b86555062000734565b601f198416620006dd8662000479565b60005b828110156200070757848901518255600182019150602085019450602081019050620006e0565b8683101562000727578489015162000723601f89168262000617565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000785601f836200073c565b915062000792826200074d565b602082019050919050565b60006020820190508181036000830152620007b88162000776565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007fb8262000501565b9150620008088362000501565b9250828201905080821115620008235762000822620007bf565b5b92915050565b620008348162000501565b82525050565b600060208201905062000851600083018462000829565b92915050565b61160b80620008676000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d14565b60405180910390f35b6100f160048036038101906100ec9190610dcf565b61032f565b6040516100fe9190610e2a565b60405180910390f35b61010f610352565b60405161011c9190610e54565b60405180910390f35b61013f600480360381019061013a9190610e6f565b61035c565b60405161014c9190610e2a565b60405180910390f35b61015d61038b565b60405161016a9190610ede565b60405180910390f35b61018d60048036038101906101889190610dcf565b610394565b60405161019a9190610e2a565b60405180910390f35b6101bd60048036038101906101b89190610dcf565b6103cb565b005b6101d960048036038101906101d49190610ef9565b6103d9565b6040516101e69190610e54565b60405180910390f35b6101f7610421565b6040516102049190610d14565b60405180910390f35b61022760048036038101906102229190610dcf565b6104b3565b6040516102349190610e2a565b60405180910390f35b61025760048036038101906102529190610dcf565b61052a565b6040516102649190610e2a565b60405180910390f35b61028760048036038101906102829190610f26565b6105ca565b6040516102949190610e54565b60405180910390f35b6060600380546102ac90610f95565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f95565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a610651565b9050610347818585610659565b600191505092915050565b6000600254905090565b600080610367610651565b9050610374858285610822565b61037f8585856108ae565b60019150509392505050565b60006012905090565b60008061039f610651565b90506103c08185856103b185896105ca565b6103bb9190610ff5565b610659565b600191505092915050565b6103d58282610b24565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f95565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f95565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be610651565b905060006104cc82866105ca565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061109b565b60405180910390fd5b61051e8286868403610659565b60019250505092915050565b600080610535610651565b90506000831161057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105719061112d565b60405180910390fd5b60006064600a8561058b919061114d565b61059591906111be565b9050600081856105a591906111ef565b90506105b28330846108ae565b6105bd8387836108ae565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90611295565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611327565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108159190610e54565b60405180910390a3505050565b600061082e84846105ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108a8578181101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089190611393565b60405180910390fd5b6108a78484848403610659565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906114b7565b60405180910390fd5b610997838383610c7a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490611549565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b0b9190610e54565b60405180910390a3610b1e848484610c7f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906115b5565b60405180910390fd5b610b9f60008383610c7a565b8060026000828254610bb19190610ff5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c629190610e54565b60405180910390a3610c7660008383610c7f565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cbe578082015181840152602081019050610ca3565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ce682610c84565b610cf08185610c8f565b9350610d00818560208601610ca0565b610d0981610cca565b840191505092915050565b60006020820190508181036000830152610d2e8184610cdb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d6682610d3b565b9050919050565b610d7681610d5b565b8114610d8157600080fd5b50565b600081359050610d9381610d6d565b92915050565b6000819050919050565b610dac81610d99565b8114610db757600080fd5b50565b600081359050610dc981610da3565b92915050565b60008060408385031215610de657610de5610d36565b5b6000610df485828601610d84565b9250506020610e0585828601610dba565b9150509250929050565b60008115159050919050565b610e2481610e0f565b82525050565b6000602082019050610e3f6000830184610e1b565b92915050565b610e4e81610d99565b82525050565b6000602082019050610e696000830184610e45565b92915050565b600080600060608486031215610e8857610e87610d36565b5b6000610e9686828701610d84565b9350506020610ea786828701610d84565b9250506040610eb886828701610dba565b9150509250925092565b600060ff82169050919050565b610ed881610ec2565b82525050565b6000602082019050610ef36000830184610ecf565b92915050565b600060208284031215610f0f57610f0e610d36565b5b6000610f1d84828501610d84565b91505092915050565b60008060408385031215610f3d57610f3c610d36565b5b6000610f4b85828601610d84565b9250506020610f5c85828601610d84565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fad57607f821691505b602082108103610fc057610fbf610f66565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061100082610d99565b915061100b83610d99565b925082820190508082111561102357611022610fc6565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611085602583610c8f565b915061109082611029565b604082019050919050565b600060208201905081810360008301526110b481611078565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000611117602983610c8f565b9150611122826110bb565b604082019050919050565b600060208201905081810360008301526111468161110a565b9050919050565b600061115882610d99565b915061116383610d99565b925082820261117181610d99565b9150828204841483151761118857611187610fc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006111c982610d99565b91506111d483610d99565b9250826111e4576111e361118f565b5b828204905092915050565b60006111fa82610d99565b915061120583610d99565b925082820390508181111561121d5761121c610fc6565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061127f602483610c8f565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611311602283610c8f565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061137d601d83610c8f565b915061138882611347565b602082019050919050565b600060208201905081810360008301526113ac81611370565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061140f602583610c8f565b915061141a826113b3565b604082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602383610c8f565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611533602683610c8f565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061159f601f83610c8f565b91506115aa82611569565b602082019050919050565b600060208201905081810360008301526115ce81611592565b905091905056fea2646970667358221220091603a6f25927a47c9ab72aa138e21f2b14e822b0df2d0767c4b3cdf446856d64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d14565b60405180910390f35b6100f160048036038101906100ec9190610dcf565b61032f565b6040516100fe9190610e2a565b60405180910390f35b61010f610352565b60405161011c9190610e54565b60405180910390f35b61013f600480360381019061013a9190610e6f565b61035c565b60405161014c9190610e2a565b60405180910390f35b61015d61038b565b60405161016a9190610ede565b60405180910390f35b61018d60048036038101906101889190610dcf565b610394565b60405161019a9190610e2a565b60405180910390f35b6101bd60048036038101906101b89190610dcf565b6103cb565b005b6101d960048036038101906101d49190610ef9565b6103d9565b6040516101e69190610e54565b60405180910390f35b6101f7610421565b6040516102049190610d14565b60405180910390f35b61022760048036038101906102229190610dcf565b6104b3565b6040516102349190610e2a565b60405180910390f35b61025760048036038101906102529190610dcf565b61052a565b6040516102649190610e2a565b60405180910390f35b61028760048036038101906102829190610f26565b6105ca565b6040516102949190610e54565b60405180910390f35b6060600380546102ac90610f95565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f95565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a610651565b9050610347818585610659565b600191505092915050565b6000600254905090565b600080610367610651565b9050610374858285610822565b61037f8585856108ae565b60019150509392505050565b60006012905090565b60008061039f610651565b90506103c08185856103b185896105ca565b6103bb9190610ff5565b610659565b600191505092915050565b6103d58282610b24565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f95565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f95565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be610651565b905060006104cc82866105ca565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061109b565b60405180910390fd5b61051e8286868403610659565b60019250505092915050565b600080610535610651565b90506000831161057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105719061112d565b60405180910390fd5b60006064600a8561058b919061114d565b61059591906111be565b9050600081856105a591906111ef565b90506105b28330846108ae565b6105bd8387836108ae565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90611295565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611327565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108159190610e54565b60405180910390a3505050565b600061082e84846105ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108a8578181101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089190611393565b60405180910390fd5b6108a78484848403610659565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906114b7565b60405180910390fd5b610997838383610c7a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490611549565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b0b9190610e54565b60405180910390a3610b1e848484610c7f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906115b5565b60405180910390fd5b610b9f60008383610c7a565b8060026000828254610bb19190610ff5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c629190610e54565b60405180910390a3610c7660008383610c7f565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cbe578082015181840152602081019050610ca3565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ce682610c84565b610cf08185610c8f565b9350610d00818560208601610ca0565b610d0981610cca565b840191505092915050565b60006020820190508181036000830152610d2e8184610cdb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d6682610d3b565b9050919050565b610d7681610d5b565b8114610d8157600080fd5b50565b600081359050610d9381610d6d565b92915050565b6000819050919050565b610dac81610d99565b8114610db757600080fd5b50565b600081359050610dc981610da3565b92915050565b60008060408385031215610de657610de5610d36565b5b6000610df485828601610d84565b9250506020610e0585828601610dba565b9150509250929050565b60008115159050919050565b610e2481610e0f565b82525050565b6000602082019050610e3f6000830184610e1b565b92915050565b610e4e81610d99565b82525050565b6000602082019050610e696000830184610e45565b92915050565b600080600060608486031215610e8857610e87610d36565b5b6000610e9686828701610d84565b9350506020610ea786828701610d84565b9250506040610eb886828701610dba565b9150509250925092565b600060ff82169050919050565b610ed881610ec2565b82525050565b6000602082019050610ef36000830184610ecf565b92915050565b600060208284031215610f0f57610f0e610d36565b5b6000610f1d84828501610d84565b91505092915050565b60008060408385031215610f3d57610f3c610d36565b5b6000610f4b85828601610d84565b9250506020610f5c85828601610d84565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fad57607f821691505b602082108103610fc057610fbf610f66565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061100082610d99565b915061100b83610d99565b925082820190508082111561102357611022610fc6565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611085602583610c8f565b915061109082611029565b604082019050919050565b600060208201905081810360008301526110b481611078565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000611117602983610c8f565b9150611122826110bb565b604082019050919050565b600060208201905081810360008301526111468161110a565b9050919050565b600061115882610d99565b915061116383610d99565b925082820261117181610d99565b9150828204841483151761118857611187610fc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006111c982610d99565b91506111d483610d99565b9250826111e4576111e361118f565b5b828204905092915050565b60006111fa82610d99565b915061120583610d99565b925082820390508181111561121d5761121c610fc6565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061127f602483610c8f565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611311602283610c8f565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061137d601d83610c8f565b915061138882611347565b602082019050919050565b600060208201905081810360008301526113ac81611370565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061140f602583610c8f565b915061141a826113b3565b604082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602383610c8f565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611533602683610c8f565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061159f601f83610c8f565b91506115aa82611569565b602082019050919050565b600060208201905081810360008301526115ce81611592565b905091905056fea2646970667358221220091603a6f25927a47c9ab72aa138e21f2b14e822b0df2d0767c4b3cdf446856d64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/contracts/TestERC20.sol b/x/evm/embeds/contracts/TestERC20.sol index bea5328433..d73e400df6 100644 --- a/x/evm/embeds/contracts/TestERC20.sol +++ b/x/evm/embeds/contracts/TestERC20.sol @@ -2,15 +2,18 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract TestERC20 is ERC20 { - // Define the supply of TestERC20: 1,000,000 - uint256 constant initialSupply = 1000000 * (10**18); + uint256 constant initialSupply = 1000000 * (10 ** 18); // Constructor will be called on contract creation constructor() ERC20("TestERC20", "FOO") { _mint(msg.sender, initialSupply); } + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } } diff --git a/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol b/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol index 07fc636995..0e5b27688f 100644 --- a/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol +++ b/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol @@ -4,12 +4,18 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract TestERC20MaliciousTransfer is ERC20 { - constructor(string memory name, string memory symbol, uint8 decimals_) - ERC20(name, symbol) { - _mint(msg.sender, 1000000 * 10**18); + constructor( + string memory name, + string memory symbol, + uint8 decimals_ + ) ERC20(name, symbol) { + _mint(msg.sender, 1000000 * 10 ** 18); } - function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + function transfer( + address recipient, + uint256 amount + ) public virtual override returns (bool) { _gasIntensiveOperation(); return super.transfer(recipient, amount); } @@ -26,4 +32,8 @@ contract TestERC20MaliciousTransfer is ERC20 { // The result is not used, ensuring the compiler doesn't optimize this away assert(result != 0); } -} \ No newline at end of file + + function mint(address to, uint256 amount) public virtual { + _mint(to, amount); + } +} diff --git a/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol b/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol index 1edf80fe1c..d2489db36d 100644 --- a/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol +++ b/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol @@ -9,64 +9,58 @@ import "@openzeppelin/contracts/access/Ownable.sol"; /** * @dev {ERC20} token, including: * - * - an "owner" that can mint tokens + * - missing mint function * - ability for holders to burn (destroy) their tokens * * The contract owner is set automatically in the constructor as the * deployer due to "Ownable". - * + * * The Context contract is inherited indirectly through "ERC20" and "Ownable". */ contract ERC20Minter is ERC20, ERC20Burnable, Ownable { - uint8 private _decimals; - - /** - * @dev Grants "owner" status to the account that deploys the contract and - * customizes tokens decimals. - * - * See {ERC20-constructor}. - */ - constructor(string memory name, string memory symbol, uint8 decimals_) - ERC20(name, symbol) { - _setupDecimals(decimals_); - } - - /** - * @dev Sets `_decimals` as `decimals_ once at Deployment' - */ - function _setupDecimals(uint8 decimals_) private { - _decimals = decimals_; - } + uint8 private _decimals; - /** - * @dev Overrides the `decimals()` method with custom `_decimals` - */ - function decimals() public view virtual override returns (uint8) { - return _decimals; - } + /** + * @dev Grants "owner" status to the account that deploys the contract and + * customizes tokens decimals. + * + * See {ERC20-constructor}. + */ + constructor( + string memory name, + string memory symbol, + uint8 decimals_ + ) ERC20(name, symbol) { + _setupDecimals(decimals_); + } - /** - * @dev Creates `amount` new tokens for `to`. - * It's missing the amount value - * - * See {ERC20-_mint}. - * - */ - function mint(address to) public virtual onlyOwner { - _mint(to, 0); - } + /** + * @dev Sets `_decimals` as `decimals_ once at Deployment' + */ + function _setupDecimals(uint8 decimals_) private { + _decimals = decimals_; + } - /** - * @dev Destroys `amount` new tokens for `to`. Suitable when the contract owner - * should have authority to burn tokens from an account directly, such as in - * the case of regulatory compliance, or actions selected via - * decentralized governance. - * - * See {ERC20-_burn}. - * - */ - function burnFromAuthority(address from, uint256 amount) public virtual onlyOwner { - _burn(from, amount); - } + /** + * @dev Overrides the `decimals()` method with custom `_decimals` + */ + function decimals() public view virtual override returns (uint8) { + return _decimals; + } + /** + * @dev Destroys `amount` new tokens for `to`. Suitable when the contract owner + * should have authority to burn tokens from an account directly, such as in + * the case of regulatory compliance, or actions selected via + * decentralized governance. + * + * See {ERC20-_burn}. + * + */ + function burnFromAuthority( + address from, + uint256 amount + ) public virtual onlyOwner { + _burn(from, amount); + } } diff --git a/x/evm/embeds/contracts/TestERC20TransferWithFee.sol b/x/evm/embeds/contracts/TestERC20TransferWithFee.sol index e70234e328..f87b50e6da 100644 --- a/x/evm/embeds/contracts/TestERC20TransferWithFee.sol +++ b/x/evm/embeds/contracts/TestERC20TransferWithFee.sol @@ -6,12 +6,14 @@ import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract TestERC20TransferWithFee is ERC20 { uint256 constant FEE_PERCENTAGE = 10; - constructor(string memory name, string memory symbol) - ERC20(name, symbol) { + constructor(string memory name, string memory symbol) ERC20(name, symbol) { _mint(msg.sender, 1000); } - function transfer(address to, uint256 amount) public virtual override returns (bool) { + function transfer( + address to, + uint256 amount + ) public virtual override returns (bool) { address owner = _msgSender(); require(amount > 0, "Transfer amount must be greater than zero"); @@ -23,4 +25,8 @@ contract TestERC20TransferWithFee is ERC20 { return true; } + + function mint(address to, uint256 amount) public virtual { + _mint(to, amount); + } } diff --git a/x/evm/embeds/embeds.go b/x/evm/embeds/embeds.go index b461dbcfc6..1622201583 100644 --- a/x/evm/embeds/embeds.go +++ b/x/evm/embeds/embeds.go @@ -29,7 +29,7 @@ var ( testErc20MaliciousNameJson []byte //go:embed artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json testErc20MaliciousTransferJson []byte - //go:embed artifacts/contracts/TestERC20MinterMissingFunction.sol/TestERC20MinterMissingFunction.json + //go:embed artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json testErc20MissingFunctionJson []byte //go:embed artifacts/contracts/TestFunTokenPrecompileLocalGas.sol/TestFunTokenPrecompileLocalGas.json testFunTokenPrecompileLocalGasJson []byte @@ -160,6 +160,7 @@ func init() { SmartContract_TestERC20.MustLoad() SmartContract_TestERC20MaliciousName.MustLoad() SmartContract_TestERC20MaliciousTransfer.MustLoad() + SmartContract_TestERC20MissingFunction.MustLoad() SmartContract_TestFunTokenPrecompileLocalGas.MustLoad() SmartContract_TestNativeSendThenPrecompileSendJson.MustLoad() SmartContract_TestERC20TransferThenPrecompileSend.MustLoad() diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index 20259f3214..358e5f299c 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -175,6 +175,7 @@ func (k Keeper) checkErc20ImplementsAllRequired( "transferFrom", "increaseAllowance", "decreaseAllowance", + "mint", } for _, methodName := range methodNames { diff --git a/x/evm/keeper/funtoken_from_erc20_test.go b/x/evm/keeper/funtoken_from_erc20_test.go index f855e5c81c..90d5c37261 100644 --- a/x/evm/keeper/funtoken_from_erc20_test.go +++ b/x/evm/keeper/funtoken_from_erc20_test.go @@ -426,6 +426,47 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { s.Require().ErrorContains(err, "method 'transfer' not found in contract") } +// TestFunTokenInfiniteRecursionERC20 creates a funtoken from a contract +// with a malicious recursive balanceOf() and transfer() functions. +func (s *FunTokenFromErc20Suite) TestFunTokenMissingMintFunction() { + deps := evmtest.NewTestDeps() + + s.T().Log("Deploy InfiniteRecursionERC20") + metadata := keeper.ERC20Metadata{ + Name: "erc20name", + Symbol: "TOKEN", + Decimals: 18, + } + deployResp, err := evmtest.DeployContract( + &deps, embeds.SmartContract_TestERC20MissingFunction, + metadata.Name, metadata.Symbol, metadata.Decimals, + ) + s.Require().NoError(err) + + erc20Addr := eth.EIP55Addr{ + Address: deployResp.ContractAddr, + } + + s.T().Log("happy: CreateFunToken for ERC20 with infinite recursion") + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + deps.Sender.NibiruAddr, + deps.EvmKeeper.FeeForCreateFunToken(deps.Ctx), + )) + + _, err = deps.EvmKeeper.CreateFunToken( + sdk.WrapSDKContext(deps.Ctx), + &evm.MsgCreateFunToken{ + FromErc20: &erc20Addr, + Sender: deps.Sender.NibiruAddr.String(), + }, + ) + // Can't create since the gas cap will be reached for transfer function + s.Require().Error(err) + s.Require().ErrorContains(err, "method 'mint' not found in contract") +} + // TestSendERC20WithFee creates a funtoken from a malicious contract which charges a 10% fee on any transfer. // Test ensures that after sending ERC20 token to coin and back, all bank coins are burned. func (s *FunTokenFromErc20Suite) TestSendERC20WithFee() { diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go index bb76347107..ff4f53f560 100644 --- a/x/evm/keeper/validate_contract.go +++ b/x/evm/keeper/validate_contract.go @@ -94,7 +94,7 @@ func (k Keeper) HasMethodInContract( } // checkAllMethods ensure the contract at `contractAddr` has all the methods in `abiMethods`. -func (k Keeper) CheckAllethods( +func (k Keeper) CheckAllMethods( ctx context.Context, contractAddr common.Address, abiMethods []abi.Method, diff --git a/x/evm/keeper/validate_contract_test.go b/x/evm/keeper/validate_contract_test.go index 464a83afda..e4be1ba489 100644 --- a/x/evm/keeper/validate_contract_test.go +++ b/x/evm/keeper/validate_contract_test.go @@ -51,8 +51,8 @@ func TestHasMethodInContract_RealKeeper(t *testing.T) { require.False(t, hasMethod, "expected the contract to NOT have 'someFakeMethod'") } -// TestCheckAllMethods_RealKeeper uses your keeper’s checkAllethods (assuming -// you renamed it from “checkAllMethods” to a public name). +// TestCheckAllMethods_RealKeeper uses your keeper's CheckAllMethods (assuming +// you renamed it from "checkAllMethods" to a public name). func TestCheckAllMethods_RealKeeper(t *testing.T) { // Build test dependencies and context deps := evmtest.NewTestDeps() @@ -86,12 +86,12 @@ func TestCheckAllMethods_RealKeeper(t *testing.T) { // Scenario 1: "balanceOf" + "transfer" => no error allMethods := []abi.Method{balanceOfMethod, transferMethod} - err = k.CheckAllethods(ctx, deployResp.ContractAddr, allMethods) + err = k.CheckAllMethods(ctx, deployResp.ContractAddr, allMethods) require.NoError(t, err, "both balanceOf and transfer exist in standard ERC20") // Scenario 2: "balanceOf" + "fakeMethod" => we expect an error on second calls := []abi.Method{balanceOfMethod, fakeMethod} - err = k.CheckAllethods(ctx, deployResp.ContractAddr, calls) + err = k.CheckAllMethods(ctx, deployResp.ContractAddr, calls) require.Error(t, err, "contract does not have 'fakeMethod'") require.Contains(t, err.Error(), "not found in contract") From f20bc282e09f7da612c602b9f5e3e14dbc7600cf Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Fri, 31 Jan 2025 11:28:55 +0100 Subject: [PATCH 06/10] fix: remove the mint requirement --- x/evm/embeds/abi/ERC20Minter.json | 18 + .../TestERC20InvalidFunction.json | 122 ++++++ .../TestERC20MaliciousTransfer.json | 22 +- .../ERC20Minter.json | 403 ------------------ .../TestERC20MissingFunction.json | 108 +++++ .../TestERC20TransferWithFee.json | 22 +- .../contracts/TestERC20InvalidFunction.sol | 90 ++++ .../contracts/TestERC20MaliciousTransfer.sol | 4 - .../TestERC20MinterMissingFunction.sol | 66 --- .../contracts/TestERC20MissingFunction.sol | 88 ++++ .../contracts/TestERC20TransferWithFee.sol | 4 - x/evm/embeds/embeds.go | 15 +- x/evm/embeds/embeds_test.go | 1 + x/evm/keeper/funtoken_from_erc20.go | 24 +- x/evm/keeper/funtoken_from_erc20_test.go | 53 ++- 15 files changed, 501 insertions(+), 539 deletions(-) create mode 100644 x/evm/embeds/artifacts/contracts/TestERC20InvalidFunction.sol/TestERC20InvalidFunction.json delete mode 100644 x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json create mode 100644 x/evm/embeds/artifacts/contracts/TestERC20MissingFunction.sol/TestERC20MissingFunction.json create mode 100644 x/evm/embeds/contracts/TestERC20InvalidFunction.sol delete mode 100644 x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol create mode 100644 x/evm/embeds/contracts/TestERC20MissingFunction.sol diff --git a/x/evm/embeds/abi/ERC20Minter.json b/x/evm/embeds/abi/ERC20Minter.json index 10e2246655..e79d7bb1ee 100644 --- a/x/evm/embeds/abi/ERC20Minter.json +++ b/x/evm/embeds/abi/ERC20Minter.json @@ -266,6 +266,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "name", diff --git a/x/evm/embeds/artifacts/contracts/TestERC20InvalidFunction.sol/TestERC20InvalidFunction.json b/x/evm/embeds/artifacts/contracts/TestERC20InvalidFunction.sol/TestERC20InvalidFunction.json new file mode 100644 index 0000000000..9758cf2716 --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestERC20InvalidFunction.sol/TestERC20InvalidFunction.json @@ -0,0 +1,122 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestERC20InvalidFunction", + "sourceName": "contracts/TestERC20InvalidFunction.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b5060405162000bb738038062000bb783398181016040528101906200003791906200024a565b60008160ff16036200004c5760006002819055505b82600390816200005d91906200052f565b5081600490816200006f91906200052f565b5050505062000616565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000e28262000097565b810181811067ffffffffffffffff82111715620001045762000103620000a8565b5b80604052505050565b60006200011962000079565b9050620001278282620000d7565b919050565b600067ffffffffffffffff8211156200014a5762000149620000a8565b5b620001558262000097565b9050602081019050919050565b60005b838110156200018257808201518184015260208101905062000165565b60008484015250505050565b6000620001a56200019f846200012c565b6200010d565b905082815260208101848484011115620001c457620001c362000092565b5b620001d184828562000162565b509392505050565b600082601f830112620001f157620001f06200008d565b5b8151620002038482602086016200018e565b91505092915050565b600060ff82169050919050565b62000224816200020c565b81146200023057600080fd5b50565b600081519050620002448162000219565b92915050565b60008060006060848603121562000266576200026562000083565b5b600084015167ffffffffffffffff81111562000287576200028662000088565b5b6200029586828701620001d9565b935050602084015167ffffffffffffffff811115620002b957620002b862000088565b5b620002c786828701620001d9565b9250506040620002da8682870162000233565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033757607f821691505b6020821081036200034d576200034c620002ef565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000378565b620003c3868362000378565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004106200040a6200040484620003db565b620003e5565b620003db565b9050919050565b6000819050919050565b6200042c83620003ef565b620004446200043b8262000417565b84845462000385565b825550505050565b600090565b6200045b6200044c565b6200046881848462000421565b505050565b5b8181101562000490576200048460008262000451565b6001810190506200046e565b5050565b601f821115620004df57620004a98162000353565b620004b48462000368565b81016020851015620004c4578190505b620004dc620004d38562000368565b8301826200046d565b50505b505050565b600082821c905092915050565b60006200050460001984600802620004e4565b1980831691505092915050565b60006200051f8383620004f1565b9150826002028217905092915050565b6200053a82620002e4565b67ffffffffffffffff811115620005565762000555620000a8565b5b6200056282546200031e565b6200056f82828562000494565b600060209050601f831160018114620005a7576000841562000592578287015190505b6200059e858262000511565b8655506200060e565b601f198416620005b78662000353565b60005b82811015620005e157848901518255600182019150602085019450602081019050620005ba565b86831015620006015784890151620005fd601f891682620004f1565b8355505b6001600288020188555050505b505050505050565b61059180620006266000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806306fdde031461006757806318160ddd146100855780631a695230146100a3578063313ce567146100d357806370a08231146100f157806395d89b4114610121575b600080fd5b61006f61013f565b60405161007c91906103a8565b60405180910390f35b61008d6101d1565b60405161009a91906103e3565b60405180910390f35b6100bd60048036038101906100b89190610461565b6101db565b6040516100ca91906104a9565b60405180910390f35b6100db61022c565b6040516100e891906104e0565b60405180910390f35b61010b60048036038101906101069190610461565b610235565b60405161011891906103e3565b60405180910390f35b61012961027d565b60405161013691906103a8565b60405180910390f35b60606003805461014e9061052a565b80601f016020809104026020016040519081016040528092919081815260200182805461017a9061052a565b80156101c75780601f1061019c576101008083540402835291602001916101c7565b820191906000526020600020905b8154815290600101906020018083116101aa57829003601f168201915b5050505050905090565b6000600254905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102195760009050610227565b61022161030f565b50600190505b919050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461028c9061052a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b89061052a565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b5050505050905090565b60006001905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015610352578082015181840152602081019050610337565b60008484015250505050565b6000601f19601f8301169050919050565b600061037a82610318565b6103848185610323565b9350610394818560208601610334565b61039d8161035e565b840191505092915050565b600060208201905081810360008301526103c2818461036f565b905092915050565b6000819050919050565b6103dd816103ca565b82525050565b60006020820190506103f860008301846103d4565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061042e82610403565b9050919050565b61043e81610423565b811461044957600080fd5b50565b60008135905061045b81610435565b92915050565b600060208284031215610477576104766103fe565b5b60006104858482850161044c565b91505092915050565b60008115159050919050565b6104a38161048e565b82525050565b60006020820190506104be600083018461049a565b92915050565b600060ff82169050919050565b6104da816104c4565b82525050565b60006020820190506104f560008301846104d1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061054257607f821691505b602082108103610555576105546104fb565b5b5091905056fea264697066735822122013bee8b5d8399b122519fbc165a574256b89d0c16b256a8d0326eddc9ef5546364736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806306fdde031461006757806318160ddd146100855780631a695230146100a3578063313ce567146100d357806370a08231146100f157806395d89b4114610121575b600080fd5b61006f61013f565b60405161007c91906103a8565b60405180910390f35b61008d6101d1565b60405161009a91906103e3565b60405180910390f35b6100bd60048036038101906100b89190610461565b6101db565b6040516100ca91906104a9565b60405180910390f35b6100db61022c565b6040516100e891906104e0565b60405180910390f35b61010b60048036038101906101069190610461565b610235565b60405161011891906103e3565b60405180910390f35b61012961027d565b60405161013691906103a8565b60405180910390f35b60606003805461014e9061052a565b80601f016020809104026020016040519081016040528092919081815260200182805461017a9061052a565b80156101c75780601f1061019c576101008083540402835291602001916101c7565b820191906000526020600020905b8154815290600101906020018083116101aa57829003601f168201915b5050505050905090565b6000600254905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102195760009050610227565b61022161030f565b50600190505b919050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461028c9061052a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b89061052a565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b5050505050905090565b60006001905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015610352578082015181840152602081019050610337565b60008484015250505050565b6000601f19601f8301169050919050565b600061037a82610318565b6103848185610323565b9350610394818560208601610334565b61039d8161035e565b840191505092915050565b600060208201905081810360008301526103c2818461036f565b905092915050565b6000819050919050565b6103dd816103ca565b82525050565b60006020820190506103f860008301846103d4565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061042e82610403565b9050919050565b61043e81610423565b811461044957600080fd5b50565b60008135905061045b81610435565b92915050565b600060208284031215610477576104766103fe565b5b60006104858482850161044c565b91505092915050565b60008115159050919050565b6104a38161048e565b82525050565b60006020820190506104be600083018461049a565b92915050565b600060ff82169050919050565b6104da816104c4565b82525050565b60006020820190506104f560008301846104d1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061054257607f821691505b602082108103610555576105546104fb565b5b5091905056fea264697066735822122013bee8b5d8399b122519fbc165a574256b89d0c16b256a8d0326eddc9ef5546364736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json b/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json index c5b66cd45a..a8b650a52e 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json @@ -202,24 +202,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "name", @@ -313,8 +295,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e4c38038062001e4c8339818101604052810190620000379190620003cc565b828281600390816200004a9190620006b1565b5080600490816200005c9190620006b1565b5050506200007b3369d3c21bcecceda10000006200008460201b60201c565b505050620008b3565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620007f9565b60405180910390fd5b6200010a60008383620001f160201b60201c565b80600260008282546200011e91906200084a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d1919062000896565b60405180910390a3620001ed60008383620001f660201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002648262000219565b810181811067ffffffffffffffff821117156200028657620002856200022a565b5b80604052505050565b60006200029b620001fb565b9050620002a9828262000259565b919050565b600067ffffffffffffffff821115620002cc57620002cb6200022a565b5b620002d78262000219565b9050602081019050919050565b60005b8381101562000304578082015181840152602081019050620002e7565b60008484015250505050565b6000620003276200032184620002ae565b6200028f565b90508281526020810184848401111562000346576200034562000214565b5b62000353848285620002e4565b509392505050565b600082601f8301126200037357620003726200020f565b5b81516200038584826020860162000310565b91505092915050565b600060ff82169050919050565b620003a6816200038e565b8114620003b257600080fd5b50565b600081519050620003c6816200039b565b92915050565b600080600060608486031215620003e857620003e762000205565b5b600084015167ffffffffffffffff8111156200040957620004086200020a565b5b62000417868287016200035b565b935050602084015167ffffffffffffffff8111156200043b576200043a6200020a565b5b62000449868287016200035b565b92505060406200045c86828701620003b5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b957607f821691505b602082108103620004cf57620004ce62000471565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004fa565b620005458683620004fa565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005926200058c62000586846200055d565b62000567565b6200055d565b9050919050565b6000819050919050565b620005ae8362000571565b620005c6620005bd8262000599565b84845462000507565b825550505050565b600090565b620005dd620005ce565b620005ea818484620005a3565b505050565b5b81811015620006125762000606600082620005d3565b600181019050620005f0565b5050565b601f82111562000661576200062b81620004d5565b6200063684620004ea565b8101602085101562000646578190505b6200065e6200065585620004ea565b830182620005ef565b50505b505050565b600082821c905092915050565b6000620006866000198460080262000666565b1980831691505092915050565b6000620006a1838362000673565b9150826002028217905092915050565b620006bc8262000466565b67ffffffffffffffff811115620006d857620006d76200022a565b5b620006e48254620004a0565b620006f182828562000616565b600060209050601f83116001811462000729576000841562000714578287015190505b62000720858262000693565b86555062000790565b601f1984166200073986620004d5565b60005b8281101562000763578489015182556001820191506020850194506020810190506200073c565b868310156200078357848901516200077f601f89168262000673565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007e1601f8362000798565b9150620007ee82620007a9565b602082019050919050565b600060208201905081810360008301526200081481620007d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000857826200055d565b915062000864836200055d565b92508282019050808211156200087f576200087e6200081b565b5b92915050565b62000890816200055d565b82525050565b6000602082019050620008ad600083018462000885565b92915050565b61158980620008c36000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d29565b60405180910390f35b6100f160048036038101906100ec9190610de4565b61032f565b6040516100fe9190610e3f565b60405180910390f35b61010f610352565b60405161011c9190610e69565b60405180910390f35b61013f600480360381019061013a9190610e84565b61035c565b60405161014c9190610e3f565b60405180910390f35b61015d61038b565b60405161016a9190610ef3565b60405180910390f35b61018d60048036038101906101889190610de4565b610394565b60405161019a9190610e3f565b60405180910390f35b6101bd60048036038101906101b89190610de4565b6103cb565b005b6101d960048036038101906101d49190610f0e565b6103d9565b6040516101e69190610e69565b60405180910390f35b6101f7610421565b6040516102049190610d29565b60405180910390f35b61022760048036038101906102229190610de4565b6104b3565b6040516102349190610e3f565b60405180910390f35b61025760048036038101906102529190610de4565b61052a565b6040516102649190610e3f565b60405180910390f35b61028760048036038101906102829190610f3b565b610546565b6040516102949190610e69565b60405180910390f35b6060600380546102ac90610faa565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610faa565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105cd565b90506103478185856105d5565b600191505092915050565b6000600254905090565b6000806103676105cd565b905061037485828561079e565b61037f85858561082a565b60019150509392505050565b60006012905090565b60008061039f6105cd565b90506103c08185856103b18589610546565b6103bb919061100a565b6105d5565b600191505092915050565b6103d58282610aa0565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610faa565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610faa565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105cd565b905060006104cc8286610546565b905083811015610511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610508906110b0565b60405180910390fd5b61051e82868684036105d5565b60019250505092915050565b6000610534610bf6565b61053e8383610c6c565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90611142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa906111d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107919190610e69565b60405180910390a3505050565b60006107aa8484610546565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108245781811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611240565b60405180910390fd5b61082384848484036105d5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906112d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90611364565b60405180910390fd5b610913838383610c8f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906113f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a879190610e69565b60405180910390a3610a9a848484610c94565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690611462565b60405180910390fd5b610b1b60008383610c8f565b8060026000828254610b2d919061100a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bde9190610e69565b60405180910390a3610bf260008383610c94565b5050565b60006001905060005b620186a0811015610c57576001600283610c199190611482565b610c23919061100a565b9150600282610c3291906114f3565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610bff565b5060008103610c6957610c68611524565b5b50565b600080610c776105cd565b9050610c8481858561082a565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cd3578082015181840152602081019050610cb8565b60008484015250505050565b6000601f19601f8301169050919050565b6000610cfb82610c99565b610d058185610ca4565b9350610d15818560208601610cb5565b610d1e81610cdf565b840191505092915050565b60006020820190508181036000830152610d438184610cf0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7b82610d50565b9050919050565b610d8b81610d70565b8114610d9657600080fd5b50565b600081359050610da881610d82565b92915050565b6000819050919050565b610dc181610dae565b8114610dcc57600080fd5b50565b600081359050610dde81610db8565b92915050565b60008060408385031215610dfb57610dfa610d4b565b5b6000610e0985828601610d99565b9250506020610e1a85828601610dcf565b9150509250929050565b60008115159050919050565b610e3981610e24565b82525050565b6000602082019050610e546000830184610e30565b92915050565b610e6381610dae565b82525050565b6000602082019050610e7e6000830184610e5a565b92915050565b600080600060608486031215610e9d57610e9c610d4b565b5b6000610eab86828701610d99565b9350506020610ebc86828701610d99565b9250506040610ecd86828701610dcf565b9150509250925092565b600060ff82169050919050565b610eed81610ed7565b82525050565b6000602082019050610f086000830184610ee4565b92915050565b600060208284031215610f2457610f23610d4b565b5b6000610f3284828501610d99565b91505092915050565b60008060408385031215610f5257610f51610d4b565b5b6000610f6085828601610d99565b9250506020610f7185828601610d99565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fc257607f821691505b602082108103610fd557610fd4610f7b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101582610dae565b915061102083610dae565b925082820190508082111561103857611037610fdb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061109a602583610ca4565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061112c602483610ca4565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006111be602283610ca4565b91506111c982611162565b604082019050919050565b600060208201905081810360008301526111ed816111b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061122a601d83610ca4565b9150611235826111f4565b602082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602583610ca4565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061134e602383610ca4565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113e0602683610ca4565b91506113eb82611384565b604082019050919050565b6000602082019050818103600083015261140f816113d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061144c601f83610ca4565b915061145782611416565b602082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600061148d82610dae565b915061149883610dae565b92508282026114a681610dae565b915082820484148315176114bd576114bc610fdb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114fe82610dae565b915061150983610dae565b925082611519576115186114c4565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e76fb589ed4b1208c45aacc6133d06b5d24f6b70605a26c56b567d6154f8736764736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d29565b60405180910390f35b6100f160048036038101906100ec9190610de4565b61032f565b6040516100fe9190610e3f565b60405180910390f35b61010f610352565b60405161011c9190610e69565b60405180910390f35b61013f600480360381019061013a9190610e84565b61035c565b60405161014c9190610e3f565b60405180910390f35b61015d61038b565b60405161016a9190610ef3565b60405180910390f35b61018d60048036038101906101889190610de4565b610394565b60405161019a9190610e3f565b60405180910390f35b6101bd60048036038101906101b89190610de4565b6103cb565b005b6101d960048036038101906101d49190610f0e565b6103d9565b6040516101e69190610e69565b60405180910390f35b6101f7610421565b6040516102049190610d29565b60405180910390f35b61022760048036038101906102229190610de4565b6104b3565b6040516102349190610e3f565b60405180910390f35b61025760048036038101906102529190610de4565b61052a565b6040516102649190610e3f565b60405180910390f35b61028760048036038101906102829190610f3b565b610546565b6040516102949190610e69565b60405180910390f35b6060600380546102ac90610faa565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610faa565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105cd565b90506103478185856105d5565b600191505092915050565b6000600254905090565b6000806103676105cd565b905061037485828561079e565b61037f85858561082a565b60019150509392505050565b60006012905090565b60008061039f6105cd565b90506103c08185856103b18589610546565b6103bb919061100a565b6105d5565b600191505092915050565b6103d58282610aa0565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610faa565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610faa565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105cd565b905060006104cc8286610546565b905083811015610511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610508906110b0565b60405180910390fd5b61051e82868684036105d5565b60019250505092915050565b6000610534610bf6565b61053e8383610c6c565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90611142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa906111d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107919190610e69565b60405180910390a3505050565b60006107aa8484610546565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108245781811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d90611240565b60405180910390fd5b61082384848484036105d5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906112d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90611364565b60405180910390fd5b610913838383610c8f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610990906113f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a879190610e69565b60405180910390a3610a9a848484610c94565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690611462565b60405180910390fd5b610b1b60008383610c8f565b8060026000828254610b2d919061100a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bde9190610e69565b60405180910390a3610bf260008383610c94565b5050565b60006001905060005b620186a0811015610c57576001600283610c199190611482565b610c23919061100a565b9150600282610c3291906114f3565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610bff565b5060008103610c6957610c68611524565b5b50565b600080610c776105cd565b9050610c8481858561082a565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cd3578082015181840152602081019050610cb8565b60008484015250505050565b6000601f19601f8301169050919050565b6000610cfb82610c99565b610d058185610ca4565b9350610d15818560208601610cb5565b610d1e81610cdf565b840191505092915050565b60006020820190508181036000830152610d438184610cf0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7b82610d50565b9050919050565b610d8b81610d70565b8114610d9657600080fd5b50565b600081359050610da881610d82565b92915050565b6000819050919050565b610dc181610dae565b8114610dcc57600080fd5b50565b600081359050610dde81610db8565b92915050565b60008060408385031215610dfb57610dfa610d4b565b5b6000610e0985828601610d99565b9250506020610e1a85828601610dcf565b9150509250929050565b60008115159050919050565b610e3981610e24565b82525050565b6000602082019050610e546000830184610e30565b92915050565b610e6381610dae565b82525050565b6000602082019050610e7e6000830184610e5a565b92915050565b600080600060608486031215610e9d57610e9c610d4b565b5b6000610eab86828701610d99565b9350506020610ebc86828701610d99565b9250506040610ecd86828701610dcf565b9150509250925092565b600060ff82169050919050565b610eed81610ed7565b82525050565b6000602082019050610f086000830184610ee4565b92915050565b600060208284031215610f2457610f23610d4b565b5b6000610f3284828501610d99565b91505092915050565b60008060408385031215610f5257610f51610d4b565b5b6000610f6085828601610d99565b9250506020610f7185828601610d99565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fc257607f821691505b602082108103610fd557610fd4610f7b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061101582610dae565b915061102083610dae565b925082820190508082111561103857611037610fdb565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061109a602583610ca4565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061112c602483610ca4565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006111be602283610ca4565b91506111c982611162565b604082019050919050565b600060208201905081810360008301526111ed816111b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061122a601d83610ca4565b9150611235826111f4565b602082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602583610ca4565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061134e602383610ca4565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113e0602683610ca4565b91506113eb82611384565b604082019050919050565b6000602082019050818103600083015261140f816113d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061144c601f83610ca4565b915061145782611416565b602082019050919050565b6000602082019050818103600083015261147b8161143f565b9050919050565b600061148d82610dae565b915061149883610dae565b92508282026114a681610dae565b915082820484148315176114bd576114bc610fdb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006114fe82610dae565b915061150983610dae565b925082611519576115186114c4565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e76fb589ed4b1208c45aacc6133d06b5d24f6b70605a26c56b567d6154f8736764736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162001c5538038062001c558339818101604052810190620000379190620003cc565b828281600390816200004a9190620006b1565b5080600490816200005c9190620006b1565b5050506200007b3369d3c21bcecceda10000006200008460201b60201c565b505050620008b3565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620007f9565b60405180910390fd5b6200010a60008383620001f160201b60201c565b80600260008282546200011e91906200084a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d1919062000896565b60405180910390a3620001ed60008383620001f660201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002648262000219565b810181811067ffffffffffffffff821117156200028657620002856200022a565b5b80604052505050565b60006200029b620001fb565b9050620002a9828262000259565b919050565b600067ffffffffffffffff821115620002cc57620002cb6200022a565b5b620002d78262000219565b9050602081019050919050565b60005b8381101562000304578082015181840152602081019050620002e7565b60008484015250505050565b6000620003276200032184620002ae565b6200028f565b90508281526020810184848401111562000346576200034562000214565b5b62000353848285620002e4565b509392505050565b600082601f8301126200037357620003726200020f565b5b81516200038584826020860162000310565b91505092915050565b600060ff82169050919050565b620003a6816200038e565b8114620003b257600080fd5b50565b600081519050620003c6816200039b565b92915050565b600080600060608486031215620003e857620003e762000205565b5b600084015167ffffffffffffffff8111156200040957620004086200020a565b5b62000417868287016200035b565b935050602084015167ffffffffffffffff8111156200043b576200043a6200020a565b5b62000449868287016200035b565b92505060406200045c86828701620003b5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b957607f821691505b602082108103620004cf57620004ce62000471565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004fa565b620005458683620004fa565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005926200058c62000586846200055d565b62000567565b6200055d565b9050919050565b6000819050919050565b620005ae8362000571565b620005c6620005bd8262000599565b84845462000507565b825550505050565b600090565b620005dd620005ce565b620005ea818484620005a3565b505050565b5b81811015620006125762000606600082620005d3565b600181019050620005f0565b5050565b601f82111562000661576200062b81620004d5565b6200063684620004ea565b8101602085101562000646578190505b6200065e6200065585620004ea565b830182620005ef565b50505b505050565b600082821c905092915050565b6000620006866000198460080262000666565b1980831691505092915050565b6000620006a1838362000673565b9150826002028217905092915050565b620006bc8262000466565b67ffffffffffffffff811115620006d857620006d76200022a565b5b620006e48254620004a0565b620006f182828562000616565b600060209050601f83116001811462000729576000841562000714578287015190505b62000720858262000693565b86555062000790565b601f1984166200073986620004d5565b60005b8281101562000763578489015182556001820191506020850194506020810190506200073c565b868310156200078357848901516200077f601f89168262000673565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007e1601f8362000798565b9150620007ee82620007a9565b602082019050919050565b600060208201905081810360008301526200081481620007d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000857826200055d565b915062000864836200055d565b92508282019050808211156200087f576200087e6200081b565b5b92915050565b62000890816200055d565b82525050565b6000602082019050620008ad600083018462000885565b92915050565b61139280620008c36000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b9e565b60405180910390f35b6100e660048036038101906100e19190610c59565b610308565b6040516100f39190610cb4565b60405180910390f35b61010461032b565b6040516101119190610cde565b60405180910390f35b610134600480360381019061012f9190610cf9565b610335565b6040516101419190610cb4565b60405180910390f35b610152610364565b60405161015f9190610d68565b60405180910390f35b610182600480360381019061017d9190610c59565b61036d565b60405161018f9190610cb4565b60405180910390f35b6101b260048036038101906101ad9190610d83565b6103a4565b6040516101bf9190610cde565b60405180910390f35b6101d06103ec565b6040516101dd9190610b9e565b60405180910390f35b61020060048036038101906101fb9190610c59565b61047e565b60405161020d9190610cb4565b60405180910390f35b610230600480360381019061022b9190610c59565b6104f5565b60405161023d9190610cb4565b60405180910390f35b610260600480360381019061025b9190610db0565b610511565b60405161026d9190610cde565b60405180910390f35b60606003805461028590610e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e1f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610598565b90506103208185856105a0565b600191505092915050565b6000600254905090565b600080610340610598565b905061034d858285610769565b6103588585856107f5565b60019150509392505050565b60006012905090565b600080610378610598565b905061039981858561038a8589610511565b6103949190610e7f565b6105a0565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e1f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e1f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b600080610489610598565b905060006104978286610511565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f25565b60405180910390fd5b6104e982868684036105a0565b60019250505092915050565b60006104ff610a6b565b6105098383610ae1565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610fb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590611049565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161075c9190610cde565b60405180910390a3505050565b60006107758484610511565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107ef57818110156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906110b5565b60405180910390fd5b6107ee84848484036105a0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90611147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca906111d9565b60405180910390fd5b6108de838383610b04565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061126b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a529190610cde565b60405180910390a3610a65848484610b09565b50505050565b60006001905060005b620186a0811015610acc576001600283610a8e919061128b565b610a989190610e7f565b9150600282610aa791906112fc565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610a74565b5060008103610ade57610add61132d565b5b50565b600080610aec610598565b9050610af98185856107f5565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b48578082015181840152602081019050610b2d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7082610b0e565b610b7a8185610b19565b9350610b8a818560208601610b2a565b610b9381610b54565b840191505092915050565b60006020820190508181036000830152610bb88184610b65565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bf082610bc5565b9050919050565b610c0081610be5565b8114610c0b57600080fd5b50565b600081359050610c1d81610bf7565b92915050565b6000819050919050565b610c3681610c23565b8114610c4157600080fd5b50565b600081359050610c5381610c2d565b92915050565b60008060408385031215610c7057610c6f610bc0565b5b6000610c7e85828601610c0e565b9250506020610c8f85828601610c44565b9150509250929050565b60008115159050919050565b610cae81610c99565b82525050565b6000602082019050610cc96000830184610ca5565b92915050565b610cd881610c23565b82525050565b6000602082019050610cf36000830184610ccf565b92915050565b600080600060608486031215610d1257610d11610bc0565b5b6000610d2086828701610c0e565b9350506020610d3186828701610c0e565b9250506040610d4286828701610c44565b9150509250925092565b600060ff82169050919050565b610d6281610d4c565b82525050565b6000602082019050610d7d6000830184610d59565b92915050565b600060208284031215610d9957610d98610bc0565b5b6000610da784828501610c0e565b91505092915050565b60008060408385031215610dc757610dc6610bc0565b5b6000610dd585828601610c0e565b9250506020610de685828601610c0e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3757607f821691505b602082108103610e4a57610e49610df0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e8a82610c23565b9150610e9583610c23565b9250828201905080821115610ead57610eac610e50565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602583610b19565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602483610b19565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611033602283610b19565b915061103e82610fd7565b604082019050919050565b6000602082019050818103600083015261106281611026565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061109f601d83610b19565b91506110aa82611069565b602082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611131602583610b19565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006111c3602383610b19565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611255602683610b19565b9150611260826111f9565b604082019050919050565b6000602082019050818103600083015261128481611248565b9050919050565b600061129682610c23565b91506112a183610c23565b92508282026112af81610c23565b915082820484148315176112c6576112c5610e50565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130782610c23565b915061131283610c23565b925082611322576113216112cd565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220ea3c15829e321d0ee1e74118ada7f0f5736aa9d02213b2cce3e1120a0f67557764736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b9e565b60405180910390f35b6100e660048036038101906100e19190610c59565b610308565b6040516100f39190610cb4565b60405180910390f35b61010461032b565b6040516101119190610cde565b60405180910390f35b610134600480360381019061012f9190610cf9565b610335565b6040516101419190610cb4565b60405180910390f35b610152610364565b60405161015f9190610d68565b60405180910390f35b610182600480360381019061017d9190610c59565b61036d565b60405161018f9190610cb4565b60405180910390f35b6101b260048036038101906101ad9190610d83565b6103a4565b6040516101bf9190610cde565b60405180910390f35b6101d06103ec565b6040516101dd9190610b9e565b60405180910390f35b61020060048036038101906101fb9190610c59565b61047e565b60405161020d9190610cb4565b60405180910390f35b610230600480360381019061022b9190610c59565b6104f5565b60405161023d9190610cb4565b60405180910390f35b610260600480360381019061025b9190610db0565b610511565b60405161026d9190610cde565b60405180910390f35b60606003805461028590610e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e1f565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b600080610313610598565b90506103208185856105a0565b600191505092915050565b6000600254905090565b600080610340610598565b905061034d858285610769565b6103588585856107f5565b60019150509392505050565b60006012905090565b600080610378610598565b905061039981858561038a8589610511565b6103949190610e7f565b6105a0565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e1f565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e1f565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b600080610489610598565b905060006104978286610511565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f25565b60405180910390fd5b6104e982868684036105a0565b60019250505092915050565b60006104ff610a6b565b6105098383610ae1565b905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610fb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590611049565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161075c9190610cde565b60405180910390a3505050565b60006107758484610511565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107ef57818110156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d8906110b5565b60405180910390fd5b6107ee84848484036105a0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90611147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca906111d9565b60405180910390fd5b6108de838383610b04565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061126b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a529190610cde565b60405180910390a3610a65848484610b09565b50505050565b60006001905060005b620186a0811015610acc576001600283610a8e919061128b565b610a989190610e7f565b9150600282610aa791906112fc565b9150600182901b8218915067ffffffffffffffff821691508080600101915050610a74565b5060008103610ade57610add61132d565b5b50565b600080610aec610598565b9050610af98185856107f5565b600191505092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b48578082015181840152602081019050610b2d565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7082610b0e565b610b7a8185610b19565b9350610b8a818560208601610b2a565b610b9381610b54565b840191505092915050565b60006020820190508181036000830152610bb88184610b65565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bf082610bc5565b9050919050565b610c0081610be5565b8114610c0b57600080fd5b50565b600081359050610c1d81610bf7565b92915050565b6000819050919050565b610c3681610c23565b8114610c4157600080fd5b50565b600081359050610c5381610c2d565b92915050565b60008060408385031215610c7057610c6f610bc0565b5b6000610c7e85828601610c0e565b9250506020610c8f85828601610c44565b9150509250929050565b60008115159050919050565b610cae81610c99565b82525050565b6000602082019050610cc96000830184610ca5565b92915050565b610cd881610c23565b82525050565b6000602082019050610cf36000830184610ccf565b92915050565b600080600060608486031215610d1257610d11610bc0565b5b6000610d2086828701610c0e565b9350506020610d3186828701610c0e565b9250506040610d4286828701610c44565b9150509250925092565b600060ff82169050919050565b610d6281610d4c565b82525050565b6000602082019050610d7d6000830184610d59565b92915050565b600060208284031215610d9957610d98610bc0565b5b6000610da784828501610c0e565b91505092915050565b60008060408385031215610dc757610dc6610bc0565b5b6000610dd585828601610c0e565b9250506020610de685828601610c0e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3757607f821691505b602082108103610e4a57610e49610df0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e8a82610c23565b9150610e9583610c23565b9250828201905080821115610ead57610eac610e50565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602583610b19565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602483610b19565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611033602283610b19565b915061103e82610fd7565b604082019050919050565b6000602082019050818103600083015261106281611026565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061109f601d83610b19565b91506110aa82611069565b602082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611131602583610b19565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006111c3602383610b19565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611255602683610b19565b9150611260826111f9565b604082019050919050565b6000602082019050818103600083015261128481611248565b9050919050565b600061129682610c23565b91506112a183610c23565b92508282026112af81610c23565b915082820484148315176112c6576112c5610e50565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130782610c23565b915061131283610c23565b925082611322576113216112cd565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220ea3c15829e321d0ee1e74118ada7f0f5736aa9d02213b2cce3e1120a0f67557764736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json b/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json deleted file mode 100644 index bc17418f19..0000000000 --- a/x/evm/embeds/artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json +++ /dev/null @@ -1,403 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ERC20Minter", - "sourceName": "contracts/TestERC20MinterMissingFunction.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFromAuthority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620020fe380380620020fe833981810160405281019062000037919062000356565b828281600390816200004a91906200063b565b5080600490816200005c91906200063b565b5050506200007f620000736200009960201b60201c565b620000a160201b60201c565b62000090816200016760201b60201c565b50505062000722565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600560146101000a81548160ff021916908360ff16021790555050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001ee82620001a3565b810181811067ffffffffffffffff8211171562000210576200020f620001b4565b5b80604052505050565b60006200022562000185565b9050620002338282620001e3565b919050565b600067ffffffffffffffff821115620002565762000255620001b4565b5b6200026182620001a3565b9050602081019050919050565b60005b838110156200028e57808201518184015260208101905062000271565b60008484015250505050565b6000620002b1620002ab8462000238565b62000219565b905082815260208101848484011115620002d057620002cf6200019e565b5b620002dd8482856200026e565b509392505050565b600082601f830112620002fd57620002fc62000199565b5b81516200030f8482602086016200029a565b91505092915050565b600060ff82169050919050565b620003308162000318565b81146200033c57600080fd5b50565b600081519050620003508162000325565b92915050565b6000806000606084860312156200037257620003716200018f565b5b600084015167ffffffffffffffff81111562000393576200039262000194565b5b620003a186828701620002e5565b935050602084015167ffffffffffffffff811115620003c557620003c462000194565b5b620003d386828701620002e5565b9250506040620003e6868287016200033f565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044357607f821691505b602082108103620004595762000458620003fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000484565b620004cf868362000484565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051c620005166200051084620004e7565b620004f1565b620004e7565b9050919050565b6000819050919050565b6200053883620004fb565b62000550620005478262000523565b84845462000491565b825550505050565b600090565b6200056762000558565b620005748184846200052d565b505050565b5b818110156200059c57620005906000826200055d565b6001810190506200057a565b5050565b601f821115620005eb57620005b5816200045f565b620005c08462000474565b81016020851015620005d0578190505b620005e8620005df8562000474565b83018262000579565b50505b505050565b600082821c905092915050565b60006200061060001984600802620005f0565b1980831691505092915050565b60006200062b8383620005fd565b9150826002028217905092915050565b6200064682620003f0565b67ffffffffffffffff811115620006625762000661620001b4565b5b6200066e82546200042a565b6200067b828285620005a0565b600060209050601f831160018114620006b357600084156200069e578287015190505b620006aa85826200061d565b8655506200071a565b601f198416620006c3866200045f565b60005b82811015620006ed57848901518255600182019150602085019450602081019050620006c6565b868310156200070d578489015162000709601f891682620005fd565b8355505b6001600288020188555050505b505050505050565b6119cc80620007326000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b806324bd8aaf116100de57806324bd8aaf146101ac578063313ce567146101c857806339509351146101e657806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611030565b60405180910390f35b610148600480360381019061014391906110eb565b610402565b6040516101559190611146565b60405180910390f35b610166610425565b6040516101739190611170565b60405180910390f35b6101966004803603810190610191919061118b565b61042f565b6040516101a39190611146565b60405180910390f35b6101c660048036038101906101c191906110eb565b61045e565b005b6101d0610474565b6040516101dd91906111fa565b60405180910390f35b61020060048036038101906101fb91906110eb565b61048b565b60405161020d9190611146565b60405180910390f35b610230600480360381019061022b9190611215565b6104c2565b005b61024c60048036038101906102479190611242565b6104d6565b6040516102599190611170565b60405180910390f35b61026a61051e565b005b610286600480360381019061028191906110eb565b610532565b005b610290610552565b60405161029d919061127e565b60405180910390f35b6102ae61057c565b6040516102bb9190611030565b60405180910390f35b6102de60048036038101906102d991906110eb565b61060e565b6040516102eb9190611146565b60405180910390f35b61030e600480360381019061030991906110eb565b610685565b60405161031b9190611146565b60405180910390f35b61033e60048036038101906103399190611299565b6106a8565b60405161034b9190611170565b60405180910390f35b61036e60048036038101906103699190611242565b61072f565b005b60606003805461037f90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611308565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107b2565b905061041a8185856107ba565b600191505092915050565b6000600254905090565b60008061043a6107b2565b9050610447858285610983565b610452858585610a0f565b60019150509392505050565b610466610c85565b6104708282610d03565b5050565b6000600560149054906101000a900460ff16905090565b6000806104966107b2565b90506104b78185856104a885896106a8565b6104b29190611368565b6107ba565b600191505092915050565b6104d36104cd6107b2565b82610d03565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610526610c85565b6105306000610ed0565b565b6105448261053e6107b2565b83610983565b61054e8282610d03565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461058b90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790611308565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000806106196107b2565b9050600061062782866106a8565b90508381101561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061140e565b60405180910390fd5b61067982868684036107ba565b60019250505092915050565b6000806106906107b2565b905061069d818585610a0f565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610737610c85565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906114a0565b60405180910390fd5b6107af81610ed0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090611532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f906115c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109769190611170565b60405180910390a3505050565b600061098f84846106a8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a0957818110156109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f290611630565b60405180910390fd5b610a0884848484036107ba565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906116c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490611754565b60405180910390fd5b610af8838383610f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906117e6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c6c9190611170565b60405180910390a3610c7f848484610f9b565b50505050565b610c8d6107b2565b73ffffffffffffffffffffffffffffffffffffffff16610cab610552565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611852565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906118e4565b60405180910390fd5b610d7e82600083610f96565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611976565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb79190611170565b60405180910390a3610ecb83600084610f9b565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fda578082015181840152602081019050610fbf565b60008484015250505050565b6000601f19601f8301169050919050565b600061100282610fa0565b61100c8185610fab565b935061101c818560208601610fbc565b61102581610fe6565b840191505092915050565b6000602082019050818103600083015261104a8184610ff7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061108282611057565b9050919050565b61109281611077565b811461109d57600080fd5b50565b6000813590506110af81611089565b92915050565b6000819050919050565b6110c8816110b5565b81146110d357600080fd5b50565b6000813590506110e5816110bf565b92915050565b6000806040838503121561110257611101611052565b5b6000611110858286016110a0565b9250506020611121858286016110d6565b9150509250929050565b60008115159050919050565b6111408161112b565b82525050565b600060208201905061115b6000830184611137565b92915050565b61116a816110b5565b82525050565b60006020820190506111856000830184611161565b92915050565b6000806000606084860312156111a4576111a3611052565b5b60006111b2868287016110a0565b93505060206111c3868287016110a0565b92505060406111d4868287016110d6565b9150509250925092565b600060ff82169050919050565b6111f4816111de565b82525050565b600060208201905061120f60008301846111eb565b92915050565b60006020828403121561122b5761122a611052565b5b6000611239848285016110d6565b91505092915050565b60006020828403121561125857611257611052565b5b6000611266848285016110a0565b91505092915050565b61127881611077565b82525050565b6000602082019050611293600083018461126f565b92915050565b600080604083850312156112b0576112af611052565b5b60006112be858286016110a0565b92505060206112cf858286016110a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061132057607f821691505b602082108103611333576113326112d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611373826110b5565b915061137e836110b5565b925082820190508082111561139657611395611339565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006113f8602583610fab565b91506114038261139c565b604082019050919050565b60006020820190508181036000830152611427816113eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061148a602683610fab565b91506114958261142e565b604082019050919050565b600060208201905081810360008301526114b98161147d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061151c602483610fab565b9150611527826114c0565b604082019050919050565b6000602082019050818103600083015261154b8161150f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115ae602283610fab565b91506115b982611552565b604082019050919050565b600060208201905081810360008301526115dd816115a1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061161a601d83610fab565b9150611625826115e4565b602082019050919050565b600060208201905081810360008301526116498161160d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006116ac602583610fab565b91506116b782611650565b604082019050919050565b600060208201905081810360008301526116db8161169f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061173e602383610fab565b9150611749826116e2565b604082019050919050565b6000602082019050818103600083015261176d81611731565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006117d0602683610fab565b91506117db82611774565b604082019050919050565b600060208201905081810360008301526117ff816117c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061183c602083610fab565b915061184782611806565b602082019050919050565b6000602082019050818103600083015261186b8161182f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006118ce602183610fab565b91506118d982611872565b604082019050919050565b600060208201905081810360008301526118fd816118c1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611960602283610fab565b915061196b82611904565b604082019050919050565b6000602082019050818103600083015261198f81611953565b905091905056fea26469706673582212200721c690656bd73c31eacd8251486d41e4a219ce71a5395ac03a28830e9338ba64736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102a6578063a457c2d7146102c4578063a9059cbb146102f4578063dd62ed3e14610324578063f2fde38b146103545761010b565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638da5cb5b146102885761010b565b806324bd8aaf116100de57806324bd8aaf146101ac578063313ce567146101c857806339509351146101e657806342966c68146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610370565b6040516101259190611030565b60405180910390f35b610148600480360381019061014391906110eb565b610402565b6040516101559190611146565b60405180910390f35b610166610425565b6040516101739190611170565b60405180910390f35b6101966004803603810190610191919061118b565b61042f565b6040516101a39190611146565b60405180910390f35b6101c660048036038101906101c191906110eb565b61045e565b005b6101d0610474565b6040516101dd91906111fa565b60405180910390f35b61020060048036038101906101fb91906110eb565b61048b565b60405161020d9190611146565b60405180910390f35b610230600480360381019061022b9190611215565b6104c2565b005b61024c60048036038101906102479190611242565b6104d6565b6040516102599190611170565b60405180910390f35b61026a61051e565b005b610286600480360381019061028191906110eb565b610532565b005b610290610552565b60405161029d919061127e565b60405180910390f35b6102ae61057c565b6040516102bb9190611030565b60405180910390f35b6102de60048036038101906102d991906110eb565b61060e565b6040516102eb9190611146565b60405180910390f35b61030e600480360381019061030991906110eb565b610685565b60405161031b9190611146565b60405180910390f35b61033e60048036038101906103399190611299565b6106a8565b60405161034b9190611170565b60405180910390f35b61036e60048036038101906103699190611242565b61072f565b005b60606003805461037f90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546103ab90611308565b80156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b5050505050905090565b60008061040d6107b2565b905061041a8185856107ba565b600191505092915050565b6000600254905090565b60008061043a6107b2565b9050610447858285610983565b610452858585610a0f565b60019150509392505050565b610466610c85565b6104708282610d03565b5050565b6000600560149054906101000a900460ff16905090565b6000806104966107b2565b90506104b78185856104a885896106a8565b6104b29190611368565b6107ba565b600191505092915050565b6104d36104cd6107b2565b82610d03565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610526610c85565b6105306000610ed0565b565b6105448261053e6107b2565b83610983565b61054e8282610d03565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461058b90611308565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790611308565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000806106196107b2565b9050600061062782866106a8565b90508381101561066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061140e565b60405180910390fd5b61067982868684036107ba565b60019250505092915050565b6000806106906107b2565b905061069d818585610a0f565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610737610c85565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906114a0565b60405180910390fd5b6107af81610ed0565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082090611532565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f906115c4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109769190611170565b60405180910390a3505050565b600061098f84846106a8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a0957818110156109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f290611630565b60405180910390fd5b610a0884848484036107ba565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906116c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490611754565b60405180910390fd5b610af8838383610f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906117e6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c6c9190611170565b60405180910390a3610c7f848484610f9b565b50505050565b610c8d6107b2565b73ffffffffffffffffffffffffffffffffffffffff16610cab610552565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611852565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906118e4565b60405180910390fd5b610d7e82600083610f96565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611976565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb79190611170565b60405180910390a3610ecb83600084610f9b565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fda578082015181840152602081019050610fbf565b60008484015250505050565b6000601f19601f8301169050919050565b600061100282610fa0565b61100c8185610fab565b935061101c818560208601610fbc565b61102581610fe6565b840191505092915050565b6000602082019050818103600083015261104a8184610ff7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061108282611057565b9050919050565b61109281611077565b811461109d57600080fd5b50565b6000813590506110af81611089565b92915050565b6000819050919050565b6110c8816110b5565b81146110d357600080fd5b50565b6000813590506110e5816110bf565b92915050565b6000806040838503121561110257611101611052565b5b6000611110858286016110a0565b9250506020611121858286016110d6565b9150509250929050565b60008115159050919050565b6111408161112b565b82525050565b600060208201905061115b6000830184611137565b92915050565b61116a816110b5565b82525050565b60006020820190506111856000830184611161565b92915050565b6000806000606084860312156111a4576111a3611052565b5b60006111b2868287016110a0565b93505060206111c3868287016110a0565b92505060406111d4868287016110d6565b9150509250925092565b600060ff82169050919050565b6111f4816111de565b82525050565b600060208201905061120f60008301846111eb565b92915050565b60006020828403121561122b5761122a611052565b5b6000611239848285016110d6565b91505092915050565b60006020828403121561125857611257611052565b5b6000611266848285016110a0565b91505092915050565b61127881611077565b82525050565b6000602082019050611293600083018461126f565b92915050565b600080604083850312156112b0576112af611052565b5b60006112be858286016110a0565b92505060206112cf858286016110a0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061132057607f821691505b602082108103611333576113326112d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611373826110b5565b915061137e836110b5565b925082820190508082111561139657611395611339565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006113f8602583610fab565b91506114038261139c565b604082019050919050565b60006020820190508181036000830152611427816113eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061148a602683610fab565b91506114958261142e565b604082019050919050565b600060208201905081810360008301526114b98161147d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061151c602483610fab565b9150611527826114c0565b604082019050919050565b6000602082019050818103600083015261154b8161150f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115ae602283610fab565b91506115b982611552565b604082019050919050565b600060208201905081810360008301526115dd816115a1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061161a601d83610fab565b9150611625826115e4565b602082019050919050565b600060208201905081810360008301526116498161160d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006116ac602583610fab565b91506116b782611650565b604082019050919050565b600060208201905081810360008301526116db8161169f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061173e602383610fab565b9150611749826116e2565b604082019050919050565b6000602082019050818103600083015261176d81611731565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006117d0602683610fab565b91506117db82611774565b604082019050919050565b600060208201905081810360008301526117ff816117c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061183c602083610fab565b915061184782611806565b602082019050919050565b6000602082019050818103600083015261186b8161182f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006118ce602183610fab565b91506118d982611872565b604082019050919050565b600060208201905081810360008301526118fd816118c1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611960602283610fab565b915061196b82611904565b604082019050919050565b6000602082019050818103600083015261198f81611953565b905091905056fea26469706673582212200721c690656bd73c31eacd8251486d41e4a219ce71a5395ac03a28830e9338ba64736f6c63430008180033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/x/evm/embeds/artifacts/contracts/TestERC20MissingFunction.sol/TestERC20MissingFunction.json b/x/evm/embeds/artifacts/contracts/TestERC20MissingFunction.sol/TestERC20MissingFunction.json new file mode 100644 index 0000000000..cf786ca7d3 --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestERC20MissingFunction.sol/TestERC20MissingFunction.json @@ -0,0 +1,108 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestERC20MissingFunction", + "sourceName": "contracts/TestERC20MissingFunction.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b5060405162000b2238038062000b22833981810160405281019062000037919062000235565b82600390816200004891906200051a565b5081600490816200005a91906200051a565b5050505062000601565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000cd8262000082565b810181811067ffffffffffffffff82111715620000ef57620000ee62000093565b5b80604052505050565b60006200010462000064565b9050620001128282620000c2565b919050565b600067ffffffffffffffff82111562000135576200013462000093565b5b620001408262000082565b9050602081019050919050565b60005b838110156200016d57808201518184015260208101905062000150565b60008484015250505050565b6000620001906200018a8462000117565b620000f8565b905082815260208101848484011115620001af57620001ae6200007d565b5b620001bc8482856200014d565b509392505050565b600082601f830112620001dc57620001db62000078565b5b8151620001ee84826020860162000179565b91505092915050565b600060ff82169050919050565b6200020f81620001f7565b81146200021b57600080fd5b50565b6000815190506200022f8162000204565b92915050565b6000806000606084860312156200025157620002506200006e565b5b600084015167ffffffffffffffff81111562000272576200027162000073565b5b6200028086828701620001c4565b935050602084015167ffffffffffffffff811115620002a457620002a362000073565b5b620002b286828701620001c4565b9250506040620002c5868287016200021e565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200032257607f821691505b602082108103620003385762000337620002da565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000363565b620003ae868362000363565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003fb620003f5620003ef84620003c6565b620003d0565b620003c6565b9050919050565b6000819050919050565b6200041783620003da565b6200042f620004268262000402565b84845462000370565b825550505050565b600090565b6200044662000437565b620004538184846200040c565b505050565b5b818110156200047b576200046f6000826200043c565b60018101905062000459565b5050565b601f821115620004ca5762000494816200033e565b6200049f8462000353565b81016020851015620004af578190505b620004c7620004be8562000353565b83018262000458565b50505b505050565b600082821c905092915050565b6000620004ef60001984600802620004cf565b1980831691505092915050565b60006200050a8383620004dc565b9150826002028217905092915050565b6200052582620002cf565b67ffffffffffffffff81111562000541576200054062000093565b5b6200054d825462000309565b6200055a8282856200047f565b600060209050601f8311600181146200059257600084156200057d578287015190505b620005898582620004fc565b865550620005f9565b601f198416620005a2866200033e565b60005b82811015620005cc57848901518255600182019150602085019450602081019050620005a5565b86831015620005ec5784890151620005e8601f891682620004dc565b8355505b6001600288020188555050505b505050505050565b61051180620006116000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806306fdde031461005c57806318160ddd1461007a578063313ce5671461009857806395d89b41146100b6578063a9059cbb146100d4575b600080fd5b610064610104565b60405161007191906102e9565b60405180910390f35b610082610196565b60405161008f9190610324565b60405180910390f35b6100a06101a0565b6040516100ad919061035b565b60405180910390f35b6100be6101a9565b6040516100cb91906102e9565b60405180910390f35b6100ee60048036038101906100e99190610405565b61023b565b6040516100fb9190610460565b60405180910390f35b606060038054610113906104aa565b80601f016020809104026020016040519081016040528092919081815260200182805461013f906104aa565b801561018c5780601f106101615761010080835404028352916020019161018c565b820191906000526020600020905b81548152906001019060200180831161016f57829003601f168201915b5050505050905090565b6000600254905090565b60006012905090565b6060600480546101b8906104aa565b80601f01602080910402602001604051908101604052809291908181526020018280546101e4906104aa565b80156102315780601f1061020657610100808354040283529160200191610231565b820191906000526020600020905b81548152906001019060200180831161021457829003601f168201915b5050505050905090565b6000610245610250565b506001905092915050565b60006001905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015610293578082015181840152602081019050610278565b60008484015250505050565b6000601f19601f8301169050919050565b60006102bb82610259565b6102c58185610264565b93506102d5818560208601610275565b6102de8161029f565b840191505092915050565b6000602082019050818103600083015261030381846102b0565b905092915050565b6000819050919050565b61031e8161030b565b82525050565b60006020820190506103396000830184610315565b92915050565b600060ff82169050919050565b6103558161033f565b82525050565b6000602082019050610370600083018461034c565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103a68261037b565b9050919050565b6103b68161039b565b81146103c157600080fd5b50565b6000813590506103d3816103ad565b92915050565b6103e28161030b565b81146103ed57600080fd5b50565b6000813590506103ff816103d9565b92915050565b6000806040838503121561041c5761041b610376565b5b600061042a858286016103c4565b925050602061043b858286016103f0565b9150509250929050565b60008115159050919050565b61045a81610445565b82525050565b60006020820190506104756000830184610451565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806104c257607f821691505b6020821081036104d5576104d461047b565b5b5091905056fea2646970667358221220a19534f82cd0dc270b9c4b446608cafa0d04a0942e9477d60206bd77bccbdf0a64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806306fdde031461005c57806318160ddd1461007a578063313ce5671461009857806395d89b41146100b6578063a9059cbb146100d4575b600080fd5b610064610104565b60405161007191906102e9565b60405180910390f35b610082610196565b60405161008f9190610324565b60405180910390f35b6100a06101a0565b6040516100ad919061035b565b60405180910390f35b6100be6101a9565b6040516100cb91906102e9565b60405180910390f35b6100ee60048036038101906100e99190610405565b61023b565b6040516100fb9190610460565b60405180910390f35b606060038054610113906104aa565b80601f016020809104026020016040519081016040528092919081815260200182805461013f906104aa565b801561018c5780601f106101615761010080835404028352916020019161018c565b820191906000526020600020905b81548152906001019060200180831161016f57829003601f168201915b5050505050905090565b6000600254905090565b60006012905090565b6060600480546101b8906104aa565b80601f01602080910402602001604051908101604052809291908181526020018280546101e4906104aa565b80156102315780601f1061020657610100808354040283529160200191610231565b820191906000526020600020905b81548152906001019060200180831161021457829003601f168201915b5050505050905090565b6000610245610250565b506001905092915050565b60006001905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015610293578082015181840152602081019050610278565b60008484015250505050565b6000601f19601f8301169050919050565b60006102bb82610259565b6102c58185610264565b93506102d5818560208601610275565b6102de8161029f565b840191505092915050565b6000602082019050818103600083015261030381846102b0565b905092915050565b6000819050919050565b61031e8161030b565b82525050565b60006020820190506103396000830184610315565b92915050565b600060ff82169050919050565b6103558161033f565b82525050565b6000602082019050610370600083018461034c565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103a68261037b565b9050919050565b6103b68161039b565b81146103c157600080fd5b50565b6000813590506103d3816103ad565b92915050565b6103e28161030b565b81146103ed57600080fd5b50565b6000813590506103ff816103d9565b92915050565b6000806040838503121561041c5761041b610376565b5b600061042a858286016103c4565b925050602061043b858286016103f0565b9150509250929050565b60008115159050919050565b61045a81610445565b82525050565b60006020820190506104756000830184610451565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806104c257607f821691505b6020821081036104d5576104d461047b565b5b5091905056fea2646970667358221220a19534f82cd0dc270b9c4b446608cafa0d04a0942e9477d60206bd77bccbdf0a64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json b/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json index 5d9b893d55..126a693a67 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20TransferWithFee.sol/TestERC20TransferWithFee.json @@ -197,24 +197,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "name", @@ -308,8 +290,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162001e7238038062001e72833981810160405281019062000037919062000385565b818181600390816200004a919062000655565b5080600490816200005c919062000655565b50505062000073336103e86200007b60201b60201c565b505062000857565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e4906200079d565b60405180910390fd5b6200010160008383620001e860201b60201c565b8060026000828254620001159190620007ee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001c891906200083a565b60405180910390a3620001e460008383620001ed60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025b8262000210565b810181811067ffffffffffffffff821117156200027d576200027c62000221565b5b80604052505050565b600062000292620001f2565b9050620002a0828262000250565b919050565b600067ffffffffffffffff821115620002c357620002c262000221565b5b620002ce8262000210565b9050602081019050919050565b60005b83811015620002fb578082015181840152602081019050620002de565b60008484015250505050565b60006200031e6200031884620002a5565b62000286565b9050828152602081018484840111156200033d576200033c6200020b565b5b6200034a848285620002db565b509392505050565b600082601f8301126200036a576200036962000206565b5b81516200037c84826020860162000307565b91505092915050565b600080604083850312156200039f576200039e620001fc565b5b600083015167ffffffffffffffff811115620003c057620003bf62000201565b5b620003ce8582860162000352565b925050602083015167ffffffffffffffff811115620003f257620003f162000201565b5b620004008582860162000352565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045d57607f821691505b60208210810362000473576200047262000415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049e565b620004e986836200049e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000536620005306200052a8462000501565b6200050b565b62000501565b9050919050565b6000819050919050565b620005528362000515565b6200056a62000561826200053d565b848454620004ab565b825550505050565b600090565b6200058162000572565b6200058e81848462000547565b505050565b5b81811015620005b657620005aa60008262000577565b60018101905062000594565b5050565b601f8211156200060557620005cf8162000479565b620005da846200048e565b81016020851015620005ea578190505b62000602620005f9856200048e565b83018262000593565b50505b505050565b600082821c905092915050565b60006200062a600019846008026200060a565b1980831691505092915050565b600062000645838362000617565b9150826002028217905092915050565b62000660826200040a565b67ffffffffffffffff8111156200067c576200067b62000221565b5b62000688825462000444565b62000695828285620005ba565b600060209050601f831160018114620006cd5760008415620006b8578287015190505b620006c4858262000637565b86555062000734565b601f198416620006dd8662000479565b60005b828110156200070757848901518255600182019150602085019450602081019050620006e0565b8683101562000727578489015162000723601f89168262000617565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000785601f836200073c565b915062000792826200074d565b602082019050919050565b60006020820190508181036000830152620007b88162000776565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007fb8262000501565b9150620008088362000501565b9250828201905080821115620008235762000822620007bf565b5b92915050565b620008348162000501565b82525050565b600060208201905062000851600083018462000829565b92915050565b61160b80620008676000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d14565b60405180910390f35b6100f160048036038101906100ec9190610dcf565b61032f565b6040516100fe9190610e2a565b60405180910390f35b61010f610352565b60405161011c9190610e54565b60405180910390f35b61013f600480360381019061013a9190610e6f565b61035c565b60405161014c9190610e2a565b60405180910390f35b61015d61038b565b60405161016a9190610ede565b60405180910390f35b61018d60048036038101906101889190610dcf565b610394565b60405161019a9190610e2a565b60405180910390f35b6101bd60048036038101906101b89190610dcf565b6103cb565b005b6101d960048036038101906101d49190610ef9565b6103d9565b6040516101e69190610e54565b60405180910390f35b6101f7610421565b6040516102049190610d14565b60405180910390f35b61022760048036038101906102229190610dcf565b6104b3565b6040516102349190610e2a565b60405180910390f35b61025760048036038101906102529190610dcf565b61052a565b6040516102649190610e2a565b60405180910390f35b61028760048036038101906102829190610f26565b6105ca565b6040516102949190610e54565b60405180910390f35b6060600380546102ac90610f95565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f95565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a610651565b9050610347818585610659565b600191505092915050565b6000600254905090565b600080610367610651565b9050610374858285610822565b61037f8585856108ae565b60019150509392505050565b60006012905090565b60008061039f610651565b90506103c08185856103b185896105ca565b6103bb9190610ff5565b610659565b600191505092915050565b6103d58282610b24565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f95565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f95565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be610651565b905060006104cc82866105ca565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061109b565b60405180910390fd5b61051e8286868403610659565b60019250505092915050565b600080610535610651565b90506000831161057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105719061112d565b60405180910390fd5b60006064600a8561058b919061114d565b61059591906111be565b9050600081856105a591906111ef565b90506105b28330846108ae565b6105bd8387836108ae565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90611295565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611327565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108159190610e54565b60405180910390a3505050565b600061082e84846105ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108a8578181101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089190611393565b60405180910390fd5b6108a78484848403610659565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906114b7565b60405180910390fd5b610997838383610c7a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490611549565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b0b9190610e54565b60405180910390a3610b1e848484610c7f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906115b5565b60405180910390fd5b610b9f60008383610c7a565b8060026000828254610bb19190610ff5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c629190610e54565b60405180910390a3610c7660008383610c7f565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cbe578082015181840152602081019050610ca3565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ce682610c84565b610cf08185610c8f565b9350610d00818560208601610ca0565b610d0981610cca565b840191505092915050565b60006020820190508181036000830152610d2e8184610cdb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d6682610d3b565b9050919050565b610d7681610d5b565b8114610d8157600080fd5b50565b600081359050610d9381610d6d565b92915050565b6000819050919050565b610dac81610d99565b8114610db757600080fd5b50565b600081359050610dc981610da3565b92915050565b60008060408385031215610de657610de5610d36565b5b6000610df485828601610d84565b9250506020610e0585828601610dba565b9150509250929050565b60008115159050919050565b610e2481610e0f565b82525050565b6000602082019050610e3f6000830184610e1b565b92915050565b610e4e81610d99565b82525050565b6000602082019050610e696000830184610e45565b92915050565b600080600060608486031215610e8857610e87610d36565b5b6000610e9686828701610d84565b9350506020610ea786828701610d84565b9250506040610eb886828701610dba565b9150509250925092565b600060ff82169050919050565b610ed881610ec2565b82525050565b6000602082019050610ef36000830184610ecf565b92915050565b600060208284031215610f0f57610f0e610d36565b5b6000610f1d84828501610d84565b91505092915050565b60008060408385031215610f3d57610f3c610d36565b5b6000610f4b85828601610d84565b9250506020610f5c85828601610d84565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fad57607f821691505b602082108103610fc057610fbf610f66565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061100082610d99565b915061100b83610d99565b925082820190508082111561102357611022610fc6565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611085602583610c8f565b915061109082611029565b604082019050919050565b600060208201905081810360008301526110b481611078565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000611117602983610c8f565b9150611122826110bb565b604082019050919050565b600060208201905081810360008301526111468161110a565b9050919050565b600061115882610d99565b915061116383610d99565b925082820261117181610d99565b9150828204841483151761118857611187610fc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006111c982610d99565b91506111d483610d99565b9250826111e4576111e361118f565b5b828204905092915050565b60006111fa82610d99565b915061120583610d99565b925082820390508181111561121d5761121c610fc6565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061127f602483610c8f565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611311602283610c8f565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061137d601d83610c8f565b915061138882611347565b602082019050919050565b600060208201905081810360008301526113ac81611370565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061140f602583610c8f565b915061141a826113b3565b604082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602383610c8f565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611533602683610c8f565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061159f601f83610c8f565b91506115aa82611569565b602082019050919050565b600060208201905081810360008301526115ce81611592565b905091905056fea2646970667358221220091603a6f25927a47c9ab72aa138e21f2b14e822b0df2d0767c4b3cdf446856d64736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610d14565b60405180910390f35b6100f160048036038101906100ec9190610dcf565b61032f565b6040516100fe9190610e2a565b60405180910390f35b61010f610352565b60405161011c9190610e54565b60405180910390f35b61013f600480360381019061013a9190610e6f565b61035c565b60405161014c9190610e2a565b60405180910390f35b61015d61038b565b60405161016a9190610ede565b60405180910390f35b61018d60048036038101906101889190610dcf565b610394565b60405161019a9190610e2a565b60405180910390f35b6101bd60048036038101906101b89190610dcf565b6103cb565b005b6101d960048036038101906101d49190610ef9565b6103d9565b6040516101e69190610e54565b60405180910390f35b6101f7610421565b6040516102049190610d14565b60405180910390f35b61022760048036038101906102229190610dcf565b6104b3565b6040516102349190610e2a565b60405180910390f35b61025760048036038101906102529190610dcf565b61052a565b6040516102649190610e2a565b60405180910390f35b61028760048036038101906102829190610f26565b6105ca565b6040516102949190610e54565b60405180910390f35b6060600380546102ac90610f95565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f95565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a610651565b9050610347818585610659565b600191505092915050565b6000600254905090565b600080610367610651565b9050610374858285610822565b61037f8585856108ae565b60019150509392505050565b60006012905090565b60008061039f610651565b90506103c08185856103b185896105ca565b6103bb9190610ff5565b610659565b600191505092915050565b6103d58282610b24565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f95565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f95565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be610651565b905060006104cc82866105ca565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061109b565b60405180910390fd5b61051e8286868403610659565b60019250505092915050565b600080610535610651565b90506000831161057a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105719061112d565b60405180910390fd5b60006064600a8561058b919061114d565b61059591906111be565b9050600081856105a591906111ef565b90506105b28330846108ae565b6105bd8387836108ae565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90611295565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611327565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108159190610e54565b60405180910390a3505050565b600061082e84846105ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108a8578181101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089190611393565b60405180910390fd5b6108a78484848403610659565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490611425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610983906114b7565b60405180910390fd5b610997838383610c7a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490611549565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b0b9190610e54565b60405180910390a3610b1e848484610c7f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906115b5565b60405180910390fd5b610b9f60008383610c7a565b8060026000828254610bb19190610ff5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c629190610e54565b60405180910390a3610c7660008383610c7f565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cbe578082015181840152602081019050610ca3565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ce682610c84565b610cf08185610c8f565b9350610d00818560208601610ca0565b610d0981610cca565b840191505092915050565b60006020820190508181036000830152610d2e8184610cdb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d6682610d3b565b9050919050565b610d7681610d5b565b8114610d8157600080fd5b50565b600081359050610d9381610d6d565b92915050565b6000819050919050565b610dac81610d99565b8114610db757600080fd5b50565b600081359050610dc981610da3565b92915050565b60008060408385031215610de657610de5610d36565b5b6000610df485828601610d84565b9250506020610e0585828601610dba565b9150509250929050565b60008115159050919050565b610e2481610e0f565b82525050565b6000602082019050610e3f6000830184610e1b565b92915050565b610e4e81610d99565b82525050565b6000602082019050610e696000830184610e45565b92915050565b600080600060608486031215610e8857610e87610d36565b5b6000610e9686828701610d84565b9350506020610ea786828701610d84565b9250506040610eb886828701610dba565b9150509250925092565b600060ff82169050919050565b610ed881610ec2565b82525050565b6000602082019050610ef36000830184610ecf565b92915050565b600060208284031215610f0f57610f0e610d36565b5b6000610f1d84828501610d84565b91505092915050565b60008060408385031215610f3d57610f3c610d36565b5b6000610f4b85828601610d84565b9250506020610f5c85828601610d84565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610fad57607f821691505b602082108103610fc057610fbf610f66565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061100082610d99565b915061100b83610d99565b925082820190508082111561102357611022610fc6565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611085602583610c8f565b915061109082611029565b604082019050919050565b600060208201905081810360008301526110b481611078565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000611117602983610c8f565b9150611122826110bb565b604082019050919050565b600060208201905081810360008301526111468161110a565b9050919050565b600061115882610d99565b915061116383610d99565b925082820261117181610d99565b9150828204841483151761118857611187610fc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006111c982610d99565b91506111d483610d99565b9250826111e4576111e361118f565b5b828204905092915050565b60006111fa82610d99565b915061120583610d99565b925082820390508181111561121d5761121c610fc6565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061127f602483610c8f565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611311602283610c8f565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061137d601d83610c8f565b915061138882611347565b602082019050919050565b600060208201905081810360008301526113ac81611370565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061140f602583610c8f565b915061141a826113b3565b604082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602383610c8f565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611533602683610c8f565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061159f601f83610c8f565b91506115aa82611569565b602082019050919050565b600060208201905081810360008301526115ce81611592565b905091905056fea2646970667358221220091603a6f25927a47c9ab72aa138e21f2b14e822b0df2d0767c4b3cdf446856d64736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162001c7b38038062001c7b833981810160405281019062000037919062000385565b818181600390816200004a919062000655565b5080600490816200005c919062000655565b50505062000073336103e86200007b60201b60201c565b505062000857565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e4906200079d565b60405180910390fd5b6200010160008383620001e860201b60201c565b8060026000828254620001159190620007ee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001c891906200083a565b60405180910390a3620001e460008383620001ed60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025b8262000210565b810181811067ffffffffffffffff821117156200027d576200027c62000221565b5b80604052505050565b600062000292620001f2565b9050620002a0828262000250565b919050565b600067ffffffffffffffff821115620002c357620002c262000221565b5b620002ce8262000210565b9050602081019050919050565b60005b83811015620002fb578082015181840152602081019050620002de565b60008484015250505050565b60006200031e6200031884620002a5565b62000286565b9050828152602081018484840111156200033d576200033c6200020b565b5b6200034a848285620002db565b509392505050565b600082601f8301126200036a576200036962000206565b5b81516200037c84826020860162000307565b91505092915050565b600080604083850312156200039f576200039e620001fc565b5b600083015167ffffffffffffffff811115620003c057620003bf62000201565b5b620003ce8582860162000352565b925050602083015167ffffffffffffffff811115620003f257620003f162000201565b5b620004008582860162000352565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045d57607f821691505b60208210810362000473576200047262000415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049e565b620004e986836200049e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000536620005306200052a8462000501565b6200050b565b62000501565b9050919050565b6000819050919050565b620005528362000515565b6200056a62000561826200053d565b848454620004ab565b825550505050565b600090565b6200058162000572565b6200058e81848462000547565b505050565b5b81811015620005b657620005aa60008262000577565b60018101905062000594565b5050565b601f8211156200060557620005cf8162000479565b620005da846200048e565b81016020851015620005ea578190505b62000602620005f9856200048e565b83018262000593565b50505b505050565b600082821c905092915050565b60006200062a600019846008026200060a565b1980831691505092915050565b600062000645838362000617565b9150826002028217905092915050565b62000660826200040a565b67ffffffffffffffff8111156200067c576200067b62000221565b5b62000688825462000444565b62000695828285620005ba565b600060209050601f831160018114620006cd5760008415620006b8578287015190505b620006c4858262000637565b86555062000734565b601f198416620006dd8662000479565b60005b828110156200070757848901518255600182019150602085019450602081019050620006e0565b8683101562000727578489015162000723601f89168262000617565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000785601f836200073c565b915062000792826200074d565b602082019050919050565b60006020820190508181036000830152620007b88162000776565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007fb8262000501565b9150620008088362000501565b9250828201905080821115620008235762000822620007bf565b5b92915050565b620008348162000501565b82525050565b600060208201905062000851600083018462000829565b92915050565b61141480620008676000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b89565b60405180910390f35b6100e660048036038101906100e19190610c44565b610308565b6040516100f39190610c9f565b60405180910390f35b61010461032b565b6040516101119190610cc9565b60405180910390f35b610134600480360381019061012f9190610ce4565b610335565b6040516101419190610c9f565b60405180910390f35b610152610364565b60405161015f9190610d53565b60405180910390f35b610182600480360381019061017d9190610c44565b61036d565b60405161018f9190610c9f565b60405180910390f35b6101b260048036038101906101ad9190610d6e565b6103a4565b6040516101bf9190610cc9565b60405180910390f35b6101d06103ec565b6040516101dd9190610b89565b60405180910390f35b61020060048036038101906101fb9190610c44565b61047e565b60405161020d9190610c9f565b60405180910390f35b610230600480360381019061022b9190610c44565b6104f5565b60405161023d9190610c9f565b60405180910390f35b610260600480360381019061025b9190610d9b565b610595565b60405161026d9190610cc9565b60405180910390f35b60606003805461028590610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e0a565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361061c565b9050610320818585610624565b600191505092915050565b6000600254905090565b60008061034061061c565b905061034d8582856107ed565b610358858585610879565b60019150509392505050565b60006012905090565b60008061037861061c565b905061039981858561038a8589610595565b6103949190610e6a565b610624565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e0a565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961061c565b905060006104978286610595565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f10565b60405180910390fd5b6104e98286868403610624565b60019250505092915050565b60008061050061061c565b905060008311610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c90610fa2565b60405180910390fd5b60006064600a856105569190610fc2565b6105609190611033565b9050600081856105709190611064565b905061057d833084610879565b610588838783610879565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061110a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f99061119c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107e09190610cc9565b60405180910390a3505050565b60006107f98484610595565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108735781811015610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611208565b60405180910390fd5b6108728484848403610624565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df9061129a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061132c565b60405180910390fd5b610962838383610aef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906113be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad69190610cc9565b60405180910390a3610ae9848484610af4565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b33578082015181840152602081019050610b18565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b5b82610af9565b610b658185610b04565b9350610b75818560208601610b15565b610b7e81610b3f565b840191505092915050565b60006020820190508181036000830152610ba38184610b50565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bdb82610bb0565b9050919050565b610beb81610bd0565b8114610bf657600080fd5b50565b600081359050610c0881610be2565b92915050565b6000819050919050565b610c2181610c0e565b8114610c2c57600080fd5b50565b600081359050610c3e81610c18565b92915050565b60008060408385031215610c5b57610c5a610bab565b5b6000610c6985828601610bf9565b9250506020610c7a85828601610c2f565b9150509250929050565b60008115159050919050565b610c9981610c84565b82525050565b6000602082019050610cb46000830184610c90565b92915050565b610cc381610c0e565b82525050565b6000602082019050610cde6000830184610cba565b92915050565b600080600060608486031215610cfd57610cfc610bab565b5b6000610d0b86828701610bf9565b9350506020610d1c86828701610bf9565b9250506040610d2d86828701610c2f565b9150509250925092565b600060ff82169050919050565b610d4d81610d37565b82525050565b6000602082019050610d686000830184610d44565b92915050565b600060208284031215610d8457610d83610bab565b5b6000610d9284828501610bf9565b91505092915050565b60008060408385031215610db257610db1610bab565b5b6000610dc085828601610bf9565b9250506020610dd185828601610bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e2257607f821691505b602082108103610e3557610e34610ddb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7582610c0e565b9150610e8083610c0e565b9250828201905080821115610e9857610e97610e3b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610efa602583610b04565b9150610f0582610e9e565b604082019050919050565b60006020820190508181036000830152610f2981610eed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000610f8c602983610b04565b9150610f9782610f30565b604082019050919050565b60006020820190508181036000830152610fbb81610f7f565b9050919050565b6000610fcd82610c0e565b9150610fd883610c0e565b9250828202610fe681610c0e565b91508282048414831517610ffd57610ffc610e3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061103e82610c0e565b915061104983610c0e565b92508261105957611058611004565b5b828204905092915050565b600061106f82610c0e565b915061107a83610c0e565b925082820390508181111561109257611091610e3b565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110f4602483610b04565b91506110ff82611098565b604082019050919050565b60006020820190508181036000830152611123816110e7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611186602283610b04565b91506111918261112a565b604082019050919050565b600060208201905081810360008301526111b581611179565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111f2601d83610b04565b91506111fd826111bc565b602082019050919050565b60006020820190508181036000830152611221816111e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611284602583610b04565b915061128f82611228565b604082019050919050565b600060208201905081810360008301526112b381611277565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611316602383610b04565b9150611321826112ba565b604082019050919050565b6000602082019050818103600083015261134581611309565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113a8602683610b04565b91506113b38261134c565b604082019050919050565b600060208201905081810360008301526113d78161139b565b905091905056fea2646970667358221220318130c53e58bcb5f81e7bc21c029505e0025bef1e0d5fa41d686d55a65328ba64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b89565b60405180910390f35b6100e660048036038101906100e19190610c44565b610308565b6040516100f39190610c9f565b60405180910390f35b61010461032b565b6040516101119190610cc9565b60405180910390f35b610134600480360381019061012f9190610ce4565b610335565b6040516101419190610c9f565b60405180910390f35b610152610364565b60405161015f9190610d53565b60405180910390f35b610182600480360381019061017d9190610c44565b61036d565b60405161018f9190610c9f565b60405180910390f35b6101b260048036038101906101ad9190610d6e565b6103a4565b6040516101bf9190610cc9565b60405180910390f35b6101d06103ec565b6040516101dd9190610b89565b60405180910390f35b61020060048036038101906101fb9190610c44565b61047e565b60405161020d9190610c9f565b60405180910390f35b610230600480360381019061022b9190610c44565b6104f5565b60405161023d9190610c9f565b60405180910390f35b610260600480360381019061025b9190610d9b565b610595565b60405161026d9190610cc9565b60405180910390f35b60606003805461028590610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e0a565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361061c565b9050610320818585610624565b600191505092915050565b6000600254905090565b60008061034061061c565b905061034d8582856107ed565b610358858585610879565b60019150509392505050565b60006012905090565b60008061037861061c565b905061039981858561038a8589610595565b6103949190610e6a565b610624565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e0a565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961061c565b905060006104978286610595565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610f10565b60405180910390fd5b6104e98286868403610624565b60019250505092915050565b60008061050061061c565b905060008311610545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053c90610fa2565b60405180910390fd5b60006064600a856105569190610fc2565b6105609190611033565b9050600081856105709190611064565b905061057d833084610879565b610588838783610879565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061110a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f99061119c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107e09190610cc9565b60405180910390a3505050565b60006107f98484610595565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108735781811015610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611208565b60405180910390fd5b6108728484848403610624565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df9061129a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061132c565b60405180910390fd5b610962838383610aef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df906113be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad69190610cc9565b60405180910390a3610ae9848484610af4565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b33578082015181840152602081019050610b18565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b5b82610af9565b610b658185610b04565b9350610b75818560208601610b15565b610b7e81610b3f565b840191505092915050565b60006020820190508181036000830152610ba38184610b50565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bdb82610bb0565b9050919050565b610beb81610bd0565b8114610bf657600080fd5b50565b600081359050610c0881610be2565b92915050565b6000819050919050565b610c2181610c0e565b8114610c2c57600080fd5b50565b600081359050610c3e81610c18565b92915050565b60008060408385031215610c5b57610c5a610bab565b5b6000610c6985828601610bf9565b9250506020610c7a85828601610c2f565b9150509250929050565b60008115159050919050565b610c9981610c84565b82525050565b6000602082019050610cb46000830184610c90565b92915050565b610cc381610c0e565b82525050565b6000602082019050610cde6000830184610cba565b92915050565b600080600060608486031215610cfd57610cfc610bab565b5b6000610d0b86828701610bf9565b9350506020610d1c86828701610bf9565b9250506040610d2d86828701610c2f565b9150509250925092565b600060ff82169050919050565b610d4d81610d37565b82525050565b6000602082019050610d686000830184610d44565b92915050565b600060208284031215610d8457610d83610bab565b5b6000610d9284828501610bf9565b91505092915050565b60008060408385031215610db257610db1610bab565b5b6000610dc085828601610bf9565b9250506020610dd185828601610bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e2257607f821691505b602082108103610e3557610e34610ddb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7582610c0e565b9150610e8083610c0e565b9250828201905080821115610e9857610e97610e3b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610efa602583610b04565b9150610f0582610e9e565b604082019050919050565b60006020820190508181036000830152610f2981610eed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000610f8c602983610b04565b9150610f9782610f30565b604082019050919050565b60006020820190508181036000830152610fbb81610f7f565b9050919050565b6000610fcd82610c0e565b9150610fd883610c0e565b9250828202610fe681610c0e565b91508282048414831517610ffd57610ffc610e3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061103e82610c0e565b915061104983610c0e565b92508261105957611058611004565b5b828204905092915050565b600061106f82610c0e565b915061107a83610c0e565b925082820390508181111561109257611091610e3b565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110f4602483610b04565b91506110ff82611098565b604082019050919050565b60006020820190508181036000830152611123816110e7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611186602283610b04565b91506111918261112a565b604082019050919050565b600060208201905081810360008301526111b581611179565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111f2601d83610b04565b91506111fd826111bc565b602082019050919050565b60006020820190508181036000830152611221816111e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611284602583610b04565b915061128f82611228565b604082019050919050565b600060208201905081810360008301526112b381611277565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611316602383610b04565b9150611321826112ba565b604082019050919050565b6000602082019050818103600083015261134581611309565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006113a8602683610b04565b91506113b38261134c565b604082019050919050565b600060208201905081810360008301526113d78161139b565b905091905056fea2646970667358221220318130c53e58bcb5f81e7bc21c029505e0025bef1e0d5fa41d686d55a65328ba64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/contracts/TestERC20InvalidFunction.sol b/x/evm/embeds/contracts/TestERC20InvalidFunction.sol new file mode 100644 index 0000000000..eb002aa7a6 --- /dev/null +++ b/x/evm/embeds/contracts/TestERC20InvalidFunction.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) + +pragma solidity ^0.8.0; + +contract TestERC20InvalidFunction { + mapping(address => uint256) private _balances; + + mapping(address => mapping(address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + + /** + * @dev Sets the values for {name} and {symbol}. + * + * All two of these values are immutable: they can only be set once during + * construction. + */ + constructor(string memory name_, string memory symbol_, uint8 decimals_) { + if (decimals_ == 0) { + // just to silence warnings + _totalSupply = 0; + } + _name = name_; + _symbol = symbol_; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual returns (string memory) { + return _name; + } + + function symbol() public view virtual returns (string memory) { + return _symbol; + } + + function decimals() public view virtual returns (uint8) { + return 18; + } + + function totalSupply() public view virtual returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `to` cannot be the zero address. + */ + function transfer(address to) public virtual returns (bool) { + if (to == address(0)) { + // just to silence warnings + return false; + } + _transfer(); + return true; + } + + /** + * @dev Moves `amount` of tokens from `from` to `to`. + * + * This internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + */ + function _transfer() internal virtual returns (bool) { + return true; + } +} diff --git a/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol b/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol index 0e5b27688f..477af9f565 100644 --- a/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol +++ b/x/evm/embeds/contracts/TestERC20MaliciousTransfer.sol @@ -32,8 +32,4 @@ contract TestERC20MaliciousTransfer is ERC20 { // The result is not used, ensuring the compiler doesn't optimize this away assert(result != 0); } - - function mint(address to, uint256 amount) public virtual { - _mint(to, amount); - } } diff --git a/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol b/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol deleted file mode 100644 index d2489db36d..0000000000 --- a/x/evm/embeds/contracts/TestERC20MinterMissingFunction.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.19; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -/** - * @dev {ERC20} token, including: - * - * - missing mint function - * - ability for holders to burn (destroy) their tokens - * - * The contract owner is set automatically in the constructor as the - * deployer due to "Ownable". - * - * The Context contract is inherited indirectly through "ERC20" and "Ownable". - */ -contract ERC20Minter is ERC20, ERC20Burnable, Ownable { - uint8 private _decimals; - - /** - * @dev Grants "owner" status to the account that deploys the contract and - * customizes tokens decimals. - * - * See {ERC20-constructor}. - */ - constructor( - string memory name, - string memory symbol, - uint8 decimals_ - ) ERC20(name, symbol) { - _setupDecimals(decimals_); - } - - /** - * @dev Sets `_decimals` as `decimals_ once at Deployment' - */ - function _setupDecimals(uint8 decimals_) private { - _decimals = decimals_; - } - - /** - * @dev Overrides the `decimals()` method with custom `_decimals` - */ - function decimals() public view virtual override returns (uint8) { - return _decimals; - } - - /** - * @dev Destroys `amount` new tokens for `to`. Suitable when the contract owner - * should have authority to burn tokens from an account directly, such as in - * the case of regulatory compliance, or actions selected via - * decentralized governance. - * - * See {ERC20-_burn}. - * - */ - function burnFromAuthority( - address from, - uint256 amount - ) public virtual onlyOwner { - _burn(from, amount); - } -} diff --git a/x/evm/embeds/contracts/TestERC20MissingFunction.sol b/x/evm/embeds/contracts/TestERC20MissingFunction.sol new file mode 100644 index 0000000000..9afb575e96 --- /dev/null +++ b/x/evm/embeds/contracts/TestERC20MissingFunction.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) + +pragma solidity ^0.8.0; + +contract TestERC20MissingFunction { + mapping(address => uint256) private _balances; + + mapping(address => mapping(address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + + /** + * @dev Sets the values for {name} and {symbol}. + * + * All two of these values are immutable: they can only be set once during + * construction. + */ + constructor(string memory name, string memory symbol, uint8 decimals_) { + _name = name; + _symbol = symbol; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual returns (string memory) { + return _name; + } + + function symbol() public view virtual returns (string memory) { + return _symbol; + } + + function decimals() public view virtual returns (uint8) { + return 18; + } + + function totalSupply() public view virtual returns (uint256) { + return _totalSupply; + } + + // /** + // * @dev See {IERC20-balanceOf}. + // */ + // function balanceOf( + // address account + // ) public view virtual override returns (uint256) { + // return _balances[account]; + // } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer( + address to, + uint256 amount + ) public virtual returns (bool) { + _transfer(); + return true; + } + + /** + * @dev Moves `amount` of tokens from `from` to `to`. + * + * This internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + */ + function _transfer() internal virtual returns (bool) { + return true; + } +} diff --git a/x/evm/embeds/contracts/TestERC20TransferWithFee.sol b/x/evm/embeds/contracts/TestERC20TransferWithFee.sol index f87b50e6da..907d136364 100644 --- a/x/evm/embeds/contracts/TestERC20TransferWithFee.sol +++ b/x/evm/embeds/contracts/TestERC20TransferWithFee.sol @@ -25,8 +25,4 @@ contract TestERC20TransferWithFee is ERC20 { return true; } - - function mint(address to, uint256 amount) public virtual { - _mint(to, amount); - } } diff --git a/x/evm/embeds/embeds.go b/x/evm/embeds/embeds.go index 9142194ee2..32995f2ae5 100644 --- a/x/evm/embeds/embeds.go +++ b/x/evm/embeds/embeds.go @@ -29,8 +29,10 @@ var ( testErc20MaliciousNameJson []byte //go:embed artifacts/contracts/TestERC20MaliciousTransfer.sol/TestERC20MaliciousTransfer.json testErc20MaliciousTransferJson []byte - //go:embed artifacts/contracts/TestERC20MinterMissingFunction.sol/ERC20Minter.json + //go:embed artifacts/contracts/TestERC20MissingFunction.sol/TestERC20MissingFunction.json testErc20MissingFunctionJson []byte + //go:embed artifacts/contracts/TestERC20InvalidFunction.sol/TestERC20InvalidFunction.json + testERC20InvalidFunction []byte //go:embed artifacts/contracts/TestFunTokenPrecompileLocalGas.sol/TestFunTokenPrecompileLocalGas.json testFunTokenPrecompileLocalGasJson []byte //go:embed artifacts/contracts/TestERC20TransferThenPrecompileSend.sol/TestERC20TransferThenPrecompileSend.json @@ -101,12 +103,18 @@ var ( EmbedJSON: testErc20MaliciousTransferJson, } // SmartContract_TestERC20MissingFunction is a test contract - // which simulates malicious ERC20 behavior by adding gas intensive operation - // for function transfer() intended to attack funtoken conversion from erc20 to bank coin + // which simulates malicious ERC20 behavior by missing the balanceOf function SmartContract_TestERC20MissingFunction = CompiledEvmContract{ Name: "TestERC20MissingFunction.sol", EmbedJSON: testErc20MissingFunctionJson, } + // SmartContract_TestERC20InvalidFunction is a test contract + // which simulates malicious ERC20 behavior by adding an invalid transfer + // function with no `amount` parameter + SmartContract_TestERC20InvalidFunction = CompiledEvmContract{ + Name: "TestERC20InvalidFunction.sol", + EmbedJSON: testERC20InvalidFunction, + } // SmartContract_TestFunTokenPrecompileLocalGas is a test contract // which allows precompile execution with custom local gas set (calling precompile within contract) SmartContract_TestFunTokenPrecompileLocalGas = CompiledEvmContract{ @@ -188,6 +196,7 @@ func init() { SmartContract_TestERC20MaliciousName.MustLoad() SmartContract_TestERC20MaliciousTransfer.MustLoad() SmartContract_TestERC20MissingFunction.MustLoad() + SmartContract_TestERC20InvalidFunction.MustLoad() SmartContract_TestFunTokenPrecompileLocalGas.MustLoad() SmartContract_TestNativeSendThenPrecompileSendJson.MustLoad() SmartContract_TestERC20TransferThenPrecompileSend.MustLoad() diff --git a/x/evm/embeds/embeds_test.go b/x/evm/embeds/embeds_test.go index 77a63c2834..1353d77db8 100644 --- a/x/evm/embeds/embeds_test.go +++ b/x/evm/embeds/embeds_test.go @@ -17,6 +17,7 @@ func TestLoadContracts(t *testing.T) { embeds.SmartContract_TestERC20MaliciousName.MustLoad() embeds.SmartContract_TestERC20MaliciousTransfer.MustLoad() embeds.SmartContract_TestERC20MissingFunction.MustLoad() + embeds.SmartContract_TestERC20InvalidFunction.MustLoad() embeds.SmartContract_TestFunTokenPrecompileLocalGas.MustLoad() embeds.SmartContract_TestNativeSendThenPrecompileSendJson.MustLoad() embeds.SmartContract_TestERC20TransferThenPrecompileSend.MustLoad() diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index 181c8bcdac..c9f743c80f 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -203,39 +203,37 @@ func (k *Keeper) createFunTokenFromERC20( func (k Keeper) checkErc20ImplementsAllRequired( ctx sdk.Context, erc20Addr gethcommon.Address, abi *gethabi.ABI, ) error { - methodNames := []string{"name", + methodNames := []string{ + "balanceOf", + "transfer", "symbol", "decimals", + "name", "totalSupply", - "balanceOf", - "transfer", - "allowance", - "approve", - "transferFrom", - "increaseAllowance", - "decreaseAllowance", - "mint", } for _, methodName := range methodNames { + fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@ Checking method: ", methodName) method, ok := abi.Methods[methodName] if !ok { - fmt.Printf( - "method '%s' not found in contract at %s", + fmt.Println( + "method not found in contract at ", methodName, erc20Addr.Hex(), ) return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) } + fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@ asking: ", methodName) hasMethod, err := k.HasMethodInContract(ctx, erc20Addr, method) if err != nil { - fmt.Println(err) + fmt.Println("method not found in contract at \n", methodName, erc20Addr.Hex()) return err } if !hasMethod { - fmt.Printf("method '%s' not found in contract at %s\n", methodName, erc20Addr.Hex()) + fmt.Println("method not found in contract at \n", methodName, erc20Addr.Hex()) return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) } + fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Method found: ", methodName) } return nil } diff --git a/x/evm/keeper/funtoken_from_erc20_test.go b/x/evm/keeper/funtoken_from_erc20_test.go index 1a86783c3a..0abdf9971a 100644 --- a/x/evm/keeper/funtoken_from_erc20_test.go +++ b/x/evm/keeper/funtoken_from_erc20_test.go @@ -447,12 +447,12 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { s.Require().ErrorContains(err, "method 'transfer' not found in contract") } -// TestFunTokenInfiniteRecursionERC20 creates a funtoken from a contract -// with a malicious recursive balanceOf() and transfer() functions. -func (s *FunTokenFromErc20Suite) TestFunTokenMissingMintFunction() { +// TestFunTokenMissingBalanceOfFunction creates a funtoken with a contract +// missing the `balanceOf` function +func (s *FunTokenFromErc20Suite) TestFunTokenMissingBalanceOfFunction() { deps := evmtest.NewTestDeps() - s.T().Log("Deploy InfiniteRecursionERC20") + s.T().Log("Deploy Missing Function ERC20") metadata := keeper.ERC20Metadata{ Name: "erc20name", Symbol: "TOKEN", @@ -483,9 +483,50 @@ func (s *FunTokenFromErc20Suite) TestFunTokenMissingMintFunction() { Sender: deps.Sender.NibiruAddr.String(), }, ) - // Can't create since the gas cap will be reached for transfer function + // Can't create since the balanceOf functions are missing s.Require().Error(err) - s.Require().ErrorContains(err, "method 'mint' not found in contract") + s.Require().ErrorContains(err, "method 'balanceOf' not found in contract") +} + +// TestFunTokenInvalidFunction creates a funtoken with a contract +// having the `transfer` function with no amount parameter +func (s *FunTokenFromErc20Suite) TestFunTokenInvalidFunction() { + deps := evmtest.NewTestDeps() + + s.T().Log("Deploy Invalid Function ERC20") + metadata := keeper.ERC20Metadata{ + Name: "erc20name", + Symbol: "TOKEN", + Decimals: 18, + } + deployResp, err := evmtest.DeployContract( + &deps, embeds.SmartContract_TestERC20InvalidFunction, + metadata.Name, metadata.Symbol, metadata.Decimals, + ) + s.Require().NoError(err) + + erc20Addr := eth.EIP55Addr{ + Address: deployResp.ContractAddr, + } + + s.T().Log("happy: CreateFunToken for ERC20 with infinite recursion") + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + deps.Sender.NibiruAddr, + deps.EvmKeeper.FeeForCreateFunToken(deps.Ctx), + )) + + _, err = deps.EvmKeeper.CreateFunToken( + sdk.WrapSDKContext(deps.Ctx), + &evm.MsgCreateFunToken{ + FromErc20: &erc20Addr, + Sender: deps.Sender.NibiruAddr.String(), + }, + ) + // Can't create since the transfer are invalid + s.Require().Error(err) + s.Require().ErrorContains(err, "method 'transfer' not found in contract") } // TestSendERC20WithFee creates a funtoken from a malicious contract which charges a 10% fee on any transfer. From 447de1683b4203dcfbb7c4f5355c6c5357792bc2 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Fri, 31 Jan 2025 12:03:24 +0100 Subject: [PATCH 07/10] fix: fix unit test by raising gasg --- eth/rpc/backend/backend_suite_test.go | 2 +- eth/rpc/backend/gas_used_test.go | 2 +- x/common/testutil/testnetwork/tx.go | 4 ++-- .../contracts/TestERC20.sol/TestERC20.json | 22 ++----------------- x/evm/embeds/contracts/TestERC20.sol | 4 ---- 5 files changed, 6 insertions(+), 28 deletions(-) diff --git a/eth/rpc/backend/backend_suite_test.go b/eth/rpc/backend/backend_suite_test.go index dec06920f8..eeb3c2b18c 100644 --- a/eth/rpc/backend/backend_suite_test.go +++ b/eth/rpc/backend/backend_suite_test.go @@ -177,7 +177,7 @@ func SendTransaction(s *BackendSuite, tx *gethcore.LegacyTx, waitForNextBlock bo // WaitForReceipt waits for a transaction to be included in a block, returns block number, block hash and receipt func WaitForReceipt(s *BackendSuite, txHash gethcommon.Hash) (*big.Int, *gethcommon.Hash, *backend.TransactionReceipt) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() for { diff --git a/eth/rpc/backend/gas_used_test.go b/eth/rpc/backend/gas_used_test.go index 026be2ada7..92895bfab4 100644 --- a/eth/rpc/backend/gas_used_test.go +++ b/eth/rpc/backend/gas_used_test.go @@ -84,7 +84,7 @@ func (s *BackendSuite) TestGasUsedFunTokens() { FromErc20: &erc20Addr, }) s.Require().NoError(err) - s.Require().NotNil(txResp) + s.Require().NotNil(txResp) // This is no guarantee that tx was included in the block s.Require().NoError(s.network.WaitForNextBlock()) randomNibiAddress := testutil.AccAddress() diff --git a/x/common/testutil/testnetwork/tx.go b/x/common/testutil/testnetwork/tx.go index 279381a2ab..6ddd853b28 100644 --- a/x/common/testutil/testnetwork/tx.go +++ b/x/common/testutil/testnetwork/tx.go @@ -143,8 +143,8 @@ func (chain *Network) BroadcastMsgs( return nil, err } - txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(cfg.BondDenom, math.NewInt(1000)))) - txBuilder.SetGasLimit(uint64(10 * common.TO_MICRO)) + txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(cfg.BondDenom, math.NewInt(100_000)))) + txBuilder.SetGasLimit(uint64(1_000 * common.TO_MICRO)) acc, err := cfg.AccountRetriever.GetAccount(chain.Validators[0].ClientCtx, from) if err != nil { diff --git a/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json b/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json index 2ef9964e89..52f4e01f15 100644 --- a/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json +++ b/x/evm/embeds/artifacts/contracts/TestERC20.sol/TestERC20.json @@ -186,24 +186,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "name", @@ -297,8 +279,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374455243323000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464f4f000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620004b7565b508060049081620000a19190620004b7565b505050620000c03369d3c21bcecceda1000000620000c660201b60201c565b620006b9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012f90620005ff565b60405180910390fd5b6200014c600083836200023360201b60201c565b806002600082825462000160919062000650565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200021391906200069c565b60405180910390a36200022f600083836200023860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bf57607f821691505b602082108103620002d557620002d462000277565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000300565b6200034b868362000300565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000398620003926200038c8462000363565b6200036d565b62000363565b9050919050565b6000819050919050565b620003b48362000377565b620003cc620003c3826200039f565b8484546200030d565b825550505050565b600090565b620003e3620003d4565b620003f0818484620003a9565b505050565b5b8181101562000418576200040c600082620003d9565b600181019050620003f6565b5050565b601f82111562000467576200043181620002db565b6200043c84620002f0565b810160208510156200044c578190505b620004646200045b85620002f0565b830182620003f5565b50505b505050565b600082821c905092915050565b60006200048c600019846008026200046c565b1980831691505092915050565b6000620004a7838362000479565b9150826002028217905092915050565b620004c2826200023d565b67ffffffffffffffff811115620004de57620004dd62000248565b5b620004ea8254620002a6565b620004f78282856200041c565b600060209050601f8311600181146200052f57600084156200051a578287015190505b62000526858262000499565b86555062000596565b601f1984166200053f86620002db565b60005b82811015620005695784890151825560018201915060208501945060208101905062000542565b8683101562000589578489015162000585601f89168262000479565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005e7601f836200059e565b9150620005f482620005af565b602082019050919050565b600060208201905081810360008301526200061a81620005d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065d8262000363565b91506200066a8362000363565b925082820190508082111562000685576200068462000621565b5b92915050565b620006968162000363565b82525050565b6000602082019050620006b360008301846200068b565b92915050565b61142680620006c96000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610c97565b60405180910390f35b6100f160048036038101906100ec9190610d52565b61032f565b6040516100fe9190610dad565b60405180910390f35b61010f610352565b60405161011c9190610dd7565b60405180910390f35b61013f600480360381019061013a9190610df2565b61035c565b60405161014c9190610dad565b60405180910390f35b61015d61038b565b60405161016a9190610e61565b60405180910390f35b61018d60048036038101906101889190610d52565b610394565b60405161019a9190610dad565b60405180910390f35b6101bd60048036038101906101b89190610d52565b6103cb565b005b6101d960048036038101906101d49190610e7c565b6103d9565b6040516101e69190610dd7565b60405180910390f35b6101f7610421565b6040516102049190610c97565b60405180910390f35b61022760048036038101906102229190610d52565b6104b3565b6040516102349190610dad565b60405180910390f35b61025760048036038101906102529190610d52565b61052a565b6040516102649190610dad565b60405180910390f35b61028760048036038101906102829190610ea9565b61054d565b6040516102949190610dd7565b60405180910390f35b6060600380546102ac90610f18565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f18565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a5565b61037f858585610831565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f78565b6105dc565b600191505092915050565b6103d58282610aa7565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f18565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f18565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061101e565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610831565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610642906110b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190611142565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107989190610dd7565b60405180910390a3505050565b60006107b1848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082b578181101561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906111ae565b60405180910390fd5b61082a84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790611240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906112d2565b60405180910390fd5b61091a838383610bfd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790611364565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a8e9190610dd7565b60405180910390a3610aa1848484610c02565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d906113d0565b60405180910390fd5b610b2260008383610bfd565b8060026000828254610b349190610f78565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be59190610dd7565b60405180910390a3610bf960008383610c02565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c41578082015181840152602081019050610c26565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c6982610c07565b610c738185610c12565b9350610c83818560208601610c23565b610c8c81610c4d565b840191505092915050565b60006020820190508181036000830152610cb18184610c5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce982610cbe565b9050919050565b610cf981610cde565b8114610d0457600080fd5b50565b600081359050610d1681610cf0565b92915050565b6000819050919050565b610d2f81610d1c565b8114610d3a57600080fd5b50565b600081359050610d4c81610d26565b92915050565b60008060408385031215610d6957610d68610cb9565b5b6000610d7785828601610d07565b9250506020610d8885828601610d3d565b9150509250929050565b60008115159050919050565b610da781610d92565b82525050565b6000602082019050610dc26000830184610d9e565b92915050565b610dd181610d1c565b82525050565b6000602082019050610dec6000830184610dc8565b92915050565b600080600060608486031215610e0b57610e0a610cb9565b5b6000610e1986828701610d07565b9350506020610e2a86828701610d07565b9250506040610e3b86828701610d3d565b9150509250925092565b600060ff82169050919050565b610e5b81610e45565b82525050565b6000602082019050610e766000830184610e52565b92915050565b600060208284031215610e9257610e91610cb9565b5b6000610ea084828501610d07565b91505092915050565b60008060408385031215610ec057610ebf610cb9565b5b6000610ece85828601610d07565b9250506020610edf85828601610d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3057607f821691505b602082108103610f4357610f42610ee9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f8382610d1c565b9150610f8e83610d1c565b9250828201905080821115610fa657610fa5610f49565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611008602583610c12565b915061101382610fac565b604082019050919050565b6000602082019050818103600083015261103781610ffb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061109a602483610c12565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061112c602283610c12565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611198601d83610c12565b91506111a382611162565b602082019050919050565b600060208201905081810360008301526111c78161118b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061122a602583610c12565b9150611235826111ce565b604082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602383610c12565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061134e602683610c12565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113ba601f83610c12565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b905091905056fea2646970667358221220b66afe449715946391f543cc99f4517498de9096d263179feb5963ff082371c064736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610c97565b60405180910390f35b6100f160048036038101906100ec9190610d52565b61032f565b6040516100fe9190610dad565b60405180910390f35b61010f610352565b60405161011c9190610dd7565b60405180910390f35b61013f600480360381019061013a9190610df2565b61035c565b60405161014c9190610dad565b60405180910390f35b61015d61038b565b60405161016a9190610e61565b60405180910390f35b61018d60048036038101906101889190610d52565b610394565b60405161019a9190610dad565b60405180910390f35b6101bd60048036038101906101b89190610d52565b6103cb565b005b6101d960048036038101906101d49190610e7c565b6103d9565b6040516101e69190610dd7565b60405180910390f35b6101f7610421565b6040516102049190610c97565b60405180910390f35b61022760048036038101906102229190610d52565b6104b3565b6040516102349190610dad565b60405180910390f35b61025760048036038101906102529190610d52565b61052a565b6040516102649190610dad565b60405180910390f35b61028760048036038101906102829190610ea9565b61054d565b6040516102949190610dd7565b60405180910390f35b6060600380546102ac90610f18565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f18565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a5565b61037f858585610831565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f78565b6105dc565b600191505092915050565b6103d58282610aa7565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f18565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f18565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061101e565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610831565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610642906110b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190611142565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107989190610dd7565b60405180910390a3505050565b60006107b1848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082b578181101561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906111ae565b60405180910390fd5b61082a84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790611240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610906906112d2565b60405180910390fd5b61091a838383610bfd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790611364565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a8e9190610dd7565b60405180910390a3610aa1848484610c02565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d906113d0565b60405180910390fd5b610b2260008383610bfd565b8060026000828254610b349190610f78565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610be59190610dd7565b60405180910390a3610bf960008383610c02565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c41578082015181840152602081019050610c26565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c6982610c07565b610c738185610c12565b9350610c83818560208601610c23565b610c8c81610c4d565b840191505092915050565b60006020820190508181036000830152610cb18184610c5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce982610cbe565b9050919050565b610cf981610cde565b8114610d0457600080fd5b50565b600081359050610d1681610cf0565b92915050565b6000819050919050565b610d2f81610d1c565b8114610d3a57600080fd5b50565b600081359050610d4c81610d26565b92915050565b60008060408385031215610d6957610d68610cb9565b5b6000610d7785828601610d07565b9250506020610d8885828601610d3d565b9150509250929050565b60008115159050919050565b610da781610d92565b82525050565b6000602082019050610dc26000830184610d9e565b92915050565b610dd181610d1c565b82525050565b6000602082019050610dec6000830184610dc8565b92915050565b600080600060608486031215610e0b57610e0a610cb9565b5b6000610e1986828701610d07565b9350506020610e2a86828701610d07565b9250506040610e3b86828701610d3d565b9150509250925092565b600060ff82169050919050565b610e5b81610e45565b82525050565b6000602082019050610e766000830184610e52565b92915050565b600060208284031215610e9257610e91610cb9565b5b6000610ea084828501610d07565b91505092915050565b60008060408385031215610ec057610ebf610cb9565b5b6000610ece85828601610d07565b9250506020610edf85828601610d07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3057607f821691505b602082108103610f4357610f42610ee9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f8382610d1c565b9150610f8e83610d1c565b9250828201905080821115610fa657610fa5610f49565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611008602583610c12565b915061101382610fac565b604082019050919050565b6000602082019050818103600083015261103781610ffb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061109a602483610c12565b91506110a58261103e565b604082019050919050565b600060208201905081810360008301526110c98161108d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061112c602283610c12565b9150611137826110d0565b604082019050919050565b6000602082019050818103600083015261115b8161111f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611198601d83610c12565b91506111a382611162565b602082019050919050565b600060208201905081810360008301526111c78161118b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061122a602583610c12565b9150611235826111ce565b604082019050919050565b600060208201905081810360008301526112598161121d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112bc602383610c12565b91506112c782611260565b604082019050919050565b600060208201905081810360008301526112eb816112af565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061134e602683610c12565b9150611359826112f2565b604082019050919050565b6000602082019050818103600083015261137d81611341565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113ba601f83610c12565b91506113c582611384565b602082019050919050565b600060208201905081810360008301526113e9816113ad565b905091905056fea2646970667358221220b66afe449715946391f543cc99f4517498de9096d263179feb5963ff082371c064736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600981526020017f54657374455243323000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464f4f000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620004b7565b508060049081620000a19190620004b7565b505050620000c03369d3c21bcecceda1000000620000c660201b60201c565b620006b9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012f90620005ff565b60405180910390fd5b6200014c600083836200023360201b60201c565b806002600082825462000160919062000650565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200021391906200069c565b60405180910390a36200022f600083836200023860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bf57607f821691505b602082108103620002d557620002d462000277565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000300565b6200034b868362000300565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000398620003926200038c8462000363565b6200036d565b62000363565b9050919050565b6000819050919050565b620003b48362000377565b620003cc620003c3826200039f565b8484546200030d565b825550505050565b600090565b620003e3620003d4565b620003f0818484620003a9565b505050565b5b8181101562000418576200040c600082620003d9565b600181019050620003f6565b5050565b601f82111562000467576200043181620002db565b6200043c84620002f0565b810160208510156200044c578190505b620004646200045b85620002f0565b830182620003f5565b50505b505050565b600082821c905092915050565b60006200048c600019846008026200046c565b1980831691505092915050565b6000620004a7838362000479565b9150826002028217905092915050565b620004c2826200023d565b67ffffffffffffffff811115620004de57620004dd62000248565b5b620004ea8254620002a6565b620004f78282856200041c565b600060209050601f8311600181146200052f57600084156200051a578287015190505b62000526858262000499565b86555062000596565b601f1984166200053f86620002db565b60005b82811015620005695784890151825560018201915060208501945060208101905062000542565b8683101562000589578489015162000585601f89168262000479565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005e7601f836200059e565b9150620005f482620005af565b602082019050919050565b600060208201905081810360008301526200061a81620005d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200065d8262000363565b91506200066a8362000363565b925082820190508082111562000685576200068462000621565b5b92915050565b620006968162000363565b82525050565b6000602082019050620006b360008301846200068b565b92915050565b61122f80620006c96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b0c565b60405180910390f35b6100e660048036038101906100e19190610bc7565b610308565b6040516100f39190610c22565b60405180910390f35b61010461032b565b6040516101119190610c4c565b60405180910390f35b610134600480360381019061012f9190610c67565b610335565b6040516101419190610c22565b60405180910390f35b610152610364565b60405161015f9190610cd6565b60405180910390f35b610182600480360381019061017d9190610bc7565b61036d565b60405161018f9190610c22565b60405180910390f35b6101b260048036038101906101ad9190610cf1565b6103a4565b6040516101bf9190610c4c565b60405180910390f35b6101d06103ec565b6040516101dd9190610b0c565b60405180910390f35b61020060048036038101906101fb9190610bc7565b61047e565b60405161020d9190610c22565b60405180910390f35b610230600480360381019061022b9190610bc7565b6104f5565b60405161023d9190610c22565b60405180910390f35b610260600480360381019061025b9190610d1e565b610518565b60405161026d9190610c4c565b60405180910390f35b60606003805461028590610d8d565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d8d565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610ded565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d8d565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e93565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c4c565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611023565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611147565b60405180910390fd5b6108e5838383610a72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a599190610c4c565b60405180910390a3610a6c848484610a77565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ab6578082015181840152602081019050610a9b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ade82610a7c565b610ae88185610a87565b9350610af8818560208601610a98565b610b0181610ac2565b840191505092915050565b60006020820190508181036000830152610b268184610ad3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b5e82610b33565b9050919050565b610b6e81610b53565b8114610b7957600080fd5b50565b600081359050610b8b81610b65565b92915050565b6000819050919050565b610ba481610b91565b8114610baf57600080fd5b50565b600081359050610bc181610b9b565b92915050565b60008060408385031215610bde57610bdd610b2e565b5b6000610bec85828601610b7c565b9250506020610bfd85828601610bb2565b9150509250929050565b60008115159050919050565b610c1c81610c07565b82525050565b6000602082019050610c376000830184610c13565b92915050565b610c4681610b91565b82525050565b6000602082019050610c616000830184610c3d565b92915050565b600080600060608486031215610c8057610c7f610b2e565b5b6000610c8e86828701610b7c565b9350506020610c9f86828701610b7c565b9250506040610cb086828701610bb2565b9150509250925092565b600060ff82169050919050565b610cd081610cba565b82525050565b6000602082019050610ceb6000830184610cc7565b92915050565b600060208284031215610d0757610d06610b2e565b5b6000610d1584828501610b7c565b91505092915050565b60008060408385031215610d3557610d34610b2e565b5b6000610d4385828601610b7c565b9250506020610d5485828601610b7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610da557607f821691505b602082108103610db857610db7610d5e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df882610b91565b9150610e0383610b91565b9250828201905080821115610e1b57610e1a610dbe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e7d602583610a87565b9150610e8882610e21565b604082019050919050565b60006020820190508181036000830152610eac81610e70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602483610a87565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602283610a87565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061100d601d83610a87565b915061101882610fd7565b602082019050919050565b6000602082019050818103600083015261103c81611000565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061109f602583610a87565b91506110aa82611043565b604082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611131602383610a87565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111c3602683610a87565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b905091905056fea2646970667358221220daf38aa4e25974cd4298a73645176a105cbb35e4e5f05836ccfc3184c2389ada64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b0c565b60405180910390f35b6100e660048036038101906100e19190610bc7565b610308565b6040516100f39190610c22565b60405180910390f35b61010461032b565b6040516101119190610c4c565b60405180910390f35b610134600480360381019061012f9190610c67565b610335565b6040516101419190610c22565b60405180910390f35b610152610364565b60405161015f9190610cd6565b60405180910390f35b610182600480360381019061017d9190610bc7565b61036d565b60405161018f9190610c22565b60405180910390f35b6101b260048036038101906101ad9190610cf1565b6103a4565b6040516101bf9190610c4c565b60405180910390f35b6101d06103ec565b6040516101dd9190610b0c565b60405180910390f35b61020060048036038101906101fb9190610bc7565b61047e565b60405161020d9190610c22565b60405180910390f35b610230600480360381019061022b9190610bc7565b6104f5565b60405161023d9190610c22565b60405180910390f35b610260600480360381019061025b9190610d1e565b610518565b60405161026d9190610c4c565b60405180910390f35b60606003805461028590610d8d565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d8d565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610ded565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d8d565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e93565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c4c565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611023565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611147565b60405180910390fd5b6108e5838383610a72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a599190610c4c565b60405180910390a3610a6c848484610a77565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ab6578082015181840152602081019050610a9b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ade82610a7c565b610ae88185610a87565b9350610af8818560208601610a98565b610b0181610ac2565b840191505092915050565b60006020820190508181036000830152610b268184610ad3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b5e82610b33565b9050919050565b610b6e81610b53565b8114610b7957600080fd5b50565b600081359050610b8b81610b65565b92915050565b6000819050919050565b610ba481610b91565b8114610baf57600080fd5b50565b600081359050610bc181610b9b565b92915050565b60008060408385031215610bde57610bdd610b2e565b5b6000610bec85828601610b7c565b9250506020610bfd85828601610bb2565b9150509250929050565b60008115159050919050565b610c1c81610c07565b82525050565b6000602082019050610c376000830184610c13565b92915050565b610c4681610b91565b82525050565b6000602082019050610c616000830184610c3d565b92915050565b600080600060608486031215610c8057610c7f610b2e565b5b6000610c8e86828701610b7c565b9350506020610c9f86828701610b7c565b9250506040610cb086828701610bb2565b9150509250925092565b600060ff82169050919050565b610cd081610cba565b82525050565b6000602082019050610ceb6000830184610cc7565b92915050565b600060208284031215610d0757610d06610b2e565b5b6000610d1584828501610b7c565b91505092915050565b60008060408385031215610d3557610d34610b2e565b5b6000610d4385828601610b7c565b9250506020610d5485828601610b7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610da557607f821691505b602082108103610db857610db7610d5e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df882610b91565b9150610e0383610b91565b9250828201905080821115610e1b57610e1a610dbe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e7d602583610a87565b9150610e8882610e21565b604082019050919050565b60006020820190508181036000830152610eac81610e70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602483610a87565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602283610a87565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061100d601d83610a87565b915061101882610fd7565b602082019050919050565b6000602082019050818103600083015261103c81611000565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061109f602583610a87565b91506110aa82611043565b604082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611131602383610a87565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111c3602683610a87565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b905091905056fea2646970667358221220daf38aa4e25974cd4298a73645176a105cbb35e4e5f05836ccfc3184c2389ada64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/x/evm/embeds/contracts/TestERC20.sol b/x/evm/embeds/contracts/TestERC20.sol index d73e400df6..9d9d8153cf 100644 --- a/x/evm/embeds/contracts/TestERC20.sol +++ b/x/evm/embeds/contracts/TestERC20.sol @@ -12,8 +12,4 @@ contract TestERC20 is ERC20 { constructor() ERC20("TestERC20", "FOO") { _mint(msg.sender, initialSupply); } - - function mint(address to, uint256 amount) public { - _mint(to, amount); - } } From baf5ee9b1883cd53353d4bc362610c71cc3dafe2 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Fri, 31 Jan 2025 12:07:35 +0100 Subject: [PATCH 08/10] chore: changelog --- CHANGELOG.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9d5bb7930..6861c98a8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,14 +67,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#2145](https://github.com/NibiruChain/nibiru/pull/2145) - chore(token-registry): add xNIBI Astrovault LST to registry - [#2147](https://github.com/NibiruChain/nibiru/pull/2147) - fix(simapp): manually add x/vesting Cosmos-SDK module types to the codec in simulation tests since they are expected by default - [#2149](https://github.com/NibiruChain/nibiru/pull/2149) - feat(evm-oracle): -add Solidity contract that we can use to expose the Nibiru Oracle in the -ChainLink interface. Publish all precompiled contracts and ABIs on npm under -the `@nibiruchain/solidity` package. + add Solidity contract that we can use to expose the Nibiru Oracle in the + ChainLink interface. Publish all precompiled contracts and ABIs on npm under + the `@nibiruchain/solidity` package. - [#2151](https://github.com/NibiruChain/nibiru/pull/2151) - feat(evm): randao support for evm - [#2152](https://github.com/NibiruChain/nibiru/pull/2152) - fix(precompile): consume gas for precompile calls regardless of error - [#2154](https://github.com/NibiruChain/nibiru/pull/2154) - fix(evm): -JSON encoding for the `EIP55Addr` struct was not following the Go conventions and -needed to include double quotes around the hexadecimal string. + JSON encoding for the `EIP55Addr` struct was not following the Go conventions and + needed to include double quotes around the hexadecimal string. - [#2156](https://github.com/NibiruChain/nibiru/pull/2156) - test(evm-e2e): add E2E test using the Nibiru Oracle's ChainLink impl - [#2157](https://github.com/NibiruChain/nibiru/pull/2157) - fix(evm): Fix unit inconsistency related to AuthInfo.Fee and txData.Fee using effective fee - [#2159](https://github.com/NibiruChain/nibiru/pull/2159) - chore(evm): Augment the Wasm msg handler so that wasm contracts cannot send MsgEthereumTx @@ -93,7 +93,9 @@ needed to include double quotes around the hexadecimal string. - [#2180](https://github.com/NibiruChain/nibiru/pull/2180) - fix(evm): apply gas consumption across the entire EVM codebase at `CallContractWithInput` - [#2183](https://github.com/NibiruChain/nibiru/pull/2183) - fix(evm): bank keeper extension gas meter type - [#2184](https://github.com/NibiruChain/nibiru/pull/2184) - test(evm): e2e tests configuration enhancements -- +- [#2150](https://github.com/NibiruChain/nibiru/pull/2150) - feat(evm): prevent funtoken from erc20 contract to be created with non-complete contracts +- + #### Nibiru EVM | Before Audit 2 - 2024-12-06 The codebase went through a third-party [Code4rena From 02210d69ab24cacaeff0c6a8d9ffa4a609f0f434 Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Sat, 1 Feb 2025 10:47:45 +0100 Subject: [PATCH 09/10] fix: use callcontract instead of estimategas --- x/evm/keeper/funtoken_from_erc20.go | 10 --- x/evm/keeper/funtoken_from_erc20_test.go | 2 +- x/evm/keeper/validate_contract.go | 99 ++++++++++++------------ 3 files changed, 52 insertions(+), 59 deletions(-) diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index c9f743c80f..772b213046 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -213,27 +213,17 @@ func (k Keeper) checkErc20ImplementsAllRequired( } for _, methodName := range methodNames { - fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@ Checking method: ", methodName) method, ok := abi.Methods[methodName] if !ok { - fmt.Println( - "method not found in contract at ", - methodName, - erc20Addr.Hex(), - ) return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) } - fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@ asking: ", methodName) hasMethod, err := k.HasMethodInContract(ctx, erc20Addr, method) if err != nil { - fmt.Println("method not found in contract at \n", methodName, erc20Addr.Hex()) return err } if !hasMethod { - fmt.Println("method not found in contract at \n", methodName, erc20Addr.Hex()) return fmt.Errorf("method '%s' not found in contract at %s", methodName, erc20Addr.Hex()) } - fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Method found: ", methodName) } return nil } diff --git a/x/evm/keeper/funtoken_from_erc20_test.go b/x/evm/keeper/funtoken_from_erc20_test.go index 0abdf9971a..2ca1b518c1 100644 --- a/x/evm/keeper/funtoken_from_erc20_test.go +++ b/x/evm/keeper/funtoken_from_erc20_test.go @@ -509,7 +509,7 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInvalidFunction() { Address: deployResp.ContractAddr, } - s.T().Log("happy: CreateFunToken for ERC20 with infinite recursion") + s.T().Log("happy: CreateFunToken for ERC20 with invalid function") s.Require().NoError(testapp.FundAccount( deps.App.BankKeeper, deps.Ctx, diff --git a/x/evm/keeper/validate_contract.go b/x/evm/keeper/validate_contract.go index ff4f53f560..68ce8f762d 100644 --- a/x/evm/keeper/validate_contract.go +++ b/x/evm/keeper/validate_contract.go @@ -2,7 +2,6 @@ package keeper import ( "context" - "encoding/json" "fmt" "math/big" "strings" @@ -10,34 +9,38 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" + gethcommon "github.com/ethereum/go-ethereum/common" + gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/NibiruChain/nibiru/v2/x/evm" ) -// HasMethodInContract does a staticcall with the given `method`'s selector + dummy args. -// If the call reverts with something like "function selector not recognized", returns false. +// Helper to check if the error indicates that execution was reverted +func isRevertedError(err error) bool { + return strings.Contains(err.Error(), "execution reverted") && + strings.Contains(err.Error(), "unable to parse reason") +} + +// HasMethodInContract checks if the contract at contractAddr +// implements the given ABI method. It constructs dummy arguments +// for the method, packs the call data (selector + arguments) and then +// calls the contract via CallContractWithInput (with commit=false). // -// In your real code, this likely needs to invoke `k.evmKeeper.CallEVM` or similar. +// If the call fails with an error (or returns a VM error) that indicates +// the function selector was not recognized, it returns false; otherwise true. func (k Keeper) HasMethodInContract( goCtx context.Context, - contractAddr common.Address, + contractAddr gethcommon.Address, method abi.Method, ) (bool, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // 1. Build input (4-byte selector + encoded args). - // We choose dummy arguments based on the method signature. - // For example, if method = "balanceOf(address)", we pass a zero address or some known address. - // For method = "transfer(address,uint256)", pass a dummy address and zero uint256, etc. - // - // To illustrate, let's say we pass "0x000000000000000000000000000000000000dEaD" for addresses, - // and 0 for all numeric arguments. This is *just* for signature detection. dummyArgs := make([]interface{}, len(method.Inputs)) - for i, inputDef := range method.Inputs { - switch inputDef.Type.T { + for i, input := range method.Inputs { + switch input.Type.T { case abi.AddressTy: - dummyArgs[i] = common.HexToAddress("0x000000000000000000000000000000000000dEaD") + // Use a zero address. + dummyArgs[i] = gethcommon.Address{} case abi.UintTy, abi.IntTy: dummyArgs[i] = big.NewInt(0) case abi.BoolTy: @@ -45,51 +48,51 @@ func (k Keeper) HasMethodInContract( case abi.StringTy: dummyArgs[i] = "" default: - // For any types you don't specifically handle, either supply some default - // or handle them according to what your use case needs. + // For any other type, pass nil. + // This function has been tested mainly on ERC20 main functions, + // so it may not work for all types. dummyArgs[i] = nil } } - input, err := method.Inputs.Pack(dummyArgs...) + inputData, err := method.Inputs.Pack(dummyArgs...) if err != nil { - return false, fmt.Errorf("packing dummy args: %w", err) + return false, err } + callData := append(method.ID, inputData...) + const fixedGasLimit uint64 = 100000 + fromAcc := evm.EVM_MODULE_ADDRESS + nonce := k.GetAccNonce(ctx, fromAcc) - // Prepend the 4-byte method selector - sig := method.ID - callData := append(sig, input...) + dummyMsg := gethcore.NewMessage( + fromAcc, + &contractAddr, + nonce, + big.NewInt(0), // value = 0 + fixedGasLimit, // use the fixed gas limit + big.NewInt(0), // gasPrice = 0 + big.NewInt(0), // gasFeeCap = 0 + big.NewInt(0), // gasTipCap = 0 + callData, + gethcore.AccessList{}, + false, // isFake = false + ) - // 2. Make a call message - callMsg := evm.JsonTxArgs{ - From: &contractAddr, - To: &contractAddr, - Input: (*hexutil.Bytes)(&callData), + evmCfg := k.GetEVMConfig(ctx) + txConfig := k.TxConfig(ctx, gethcommon.Hash{}) + stateDB := k.Bank.StateDB + if stateDB == nil { + stateDB = k.NewStateDB(ctx, txConfig) } + evmObj := k.NewEVM(ctx, dummyMsg, evmCfg, nil, stateDB) - jsonTxArgs, err := json.Marshal(&callMsg) + _, err = k.CallContractWithInput(ctx, evmObj, fromAcc, &contractAddr, false, callData, fixedGasLimit) if err != nil { - return false, fmt.Errorf("marshaling call message: %w", err) - } - - ethCallRequest := evm.EthCallRequest{ - Args: jsonTxArgs, - // This gas cap is big enough, if out of gas, something is suspicious - // in the transfer function. - GasCap: 690000000000000000, - ProposerAddress: sdk.ConsAddress(ctx.BlockHeader().ProposerAddress), - ChainId: k.EthChainID(ctx).Int64(), - } - - _, err = k.EstimateGasForEvmCallType(goCtx, ðCallRequest, evm.CallTypeRPC) - - if err == nil { + if isRevertedError(err) { + return false, nil + } return true, nil } - - if strings.Contains(err.Error(), "Estimate gas VMError: execution reverted, but unable to parse reason") { - return false, nil - } return true, nil } From 6ca6d961b95a976c6fa5319eca84e94739a3f67c Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Sat, 1 Feb 2025 10:51:28 +0100 Subject: [PATCH 10/10] fix: rever changes to testerc20.sol file --- evm-e2e/contracts/TestERC20.sol | 4 ---- 1 file changed, 4 deletions(-) diff --git a/evm-e2e/contracts/TestERC20.sol b/evm-e2e/contracts/TestERC20.sol index fdc7688465..12c9da93f7 100644 --- a/evm-e2e/contracts/TestERC20.sol +++ b/evm-e2e/contracts/TestERC20.sol @@ -12,8 +12,4 @@ contract TestERC20 is ERC20 { constructor() ERC20('TestERC20', 'FOO') { _mint(msg.sender, initialSupply); } - - function mint(address to, uint256 amount) public { - _mint(to, amount); - } }