diff --git a/cmd/loadtest/loadtest.go b/cmd/loadtest/loadtest.go index dbc99292..96015bd8 100644 --- a/cmd/loadtest/loadtest.go +++ b/cmd/loadtest/loadtest.go @@ -62,16 +62,18 @@ import ( ) const ( - loadTestModeTransaction = "t" - loadTestModeDeploy = "d" - loadTestModeCall = "c" - loadTestModeFunction = "f" - loadTestModeInc = "i" - loadTestModeRandom = "r" - loadTestModeStore = "s" - loadTestModeLong = "l" - loadTestModeERC20 = "2" - loadTestModeERC721 = "7" + loadTestModeTransaction = "t" + loadTestModeDeploy = "d" + loadTestModeCall = "c" + loadTestModeFunction = "f" + loadTestModeInc = "i" + loadTestModeRandom = "r" + loadTestModeStore = "s" + loadTestModeLong = "l" + loadTestModeERC20 = "2" + loadTestModeERC721 = "7" + loadTestModePrecompiledContracts = "p" + loadTestModePrecompiledContract = "a" codeQualitySeed = "code code code code code code code code code code code quality" codeQualityPrivateKey = "42b6e34dc21598a807dc19d7784c71b2a7a01f6480dc6f58258f78e539f1a1fa" @@ -91,6 +93,8 @@ var ( loadTestModeLong, loadTestModeERC20, loadTestModeERC721, + loadTestModePrecompiledContracts, + loadTestModePrecompiledContract, // r should be last to exclude it from random mode selection loadTestModeRandom, } @@ -286,12 +290,14 @@ t - sending transactions d - deploy contract c - call random contract functions f - call specific contract function +p - call random precompiled contracts +a - call a specific precompiled contract address s - store mode l - long running mode r - random modes 2 - ERC20 Transfers 7 - ERC721 Mints`) - ltp.Function = LoadtestCmd.PersistentFlags().Uint64P("function", "f", 1, "A specific function to be called if running with `--mode f` ") + ltp.Function = LoadtestCmd.PersistentFlags().Uint64P("function", "f", 1, "A specific function to be called if running with `--mode f` or a specific precompiled contract when running with `--mode a`") ltp.Iterations = LoadtestCmd.PersistentFlags().Uint64P("iterations", "i", 100, "If we're making contract calls, this controls how many times the contract will execute the instruction in a loop. If we are making ERC721 Mints, this indicated the minting batch size") ltp.ByteCount = LoadtestCmd.PersistentFlags().Uint64P("byte-count", "b", 1024, "If we're in store mode, this controls how many bytes we'll try to store in our contract") ltp.Seed = LoadtestCmd.PersistentFlags().Int64("seed", 123456, "A seed for generating random values and addresses") @@ -532,7 +538,7 @@ func mainLoop(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Client) erro // deploy and instantiate the load tester contract var ltAddr ethcommon.Address var ltContract *contracts.LoadTester - if strings.ContainsAny(mode, "rcfisl") || *inputLoadTestParams.ForceContractDeploy { + if strings.ContainsAny(mode, "rcfislpas") || *inputLoadTestParams.ForceContractDeploy { if *inputLoadTestParams.LtAddress == "" { ltAddr, _, _, err = contracts.DeployLoadTester(tops, c) if err != nil { @@ -692,7 +698,7 @@ func mainLoop(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Client) erro return err } startNonce := currentNonce - log.Debug().Uint64("currenNonce", currentNonce).Msg("Starting main loadtest loop") + log.Debug().Uint64("currentNonce", currentNonce).Msg("Starting main loadtest loop") var wg sync.WaitGroup for i = 0; i < routines; i = i + 1 { log.Trace().Int64("routine", i).Msg("Starting Thread") @@ -749,6 +755,10 @@ func mainLoop(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Client) erro startReq, endReq, err = loadtestERC20(ctx, c, myNonceValue, erc20Contract, ltAddr) case loadTestModeERC721: startReq, endReq, err = loadtestERC721(ctx, c, myNonceValue, erc721Contract, ltAddr) + case loadTestModePrecompiledContract: + startReq, endReq, err = loadtestCallPrecompiledContracts(ctx, c, myNonceValue, ltContract, true) + case loadTestModePrecompiledContracts: + startReq, endReq, err = loadtestCallPrecompiledContracts(ctx, c, myNonceValue, ltContract, false) default: log.Error().Str("mode", mode).Msg("We've arrived at a load test mode that we don't recognize") } @@ -766,7 +776,7 @@ func mainLoop(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Client) erro } log.Trace().Msg("Finished starting go routines. Waiting..") wg.Wait() - log.Debug().Uint64("currenNonce", currentNonce).Msg("Finished main loadtest loop") + log.Debug().Uint64("currentNonce", currentNonce).Msg("Finished main loadtest loop") log.Debug().Msg("Waiting for transactions to actually be mined") finalBlockNumber, err := waitForFinalBlock(ctx, c, rpc, startBlockNumber, startNonce, currentNonce) if err != nil { @@ -856,6 +866,7 @@ func loadtestTransaction(ctx context.Context, c *ethclient.Client, nonce uint64) t2 = time.Now() return } + func loadtestDeploy(ctx context.Context, c *ethclient.Client, nonce uint64) (t1 time.Time, t2 time.Time, err error) { ltp := inputLoadTestParams @@ -897,6 +908,7 @@ func loadtestFunction(ctx context.Context, c *ethclient.Client, nonce uint64, lt t2 = time.Now() return } + func loadtestCall(ctx context.Context, c *ethclient.Client, nonce uint64, ltContract *contracts.LoadTester) (t1 time.Time, t2 time.Time, err error) { ltp := inputLoadTestParams @@ -918,6 +930,34 @@ func loadtestCall(ctx context.Context, c *ethclient.Client, nonce uint64, ltCont t2 = time.Now() return } + +func loadtestCallPrecompiledContracts(ctx context.Context, c *ethclient.Client, nonce uint64, ltContract *contracts.LoadTester, useSelectedAddress bool) (t1 time.Time, t2 time.Time, err error) { + var f int + ltp := inputLoadTestParams + + chainID := new(big.Int).SetUint64(*ltp.ChainID) + privateKey := ltp.ECDSAPrivateKey + iterations := ltp.Iterations + if useSelectedAddress { + f = int(*ltp.Function) + } else { + f = contracts.GetRandomPrecompiledContractAddress() + } + + tops, err := bind.NewKeyedTransactorWithChainID(privateKey, chainID) + if err != nil { + log.Error().Err(err).Msg("Unable create transaction signer") + return + } + tops.Nonce = new(big.Int).SetUint64(nonce) + tops = configureTransactOpts(tops) + + t1 = time.Now() + _, err = contracts.CallPrecompiledContracts(f, ltContract, tops, *iterations, privateKey) + t2 = time.Now() + return +} + func loadtestInc(ctx context.Context, c *ethclient.Client, nonce uint64, ltContract *contracts.LoadTester) (t1 time.Time, t2 time.Time, err error) { ltp := inputLoadTestParams @@ -937,6 +977,7 @@ func loadtestInc(ctx context.Context, c *ethclient.Client, nonce uint64, ltContr t2 = time.Now() return } + func loadtestStore(ctx context.Context, c *ethclient.Client, nonce uint64, ltContract *contracts.LoadTester) (t1 time.Time, t2 time.Time, err error) { ltp := inputLoadTestParams @@ -958,6 +999,7 @@ func loadtestStore(ctx context.Context, c *ethclient.Client, nonce uint64, ltCon t2 = time.Now() return } + func loadtestLong(ctx context.Context, c *ethclient.Client, nonce uint64, delegatorContract *contracts.Delegator, ltAddress ethcommon.Address) (t1 time.Time, t2 time.Time, err error) { ltp := inputLoadTestParams @@ -1381,6 +1423,7 @@ func waitForFinalBlock(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Cli log.Trace().Uint64("currentNonce", currentNonce).Uint64("startblock", startBlockNumber).Uint64("endblock", lastBlockNumber).Msg("It looks like all transactions have been mined") return lastBlockNumber, nil } + func summarizeTransactions(ctx context.Context, c *ethclient.Client, rpc *ethrpc.Client, startBlockNumber, startNonce, lastBlockNumber, endNonce uint64) error { ltp := inputLoadTestParams var err error @@ -1647,6 +1690,7 @@ func printBlockSummary(c *ethclient.Client, bs map[uint64]blockSummary, startNon log.Error().Str("mode", summaryOutputMode).Msg("Invalid mode for summary output") } } + func getSuccessfulTransactionCount(bs map[uint64]blockSummary) (successful, total int64) { for _, block := range bs { total += int64(len(block.Receipts)) @@ -1656,6 +1700,7 @@ func getSuccessfulTransactionCount(bs map[uint64]blockSummary) (successful, tota } return } + func getTotalGasUsed(receipts map[ethcommon.Hash]rpctypes.RawTxReceipt) uint64 { var totalGasUsed uint64 = 0 for _, receipt := range receipts { @@ -1663,6 +1708,7 @@ func getTotalGasUsed(receipts map[ethcommon.Hash]rpctypes.RawTxReceipt) uint64 { } return totalGasUsed } + func getMapValues[K constraints.Ordered, V any](m map[K]V) []V { newSlice := make([]V, 0) for _, val := range m { @@ -1670,6 +1716,7 @@ func getMapValues[K constraints.Ordered, V any](m map[K]V) []V { } return newSlice } + func getMinMedianMax[V constraints.Float | constraints.Integer](values []V) (V, V, V) { if len(values) == 0 { return 0, 0, 0 diff --git a/contracts/LoadTester.abi b/contracts/LoadTester.abi index 57e1a355..d2e0ede1 100644 --- a/contracts/LoadTester.abi +++ b/contracts/LoadTester.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dumpster","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCallCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"trash","type":"bytes"}],"name":"store","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADDMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testAND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBASEFEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBLOCKHASH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBYTE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATACOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATALOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATASIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLVALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCHAINID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCODECOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCODESIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCOINBASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testDIFFICULTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testDIV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEQ","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEXP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEXTCODESIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGASLIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGASPRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testISZERO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMLOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSTORE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSTORE8","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMULMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testNOT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testNUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testORIGIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testRETURNDATACOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testRETURNDATASIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSDIV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSELFBALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSGT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHA3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSIGNEXTEND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSLOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSLT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSSTORE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSUB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testTIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testXOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dumpster","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCallCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loopBlockHashUntilLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loopUntilLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"trash","type":"bytes"}],"name":"store","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADDMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testAND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBASEFEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBLOCKHASH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testBYTE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testBlake2f","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATACOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATALOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLDATASIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCALLVALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCHAINID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCODECOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCODESIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testCOINBASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testDIFFICULTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testDIV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testECAdd","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testECMul","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testECPairing","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testECRecover","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEQ","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEXP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testEXTCODESIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGASLIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGASPRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testGT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testISZERO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testIdentity","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLOG4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testLT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMLOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSTORE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMSTORE8","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testMULMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testModExp","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testNOT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testNUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testORIGIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testRETURNDATACOPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testRETURNDATASIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testRipemd160","outputs":[{"internalType":"bytes20","name":"result","type":"bytes20"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSDIV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSELFBALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSGT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"testSHA256","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHA3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSHR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSIGNEXTEND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSLOAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSLT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSMOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSSTORE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testSUB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testTIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"testXOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/contracts/LoadTester.bin b/contracts/LoadTester.bin index 89a76eb2..c8d32967 100644 --- a/contracts/LoadTester.bin +++ b/contracts/LoadTester.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50612642806100206000396000f3fe608060405234801561001057600080fd5b50600436106103db5760003560e01c80637c191d201161020a578063bf529ca111610125578063d93cd558116100b8578063ea5141e611610087578063ea5141e614610efc578063f279ca8114610f2c578063f4d1fc6114610f5c578063f58fc36a14610f8c578063fde7721c14610fbc576103db565b8063d93cd55814610e3c578063dd9bef6014610e6c578063de97a36314610e9c578063e9f9b3f214610ecc576103db565b8063ce3cf4ef116100f4578063ce3cf4ef14610d7c578063d117320b14610dac578063d51e7b5b14610ddc578063d53ff3fd14610e0c576103db565b8063bf529ca114610cbc578063c360aba614610cec578063c420eb6114610d1c578063c4bd65d514610d4c576103db565b8063a60a10871161019d578063b3d847f21161016c578063b3d847f214610bfc578063b7b8620714610c2c578063b81c148414610c5c578063bdc875fc14610c8c576103db565b8063a60a108714610b3c578063a645c9c214610b6c578063acaebdf614610b9c578063b374012b14610bcc576103db565b8063918a5fcd116101d9578063918a5fcd14610a7c57806391e7b27714610aac57806398456f3e14610adc5780639a2b7c8114610b0c576103db565b80637c191d20146109bc5780637de8c6f8146109ec57806380947f8014610a1c578063880eff3914610a4c576103db565b80632b21ef44116102fa5780634a61af1f1161028d5780636e7f1fe71161025c5780636e7f1fe7146108fc5780636f099c8d1461092c57806371d91d281461095c5780637b6e0b0e1461098c576103db565b80634a61af1f1461083c5780634d2c74b31461086c5780635590c2d91461089c57806360e13cde146108cc576103db565b80633a411f12116102c95780633a411f121461077c5780633a425dfc146107ac57806340fe2662146107dc57806344cf3bc71461080c576103db565b80632b21ef44146106ce5780632d34e798146106fe5780633430ec061461072e578063371303c01461075e576103db565b806318093b46116103725780632007332e116103415780632007332e1461060e578063219cddeb1461063e5780632294fc7f1461066e5780632871ef851461069e576103db565b806318093b461461054e57806319b621d61461057e5780631aba07ea146105ae5780631de2f343146105de576103db565b80631287a68c116103ae5780631287a68c146104a0578063135d52f7146104be5780631581cf19146104ee578063165821501461051e576103db565b8063034aef71146103e0578063050082f814610410578063087b4e84146104405780630ba8a73b14610470575b600080fd5b6103fa60048036038101906103f591906120ad565b610fec565b60405161040791906120e9565b60405180910390f35b61042a600480360381019061042591906120ad565b611027565b60405161043791906120e9565b60405180910390f35b61045a600480360381019061045591906120ad565b611062565b60405161046791906120e9565b60405180910390f35b61048a600480360381019061048591906120ad565b61109c565b60405161049791906120e9565b60405180910390f35b6104a86110d8565b6040516104b591906120e9565b60405180910390f35b6104d860048036038101906104d391906120ad565b6110e1565b6040516104e591906120e9565b60405180910390f35b610508600480360381019061050391906120ad565b61111d565b60405161051591906120e9565b60405180910390f35b610538600480360381019061053391906120ad565b611158565b60405161054591906120e9565b60405180910390f35b610568600480360381019061056391906120ad565b6111b3565b60405161057591906120e9565b60405180910390f35b610598600480360381019061059391906120ad565b6111f1565b6040516105a591906120e9565b60405180910390f35b6105c860048036038101906105c391906120ad565b611280565b6040516105d591906120e9565b60405180910390f35b6105f860048036038101906105f391906120ad565b6112c6565b60405161060591906120e9565b60405180910390f35b610628600480360381019061062391906120ad565b611304565b60405161063591906120e9565b60405180910390f35b610658600480360381019061065391906120ad565b611340565b60405161066591906120e9565b60405180910390f35b610688600480360381019061068391906120ad565b61137b565b60405161069591906120e9565b60405180910390f35b6106b860048036038101906106b391906120ad565b6113ba565b6040516106c591906120e9565b60405180910390f35b6106e860048036038101906106e391906120ad565b6113f5565b6040516106f591906120e9565b60405180910390f35b610718600480360381019061071391906120ad565b611430565b60405161072591906120e9565b60405180910390f35b610748600480360381019061074391906120ad565b61146b565b604051610755919061219d565b60405180910390f35b610766611517565b60405161077391906120e9565b60405180910390f35b610796600480360381019061079191906120ad565b611536565b6040516107a391906120e9565b60405180910390f35b6107c660048036038101906107c191906120ad565b611572565b6040516107d391906120e9565b60405180910390f35b6107f660048036038101906107f191906120ad565b6115ae565b60405161080391906120e9565b60405180910390f35b610826600480360381019061082191906120ad565b6115ed565b60405161083391906120e9565b60405180910390f35b610856600480360381019061085191906120ad565b611628565b60405161086391906120e9565b60405180910390f35b610886600480360381019061088191906120ad565b611666565b60405161089391906120e9565b60405180910390f35b6108b660048036038101906108b191906120ad565b6116a1565b6040516108c391906120e9565b60405180910390f35b6108e660048036038101906108e191906120ad565b6116e6565b6040516108f391906120e9565b60405180910390f35b610916600480360381019061091191906120ad565b611722565b60405161092391906120e9565b60405180910390f35b610946600480360381019061094191906120ad565b611760565b60405161095391906120e9565b60405180910390f35b610976600480360381019061097191906120ad565b61179b565b60405161098391906120e9565b60405180910390f35b6109a660048036038101906109a191906120ad565b6117d9565b6040516109b391906120e9565b60405180910390f35b6109d660048036038101906109d191906120ad565b611815565b6040516109e391906120e9565b60405180910390f35b610a066004803603810190610a0191906120ad565b611850565b604051610a1391906120e9565b60405180910390f35b610a366004803603810190610a3191906120ad565b61188c565b604051610a4391906120e9565b60405180910390f35b610a666004803603810190610a6191906120ad565b6118e9565b604051610a7391906120e9565b60405180910390f35b610a966004803603810190610a9191906120ad565b611928565b604051610aa391906120e9565b60405180910390f35b610ac66004803603810190610ac191906120ad565b611963565b604051610ad391906120e9565b60405180910390f35b610af66004803603810190610af191906120ad565b6119af565b604051610b0391906120e9565b60405180910390f35b610b266004803603810190610b2191906120ad565b6119ef565b604051610b3391906120e9565b60405180910390f35b610b566004803603810190610b5191906120ad565b611a2a565b604051610b6391906120e9565b60405180910390f35b610b866004803603810190610b8191906120ad565b611a65565b604051610b9391906120e9565b60405180910390f35b610bb66004803603810190610bb191906120ad565b611aa1565b604051610bc391906120e9565b60405180910390f35b610be66004803603810190610be19190612224565b611add565b604051610bf391906120e9565b60405180910390f35b610c166004803603810190610c1191906120ad565b611b2b565b604051610c2391906120e9565b60405180910390f35b610c466004803603810190610c4191906120ad565b611b66565b604051610c5391906120e9565b60405180910390f35b610c766004803603810190610c7191906120ad565b611ba1565b604051610c8391906120e9565b60405180910390f35b610ca66004803603810190610ca191906120ad565b611bdc565b604051610cb391906120e9565b60405180910390f35b610cd66004803603810190610cd191906120ad565b611c17565b604051610ce391906120e9565b60405180910390f35b610d066004803603810190610d0191906120ad565b611c5b565b604051610d1391906120e9565b60405180910390f35b610d366004803603810190610d3191906120ad565b611c97565b604051610d4391906120e9565b60405180910390f35b610d666004803603810190610d6191906120ad565b611cd2565b604051610d7391906120e9565b60405180910390f35b610d966004803603810190610d9191906120ad565b611d10565b604051610da391906120e9565b60405180910390f35b610dc66004803603810190610dc191906120ad565b611d4d565b604051610dd391906120e9565b60405180910390f35b610df66004803603810190610df191906120ad565b611d87565b604051610e0391906120e9565b60405180910390f35b610e266004803603810190610e2191906120ad565b611dc3565b604051610e3391906120e9565b60405180910390f35b610e566004803603810190610e5191906120ad565b611dff565b604051610e6391906120e9565b60405180910390f35b610e866004803603810190610e8191906120ad565b611e5a565b604051610e9391906120e9565b60405180910390f35b610eb66004803603810190610eb191906120ad565b611e9c565b604051610ec391906120e9565b60405180910390f35b610ee66004803603810190610ee191906120ad565b611ed8565b604051610ef391906120e9565b60405180910390f35b610f166004803603810190610f1191906120ad565b611f15565b604051610f2391906120e9565b60405180910390f35b610f466004803603810190610f4191906120ad565b611f57565b604051610f5391906120e9565b60405180910390f35b610f766004803603810190610f7191906120ad565b611f93565b604051610f8391906120e9565b60405180910390f35b610fa66004803603810190610fa191906120ad565b611fd1565b604051610fb391906120e9565b60405180910390f35b610fd66004803603810190610fd191906120ad565b612010565b604051610fe391906120e9565b60405180910390f35b6000610ff6611517565b50600065deadbeef003690506000805b8481101561101c57369150600181019050611006565b505080915050919050565b6000611031611517565b50600065deadbeef003290506000805b8481101561105757329150600181019050611041565b505080915050919050565b600061106c611517565b50600065deadbeef0052905060005b83811015611092578160005260018101905061107b565b5080915050919050565b60006110a6611517565b50600065deadbeef0001905060005b838110156110ce576000820191506001810190506110b5565b5080915050919050565b60008054905090565b60006110eb611517565b50600065deadbeef0017905060005b83811015611113576000821791506001810190506110fa565b5080915050919050565b6000611127611517565b50600065deadbeef003490506000805b8481101561114d57349150600181019050611137565b505080915050919050565b6000611162611517565b50600065deadbeef0006905060005b838110156111a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82069150600181019050611171565b5080915050919050565b60006111bd611517565b50600065deadbeef001390506000805b848110156111e6576001831391506001810190506111cd565b505080915050919050565b60006111fb611517565b50600065deadbeef002090507fffffffff000000000000000000000000000000000000000000000000000000006000526000805b84811015611249576004600020915060018101905061122f565b507f29045a592007d0c246ef02c2223570da9522d0cf0f73282c79a1bc8f0bb2c238811461127657600091505b5080915050919050565b600061128a611517565b50600065deadbeef00a490508060105260005b838110156112bc576004600360028360066010a460018101905061129d565b5080915050919050565b60006112d0611517565b50600065deadbeef001a90506000805b848110156112f9578260001a91506001810190506112e0565b505080915050919050565b600061130e611517565b50600065deadbeef001b905060005b83811015611336578160001b915060018101905061131d565b5080915050919050565b600061134a611517565b50600065deadbeef004290506000805b848110156113705742915060018101905061135a565b505080915050919050565b6000611385611517565b50600065deadbeef0031905060003060005b858110156113ae5781319250600181019050611397565b50505080915050919050565b60006113c4611517565b50600065deadbeef004890506000805b848110156113ea574891506001810190506113d4565b505080915050919050565b60006113ff611517565b50600065deadbeef003d90506000805b84811015611425573d915060018101905061140f565b505080915050919050565b600061143a611517565b50600065deadbeef004390506000805b848110156114605743915060018101905061144a565b505080915050919050565b6001818154811061147b57600080fd5b906000526020600020016000915090508054611496906122a0565b80601f01602080910402602001604051908101604052809291908181526020018280546114c2906122a0565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b505050505081565b600060016000546115289190612300565b600081905550600054905090565b6000611540611517565b50600065deadbeef0004905060005b838110156115685760018204915060018101905061154f565b5080915050919050565b600061157c611517565b50600065deadbeef0037905060005b838110156115a45760206000803760018101905061158b565b5080915050919050565b60006115b8611517565b50600065deadbeef00a090508060105260005b838110156115e35760066010a06001810190506115cb565b5080915050919050565b60006115f7611517565b50600065deadbeef003390506000805b8481101561161d57339150600181019050611607565b505080915050919050565b6000611632611517565b50600065deadbeef0053905060005b8381101561165c5763deadbeef600052600181019050611641565b5080915050919050565b6000611670611517565b50600065deadbeef003a90506000805b84811015611696573a9150600181019050611680565b505080915050919050565b60006116ab611517565b50600065deadbeef0051905060008160005260005b848110156116d85760005191506001810190506116c0565b508091505080915050919050565b60006116f0611517565b50600065deadbeef001d905060005b83811015611718578160001d91506001810190506116ff565b5080915050919050565b600061172c611517565b50600065deadbeef001090506000805b848110156117555782600110915060018101905061173c565b505080915050919050565b600061176a611517565b50600065deadbeef004490506000805b848110156117905744915060018101905061177a565b505080915050919050565b60006117a5611517565b50600065deadbeef001190506000805b848110156117ce576001831191506001810190506117b5565b505080915050919050565b60006117e3611517565b50600065deadbeef003e905060005b8381101561180b5760206000803e6001810190506117f2565b5080915050919050565b600061181f611517565b50600065deadbeef004590506000805b848110156118455745915060018101905061182f565b505080915050919050565b600061185a611517565b50600065deadbeef0002905060005b8381101561188257600182029150600181019050611869565b5080915050919050565b6000611896611517565b50600065deadbeef0008905060005b838110156118df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000830891506001810190506118a5565b5080915050919050565b60006118f3611517565b50600065deadbeef005490508060005560005b8381101561191e576000549150600181019050611906565b5080915050919050565b6000611932611517565b50600065deadbeef005a90506000805b84811015611958575a9150600181019050611942565b505080915050919050565b600061196d611517565b50600065deadbeef0019905060005b83811015611993578119915060018101905061197c565b5065deadbeef001981146119a657801990505b80915050919050565b60006119b9611517565b50600065deadbeef00a190508060105260005b838110156119e5578060066010a16001810190506119cc565b5080915050919050565b60006119f9611517565b50600065deadbeef0016905060005b83811015611a20578182169150600181019050611a08565b5080915050919050565b6000611a34611517565b50600065deadbeef004690506000805b84811015611a5a57469150600181019050611a44565b505080915050919050565b6000611a6f611517565b50600065deadbeef0005905060005b83811015611a9757600182059150600181019050611a7e565b5080915050919050565b6000611aab611517565b50600065deadbeef0039905060005b83811015611ad357602060008039600181019050611aba565b5080915050919050565b60006001838390918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611b1c92919061253c565b50600180549050905092915050565b6000611b35611517565b50600065deadbeef005990506000805b84811015611b5b57599150600181019050611b45565b505080915050919050565b6000611b70611517565b50600065deadbeef003890506000805b84811015611b9657389150600181019050611b80565b505080915050919050565b6000611bab611517565b50600065deadbeef004190506000805b84811015611bd157419150600181019050611bbb565b505080915050919050565b6000611be6611517565b50600065deadbeef003090506000805b84811015611c0c57309150600181019050611bf6565b505080915050919050565b6000611c21611517565b50600065deadbeef00a390508060105260005b83811015611c5157600360028260066010a3600181019050611c34565b5080915050919050565b6000611c65611517565b50600065deadbeef000b905060005b83811015611c8d578160200b9150600181019050611c74565b5080915050919050565b6000611ca1611517565b50600065deadbeef004790506000805b84811015611cc757479150600181019050611cb1565b505080915050919050565b6000611cdc611517565b50600065deadbeef001c90506000805b84811015611d05578260001c9250600181019050611cec565b505080915050919050565b6000611d1a611517565b50600065deadbeef003590506000805b84811015611d42576000359150600181019050611d2a565b505080915050919050565b6000611d57611517565b50600065deadbeef0055905060005b83811015611d7d5781600055600181019050611d66565b5080915050919050565b6000611d91611517565b50600065deadbeef0018905060005b83811015611db957600082189150600181019050611da0565b5080915050919050565b6000611dcd611517565b50600065deadbeef0003905060005b83811015611df557600082039150600181019050611ddc565b5080915050919050565b6000611e09611517565b50600065deadbeef0007905060005b83811015611e50577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82079150600181019050611e18565b5080915050919050565b6000611e64611517565b50600065deadbeef00a290508060105260005b83811015611e925760028160066010a2600181019050611e77565b5080915050919050565b6000611ea6611517565b50600065deadbeef000a905060005b83811015611ece576001820a9150600181019050611eb5565b5080915050919050565b6000611ee2611517565b50600065deadbeef001490506000805b84811015611f0a578283149150600181019050611ef2565b505080915050919050565b6000611f1f611517565b50600065deadbeef0040905060006001430360005b85811015611f4b5781409250600181019050611f34565b50505080915050919050565b6000611f61611517565b50600065deadbeef001590506000805b84811015611f885782159150600181019050611f71565b505080915050919050565b6000611f9d611517565b50600065deadbeef001290506000805b84811015611fc657826001129150600181019050611fad565b505080915050919050565b6000611fdb611517565b50600065deadbeef003b905060003060005b8581101561200457813b9250600181019050611fed565b50505080915050919050565b600061201a611517565b50600065deadbeef0009905060005b83811015612063577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183099150600181019050612029565b5080915050919050565b600080fd5b600080fd5b6000819050919050565b61208a81612077565b811461209557600080fd5b50565b6000813590506120a781612081565b92915050565b6000602082840312156120c3576120c261206d565b5b60006120d184828501612098565b91505092915050565b6120e381612077565b82525050565b60006020820190506120fe60008301846120da565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561213e578082015181840152602081019050612123565b8381111561214d576000848401525b50505050565b6000601f19601f8301169050919050565b600061216f82612104565b612179818561210f565b9350612189818560208601612120565b61219281612153565b840191505092915050565b600060208201905081810360008301526121b78184612164565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121e4576121e36121bf565b5b8235905067ffffffffffffffff811115612201576122006121c4565b5b60208301915083600182028301111561221d5761221c6121c9565b5b9250929050565b6000806020838503121561223b5761223a61206d565b5b600083013567ffffffffffffffff81111561225957612258612072565b5b612265858286016121ce565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122b857607f821691505b6020821081036122cb576122ca612271565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061230b82612077565b915061231683612077565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561234b5761234a6122d1565b5b828201905092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826123b5565b6123fc86836123b5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061243961243461242f84612077565b612414565b612077565b9050919050565b6000819050919050565b6124538361241e565b61246761245f82612440565b8484546123c2565b825550505050565b600090565b61247c61246f565b61248781848461244a565b505050565b5b818110156124ab576124a0600082612474565b60018101905061248d565b5050565b601f8211156124f0576124c181612390565b6124ca846123a5565b810160208510156124d9578190505b6124ed6124e5856123a5565b83018261248c565b50505b505050565b600082821c905092915050565b6000612513600019846008026124f5565b1980831691505092915050565b600061252c8383612502565b9150826002028217905092915050565b6125468383612356565b67ffffffffffffffff81111561255f5761255e612361565b5b61256982546122a0565b6125748282856124af565b6000601f8311600181146125a35760008415612591578287013590505b61259b8582612520565b865550612603565b601f1984166125b186612390565b60005b828110156125d9578489013582556001820191506020850194506020810190506125b4565b868310156125f657848901356125f2601f891682612502565b8355505b6001600288020188555050505b5050505050505056fea2646970667358221220c9e1182df71dfdc6eb49d545e0c6929c5dfe19c94d7c1bba484ad70b88f8e09064736f6c634300080f0033 \ No newline at end of file +608060405234801561001057600080fd5b50612ef4806100206000396000f3fe608060405234801561001057600080fd5b50600436106104545760003560e01c806380947f8011610241578063bf529ca11161013b578063dd9bef60116100c3578063f279ca8111610087578063f279ca8114611161578063f4d1fc6114611191578063f58fc36a146111c1578063f6b0bbf7146111f1578063fde7721c1461122157610454565b8063dd9bef6014611071578063de97a363146110a1578063e9f9b3f2146110d1578063ea5141e614611101578063edf003cf1461113157610454565b8063ce3cf4ef1161010a578063ce3cf4ef14610f81578063d117320b14610fb1578063d51e7b5b14610fe1578063d53ff3fd14611011578063d93cd5581461104157610454565b8063bf529ca114610ec1578063c360aba614610ef1578063c420eb6114610f21578063c4bd65d514610f5157610454565b8063a18683cb116101c9578063b374012b1161018d578063b374012b14610dd1578063b3d847f214610e01578063b7b8620714610e31578063b81c148414610e61578063bdc875fc14610e9157610454565b8063a18683cb14610cf3578063a271b72114610d23578063a60a108714610d41578063a645c9c214610d71578063acaebdf614610da157610454565b8063962e4dc211610210578063962e4dc214610c0357806398456f3e14610c335780639a2b7c8114610c635780639cce7cf914610c93578063a040aec614610cc357610454565b806380947f8014610b43578063880eff3914610b73578063918a5fcd14610ba357806391e7b27714610bd357610454565b80633430ec061161035257806360e13cde116102da5780636f099c8d1161029e5780636f099c8d14610a5357806371d91d2814610a835780637b6e0b0e14610ab35780637c191d2014610ae35780637de8c6f814610b1357610454565b806360e13cde14610975578063613d0a82146109a557806363138d4f146109d5578063659bbb4f14610a055780636e7f1fe714610a2357610454565b806340fe26621161032157806340fe26621461088557806344cf3bc7146108b55780634a61af1f146108e55780634d2c74b3146109155780635590c2d91461094557610454565b80633430ec06146107d7578063371303c0146108075780633a411f12146108255780633a425dfc1461085557610454565b806318093b46116103e0578063219cddeb116103a4578063219cddeb146106e75780632294fc7f146107175780632871ef85146107475780632b21ef44146107775780632d34e798146107a757610454565b806318093b46146105f757806319b621d6146106275780631aba07ea146106575780631de2f343146106875780632007332e146106b757610454565b80630ba8a73b116104275780630ba8a73b146105195780631287a68c14610549578063135d52f7146105675780631581cf191461059757806316582150146105c757610454565b8063034aef7114610459578063050082f814610489578063087b4e84146104b95780630b3b996a146104e9575b600080fd5b610473600480360381019061046e9190612611565b611251565b604051610480919061264d565b60405180910390f35b6104a3600480360381019061049e9190612611565b61128c565b6040516104b0919061264d565b60405180910390f35b6104d360048036038101906104ce9190612611565b6112c7565b6040516104e0919061264d565b60405180910390f35b61050360048036038101906104fe91906127ae565b611301565b6040516105109190612876565b60405180910390f35b610533600480360381019061052e9190612611565b611328565b604051610540919061264d565b60405180910390f35b610551611364565b60405161055e919061264d565b60405180910390f35b610581600480360381019061057c9190612611565b61136d565b60405161058e919061264d565b60405180910390f35b6105b160048036038101906105ac9190612611565b6113a9565b6040516105be919061264d565b60405180910390f35b6105e160048036038101906105dc9190612611565b6113e4565b6040516105ee919061264d565b60405180910390f35b610611600480360381019061060c9190612611565b61143f565b60405161061e919061264d565b60405180910390f35b610641600480360381019061063c9190612611565b61147d565b60405161064e919061264d565b60405180910390f35b610671600480360381019061066c9190612611565b61150c565b60405161067e919061264d565b60405180910390f35b6106a1600480360381019061069c9190612611565b611552565b6040516106ae919061264d565b60405180910390f35b6106d160048036038101906106cc9190612611565b611590565b6040516106de919061264d565b60405180910390f35b61070160048036038101906106fc9190612611565b6115cc565b60405161070e919061264d565b60405180910390f35b610731600480360381019061072c9190612611565b611607565b60405161073e919061264d565b60405180910390f35b610761600480360381019061075c9190612611565b611646565b60405161076e919061264d565b60405180910390f35b610791600480360381019061078c9190612611565b611681565b60405161079e919061264d565b60405180910390f35b6107c160048036038101906107bc9190612611565b6116bc565b6040516107ce919061264d565b60405180910390f35b6107f160048036038101906107ec9190612611565b6116f7565b6040516107fe9190612876565b60405180910390f35b61080f6117a3565b60405161081c919061264d565b60405180910390f35b61083f600480360381019061083a9190612611565b6117c2565b60405161084c919061264d565b60405180910390f35b61086f600480360381019061086a9190612611565b6117fe565b60405161087c919061264d565b60405180910390f35b61089f600480360381019061089a9190612611565b61183a565b6040516108ac919061264d565b60405180910390f35b6108cf60048036038101906108ca9190612611565b611879565b6040516108dc919061264d565b60405180910390f35b6108ff60048036038101906108fa9190612611565b6118b4565b60405161090c919061264d565b60405180910390f35b61092f600480360381019061092a9190612611565b6118f2565b60405161093c919061264d565b60405180910390f35b61095f600480360381019061095a9190612611565b61192d565b60405161096c919061264d565b60405180910390f35b61098f600480360381019061098a9190612611565b611972565b60405161099c919061264d565b60405180910390f35b6109bf60048036038101906109ba91906127ae565b6119ae565b6040516109cc9190612876565b60405180910390f35b6109ef60048036038101906109ea91906127ae565b6119e0565b6040516109fc91906128b1565b60405180910390f35b610a0d611a0c565b604051610a1a919061264d565b60405180910390f35b610a3d6004803603810190610a389190612611565b611a48565b604051610a4a919061264d565b60405180910390f35b610a6d6004803603810190610a689190612611565b611a86565b604051610a7a919061264d565b60405180910390f35b610a9d6004803603810190610a989190612611565b611ac1565b604051610aaa919061264d565b60405180910390f35b610acd6004803603810190610ac89190612611565b611aff565b604051610ada919061264d565b60405180910390f35b610afd6004803603810190610af89190612611565b611b3b565b604051610b0a919061264d565b60405180910390f35b610b2d6004803603810190610b289190612611565b611b76565b604051610b3a919061264d565b60405180910390f35b610b5d6004803603810190610b589190612611565b611bb2565b604051610b6a919061264d565b60405180910390f35b610b8d6004803603810190610b889190612611565b611c0f565b604051610b9a919061264d565b60405180910390f35b610bbd6004803603810190610bb89190612611565b611c4e565b604051610bca919061264d565b60405180910390f35b610bed6004803603810190610be89190612611565b611c89565b604051610bfa919061264d565b60405180910390f35b610c1d6004803603810190610c1891906127ae565b611cd5565b604051610c2a9190612876565b60405180910390f35b610c4d6004803603810190610c489190612611565b611d43565b604051610c5a919061264d565b60405180910390f35b610c7d6004803603810190610c789190612611565b611d83565b604051610c8a919061264d565b60405180910390f35b610cad6004803603810190610ca891906127ae565b611dbe565b604051610cba9190612876565b60405180910390f35b610cdd6004803603810190610cd891906127ae565b611def565b604051610cea9190612876565b60405180910390f35b610d0d6004803603810190610d0891906127ae565b611e16565b604051610d1a919061290d565b60405180910390f35b610d2b611e98565b604051610d38919061264d565b60405180910390f35b610d5b6004803603810190610d569190612611565b611ee3565b604051610d68919061264d565b60405180910390f35b610d8b6004803603810190610d869190612611565b611f1e565b604051610d98919061264d565b60405180910390f35b610dbb6004803603810190610db69190612611565b611f5a565b604051610dc8919061264d565b60405180910390f35b610deb6004803603810190610de69190612988565b611f96565b604051610df8919061264d565b60405180910390f35b610e1b6004803603810190610e169190612611565b611fe4565b604051610e28919061264d565b60405180910390f35b610e4b6004803603810190610e469190612611565b61201f565b604051610e58919061264d565b60405180910390f35b610e7b6004803603810190610e769190612611565b61205a565b604051610e88919061264d565b60405180910390f35b610eab6004803603810190610ea69190612611565b612095565b604051610eb8919061264d565b60405180910390f35b610edb6004803603810190610ed69190612611565b6120d0565b604051610ee8919061264d565b60405180910390f35b610f0b6004803603810190610f069190612611565b612114565b604051610f18919061264d565b60405180910390f35b610f3b6004803603810190610f369190612611565b612150565b604051610f48919061264d565b60405180910390f35b610f6b6004803603810190610f669190612611565b61218b565b604051610f78919061264d565b60405180910390f35b610f9b6004803603810190610f969190612611565b6121c9565b604051610fa8919061264d565b60405180910390f35b610fcb6004803603810190610fc69190612611565b612206565b604051610fd8919061264d565b60405180910390f35b610ffb6004803603810190610ff69190612611565b612240565b604051611008919061264d565b60405180910390f35b61102b60048036038101906110269190612611565b61227c565b604051611038919061264d565b60405180910390f35b61105b60048036038101906110569190612611565b6122b8565b604051611068919061264d565b60405180910390f35b61108b60048036038101906110869190612611565b612313565b604051611098919061264d565b60405180910390f35b6110bb60048036038101906110b69190612611565b612355565b6040516110c8919061264d565b60405180910390f35b6110eb60048036038101906110e69190612611565b612391565b6040516110f8919061264d565b60405180910390f35b61111b60048036038101906111169190612611565b6123ce565b604051611128919061264d565b60405180910390f35b61114b600480360381019061114691906127ae565b612410565b6040516111589190612876565b60405180910390f35b61117b60048036038101906111769190612611565b61247f565b604051611188919061264d565b60405180910390f35b6111ab60048036038101906111a69190612611565b6124bb565b6040516111b8919061264d565b60405180910390f35b6111db60048036038101906111d69190612611565b6124f9565b6040516111e8919061264d565b60405180910390f35b61120b600480360381019061120691906127ae565b612538565b6040516112189190612a10565b60405180910390f35b61123b60048036038101906112369190612611565b61256a565b604051611248919061264d565b60405180910390f35b600061125b6117a3565b50600065deadbeef003690506000805b848110156112815736915060018101905061126b565b505080915050919050565b60006112966117a3565b50600065deadbeef003290506000805b848110156112bc573291506001810190506112a6565b505080915050919050565b60006112d16117a3565b50600065deadbeef0052905060005b838110156112f757816000526001810190506112e0565b5080915050919050565b60606000600890506040828451602086016000855af18061132157600080fd5b5050919050565b60006113326117a3565b50600065deadbeef0001905060005b8381101561135a57600082019150600181019050611341565b5080915050919050565b60008054905090565b60006113776117a3565b50600065deadbeef0017905060005b8381101561139f57600082179150600181019050611386565b5080915050919050565b60006113b36117a3565b50600065deadbeef003490506000805b848110156113d9573491506001810190506113c3565b505080915050919050565b60006113ee6117a3565b50600065deadbeef0006905060005b83811015611435577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820691506001810190506113fd565b5080915050919050565b60006114496117a3565b50600065deadbeef001390506000805b8481101561147257600183139150600181019050611459565b505080915050919050565b60006114876117a3565b50600065deadbeef002090507fffffffff000000000000000000000000000000000000000000000000000000006000526000805b848110156114d557600460002091506001810190506114bb565b507f29045a592007d0c246ef02c2223570da9522d0cf0f73282c79a1bc8f0bb2c238811461150257600091505b5080915050919050565b60006115166117a3565b50600065deadbeef00a490508060105260005b83811015611548576004600360028360066010a4600181019050611529565b5080915050919050565b600061155c6117a3565b50600065deadbeef001a90506000805b84811015611585578260001a915060018101905061156c565b505080915050919050565b600061159a6117a3565b50600065deadbeef001b905060005b838110156115c2578160001b91506001810190506115a9565b5080915050919050565b60006115d66117a3565b50600065deadbeef004290506000805b848110156115fc574291506001810190506115e6565b505080915050919050565b60006116116117a3565b50600065deadbeef0031905060003060005b8581101561163a5781319250600181019050611623565b50505080915050919050565b60006116506117a3565b50600065deadbeef004890506000805b8481101561167657489150600181019050611660565b505080915050919050565b600061168b6117a3565b50600065deadbeef003d90506000805b848110156116b1573d915060018101905061169b565b505080915050919050565b60006116c66117a3565b50600065deadbeef004390506000805b848110156116ec574391506001810190506116d6565b505080915050919050565b6002818154811061170757600080fd5b90600052602060002001600091509050805461172290612a5a565b80601f016020809104026020016040519081016040528092919081815260200182805461174e90612a5a565b801561179b5780601f106117705761010080835404028352916020019161179b565b820191906000526020600020905b81548152906001019060200180831161177e57829003601f168201915b505050505081565b600060016000546117b49190612aba565b600081905550600054905090565b60006117cc6117a3565b50600065deadbeef0004905060005b838110156117f4576001820491506001810190506117db565b5080915050919050565b60006118086117a3565b50600065deadbeef0037905060005b8381101561183057602060008037600181019050611817565b5080915050919050565b60006118446117a3565b50600065deadbeef00a090508060105260005b8381101561186f5760066010a0600181019050611857565b5080915050919050565b60006118836117a3565b50600065deadbeef003390506000805b848110156118a957339150600181019050611893565b505080915050919050565b60006118be6117a3565b50600065deadbeef0053905060005b838110156118e85763deadbeef6000526001810190506118cd565b5080915050919050565b60006118fc6117a3565b50600065deadbeef003a90506000805b84811015611922573a915060018101905061190c565b505080915050919050565b60006119376117a3565b50600065deadbeef0051905060008160005260005b8481101561196457600051915060018101905061194c565b508091505080915050919050565b600061197c6117a3565b50600065deadbeef001d905060005b838110156119a4578160001d915060018101905061198b565b5080915050919050565b606060006005905060208301835160405160208183856000885af1806119d357600080fd5b8195505050505050919050565b600080600290506020830183518360208183856000885af180611a0257600080fd5b5050505050919050565b6000611a166117a3565b505b6103e85a1115611a40576001806000828254611a349190612aba565b92505081905550611a18565b600154905090565b6000611a526117a3565b50600065deadbeef001090506000805b84811015611a7b57826001109150600181019050611a62565b505080915050919050565b6000611a906117a3565b50600065deadbeef004490506000805b84811015611ab657449150600181019050611aa0565b505080915050919050565b6000611acb6117a3565b50600065deadbeef001190506000805b84811015611af457600183119150600181019050611adb565b505080915050919050565b6000611b096117a3565b50600065deadbeef003e905060005b83811015611b315760206000803e600181019050611b18565b5080915050919050565b6000611b456117a3565b50600065deadbeef004590506000805b84811015611b6b57459150600181019050611b55565b505080915050919050565b6000611b806117a3565b50600065deadbeef0002905060005b83811015611ba857600182029150600181019050611b8f565b5080915050919050565b6000611bbc6117a3565b50600065deadbeef0008905060005b83811015611c05577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600083089150600181019050611bcb565b5080915050919050565b6000611c196117a3565b50600065deadbeef005490508060005560005b83811015611c44576000549150600181019050611c2c565b5080915050919050565b6000611c586117a3565b50600065deadbeef005a90506000805b84811015611c7e575a9150600181019050611c68565b505080915050919050565b6000611c936117a3565b50600065deadbeef0019905060005b83811015611cb95781199150600181019050611ca2565b5065deadbeef00198114611ccc57801990505b80915050919050565b606080825114611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190612b4b565b60405180910390fd5b60006007905060208301835160408482846000875af180611d3a57600080fd5b50505050919050565b6000611d4d6117a3565b50600065deadbeef00a190508060105260005b83811015611d79578060066010a1600181019050611d60565b5080915050919050565b6000611d8d6117a3565b50600065deadbeef0016905060005b83811015611db4578182169150600181019050611d9c565b5080915050919050565b6060600060049050602083018351604051818183856000885af180611de257600080fd5b8195505050505050919050565b60606000600890506040828451602086016000855af180611e0f57600080fd5b5050919050565b60006080825114611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612bb7565b60405180910390fd5b600060019050602083016020810151601f1a602082015260206040516080836000865af180611e8a57600080fd5b604051519350505050919050565b6000611ea26117a3565b505b6103e85a1115611edb576001806000828254611ec09190612aba565b9250508190555043600154611ed59190612c06565b50611ea4565b600154905090565b6000611eed6117a3565b50600065deadbeef004690506000805b84811015611f1357469150600181019050611efd565b505080915050919050565b6000611f286117a3565b50600065deadbeef0005905060005b83811015611f5057600182059150600181019050611f37565b5080915050919050565b6000611f646117a3565b50600065deadbeef0039905060005b83811015611f8c57602060008039600181019050611f73565b5080915050919050565b60006002838390918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611fd5929190612dee565b50600280549050905092915050565b6000611fee6117a3565b50600065deadbeef005990506000805b8481101561201457599150600181019050611ffe565b505080915050919050565b60006120296117a3565b50600065deadbeef003890506000805b8481101561204f57389150600181019050612039565b505080915050919050565b60006120646117a3565b50600065deadbeef004190506000805b8481101561208a57419150600181019050612074565b505080915050919050565b600061209f6117a3565b50600065deadbeef003090506000805b848110156120c5573091506001810190506120af565b505080915050919050565b60006120da6117a3565b50600065deadbeef00a390508060105260005b8381101561210a57600360028260066010a36001810190506120ed565b5080915050919050565b600061211e6117a3565b50600065deadbeef000b905060005b83811015612146578160200b915060018101905061212d565b5080915050919050565b600061215a6117a3565b50600065deadbeef004790506000805b848110156121805747915060018101905061216a565b505080915050919050565b60006121956117a3565b50600065deadbeef001c90506000805b848110156121be578260001c92506001810190506121a5565b505080915050919050565b60006121d36117a3565b50600065deadbeef003590506000805b848110156121fb5760003591506001810190506121e3565b505080915050919050565b60006122106117a3565b50600065deadbeef0055905060005b83811015612236578160005560018101905061221f565b5080915050919050565b600061224a6117a3565b50600065deadbeef0018905060005b8381101561227257600082189150600181019050612259565b5080915050919050565b60006122866117a3565b50600065deadbeef0003905060005b838110156122ae57600082039150600181019050612295565b5080915050919050565b60006122c26117a3565b50600065deadbeef0007905060005b83811015612309577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820791506001810190506122d1565b5080915050919050565b600061231d6117a3565b50600065deadbeef00a290508060105260005b8381101561234b5760028160066010a2600181019050612330565b5080915050919050565b600061235f6117a3565b50600065deadbeef000a905060005b83811015612387576001820a915060018101905061236e565b5080915050919050565b600061239b6117a3565b50600065deadbeef001490506000805b848110156123c35782831491506001810190506123ab565b505080915050919050565b60006123d86117a3565b50600065deadbeef0040905060006001430360005b8581101561240457814092506001810190506123ed565b50505080915050919050565b60606080825114612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90612b4b565b60405180910390fd5b60006006905060208301835160408482846000875af18061247657600080fd5b50505050919050565b60006124896117a3565b50600065deadbeef001590506000805b848110156124b05782159150600181019050612499565b505080915050919050565b60006124c56117a3565b50600065deadbeef001290506000805b848110156124ee578260011291506001810190506124d5565b505080915050919050565b60006125036117a3565b50600065deadbeef003b905060003060005b8581101561252c57813b9250600181019050612515565b50505080915050919050565b6000806003905060208301835160405160148183856000885af18061255c57600080fd5b815195505050505050919050565b60006125746117a3565b50600065deadbeef0009905060005b838110156125bd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183099150600181019050612583565b5080915050919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6125ee816125db565b81146125f957600080fd5b50565b60008135905061260b816125e5565b92915050565b600060208284031215612627576126266125d1565b5b6000612635848285016125fc565b91505092915050565b612647816125db565b82525050565b6000602082019050612662600083018461263e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126bb82612672565b810181811067ffffffffffffffff821117156126da576126d9612683565b5b80604052505050565b60006126ed6125c7565b90506126f982826126b2565b919050565b600067ffffffffffffffff82111561271957612718612683565b5b61272282612672565b9050602081019050919050565b82818337600083830152505050565b600061275161274c846126fe565b6126e3565b90508281526020810184848401111561276d5761276c61266d565b5b61277884828561272f565b509392505050565b600082601f83011261279557612794612668565b5b81356127a584826020860161273e565b91505092915050565b6000602082840312156127c4576127c36125d1565b5b600082013567ffffffffffffffff8111156127e2576127e16125d6565b5b6127ee84828501612780565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612831578082015181840152602081019050612816565b60008484015250505050565b6000612848826127f7565b6128528185612802565b9350612862818560208601612813565b61286b81612672565b840191505092915050565b60006020820190508181036000830152612890818461283d565b905092915050565b6000819050919050565b6128ab81612898565b82525050565b60006020820190506128c660008301846128a2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128f7826128cc565b9050919050565b612907816128ec565b82525050565b600060208201905061292260008301846128fe565b92915050565b600080fd5b600080fd5b60008083601f84011261294857612947612668565b5b8235905067ffffffffffffffff81111561296557612964612928565b5b6020830191508360018202830111156129815761298061292d565b5b9250929050565b6000806020838503121561299f5761299e6125d1565b5b600083013567ffffffffffffffff8111156129bd576129bc6125d6565b5b6129c985828601612932565b92509250509250929050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b612a0a816129d5565b82525050565b6000602082019050612a256000830184612a01565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a7257607f821691505b602082108103612a8557612a84612a2b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ac5826125db565b9150612ad0836125db565b9250828201905080821115612ae857612ae7612a8b565b5b92915050565b600082825260208201905092915050565b7f496e76616c696420696e707574206c656e677468000000000000000000000000600082015250565b6000612b35601483612aee565b9150612b4082612aff565b602082019050919050565b60006020820190508181036000830152612b6481612b28565b9050919050565b7f496e76616c696420696e7075742064617461206c656e6774682e000000000000600082015250565b6000612ba1601a83612aee565b9150612bac82612b6b565b602082019050919050565b60006020820190508181036000830152612bd081612b94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c11826125db565b9150612c1c836125db565b925082612c2c57612c2b612bd7565b5b828206905092915050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ca47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c67565b612cae8683612c67565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612ceb612ce6612ce1846125db565b612cc6565b6125db565b9050919050565b6000819050919050565b612d0583612cd0565b612d19612d1182612cf2565b848454612c74565b825550505050565b600090565b612d2e612d21565b612d39818484612cfc565b505050565b5b81811015612d5d57612d52600082612d26565b600181019050612d3f565b5050565b601f821115612da257612d7381612c42565b612d7c84612c57565b81016020851015612d8b578190505b612d9f612d9785612c57565b830182612d3e565b50505b505050565b600082821c905092915050565b6000612dc560001984600802612da7565b1980831691505092915050565b6000612dde8383612db4565b9150826002028217905092915050565b612df88383612c37565b67ffffffffffffffff811115612e1157612e10612683565b5b612e1b8254612a5a565b612e26828285612d61565b6000601f831160018114612e555760008415612e43578287013590505b612e4d8582612dd2565b865550612eb5565b601f198416612e6386612c42565b60005b82811015612e8b57848901358255600182019150602085019450602081019050612e66565b86831015612ea85784890135612ea4601f891682612db4565b8355505b6001600288020188555050505b5050505050505056fea26469706673582212203124213488c2f1fca5968787f0c3e96fba8469129a80798e11ee752903b4bfdc64736f6c63430008130033 \ No newline at end of file diff --git a/contracts/LoadTester.sol b/contracts/LoadTester.sol index c2d81699..61b96e74 100644 --- a/contracts/LoadTester.sol +++ b/contracts/LoadTester.sol @@ -561,6 +561,7 @@ contract LoadTester { } return result; } + function testDIFFICULTY(uint x) public returns(uint) { inc(); uint result = 0xDEADBEEF0044; @@ -568,11 +569,15 @@ contract LoadTester { let v := 0 for { let i := 0 } lt(i, x) { i := add(i, 1) } { - v := difficulty() + // NOTE: Post Paris, the difficulty() instruction has been supplanted for prevrandao() + // Source: https://eips.ethereum.org/EIPS/eip-4399 + // v := difficulty() + v := prevrandao() } } return result; } + function testGASLIMIT(uint x) public returns(uint) { inc(); uint result = 0xDEADBEEF0045; @@ -765,4 +770,163 @@ contract LoadTester { } return result; } + + // Precompiled Contracts + function testECRecover(bytes memory inputData) public returns (address result) { + require(inputData.length == 128, "Invalid input data length."); + + address EC_RECOVER_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000001; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + + // Set the correct 1-byte v value from the 32-byte v component + mstore(add(inputPtr, 0x20), byte(31, mload(add(inputPtr, 0x20)))) + + let success := call(gas(), EC_RECOVER_PRECOMPILED_CONTRACT, 0, inputPtr, 0x80, mload(0x40), 0x20) + if iszero(success) { + revert(0, 0) + } + + // Load the result from the memory + result := mload(mload(0x40)) + } + } + + function testSHA256(bytes memory inputData) public returns (bytes32 result) { + address SHA256_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000002; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) + let outputPtr := result + let success := call(gas(), SHA256_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, outputPtr, 0x20) + if iszero(success) { + revert(0, 0) + } + } + } + + function testRipemd160(bytes memory inputData) public returns (bytes20 result) { + address RIPEMD160_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000003; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) // Load the length of the inputData + + let outputPtr := mload(0x40) + + let success := call(gas(), RIPEMD160_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, outputPtr, 0x14) + if iszero(success) { + revert(0, 0) + } + + result := mload(outputPtr) + } + } + + function testIdentity(bytes memory inputData) public returns (bytes memory result) { + address IDENTITY_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000004; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) + + let outputPtr := mload(0x40) + + let success := call(gas(), IDENTITY_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, outputPtr, inputLength) + if iszero(success) { + revert(0, 0) + } + + result := outputPtr + } + } + + function testModExp(bytes memory inputData) public returns (bytes memory result) { + address MOD_EXP_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000005; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) + + let outputPtr := mload(0x40) + + let success := call(gas(), MOD_EXP_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, outputPtr, 0x20) + if iszero(success) { + revert(0, 0) + } + + result := outputPtr + } + } + + function testECAdd(bytes memory inputData) public returns (bytes memory result) { + require(inputData.length == 128, "Invalid input length"); + address EC_ADD_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000006; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) + + let success := call(gas(), EC_ADD_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, result, 0x40) + if iszero(success) { + revert(0, 0) + } + } + } + + function testECMul(bytes memory inputData) public returns (bytes memory result) { + require(inputData.length == 96, "Invalid input length"); + address EC_MUL_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000007; + + assembly { + let inputPtr := add(inputData, 0x20) // Ignore the length prefix of the inputData bytes array + let inputLength := mload(inputData) + + let success := call(gas(), EC_MUL_PRECOMPILED_CONTRACT, 0, inputPtr, inputLength, result, 0x40) + if iszero(success) { + revert(0, 0) + } + } + } + + function testECPairing(bytes memory inputData) public returns (bytes memory result) { + address EC_PAIRING_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000008; + + assembly { + let success := call( + gas(), + EC_PAIRING_PRECOMPILED_CONTRACT, + 0, // no ether transfer + add(inputData, 32), // inputData offset + mload(inputData), // inputData length + result, // output area + 64 // output area size (2 * 32 bytes) + ) + + if iszero(success) { + revert(0, 0) + } + } + } + + function testBlake2f(bytes memory inputData) public returns (bytes memory result) { + address BLAKE_2F_PRECOMPILED_CONTRACT = 0x0000000000000000000000000000000000000008; + + assembly { + let success := call( + gas(), + BLAKE_2F_PRECOMPILED_CONTRACT, + 0, // no ether transfer + add(inputData, 32), // inputData offset + mload(inputData), // inputData length + result, // output area + 64 // output area size (2 * 32 bytes) + ) + if iszero(success) { + revert(0, 0) + } + } + } } diff --git a/contracts/loadtester.go b/contracts/loadtester.go index 367296a3..12967932 100644 --- a/contracts/loadtester.go +++ b/contracts/loadtester.go @@ -26,12 +26,13 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // LoadTesterMetaData contains all meta data concerning the LoadTester contract. var LoadTesterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dumpster\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCallCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"trash\",\"type\":\"bytes\"}],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADDMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADDRESS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testAND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBASEFEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBLOCKHASH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATACOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATALOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATASIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLVALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCHAINID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCODECOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCODESIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCOINBASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testDIFFICULTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testDIV\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEQ\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEXP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEXTCODESIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGASLIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGASPRICE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testISZERO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG0\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG4\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMLOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSTORE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSTORE8\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMUL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMULMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testNOT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testNUMBER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testORIGIN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testRETURNDATACOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testRETURNDATASIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSDIV\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSELFBALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSGT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHA3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSIGNEXTEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSLOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSLT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSSTORE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSUB\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testTIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testXOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50612642806100206000396000f3fe608060405234801561001057600080fd5b50600436106103db5760003560e01c80637c191d201161020a578063bf529ca111610125578063d93cd558116100b8578063ea5141e611610087578063ea5141e614610efc578063f279ca8114610f2c578063f4d1fc6114610f5c578063f58fc36a14610f8c578063fde7721c14610fbc576103db565b8063d93cd55814610e3c578063dd9bef6014610e6c578063de97a36314610e9c578063e9f9b3f214610ecc576103db565b8063ce3cf4ef116100f4578063ce3cf4ef14610d7c578063d117320b14610dac578063d51e7b5b14610ddc578063d53ff3fd14610e0c576103db565b8063bf529ca114610cbc578063c360aba614610cec578063c420eb6114610d1c578063c4bd65d514610d4c576103db565b8063a60a10871161019d578063b3d847f21161016c578063b3d847f214610bfc578063b7b8620714610c2c578063b81c148414610c5c578063bdc875fc14610c8c576103db565b8063a60a108714610b3c578063a645c9c214610b6c578063acaebdf614610b9c578063b374012b14610bcc576103db565b8063918a5fcd116101d9578063918a5fcd14610a7c57806391e7b27714610aac57806398456f3e14610adc5780639a2b7c8114610b0c576103db565b80637c191d20146109bc5780637de8c6f8146109ec57806380947f8014610a1c578063880eff3914610a4c576103db565b80632b21ef44116102fa5780634a61af1f1161028d5780636e7f1fe71161025c5780636e7f1fe7146108fc5780636f099c8d1461092c57806371d91d281461095c5780637b6e0b0e1461098c576103db565b80634a61af1f1461083c5780634d2c74b31461086c5780635590c2d91461089c57806360e13cde146108cc576103db565b80633a411f12116102c95780633a411f121461077c5780633a425dfc146107ac57806340fe2662146107dc57806344cf3bc71461080c576103db565b80632b21ef44146106ce5780632d34e798146106fe5780633430ec061461072e578063371303c01461075e576103db565b806318093b46116103725780632007332e116103415780632007332e1461060e578063219cddeb1461063e5780632294fc7f1461066e5780632871ef851461069e576103db565b806318093b461461054e57806319b621d61461057e5780631aba07ea146105ae5780631de2f343146105de576103db565b80631287a68c116103ae5780631287a68c146104a0578063135d52f7146104be5780631581cf19146104ee578063165821501461051e576103db565b8063034aef71146103e0578063050082f814610410578063087b4e84146104405780630ba8a73b14610470575b600080fd5b6103fa60048036038101906103f591906120ad565b610fec565b60405161040791906120e9565b60405180910390f35b61042a600480360381019061042591906120ad565b611027565b60405161043791906120e9565b60405180910390f35b61045a600480360381019061045591906120ad565b611062565b60405161046791906120e9565b60405180910390f35b61048a600480360381019061048591906120ad565b61109c565b60405161049791906120e9565b60405180910390f35b6104a86110d8565b6040516104b591906120e9565b60405180910390f35b6104d860048036038101906104d391906120ad565b6110e1565b6040516104e591906120e9565b60405180910390f35b610508600480360381019061050391906120ad565b61111d565b60405161051591906120e9565b60405180910390f35b610538600480360381019061053391906120ad565b611158565b60405161054591906120e9565b60405180910390f35b610568600480360381019061056391906120ad565b6111b3565b60405161057591906120e9565b60405180910390f35b610598600480360381019061059391906120ad565b6111f1565b6040516105a591906120e9565b60405180910390f35b6105c860048036038101906105c391906120ad565b611280565b6040516105d591906120e9565b60405180910390f35b6105f860048036038101906105f391906120ad565b6112c6565b60405161060591906120e9565b60405180910390f35b610628600480360381019061062391906120ad565b611304565b60405161063591906120e9565b60405180910390f35b610658600480360381019061065391906120ad565b611340565b60405161066591906120e9565b60405180910390f35b610688600480360381019061068391906120ad565b61137b565b60405161069591906120e9565b60405180910390f35b6106b860048036038101906106b391906120ad565b6113ba565b6040516106c591906120e9565b60405180910390f35b6106e860048036038101906106e391906120ad565b6113f5565b6040516106f591906120e9565b60405180910390f35b610718600480360381019061071391906120ad565b611430565b60405161072591906120e9565b60405180910390f35b610748600480360381019061074391906120ad565b61146b565b604051610755919061219d565b60405180910390f35b610766611517565b60405161077391906120e9565b60405180910390f35b610796600480360381019061079191906120ad565b611536565b6040516107a391906120e9565b60405180910390f35b6107c660048036038101906107c191906120ad565b611572565b6040516107d391906120e9565b60405180910390f35b6107f660048036038101906107f191906120ad565b6115ae565b60405161080391906120e9565b60405180910390f35b610826600480360381019061082191906120ad565b6115ed565b60405161083391906120e9565b60405180910390f35b610856600480360381019061085191906120ad565b611628565b60405161086391906120e9565b60405180910390f35b610886600480360381019061088191906120ad565b611666565b60405161089391906120e9565b60405180910390f35b6108b660048036038101906108b191906120ad565b6116a1565b6040516108c391906120e9565b60405180910390f35b6108e660048036038101906108e191906120ad565b6116e6565b6040516108f391906120e9565b60405180910390f35b610916600480360381019061091191906120ad565b611722565b60405161092391906120e9565b60405180910390f35b610946600480360381019061094191906120ad565b611760565b60405161095391906120e9565b60405180910390f35b610976600480360381019061097191906120ad565b61179b565b60405161098391906120e9565b60405180910390f35b6109a660048036038101906109a191906120ad565b6117d9565b6040516109b391906120e9565b60405180910390f35b6109d660048036038101906109d191906120ad565b611815565b6040516109e391906120e9565b60405180910390f35b610a066004803603810190610a0191906120ad565b611850565b604051610a1391906120e9565b60405180910390f35b610a366004803603810190610a3191906120ad565b61188c565b604051610a4391906120e9565b60405180910390f35b610a666004803603810190610a6191906120ad565b6118e9565b604051610a7391906120e9565b60405180910390f35b610a966004803603810190610a9191906120ad565b611928565b604051610aa391906120e9565b60405180910390f35b610ac66004803603810190610ac191906120ad565b611963565b604051610ad391906120e9565b60405180910390f35b610af66004803603810190610af191906120ad565b6119af565b604051610b0391906120e9565b60405180910390f35b610b266004803603810190610b2191906120ad565b6119ef565b604051610b3391906120e9565b60405180910390f35b610b566004803603810190610b5191906120ad565b611a2a565b604051610b6391906120e9565b60405180910390f35b610b866004803603810190610b8191906120ad565b611a65565b604051610b9391906120e9565b60405180910390f35b610bb66004803603810190610bb191906120ad565b611aa1565b604051610bc391906120e9565b60405180910390f35b610be66004803603810190610be19190612224565b611add565b604051610bf391906120e9565b60405180910390f35b610c166004803603810190610c1191906120ad565b611b2b565b604051610c2391906120e9565b60405180910390f35b610c466004803603810190610c4191906120ad565b611b66565b604051610c5391906120e9565b60405180910390f35b610c766004803603810190610c7191906120ad565b611ba1565b604051610c8391906120e9565b60405180910390f35b610ca66004803603810190610ca191906120ad565b611bdc565b604051610cb391906120e9565b60405180910390f35b610cd66004803603810190610cd191906120ad565b611c17565b604051610ce391906120e9565b60405180910390f35b610d066004803603810190610d0191906120ad565b611c5b565b604051610d1391906120e9565b60405180910390f35b610d366004803603810190610d3191906120ad565b611c97565b604051610d4391906120e9565b60405180910390f35b610d666004803603810190610d6191906120ad565b611cd2565b604051610d7391906120e9565b60405180910390f35b610d966004803603810190610d9191906120ad565b611d10565b604051610da391906120e9565b60405180910390f35b610dc66004803603810190610dc191906120ad565b611d4d565b604051610dd391906120e9565b60405180910390f35b610df66004803603810190610df191906120ad565b611d87565b604051610e0391906120e9565b60405180910390f35b610e266004803603810190610e2191906120ad565b611dc3565b604051610e3391906120e9565b60405180910390f35b610e566004803603810190610e5191906120ad565b611dff565b604051610e6391906120e9565b60405180910390f35b610e866004803603810190610e8191906120ad565b611e5a565b604051610e9391906120e9565b60405180910390f35b610eb66004803603810190610eb191906120ad565b611e9c565b604051610ec391906120e9565b60405180910390f35b610ee66004803603810190610ee191906120ad565b611ed8565b604051610ef391906120e9565b60405180910390f35b610f166004803603810190610f1191906120ad565b611f15565b604051610f2391906120e9565b60405180910390f35b610f466004803603810190610f4191906120ad565b611f57565b604051610f5391906120e9565b60405180910390f35b610f766004803603810190610f7191906120ad565b611f93565b604051610f8391906120e9565b60405180910390f35b610fa66004803603810190610fa191906120ad565b611fd1565b604051610fb391906120e9565b60405180910390f35b610fd66004803603810190610fd191906120ad565b612010565b604051610fe391906120e9565b60405180910390f35b6000610ff6611517565b50600065deadbeef003690506000805b8481101561101c57369150600181019050611006565b505080915050919050565b6000611031611517565b50600065deadbeef003290506000805b8481101561105757329150600181019050611041565b505080915050919050565b600061106c611517565b50600065deadbeef0052905060005b83811015611092578160005260018101905061107b565b5080915050919050565b60006110a6611517565b50600065deadbeef0001905060005b838110156110ce576000820191506001810190506110b5565b5080915050919050565b60008054905090565b60006110eb611517565b50600065deadbeef0017905060005b83811015611113576000821791506001810190506110fa565b5080915050919050565b6000611127611517565b50600065deadbeef003490506000805b8481101561114d57349150600181019050611137565b505080915050919050565b6000611162611517565b50600065deadbeef0006905060005b838110156111a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82069150600181019050611171565b5080915050919050565b60006111bd611517565b50600065deadbeef001390506000805b848110156111e6576001831391506001810190506111cd565b505080915050919050565b60006111fb611517565b50600065deadbeef002090507fffffffff000000000000000000000000000000000000000000000000000000006000526000805b84811015611249576004600020915060018101905061122f565b507f29045a592007d0c246ef02c2223570da9522d0cf0f73282c79a1bc8f0bb2c238811461127657600091505b5080915050919050565b600061128a611517565b50600065deadbeef00a490508060105260005b838110156112bc576004600360028360066010a460018101905061129d565b5080915050919050565b60006112d0611517565b50600065deadbeef001a90506000805b848110156112f9578260001a91506001810190506112e0565b505080915050919050565b600061130e611517565b50600065deadbeef001b905060005b83811015611336578160001b915060018101905061131d565b5080915050919050565b600061134a611517565b50600065deadbeef004290506000805b848110156113705742915060018101905061135a565b505080915050919050565b6000611385611517565b50600065deadbeef0031905060003060005b858110156113ae5781319250600181019050611397565b50505080915050919050565b60006113c4611517565b50600065deadbeef004890506000805b848110156113ea574891506001810190506113d4565b505080915050919050565b60006113ff611517565b50600065deadbeef003d90506000805b84811015611425573d915060018101905061140f565b505080915050919050565b600061143a611517565b50600065deadbeef004390506000805b848110156114605743915060018101905061144a565b505080915050919050565b6001818154811061147b57600080fd5b906000526020600020016000915090508054611496906122a0565b80601f01602080910402602001604051908101604052809291908181526020018280546114c2906122a0565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b505050505081565b600060016000546115289190612300565b600081905550600054905090565b6000611540611517565b50600065deadbeef0004905060005b838110156115685760018204915060018101905061154f565b5080915050919050565b600061157c611517565b50600065deadbeef0037905060005b838110156115a45760206000803760018101905061158b565b5080915050919050565b60006115b8611517565b50600065deadbeef00a090508060105260005b838110156115e35760066010a06001810190506115cb565b5080915050919050565b60006115f7611517565b50600065deadbeef003390506000805b8481101561161d57339150600181019050611607565b505080915050919050565b6000611632611517565b50600065deadbeef0053905060005b8381101561165c5763deadbeef600052600181019050611641565b5080915050919050565b6000611670611517565b50600065deadbeef003a90506000805b84811015611696573a9150600181019050611680565b505080915050919050565b60006116ab611517565b50600065deadbeef0051905060008160005260005b848110156116d85760005191506001810190506116c0565b508091505080915050919050565b60006116f0611517565b50600065deadbeef001d905060005b83811015611718578160001d91506001810190506116ff565b5080915050919050565b600061172c611517565b50600065deadbeef001090506000805b848110156117555782600110915060018101905061173c565b505080915050919050565b600061176a611517565b50600065deadbeef004490506000805b848110156117905744915060018101905061177a565b505080915050919050565b60006117a5611517565b50600065deadbeef001190506000805b848110156117ce576001831191506001810190506117b5565b505080915050919050565b60006117e3611517565b50600065deadbeef003e905060005b8381101561180b5760206000803e6001810190506117f2565b5080915050919050565b600061181f611517565b50600065deadbeef004590506000805b848110156118455745915060018101905061182f565b505080915050919050565b600061185a611517565b50600065deadbeef0002905060005b8381101561188257600182029150600181019050611869565b5080915050919050565b6000611896611517565b50600065deadbeef0008905060005b838110156118df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000830891506001810190506118a5565b5080915050919050565b60006118f3611517565b50600065deadbeef005490508060005560005b8381101561191e576000549150600181019050611906565b5080915050919050565b6000611932611517565b50600065deadbeef005a90506000805b84811015611958575a9150600181019050611942565b505080915050919050565b600061196d611517565b50600065deadbeef0019905060005b83811015611993578119915060018101905061197c565b5065deadbeef001981146119a657801990505b80915050919050565b60006119b9611517565b50600065deadbeef00a190508060105260005b838110156119e5578060066010a16001810190506119cc565b5080915050919050565b60006119f9611517565b50600065deadbeef0016905060005b83811015611a20578182169150600181019050611a08565b5080915050919050565b6000611a34611517565b50600065deadbeef004690506000805b84811015611a5a57469150600181019050611a44565b505080915050919050565b6000611a6f611517565b50600065deadbeef0005905060005b83811015611a9757600182059150600181019050611a7e565b5080915050919050565b6000611aab611517565b50600065deadbeef0039905060005b83811015611ad357602060008039600181019050611aba565b5080915050919050565b60006001838390918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611b1c92919061253c565b50600180549050905092915050565b6000611b35611517565b50600065deadbeef005990506000805b84811015611b5b57599150600181019050611b45565b505080915050919050565b6000611b70611517565b50600065deadbeef003890506000805b84811015611b9657389150600181019050611b80565b505080915050919050565b6000611bab611517565b50600065deadbeef004190506000805b84811015611bd157419150600181019050611bbb565b505080915050919050565b6000611be6611517565b50600065deadbeef003090506000805b84811015611c0c57309150600181019050611bf6565b505080915050919050565b6000611c21611517565b50600065deadbeef00a390508060105260005b83811015611c5157600360028260066010a3600181019050611c34565b5080915050919050565b6000611c65611517565b50600065deadbeef000b905060005b83811015611c8d578160200b9150600181019050611c74565b5080915050919050565b6000611ca1611517565b50600065deadbeef004790506000805b84811015611cc757479150600181019050611cb1565b505080915050919050565b6000611cdc611517565b50600065deadbeef001c90506000805b84811015611d05578260001c9250600181019050611cec565b505080915050919050565b6000611d1a611517565b50600065deadbeef003590506000805b84811015611d42576000359150600181019050611d2a565b505080915050919050565b6000611d57611517565b50600065deadbeef0055905060005b83811015611d7d5781600055600181019050611d66565b5080915050919050565b6000611d91611517565b50600065deadbeef0018905060005b83811015611db957600082189150600181019050611da0565b5080915050919050565b6000611dcd611517565b50600065deadbeef0003905060005b83811015611df557600082039150600181019050611ddc565b5080915050919050565b6000611e09611517565b50600065deadbeef0007905060005b83811015611e50577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82079150600181019050611e18565b5080915050919050565b6000611e64611517565b50600065deadbeef00a290508060105260005b83811015611e925760028160066010a2600181019050611e77565b5080915050919050565b6000611ea6611517565b50600065deadbeef000a905060005b83811015611ece576001820a9150600181019050611eb5565b5080915050919050565b6000611ee2611517565b50600065deadbeef001490506000805b84811015611f0a578283149150600181019050611ef2565b505080915050919050565b6000611f1f611517565b50600065deadbeef0040905060006001430360005b85811015611f4b5781409250600181019050611f34565b50505080915050919050565b6000611f61611517565b50600065deadbeef001590506000805b84811015611f885782159150600181019050611f71565b505080915050919050565b6000611f9d611517565b50600065deadbeef001290506000805b84811015611fc657826001129150600181019050611fad565b505080915050919050565b6000611fdb611517565b50600065deadbeef003b905060003060005b8581101561200457813b9250600181019050611fed565b50505080915050919050565b600061201a611517565b50600065deadbeef0009905060005b83811015612063577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183099150600181019050612029565b5080915050919050565b600080fd5b600080fd5b6000819050919050565b61208a81612077565b811461209557600080fd5b50565b6000813590506120a781612081565b92915050565b6000602082840312156120c3576120c261206d565b5b60006120d184828501612098565b91505092915050565b6120e381612077565b82525050565b60006020820190506120fe60008301846120da565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561213e578082015181840152602081019050612123565b8381111561214d576000848401525b50505050565b6000601f19601f8301169050919050565b600061216f82612104565b612179818561210f565b9350612189818560208601612120565b61219281612153565b840191505092915050565b600060208201905081810360008301526121b78184612164565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121e4576121e36121bf565b5b8235905067ffffffffffffffff811115612201576122006121c4565b5b60208301915083600182028301111561221d5761221c6121c9565b5b9250929050565b6000806020838503121561223b5761223a61206d565b5b600083013567ffffffffffffffff81111561225957612258612072565b5b612265858286016121ce565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122b857607f821691505b6020821081036122cb576122ca612271565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061230b82612077565b915061231683612077565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561234b5761234a6122d1565b5b828201905092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826123b5565b6123fc86836123b5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061243961243461242f84612077565b612414565b612077565b9050919050565b6000819050919050565b6124538361241e565b61246761245f82612440565b8484546123c2565b825550505050565b600090565b61247c61246f565b61248781848461244a565b505050565b5b818110156124ab576124a0600082612474565b60018101905061248d565b5050565b601f8211156124f0576124c181612390565b6124ca846123a5565b810160208510156124d9578190505b6124ed6124e5856123a5565b83018261248c565b50505b505050565b600082821c905092915050565b6000612513600019846008026124f5565b1980831691505092915050565b600061252c8383612502565b9150826002028217905092915050565b6125468383612356565b67ffffffffffffffff81111561255f5761255e612361565b5b61256982546122a0565b6125748282856124af565b6000601f8311600181146125a35760008415612591578287013590505b61259b8582612520565b865550612603565b601f1984166125b186612390565b60005b828110156125d9578489013582556001820191506020850194506020810190506125b4565b868310156125f657848901356125f2601f891682612502565b8355505b6001600288020188555050505b5050505050505056fea2646970667358221220c9e1182df71dfdc6eb49d545e0c6929c5dfe19c94d7c1bba484ad70b88f8e09064736f6c634300080f0033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dumpster\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCallCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loopBlockHashUntilLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loopUntilLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"trash\",\"type\":\"bytes\"}],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADDMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testADDRESS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testAND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBASEFEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBLOCKHASH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testBYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testBlake2f\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATACOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATALOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLDATASIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCALLVALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCHAINID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCODECOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCODESIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testCOINBASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testDIFFICULTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testDIV\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testECAdd\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testECMul\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testECPairing\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testECRecover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEQ\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEXP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testEXTCODESIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGASLIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGASPRICE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testGT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testISZERO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testIdentity\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG0\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLOG4\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testLT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMLOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSTORE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMSTORE8\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMUL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testMULMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testModExp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testNOT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testNUMBER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testORIGIN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testRETURNDATACOPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testRETURNDATASIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testRipemd160\",\"outputs\":[{\"internalType\":\"bytes20\",\"name\":\"result\",\"type\":\"bytes20\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSDIV\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSELFBALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSGT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"testSHA256\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"result\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHA3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSHR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSIGNEXTEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSLOAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSLT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSMOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSSTORE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testSUB\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testTIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"testXOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50612ef4806100206000396000f3fe608060405234801561001057600080fd5b50600436106104545760003560e01c806380947f8011610241578063bf529ca11161013b578063dd9bef60116100c3578063f279ca8111610087578063f279ca8114611161578063f4d1fc6114611191578063f58fc36a146111c1578063f6b0bbf7146111f1578063fde7721c1461122157610454565b8063dd9bef6014611071578063de97a363146110a1578063e9f9b3f2146110d1578063ea5141e614611101578063edf003cf1461113157610454565b8063ce3cf4ef1161010a578063ce3cf4ef14610f81578063d117320b14610fb1578063d51e7b5b14610fe1578063d53ff3fd14611011578063d93cd5581461104157610454565b8063bf529ca114610ec1578063c360aba614610ef1578063c420eb6114610f21578063c4bd65d514610f5157610454565b8063a18683cb116101c9578063b374012b1161018d578063b374012b14610dd1578063b3d847f214610e01578063b7b8620714610e31578063b81c148414610e61578063bdc875fc14610e9157610454565b8063a18683cb14610cf3578063a271b72114610d23578063a60a108714610d41578063a645c9c214610d71578063acaebdf614610da157610454565b8063962e4dc211610210578063962e4dc214610c0357806398456f3e14610c335780639a2b7c8114610c635780639cce7cf914610c93578063a040aec614610cc357610454565b806380947f8014610b43578063880eff3914610b73578063918a5fcd14610ba357806391e7b27714610bd357610454565b80633430ec061161035257806360e13cde116102da5780636f099c8d1161029e5780636f099c8d14610a5357806371d91d2814610a835780637b6e0b0e14610ab35780637c191d2014610ae35780637de8c6f814610b1357610454565b806360e13cde14610975578063613d0a82146109a557806363138d4f146109d5578063659bbb4f14610a055780636e7f1fe714610a2357610454565b806340fe26621161032157806340fe26621461088557806344cf3bc7146108b55780634a61af1f146108e55780634d2c74b3146109155780635590c2d91461094557610454565b80633430ec06146107d7578063371303c0146108075780633a411f12146108255780633a425dfc1461085557610454565b806318093b46116103e0578063219cddeb116103a4578063219cddeb146106e75780632294fc7f146107175780632871ef85146107475780632b21ef44146107775780632d34e798146107a757610454565b806318093b46146105f757806319b621d6146106275780631aba07ea146106575780631de2f343146106875780632007332e146106b757610454565b80630ba8a73b116104275780630ba8a73b146105195780631287a68c14610549578063135d52f7146105675780631581cf191461059757806316582150146105c757610454565b8063034aef7114610459578063050082f814610489578063087b4e84146104b95780630b3b996a146104e9575b600080fd5b610473600480360381019061046e9190612611565b611251565b604051610480919061264d565b60405180910390f35b6104a3600480360381019061049e9190612611565b61128c565b6040516104b0919061264d565b60405180910390f35b6104d360048036038101906104ce9190612611565b6112c7565b6040516104e0919061264d565b60405180910390f35b61050360048036038101906104fe91906127ae565b611301565b6040516105109190612876565b60405180910390f35b610533600480360381019061052e9190612611565b611328565b604051610540919061264d565b60405180910390f35b610551611364565b60405161055e919061264d565b60405180910390f35b610581600480360381019061057c9190612611565b61136d565b60405161058e919061264d565b60405180910390f35b6105b160048036038101906105ac9190612611565b6113a9565b6040516105be919061264d565b60405180910390f35b6105e160048036038101906105dc9190612611565b6113e4565b6040516105ee919061264d565b60405180910390f35b610611600480360381019061060c9190612611565b61143f565b60405161061e919061264d565b60405180910390f35b610641600480360381019061063c9190612611565b61147d565b60405161064e919061264d565b60405180910390f35b610671600480360381019061066c9190612611565b61150c565b60405161067e919061264d565b60405180910390f35b6106a1600480360381019061069c9190612611565b611552565b6040516106ae919061264d565b60405180910390f35b6106d160048036038101906106cc9190612611565b611590565b6040516106de919061264d565b60405180910390f35b61070160048036038101906106fc9190612611565b6115cc565b60405161070e919061264d565b60405180910390f35b610731600480360381019061072c9190612611565b611607565b60405161073e919061264d565b60405180910390f35b610761600480360381019061075c9190612611565b611646565b60405161076e919061264d565b60405180910390f35b610791600480360381019061078c9190612611565b611681565b60405161079e919061264d565b60405180910390f35b6107c160048036038101906107bc9190612611565b6116bc565b6040516107ce919061264d565b60405180910390f35b6107f160048036038101906107ec9190612611565b6116f7565b6040516107fe9190612876565b60405180910390f35b61080f6117a3565b60405161081c919061264d565b60405180910390f35b61083f600480360381019061083a9190612611565b6117c2565b60405161084c919061264d565b60405180910390f35b61086f600480360381019061086a9190612611565b6117fe565b60405161087c919061264d565b60405180910390f35b61089f600480360381019061089a9190612611565b61183a565b6040516108ac919061264d565b60405180910390f35b6108cf60048036038101906108ca9190612611565b611879565b6040516108dc919061264d565b60405180910390f35b6108ff60048036038101906108fa9190612611565b6118b4565b60405161090c919061264d565b60405180910390f35b61092f600480360381019061092a9190612611565b6118f2565b60405161093c919061264d565b60405180910390f35b61095f600480360381019061095a9190612611565b61192d565b60405161096c919061264d565b60405180910390f35b61098f600480360381019061098a9190612611565b611972565b60405161099c919061264d565b60405180910390f35b6109bf60048036038101906109ba91906127ae565b6119ae565b6040516109cc9190612876565b60405180910390f35b6109ef60048036038101906109ea91906127ae565b6119e0565b6040516109fc91906128b1565b60405180910390f35b610a0d611a0c565b604051610a1a919061264d565b60405180910390f35b610a3d6004803603810190610a389190612611565b611a48565b604051610a4a919061264d565b60405180910390f35b610a6d6004803603810190610a689190612611565b611a86565b604051610a7a919061264d565b60405180910390f35b610a9d6004803603810190610a989190612611565b611ac1565b604051610aaa919061264d565b60405180910390f35b610acd6004803603810190610ac89190612611565b611aff565b604051610ada919061264d565b60405180910390f35b610afd6004803603810190610af89190612611565b611b3b565b604051610b0a919061264d565b60405180910390f35b610b2d6004803603810190610b289190612611565b611b76565b604051610b3a919061264d565b60405180910390f35b610b5d6004803603810190610b589190612611565b611bb2565b604051610b6a919061264d565b60405180910390f35b610b8d6004803603810190610b889190612611565b611c0f565b604051610b9a919061264d565b60405180910390f35b610bbd6004803603810190610bb89190612611565b611c4e565b604051610bca919061264d565b60405180910390f35b610bed6004803603810190610be89190612611565b611c89565b604051610bfa919061264d565b60405180910390f35b610c1d6004803603810190610c1891906127ae565b611cd5565b604051610c2a9190612876565b60405180910390f35b610c4d6004803603810190610c489190612611565b611d43565b604051610c5a919061264d565b60405180910390f35b610c7d6004803603810190610c789190612611565b611d83565b604051610c8a919061264d565b60405180910390f35b610cad6004803603810190610ca891906127ae565b611dbe565b604051610cba9190612876565b60405180910390f35b610cdd6004803603810190610cd891906127ae565b611def565b604051610cea9190612876565b60405180910390f35b610d0d6004803603810190610d0891906127ae565b611e16565b604051610d1a919061290d565b60405180910390f35b610d2b611e98565b604051610d38919061264d565b60405180910390f35b610d5b6004803603810190610d569190612611565b611ee3565b604051610d68919061264d565b60405180910390f35b610d8b6004803603810190610d869190612611565b611f1e565b604051610d98919061264d565b60405180910390f35b610dbb6004803603810190610db69190612611565b611f5a565b604051610dc8919061264d565b60405180910390f35b610deb6004803603810190610de69190612988565b611f96565b604051610df8919061264d565b60405180910390f35b610e1b6004803603810190610e169190612611565b611fe4565b604051610e28919061264d565b60405180910390f35b610e4b6004803603810190610e469190612611565b61201f565b604051610e58919061264d565b60405180910390f35b610e7b6004803603810190610e769190612611565b61205a565b604051610e88919061264d565b60405180910390f35b610eab6004803603810190610ea69190612611565b612095565b604051610eb8919061264d565b60405180910390f35b610edb6004803603810190610ed69190612611565b6120d0565b604051610ee8919061264d565b60405180910390f35b610f0b6004803603810190610f069190612611565b612114565b604051610f18919061264d565b60405180910390f35b610f3b6004803603810190610f369190612611565b612150565b604051610f48919061264d565b60405180910390f35b610f6b6004803603810190610f669190612611565b61218b565b604051610f78919061264d565b60405180910390f35b610f9b6004803603810190610f969190612611565b6121c9565b604051610fa8919061264d565b60405180910390f35b610fcb6004803603810190610fc69190612611565b612206565b604051610fd8919061264d565b60405180910390f35b610ffb6004803603810190610ff69190612611565b612240565b604051611008919061264d565b60405180910390f35b61102b60048036038101906110269190612611565b61227c565b604051611038919061264d565b60405180910390f35b61105b60048036038101906110569190612611565b6122b8565b604051611068919061264d565b60405180910390f35b61108b60048036038101906110869190612611565b612313565b604051611098919061264d565b60405180910390f35b6110bb60048036038101906110b69190612611565b612355565b6040516110c8919061264d565b60405180910390f35b6110eb60048036038101906110e69190612611565b612391565b6040516110f8919061264d565b60405180910390f35b61111b60048036038101906111169190612611565b6123ce565b604051611128919061264d565b60405180910390f35b61114b600480360381019061114691906127ae565b612410565b6040516111589190612876565b60405180910390f35b61117b60048036038101906111769190612611565b61247f565b604051611188919061264d565b60405180910390f35b6111ab60048036038101906111a69190612611565b6124bb565b6040516111b8919061264d565b60405180910390f35b6111db60048036038101906111d69190612611565b6124f9565b6040516111e8919061264d565b60405180910390f35b61120b600480360381019061120691906127ae565b612538565b6040516112189190612a10565b60405180910390f35b61123b60048036038101906112369190612611565b61256a565b604051611248919061264d565b60405180910390f35b600061125b6117a3565b50600065deadbeef003690506000805b848110156112815736915060018101905061126b565b505080915050919050565b60006112966117a3565b50600065deadbeef003290506000805b848110156112bc573291506001810190506112a6565b505080915050919050565b60006112d16117a3565b50600065deadbeef0052905060005b838110156112f757816000526001810190506112e0565b5080915050919050565b60606000600890506040828451602086016000855af18061132157600080fd5b5050919050565b60006113326117a3565b50600065deadbeef0001905060005b8381101561135a57600082019150600181019050611341565b5080915050919050565b60008054905090565b60006113776117a3565b50600065deadbeef0017905060005b8381101561139f57600082179150600181019050611386565b5080915050919050565b60006113b36117a3565b50600065deadbeef003490506000805b848110156113d9573491506001810190506113c3565b505080915050919050565b60006113ee6117a3565b50600065deadbeef0006905060005b83811015611435577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820691506001810190506113fd565b5080915050919050565b60006114496117a3565b50600065deadbeef001390506000805b8481101561147257600183139150600181019050611459565b505080915050919050565b60006114876117a3565b50600065deadbeef002090507fffffffff000000000000000000000000000000000000000000000000000000006000526000805b848110156114d557600460002091506001810190506114bb565b507f29045a592007d0c246ef02c2223570da9522d0cf0f73282c79a1bc8f0bb2c238811461150257600091505b5080915050919050565b60006115166117a3565b50600065deadbeef00a490508060105260005b83811015611548576004600360028360066010a4600181019050611529565b5080915050919050565b600061155c6117a3565b50600065deadbeef001a90506000805b84811015611585578260001a915060018101905061156c565b505080915050919050565b600061159a6117a3565b50600065deadbeef001b905060005b838110156115c2578160001b91506001810190506115a9565b5080915050919050565b60006115d66117a3565b50600065deadbeef004290506000805b848110156115fc574291506001810190506115e6565b505080915050919050565b60006116116117a3565b50600065deadbeef0031905060003060005b8581101561163a5781319250600181019050611623565b50505080915050919050565b60006116506117a3565b50600065deadbeef004890506000805b8481101561167657489150600181019050611660565b505080915050919050565b600061168b6117a3565b50600065deadbeef003d90506000805b848110156116b1573d915060018101905061169b565b505080915050919050565b60006116c66117a3565b50600065deadbeef004390506000805b848110156116ec574391506001810190506116d6565b505080915050919050565b6002818154811061170757600080fd5b90600052602060002001600091509050805461172290612a5a565b80601f016020809104026020016040519081016040528092919081815260200182805461174e90612a5a565b801561179b5780601f106117705761010080835404028352916020019161179b565b820191906000526020600020905b81548152906001019060200180831161177e57829003601f168201915b505050505081565b600060016000546117b49190612aba565b600081905550600054905090565b60006117cc6117a3565b50600065deadbeef0004905060005b838110156117f4576001820491506001810190506117db565b5080915050919050565b60006118086117a3565b50600065deadbeef0037905060005b8381101561183057602060008037600181019050611817565b5080915050919050565b60006118446117a3565b50600065deadbeef00a090508060105260005b8381101561186f5760066010a0600181019050611857565b5080915050919050565b60006118836117a3565b50600065deadbeef003390506000805b848110156118a957339150600181019050611893565b505080915050919050565b60006118be6117a3565b50600065deadbeef0053905060005b838110156118e85763deadbeef6000526001810190506118cd565b5080915050919050565b60006118fc6117a3565b50600065deadbeef003a90506000805b84811015611922573a915060018101905061190c565b505080915050919050565b60006119376117a3565b50600065deadbeef0051905060008160005260005b8481101561196457600051915060018101905061194c565b508091505080915050919050565b600061197c6117a3565b50600065deadbeef001d905060005b838110156119a4578160001d915060018101905061198b565b5080915050919050565b606060006005905060208301835160405160208183856000885af1806119d357600080fd5b8195505050505050919050565b600080600290506020830183518360208183856000885af180611a0257600080fd5b5050505050919050565b6000611a166117a3565b505b6103e85a1115611a40576001806000828254611a349190612aba565b92505081905550611a18565b600154905090565b6000611a526117a3565b50600065deadbeef001090506000805b84811015611a7b57826001109150600181019050611a62565b505080915050919050565b6000611a906117a3565b50600065deadbeef004490506000805b84811015611ab657449150600181019050611aa0565b505080915050919050565b6000611acb6117a3565b50600065deadbeef001190506000805b84811015611af457600183119150600181019050611adb565b505080915050919050565b6000611b096117a3565b50600065deadbeef003e905060005b83811015611b315760206000803e600181019050611b18565b5080915050919050565b6000611b456117a3565b50600065deadbeef004590506000805b84811015611b6b57459150600181019050611b55565b505080915050919050565b6000611b806117a3565b50600065deadbeef0002905060005b83811015611ba857600182029150600181019050611b8f565b5080915050919050565b6000611bbc6117a3565b50600065deadbeef0008905060005b83811015611c05577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600083089150600181019050611bcb565b5080915050919050565b6000611c196117a3565b50600065deadbeef005490508060005560005b83811015611c44576000549150600181019050611c2c565b5080915050919050565b6000611c586117a3565b50600065deadbeef005a90506000805b84811015611c7e575a9150600181019050611c68565b505080915050919050565b6000611c936117a3565b50600065deadbeef0019905060005b83811015611cb95781199150600181019050611ca2565b5065deadbeef00198114611ccc57801990505b80915050919050565b606080825114611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190612b4b565b60405180910390fd5b60006007905060208301835160408482846000875af180611d3a57600080fd5b50505050919050565b6000611d4d6117a3565b50600065deadbeef00a190508060105260005b83811015611d79578060066010a1600181019050611d60565b5080915050919050565b6000611d8d6117a3565b50600065deadbeef0016905060005b83811015611db4578182169150600181019050611d9c565b5080915050919050565b6060600060049050602083018351604051818183856000885af180611de257600080fd5b8195505050505050919050565b60606000600890506040828451602086016000855af180611e0f57600080fd5b5050919050565b60006080825114611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612bb7565b60405180910390fd5b600060019050602083016020810151601f1a602082015260206040516080836000865af180611e8a57600080fd5b604051519350505050919050565b6000611ea26117a3565b505b6103e85a1115611edb576001806000828254611ec09190612aba565b9250508190555043600154611ed59190612c06565b50611ea4565b600154905090565b6000611eed6117a3565b50600065deadbeef004690506000805b84811015611f1357469150600181019050611efd565b505080915050919050565b6000611f286117a3565b50600065deadbeef0005905060005b83811015611f5057600182059150600181019050611f37565b5080915050919050565b6000611f646117a3565b50600065deadbeef0039905060005b83811015611f8c57602060008039600181019050611f73565b5080915050919050565b60006002838390918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611fd5929190612dee565b50600280549050905092915050565b6000611fee6117a3565b50600065deadbeef005990506000805b8481101561201457599150600181019050611ffe565b505080915050919050565b60006120296117a3565b50600065deadbeef003890506000805b8481101561204f57389150600181019050612039565b505080915050919050565b60006120646117a3565b50600065deadbeef004190506000805b8481101561208a57419150600181019050612074565b505080915050919050565b600061209f6117a3565b50600065deadbeef003090506000805b848110156120c5573091506001810190506120af565b505080915050919050565b60006120da6117a3565b50600065deadbeef00a390508060105260005b8381101561210a57600360028260066010a36001810190506120ed565b5080915050919050565b600061211e6117a3565b50600065deadbeef000b905060005b83811015612146578160200b915060018101905061212d565b5080915050919050565b600061215a6117a3565b50600065deadbeef004790506000805b848110156121805747915060018101905061216a565b505080915050919050565b60006121956117a3565b50600065deadbeef001c90506000805b848110156121be578260001c92506001810190506121a5565b505080915050919050565b60006121d36117a3565b50600065deadbeef003590506000805b848110156121fb5760003591506001810190506121e3565b505080915050919050565b60006122106117a3565b50600065deadbeef0055905060005b83811015612236578160005560018101905061221f565b5080915050919050565b600061224a6117a3565b50600065deadbeef0018905060005b8381101561227257600082189150600181019050612259565b5080915050919050565b60006122866117a3565b50600065deadbeef0003905060005b838110156122ae57600082039150600181019050612295565b5080915050919050565b60006122c26117a3565b50600065deadbeef0007905060005b83811015612309577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820791506001810190506122d1565b5080915050919050565b600061231d6117a3565b50600065deadbeef00a290508060105260005b8381101561234b5760028160066010a2600181019050612330565b5080915050919050565b600061235f6117a3565b50600065deadbeef000a905060005b83811015612387576001820a915060018101905061236e565b5080915050919050565b600061239b6117a3565b50600065deadbeef001490506000805b848110156123c35782831491506001810190506123ab565b505080915050919050565b60006123d86117a3565b50600065deadbeef0040905060006001430360005b8581101561240457814092506001810190506123ed565b50505080915050919050565b60606080825114612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90612b4b565b60405180910390fd5b60006006905060208301835160408482846000875af18061247657600080fd5b50505050919050565b60006124896117a3565b50600065deadbeef001590506000805b848110156124b05782159150600181019050612499565b505080915050919050565b60006124c56117a3565b50600065deadbeef001290506000805b848110156124ee578260011291506001810190506124d5565b505080915050919050565b60006125036117a3565b50600065deadbeef003b905060003060005b8581101561252c57813b9250600181019050612515565b50505080915050919050565b6000806003905060208301835160405160148183856000885af18061255c57600080fd5b815195505050505050919050565b60006125746117a3565b50600065deadbeef0009905060005b838110156125bd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183099150600181019050612583565b5080915050919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6125ee816125db565b81146125f957600080fd5b50565b60008135905061260b816125e5565b92915050565b600060208284031215612627576126266125d1565b5b6000612635848285016125fc565b91505092915050565b612647816125db565b82525050565b6000602082019050612662600083018461263e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126bb82612672565b810181811067ffffffffffffffff821117156126da576126d9612683565b5b80604052505050565b60006126ed6125c7565b90506126f982826126b2565b919050565b600067ffffffffffffffff82111561271957612718612683565b5b61272282612672565b9050602081019050919050565b82818337600083830152505050565b600061275161274c846126fe565b6126e3565b90508281526020810184848401111561276d5761276c61266d565b5b61277884828561272f565b509392505050565b600082601f83011261279557612794612668565b5b81356127a584826020860161273e565b91505092915050565b6000602082840312156127c4576127c36125d1565b5b600082013567ffffffffffffffff8111156127e2576127e16125d6565b5b6127ee84828501612780565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612831578082015181840152602081019050612816565b60008484015250505050565b6000612848826127f7565b6128528185612802565b9350612862818560208601612813565b61286b81612672565b840191505092915050565b60006020820190508181036000830152612890818461283d565b905092915050565b6000819050919050565b6128ab81612898565b82525050565b60006020820190506128c660008301846128a2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128f7826128cc565b9050919050565b612907816128ec565b82525050565b600060208201905061292260008301846128fe565b92915050565b600080fd5b600080fd5b60008083601f84011261294857612947612668565b5b8235905067ffffffffffffffff81111561296557612964612928565b5b6020830191508360018202830111156129815761298061292d565b5b9250929050565b6000806020838503121561299f5761299e6125d1565b5b600083013567ffffffffffffffff8111156129bd576129bc6125d6565b5b6129c985828601612932565b92509250509250929050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b612a0a816129d5565b82525050565b6000602082019050612a256000830184612a01565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a7257607f821691505b602082108103612a8557612a84612a2b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ac5826125db565b9150612ad0836125db565b9250828201905080821115612ae857612ae7612a8b565b5b92915050565b600082825260208201905092915050565b7f496e76616c696420696e707574206c656e677468000000000000000000000000600082015250565b6000612b35601483612aee565b9150612b4082612aff565b602082019050919050565b60006020820190508181036000830152612b6481612b28565b9050919050565b7f496e76616c696420696e7075742064617461206c656e6774682e000000000000600082015250565b6000612ba1601a83612aee565b9150612bac82612b6b565b602082019050919050565b60006020820190508181036000830152612bd081612b94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c11826125db565b9150612c1c836125db565b925082612c2c57612c2b612bd7565b5b828206905092915050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612ca47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c67565b612cae8683612c67565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612ceb612ce6612ce1846125db565b612cc6565b6125db565b9050919050565b6000819050919050565b612d0583612cd0565b612d19612d1182612cf2565b848454612c74565b825550505050565b600090565b612d2e612d21565b612d39818484612cfc565b505050565b5b81811015612d5d57612d52600082612d26565b600181019050612d3f565b5050565b601f821115612da257612d7381612c42565b612d7c84612c57565b81016020851015612d8b578190505b612d9f612d9785612c57565b830182612d3e565b50505b505050565b600082821c905092915050565b6000612dc560001984600802612da7565b1980831691505092915050565b6000612dde8383612db4565b9150826002028217905092915050565b612df88383612c37565b67ffffffffffffffff811115612e1157612e10612683565b5b612e1b8254612a5a565b612e26828285612d61565b6000601f831160018114612e555760008415612e43578287013590505b612e4d8582612dd2565b865550612eb5565b601f198416612e6386612c42565b60005b82811015612e8b57848901358255600182019150602085019450602081019050612e66565b86831015612ea85784890135612ea4601f891682612db4565b8355505b6001600288020188555050505b5050505050505056fea26469706673582212203124213488c2f1fca5968787f0c3e96fba8469129a80798e11ee752903b4bfdc64736f6c63430008130033", } // LoadTesterABI is the input ABI used to generate the binding from. @@ -156,11 +157,11 @@ func NewLoadTesterFilterer(address common.Address, filterer bind.ContractFiltere // bindLoadTester binds a generic wrapper to an already deployed contract. func bindLoadTester(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(LoadTesterABI)) + parsed, err := LoadTesterMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -284,6 +285,48 @@ func (_LoadTester *LoadTesterTransactorSession) Inc() (*types.Transaction, error return _LoadTester.Contract.Inc(&_LoadTester.TransactOpts) } +// LoopBlockHashUntilLimit is a paid mutator transaction binding the contract method 0xa271b721. +// +// Solidity: function loopBlockHashUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterTransactor) LoopBlockHashUntilLimit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "loopBlockHashUntilLimit") +} + +// LoopBlockHashUntilLimit is a paid mutator transaction binding the contract method 0xa271b721. +// +// Solidity: function loopBlockHashUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterSession) LoopBlockHashUntilLimit() (*types.Transaction, error) { + return _LoadTester.Contract.LoopBlockHashUntilLimit(&_LoadTester.TransactOpts) +} + +// LoopBlockHashUntilLimit is a paid mutator transaction binding the contract method 0xa271b721. +// +// Solidity: function loopBlockHashUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterTransactorSession) LoopBlockHashUntilLimit() (*types.Transaction, error) { + return _LoadTester.Contract.LoopBlockHashUntilLimit(&_LoadTester.TransactOpts) +} + +// LoopUntilLimit is a paid mutator transaction binding the contract method 0x659bbb4f. +// +// Solidity: function loopUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterTransactor) LoopUntilLimit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "loopUntilLimit") +} + +// LoopUntilLimit is a paid mutator transaction binding the contract method 0x659bbb4f. +// +// Solidity: function loopUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterSession) LoopUntilLimit() (*types.Transaction, error) { + return _LoadTester.Contract.LoopUntilLimit(&_LoadTester.TransactOpts) +} + +// LoopUntilLimit is a paid mutator transaction binding the contract method 0x659bbb4f. +// +// Solidity: function loopUntilLimit() returns(uint256) +func (_LoadTester *LoadTesterTransactorSession) LoopUntilLimit() (*types.Transaction, error) { + return _LoadTester.Contract.LoopUntilLimit(&_LoadTester.TransactOpts) +} + // Store is a paid mutator transaction binding the contract method 0xb374012b. // // Solidity: function store(bytes trash) returns(uint256) @@ -473,6 +516,27 @@ func (_LoadTester *LoadTesterTransactorSession) TestBYTE(x *big.Int) (*types.Tra return _LoadTester.Contract.TestBYTE(&_LoadTester.TransactOpts, x) } +// TestBlake2f is a paid mutator transaction binding the contract method 0xa040aec6. +// +// Solidity: function testBlake2f(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestBlake2f(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testBlake2f", inputData) +} + +// TestBlake2f is a paid mutator transaction binding the contract method 0xa040aec6. +// +// Solidity: function testBlake2f(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestBlake2f(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestBlake2f(&_LoadTester.TransactOpts, inputData) +} + +// TestBlake2f is a paid mutator transaction binding the contract method 0xa040aec6. +// +// Solidity: function testBlake2f(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestBlake2f(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestBlake2f(&_LoadTester.TransactOpts, inputData) +} + // TestCALLDATACOPY is a paid mutator transaction binding the contract method 0x3a425dfc. // // Solidity: function testCALLDATACOPY(uint256 x) returns(uint256) @@ -704,6 +768,90 @@ func (_LoadTester *LoadTesterTransactorSession) TestDIV(x *big.Int) (*types.Tran return _LoadTester.Contract.TestDIV(&_LoadTester.TransactOpts, x) } +// TestECAdd is a paid mutator transaction binding the contract method 0xedf003cf. +// +// Solidity: function testECAdd(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestECAdd(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testECAdd", inputData) +} + +// TestECAdd is a paid mutator transaction binding the contract method 0xedf003cf. +// +// Solidity: function testECAdd(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestECAdd(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECAdd(&_LoadTester.TransactOpts, inputData) +} + +// TestECAdd is a paid mutator transaction binding the contract method 0xedf003cf. +// +// Solidity: function testECAdd(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestECAdd(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECAdd(&_LoadTester.TransactOpts, inputData) +} + +// TestECMul is a paid mutator transaction binding the contract method 0x962e4dc2. +// +// Solidity: function testECMul(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestECMul(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testECMul", inputData) +} + +// TestECMul is a paid mutator transaction binding the contract method 0x962e4dc2. +// +// Solidity: function testECMul(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestECMul(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECMul(&_LoadTester.TransactOpts, inputData) +} + +// TestECMul is a paid mutator transaction binding the contract method 0x962e4dc2. +// +// Solidity: function testECMul(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestECMul(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECMul(&_LoadTester.TransactOpts, inputData) +} + +// TestECPairing is a paid mutator transaction binding the contract method 0x0b3b996a. +// +// Solidity: function testECPairing(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestECPairing(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testECPairing", inputData) +} + +// TestECPairing is a paid mutator transaction binding the contract method 0x0b3b996a. +// +// Solidity: function testECPairing(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestECPairing(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECPairing(&_LoadTester.TransactOpts, inputData) +} + +// TestECPairing is a paid mutator transaction binding the contract method 0x0b3b996a. +// +// Solidity: function testECPairing(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestECPairing(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECPairing(&_LoadTester.TransactOpts, inputData) +} + +// TestECRecover is a paid mutator transaction binding the contract method 0xa18683cb. +// +// Solidity: function testECRecover(bytes inputData) returns(address result) +func (_LoadTester *LoadTesterTransactor) TestECRecover(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testECRecover", inputData) +} + +// TestECRecover is a paid mutator transaction binding the contract method 0xa18683cb. +// +// Solidity: function testECRecover(bytes inputData) returns(address result) +func (_LoadTester *LoadTesterSession) TestECRecover(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECRecover(&_LoadTester.TransactOpts, inputData) +} + +// TestECRecover is a paid mutator transaction binding the contract method 0xa18683cb. +// +// Solidity: function testECRecover(bytes inputData) returns(address result) +func (_LoadTester *LoadTesterTransactorSession) TestECRecover(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestECRecover(&_LoadTester.TransactOpts, inputData) +} + // TestEQ is a paid mutator transaction binding the contract method 0xe9f9b3f2. // // Solidity: function testEQ(uint256 x) returns(uint256) @@ -872,6 +1020,27 @@ func (_LoadTester *LoadTesterTransactorSession) TestISZERO(x *big.Int) (*types.T return _LoadTester.Contract.TestISZERO(&_LoadTester.TransactOpts, x) } +// TestIdentity is a paid mutator transaction binding the contract method 0x9cce7cf9. +// +// Solidity: function testIdentity(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestIdentity(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testIdentity", inputData) +} + +// TestIdentity is a paid mutator transaction binding the contract method 0x9cce7cf9. +// +// Solidity: function testIdentity(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestIdentity(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestIdentity(&_LoadTester.TransactOpts, inputData) +} + +// TestIdentity is a paid mutator transaction binding the contract method 0x9cce7cf9. +// +// Solidity: function testIdentity(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestIdentity(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestIdentity(&_LoadTester.TransactOpts, inputData) +} + // TestLOG0 is a paid mutator transaction binding the contract method 0x40fe2662. // // Solidity: function testLOG0(uint256 x) returns(uint256) @@ -1145,6 +1314,27 @@ func (_LoadTester *LoadTesterTransactorSession) TestMULMOD(x *big.Int) (*types.T return _LoadTester.Contract.TestMULMOD(&_LoadTester.TransactOpts, x) } +// TestModExp is a paid mutator transaction binding the contract method 0x613d0a82. +// +// Solidity: function testModExp(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactor) TestModExp(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testModExp", inputData) +} + +// TestModExp is a paid mutator transaction binding the contract method 0x613d0a82. +// +// Solidity: function testModExp(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterSession) TestModExp(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestModExp(&_LoadTester.TransactOpts, inputData) +} + +// TestModExp is a paid mutator transaction binding the contract method 0x613d0a82. +// +// Solidity: function testModExp(bytes inputData) returns(bytes result) +func (_LoadTester *LoadTesterTransactorSession) TestModExp(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestModExp(&_LoadTester.TransactOpts, inputData) +} + // TestNOT is a paid mutator transaction binding the contract method 0x91e7b277. // // Solidity: function testNOT(uint256 x) returns(uint256) @@ -1271,6 +1461,27 @@ func (_LoadTester *LoadTesterTransactorSession) TestRETURNDATASIZE(x *big.Int) ( return _LoadTester.Contract.TestRETURNDATASIZE(&_LoadTester.TransactOpts, x) } +// TestRipemd160 is a paid mutator transaction binding the contract method 0xf6b0bbf7. +// +// Solidity: function testRipemd160(bytes inputData) returns(bytes20 result) +func (_LoadTester *LoadTesterTransactor) TestRipemd160(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testRipemd160", inputData) +} + +// TestRipemd160 is a paid mutator transaction binding the contract method 0xf6b0bbf7. +// +// Solidity: function testRipemd160(bytes inputData) returns(bytes20 result) +func (_LoadTester *LoadTesterSession) TestRipemd160(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestRipemd160(&_LoadTester.TransactOpts, inputData) +} + +// TestRipemd160 is a paid mutator transaction binding the contract method 0xf6b0bbf7. +// +// Solidity: function testRipemd160(bytes inputData) returns(bytes20 result) +func (_LoadTester *LoadTesterTransactorSession) TestRipemd160(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestRipemd160(&_LoadTester.TransactOpts, inputData) +} + // TestSAR is a paid mutator transaction binding the contract method 0x60e13cde. // // Solidity: function testSAR(uint256 x) returns(uint256) @@ -1355,6 +1566,27 @@ func (_LoadTester *LoadTesterTransactorSession) TestSGT(x *big.Int) (*types.Tran return _LoadTester.Contract.TestSGT(&_LoadTester.TransactOpts, x) } +// TestSHA256 is a paid mutator transaction binding the contract method 0x63138d4f. +// +// Solidity: function testSHA256(bytes inputData) returns(bytes32 result) +func (_LoadTester *LoadTesterTransactor) TestSHA256(opts *bind.TransactOpts, inputData []byte) (*types.Transaction, error) { + return _LoadTester.contract.Transact(opts, "testSHA256", inputData) +} + +// TestSHA256 is a paid mutator transaction binding the contract method 0x63138d4f. +// +// Solidity: function testSHA256(bytes inputData) returns(bytes32 result) +func (_LoadTester *LoadTesterSession) TestSHA256(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestSHA256(&_LoadTester.TransactOpts, inputData) +} + +// TestSHA256 is a paid mutator transaction binding the contract method 0x63138d4f. +// +// Solidity: function testSHA256(bytes inputData) returns(bytes32 result) +func (_LoadTester *LoadTesterTransactorSession) TestSHA256(inputData []byte) (*types.Transaction, error) { + return _LoadTester.Contract.TestSHA256(&_LoadTester.TransactOpts, inputData) +} + // TestSHA3 is a paid mutator transaction binding the contract method 0x19b621d6. // // Solidity: function testSHA3(uint256 x) returns(uint256) diff --git a/contracts/precompiledContracts.go b/contracts/precompiledContracts.go new file mode 100644 index 00000000..fd7e8202 --- /dev/null +++ b/contracts/precompiledContracts.go @@ -0,0 +1,224 @@ +package contracts + +import ( + "crypto/ecdsa" + "encoding/binary" + "encoding/hex" + "fmt" + "math/big" + "math/rand" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + + "github.com/rs/zerolog/log" +) + +func GenerateECRecoverInput(privateKey *ecdsa.PrivateKey) []byte { + message := []byte("Test ecRecover") + messageHash := crypto.Keccak256Hash(message) + signature, err := crypto.Sign(messageHash.Bytes(), privateKey) + if err != nil { + panic(err) + } + + // Prepare input data for ecRecover precompiled contract + inputData := make([]byte, 128) + copy(inputData[0:32], messageHash.Bytes()) + copy(inputData[32:64], common.LeftPadBytes(signature[64:65], 32)) + copy(inputData[64:96], common.LeftPadBytes(signature[0:32], 32)) + copy(inputData[96:128], common.LeftPadBytes(signature[32:64], 32)) + + return inputData +} + +func GenerateSHA256Input() []byte { + inputData := []byte("Test") + paddedInput := common.RightPadBytes(inputData, 32) // pad input to 32 bytes + + return paddedInput +} + +func GenerateRIPEMD160Input() []byte { + inputData := []byte("Test") + + return inputData +} + +func GenerateIdentityInput() []byte { + inputData := []byte("Test") + + return inputData +} + +func GenerateModExpInput() []byte { + base := big.NewInt(8) + exponent := big.NewInt(9) + modulus := big.NewInt(10) + bSize := len(base.Bytes()) + eSize := len(exponent.Bytes()) + mSize := len(modulus.Bytes()) + inputData := append( + common.LeftPadBytes(big.NewInt(int64(bSize)).Bytes(), 32), + append( + common.LeftPadBytes(big.NewInt(int64(eSize)).Bytes(), 32), + append( + common.LeftPadBytes(big.NewInt(int64(mSize)).Bytes(), 32), + append( + common.LeftPadBytes(base.Bytes(), bSize), + append( + common.LeftPadBytes(exponent.Bytes(), eSize), + common.LeftPadBytes(modulus.Bytes(), mSize)..., + )..., + )..., + )..., + )..., + ) + + return inputData +} + +func GenerateECAddInput() []byte { + x1 := big.NewInt(1) + y1 := big.NewInt(2) + x2 := big.NewInt(1) + y2 := big.NewInt(2) + + // Convert the x and y coordinates to 32-byte arrays in big-endian format + x1Bytes := math.PaddedBigBytes(x1, 32) + y1Bytes := math.PaddedBigBytes(y1, 32) + x2Bytes := math.PaddedBigBytes(x2, 32) + y2Bytes := math.PaddedBigBytes(y2, 32) + + inputData := append(append(append(x1Bytes, y1Bytes...), x2Bytes...), y2Bytes...) + return inputData +} + +func GenerateECMulInput() []byte { + x1 := big.NewInt(1) + y1 := big.NewInt(2) + s := big.NewInt(2) + + // Convert the x and y coordinates to 32-byte arrays in big-endian format + x1Bytes := math.PaddedBigBytes(x1, 32) + y1Bytes := math.PaddedBigBytes(y1, 32) + sBytes := math.PaddedBigBytes(s, 32) + + inputData := append(append(x1Bytes, y1Bytes...), sBytes...) + return inputData +} + +func GenerateECPairingInput() []byte { + x1 := "2cf44499d5d27bb186308b7af7af02ac5bc9eeb6a3d147c186b21fb1b76e18da" + y1 := "2c0f001f52110ccfe69108924926e45f0b0c868df0e7bde1fe16d3242dc715f6" + x2 := "1fb19bb476f6b9e44e2a32234da8212f61cd63919354bc06aef31e3cfaff3ebc" + y2 := "22606845ff186793914e03e21df544c34ffe2f2f3504de8a79d9159eca2d98d9" + x3 := "2bd368e28381e8eccb5fa81fc26cf3f048eea9abfdd85d7ed3ab3698d63e4f90" + y3 := "2fe02e47887507adf0ff1743cbac6ba291e66f59be6bd763950bb16041a0a85e" + + x4 := "0000000000000000000000000000000000000000000000000000000000000001" + y4 := "30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45" + x5 := "1971ff0471b09fa93caaf13cbf443c1aede09cc4328f5a62aad45f40ec133eb4" + y5 := "091058a3141822985733cbdddfed0fd8d6c104e9e9eff40bf5abfef9ab163bc7" + x6 := "2a23af9a5ce2ba2796c1f4e453a370eb0af8c212d9dc9acd8fc02c2e907baea2" + y6 := "23a8eb0b0996252cb548a4487da97b02422ebc0e834613f954de6c7e0afdc1fc" + + inputHex := x1 + y1 + x2 + y2 + x3 + y3 + x4 + y4 + x5 + y5 + x6 + y6 + inputData, err := hex.DecodeString(inputHex) + if err != nil { + panic(err) + } + + return inputData +} + +func GenerateBlake2FInput() []byte { + rounds := uint32(12) + h := [8]uint64{1, 2, 3, 4, 5, 6, 7, 8} + m := [16]uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} + t := [2]uint64{1, 2} + f := byte(1) + + inputData := make([]byte, 213) + binary.BigEndian.PutUint32(inputData[0:4], rounds) + + for i := 0; i < 8; i++ { + binary.LittleEndian.PutUint64(inputData[4+(i*8):4+((i+1)*8)], h[i]) + } + + for i := 0; i < 16; i++ { + binary.LittleEndian.PutUint64(inputData[68+(i*8):68+((i+1)*8)], m[i]) + } + + for i := 0; i < 2; i++ { + binary.LittleEndian.PutUint64(inputData[196+(i*8):196+((i+1)*8)], t[i]) + } + + inputData[212] = f + + return inputData +} + +func CallPrecompiledContracts(address int, lt *LoadTester, opts *bind.TransactOpts, iterations uint64, privateKey *ecdsa.PrivateKey) (*ethtypes.Transaction, error) { + var inputData []byte + + switch address { + case 1: + log.Trace().Str("method", "TestECRecover").Msg("Executing contract method") + inputData = GenerateECRecoverInput(privateKey) + return lt.TestECRecover(opts, inputData) + case 2: + log.Trace().Str("method", "TestSHA256").Msg("Executing contract method") + inputData = GenerateSHA256Input() + return lt.TestSHA256(opts, inputData) + case 3: + log.Trace().Str("method", "TestRipemd160").Msg("Executing contract method") + inputData = GenerateRIPEMD160Input() + return lt.TestRipemd160(opts, inputData) + case 4: + log.Trace().Str("method", "TestIdentity").Msg("Executing contract method") + inputData = GenerateIdentityInput() + return lt.TestIdentity(opts, inputData) + case 5: + log.Trace().Str("method", "TestModExp").Msg("Executing contract method") + inputData = GenerateModExpInput() + return lt.TestModExp(opts, inputData) + case 6: + log.Trace().Str("method", "TestECAdd").Msg("Executing contract method") + inputData = GenerateECAddInput() + return lt.TestECAdd(opts, inputData) + case 7: + log.Trace().Str("method", "TestECMul").Msg("Executing contract method") + inputData = GenerateECMulInput() + return lt.TestECMul(opts, inputData) + case 8: + log.Trace().Str("method", "TestECPairing").Msg("Executing contract method") + inputData = GenerateECPairingInput() + return lt.TestECPairing(opts, inputData) + case 9: + log.Trace().Str("method", "TestBlake2f").Msg("Executing contract method") + inputData = GenerateECPairingInput() + return lt.TestBlake2f(opts, inputData) + } + + return nil, fmt.Errorf("Unrecognized precompiled address %d", address) +} + +func GetRandomPrecompiledContractAddress() int { + codes := []int{ + 1, + 2, + 3, + 4, + 5, + // 6, // NOTE: ecAdd requires a lot of gas and buggy + // 7, // NOTE: ecMul requires a lot of gas and buggy + 8, + 9, + } + + return codes[rand.Intn(len(codes))] +}