From d306e7816b4e6f46415a7d236e29252d44efffa7 Mon Sep 17 00:00:00 2001 From: Stephen Shelton Date: Mon, 12 Apr 2021 12:58:06 -0600 Subject: [PATCH 01/49] Crude attempt at finding open ports --- tests/README.md | 4 +-- tests/package-lock.json | 44 ++++++++++++++++++++++++++++ tests/package.json | 1 + tests/tests/constants/constants.ts | 3 -- tests/tests/util/testWithFrontier.ts | 15 ++++++---- tests/tests/util/testWithMoonbeam.ts | 18 ++++++------ 6 files changed, 65 insertions(+), 20 deletions(-) diff --git a/tests/README.md b/tests/README.md index fdac43d323c..88749f63b9f 100644 --- a/tests/README.md +++ b/tests/README.md @@ -35,5 +35,5 @@ You can also add the node's logs to the output using the `MOONBEAM_LOG` env vari MOONBEAM_LOG="warn,rpc=trace" npm run test ``` -The Moonbeam node will be listening for RPC on port 19933, mostly to avoid -conflicts with already running Substrate nodes. +The test script will find available ports above 20000 in order to ensure that it doesn't conflict +with any other running services. diff --git a/tests/package-lock.json b/tests/package-lock.json index 6980e4146f2..b10794420af 100644 --- a/tests/package-lock.json +++ b/tests/package-lock.json @@ -1545,6 +1545,11 @@ "type-detect": "^4.0.0" } }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -2515,6 +2520,21 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "is2": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.6.tgz", + "integrity": "sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ==", + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3611,6 +3631,30 @@ } } }, + "tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "requires": { + "debug": "4.3.1", + "is2": "^2.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", diff --git a/tests/package.json b/tests/package.json index 254b34da217..79418f18376 100644 --- a/tests/package.json +++ b/tests/package.json @@ -20,6 +20,7 @@ "mocha": "^8.3.2", "mocha-steps": "^1.3.0", "rimraf": "^3.0.2", + "tcp-port-used": "^1.0.2", "ts-node": "9.1", "typescript": "^3.9.6", "web3": "^1.3.5" diff --git a/tests/tests/constants/constants.ts b/tests/tests/constants/constants.ts index 4845ec32a77..4639b6de775 100644 --- a/tests/tests/constants/constants.ts +++ b/tests/tests/constants/constants.ts @@ -1,6 +1,3 @@ -export const PORT = 19931; -export const RPC_PORT = 19932; -export const WS_PORT = 19933; export const SPECS_PATH = `./moonbeam-test-specs`; export const DISPLAY_LOG = process.env.MOONBEAM_LOG || false; diff --git a/tests/tests/util/testWithFrontier.ts b/tests/tests/util/testWithFrontier.ts index 7762ab157da..57683d48487 100644 --- a/tests/tests/util/testWithFrontier.ts +++ b/tests/tests/util/testWithFrontier.ts @@ -1,8 +1,9 @@ import Web3 from "web3"; import { spawn, ChildProcess } from "child_process"; -import { DISPLAY_LOG, PORT, RPC_PORT, SPAWNING_TIME, WS_PORT } from "../constants"; +import { DISPLAY_LOG, SPAWNING_TIME } from "../constants"; import { customRequest } from "./web3Requests"; +import { findAvailablePorts } from "./findAvailablePorts"; const SPECS_PATH = `./moonbeam-test-specs`; @@ -15,9 +16,11 @@ export async function startFrontierNode( specFilename: string, provider?: string ): Promise<{ web3: Web3; binary: ChildProcess }> { + const ports = await findAvailablePorts(); + var web3; if (!provider || provider == "http") { - web3 = new Web3(`http://localhost:${RPC_PORT}`); + web3 = new Web3(`http://localhost:${ports.rpcPort}`); } const cmd = BINARY_PATH; @@ -31,9 +34,9 @@ export async function startFrontierNode( `--no-grandpa`, `--force-authoring`, `-l${FRONTIER_LOG}`, - `--port=${PORT}`, - `--rpc-port=${RPC_PORT}`, - `--ws-port=${WS_PORT}`, + `--port=${ports.p2pPort}`, + `--rpc-port=${ports.rpcPort}`, + `--ws-port=${ports.wsPort}`, `--tmp`, ]; const binary = spawn(cmd, args); @@ -82,7 +85,7 @@ export async function startFrontierNode( }); if (provider == "ws") { - web3 = new Web3(`ws://localhost:${WS_PORT}`); + web3 = new Web3(`ws://localhost:${ports.wsPort}`); } return { web3, binary }; diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index ef039ba0294..c67063ad0b0 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -7,12 +7,10 @@ import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, - PORT, - RPC_PORT, SPAWNING_TIME, - WS_PORT, } from "../constants"; import { ErrorReport } from "./fillBlockWithTx"; +import { findAvailablePorts } from "./findAvailablePorts"; export function log(...msg: (string | number | ErrorReport)[]) { if (process.argv && process.argv[2] && process.argv[2] === "--printlogs") { @@ -36,9 +34,11 @@ export async function startMoonbeamNode( specFilename: string, provider?: string ): Promise<{ context: Context; runningNode: ChildProcess }> { + const ports = await findAvailablePorts(); + let web3; if (!provider || provider == "http") { - web3 = new Web3(`http://localhost:${RPC_PORT}`); + web3 = new Web3(`http://localhost:${ports.rpcPort}`); } const cmd = BINARY_PATH; @@ -50,9 +50,9 @@ export async function startMoonbeamNode( `--ethapi=txpool,debug,trace`, `--sealing=manual`, `-l${MOONBEAM_LOG}`, - `--port=${PORT}`, - `--rpc-port=${RPC_PORT}`, - `--ws-port=${WS_PORT}`, + `--port=${ports.p2pPort}`, + `--rpc-port=${ports.rpcPort}`, + `--ws-port=${ports.wsPort}`, `--tmp`, ]; runningNode = spawn(cmd, args); @@ -102,14 +102,14 @@ export async function startMoonbeamNode( runningNode.stdout.on("data", onData); }); - const wsProvider = new WsProvider(`ws://localhost:${WS_PORT}`); + const wsProvider = new WsProvider(`ws://localhost:${ports.wsPort}`); const polkadotApi = await ApiPromise.create({ provider: wsProvider, typesBundle: typesBundle as any, }); if (provider == "ws") { - web3 = new Web3(`ws://localhost:${WS_PORT}`); + web3 = new Web3(`ws://localhost:${ports.wsPort}`); } return { context: { web3, polkadotApi, wsProvider }, runningNode }; From 9af4a89b2ea97255177fcddcbfbff3e661f5d71d Mon Sep 17 00:00:00 2001 From: Stephen Shelton Date: Mon, 12 Apr 2021 13:48:04 -0600 Subject: [PATCH 02/49] npx -w --- tests/tests/util/testWithMoonbeam.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index c67063ad0b0..18bfd90bba1 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -3,12 +3,7 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import { typesBundle } from "../../../moonbeam-types-bundle"; import { spawn, ChildProcess, ChildProcessWithoutNullStreams } from "child_process"; -import { - BINARY_PATH, - DISPLAY_LOG, - MOONBEAM_LOG, - SPAWNING_TIME, -} from "../constants"; +import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "../constants"; import { ErrorReport } from "./fillBlockWithTx"; import { findAvailablePorts } from "./findAvailablePorts"; From 5cf37a028ba3730021e661b9459282b39507b01f Mon Sep 17 00:00:00 2001 From: Stephen Shelton Date: Mon, 12 Apr 2021 14:05:05 -0600 Subject: [PATCH 03/49] Add missing file --- tests/tests/util/findAvailablePorts.ts | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tests/tests/util/findAvailablePorts.ts diff --git a/tests/tests/util/findAvailablePorts.ts b/tests/tests/util/findAvailablePorts.ts new file mode 100644 index 00000000000..3ccaeb32ec6 --- /dev/null +++ b/tests/tests/util/findAvailablePorts.ts @@ -0,0 +1,32 @@ +import tcpPortUsed from "tcp-port-used"; + +export async function findAvailablePorts() { + const startingPort = 20000; + const endingPort = 29999; + + let port = startingPort; + let availablePorts = []; + while (availablePorts.length < 3 && port < endingPort) { + const inUse = await tcpPortUsed.check(port, "127.0.0.1"); + try { + if (!inUse) { + availablePorts.push(port); + } + + port++; + } catch (err) { + console.log(`Error checking port ${port}: `, err); + port++; + } + } + + if (availablePorts.length < 3) { + throw `Could not find 3 ports available within range [${startingPort}, ${endingPort}]`; + } + + return { + p2pPort: availablePorts[0], + rpcPort: availablePorts[1], + wsPort: availablePorts[2], + }; +} From 1f80688767270318cee994259378fffaf7341a22 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 12 Apr 2021 21:16:44 +0000 Subject: [PATCH 04/49] Adds random port and parallel test execution --- tests/package.json | 2 +- tests/tests/test-block.ts | 1 - tests/tests/test-trace-filter.ts | 8 ------ tests/tests/util/findAvailablePorts.ts | 38 ++++++++++++-------------- tests/tests/util/testWithMoonbeam.ts | 38 ++++++++++---------------- 5 files changed, 33 insertions(+), 54 deletions(-) diff --git a/tests/package.json b/tests/package.json index 79418f18376..8332d90f7c4 100644 --- a/tests/package.json +++ b/tests/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", - "test": "mocha -r ts-node/register 'tests/**/*.ts'", + "test": "mocha --parallel -r ts-node/register 'tests/**/*.ts'", "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" }, "author": "", diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index 8f3579f0601..efca8103d22 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -47,7 +47,6 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { //fetch block again using hash const block = await context.web3.eth.getBlock(0); const blockByHash = await context.web3.eth.getBlock(block.hash); - console.log("blockbyhash", blockByHash); expect(blockByHash).to.include({ author: "0x0000000000000000000000000000000000000000", difficulty: "0", diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index e665a485e6a..34034d52512 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -45,8 +45,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }, ]); - // console.log(JSON.stringify(response)); - expect(response.result.length).to.equal(1); expect(response.result[0].action.createMethod).to.equal("create"); expect(response.result[0].action.from).to.equal("0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"); @@ -101,8 +99,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }, ]); - // console.log(JSON.stringify(response)); - expect(response.result.length).to.equal(1); expect(response.result[0].action.createMethod).to.equal("create"); expect(response.result[0].action.from).to.equal("0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"); @@ -164,8 +160,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[1].transactionPosition).to.equal(0); expect(response.result[2].blockNumber).to.equal(3); expect(response.result[2].transactionPosition).to.equal(1); - - // console.log(JSON.stringify(response)); }); step("Call with subcalls, some reverting", async function () { @@ -197,7 +191,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }, ]); - // console.log(JSON.stringify(response)); expect(response.result.length).to.equal(7); expect(response.result[0].subtraces).to.equal(2); expect(response.result[0].traceAddress).to.deep.equal([]); @@ -223,7 +216,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }, ]); - // console.log(JSON.stringify(response)); expect(response.result.length).to.equal(9); expect(response.result[0].blockNumber).to.equal(3); expect(response.result[0].transactionPosition).to.equal(0); diff --git a/tests/tests/util/findAvailablePorts.ts b/tests/tests/util/findAvailablePorts.ts index 3ccaeb32ec6..2675b8e8cae 100644 --- a/tests/tests/util/findAvailablePorts.ts +++ b/tests/tests/util/findAvailablePorts.ts @@ -1,28 +1,24 @@ import tcpPortUsed from "tcp-port-used"; export async function findAvailablePorts() { - const startingPort = 20000; - const endingPort = 29999; - - let port = startingPort; - let availablePorts = []; - while (availablePorts.length < 3 && port < endingPort) { - const inUse = await tcpPortUsed.check(port, "127.0.0.1"); - try { - if (!inUse) { - availablePorts.push(port); + const availablePorts = await Promise.all( + [null, null, null].map(async (_, index) => { + let selectedPort = 0; + let port = 1024 + index * 20000 + (process.pid % 20000); + let endingPort = 65535; + while (!selectedPort && port < endingPort) { + const inUse = await tcpPortUsed.check(port, "127.0.0.1"); + if (!inUse) { + selectedPort = port; + } + port++; } - - port++; - } catch (err) { - console.log(`Error checking port ${port}: `, err); - port++; - } - } - - if (availablePorts.length < 3) { - throw `Could not find 3 ports available within range [${startingPort}, ${endingPort}]`; - } + if (!selectedPort) { + throw new Error(`No available port`); + } + return selectedPort; + }) + ); return { p2pPort: availablePorts[0], diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index 18bfd90bba1..ea4c427ca32 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -29,12 +29,7 @@ export async function startMoonbeamNode( specFilename: string, provider?: string ): Promise<{ context: Context; runningNode: ChildProcess }> { - const ports = await findAvailablePorts(); - - let web3; - if (!provider || provider == "http") { - web3 = new Web3(`http://localhost:${ports.rpcPort}`); - } + const { p2pPort, rpcPort, wsPort } = await findAvailablePorts(); const cmd = BINARY_PATH; const args = [ @@ -45,9 +40,9 @@ export async function startMoonbeamNode( `--ethapi=txpool,debug,trace`, `--sealing=manual`, `-l${MOONBEAM_LOG}`, - `--port=${ports.p2pPort}`, - `--rpc-port=${ports.rpcPort}`, - `--ws-port=${ports.wsPort}`, + `--port=${p2pPort}`, + `--rpc-port=${rpcPort}`, + `--ws-port=${wsPort}`, `--tmp`, ]; runningNode = spawn(cmd, args); @@ -79,17 +74,11 @@ export async function startMoonbeamNode( } binaryLogs.push(chunk); if (chunk.toString().match(/Development Service Ready/)) { - if (!provider || provider == "http") { - // This is needed as the EVM runtime needs to warmup with a first call - await web3.eth.getChainId(); - } - clearTimeout(timer); if (!DISPLAY_LOG) { runningNode.stderr.off("data", onData); runningNode.stdout.off("data", onData); } - // console.log(`\x1b[31m Starting RPC\x1b[0m`); resolve(); } }; @@ -97,26 +86,29 @@ export async function startMoonbeamNode( runningNode.stdout.on("data", onData); }); - const wsProvider = new WsProvider(`ws://localhost:${ports.wsPort}`); + const wsProvider = new WsProvider(`ws://localhost:${wsPort}`); const polkadotApi = await ApiPromise.create({ provider: wsProvider, typesBundle: typesBundle as any, }); - if (provider == "ws") { - web3 = new Web3(`ws://localhost:${ports.wsPort}`); - } + let web3 = + provider == "ws" + ? new Web3(`ws://localhost:${wsPort}`) + : new Web3(`http://localhost:${rpcPort}`); + + // This is needed as the EVM runtime needs to warmup with a first call + await web3.eth.getChainId(); return { context: { web3, polkadotApi, wsProvider }, runningNode }; } -// Kill all processes when exiting. -process.on("exit", function () { - runningNode ? runningNode.kill() : null; +process.once("exit", function () { + runningNode && runningNode.kill(); }); // Handle ctrl+c to trigger `exit`. -process.on("SIGINT", function () { +process.once("SIGINT", function () { process.exit(2); }); From b193e1fc52bccd3af1787c04c524dff84ac647b3 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 12 Apr 2021 23:22:04 +0000 Subject: [PATCH 05/49] Fixed ethers test --- tests/tests/test-ethers.ts | 18 ++++-------------- tests/tests/util/testWithMoonbeam.ts | 12 ++++++++++-- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers.ts index 1e3e823b7e3..45c994b082b 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers.ts @@ -8,22 +8,12 @@ describeWithMoonbeam("Moonbeam RPC (Ethers.js)", `simple-specs.json`, (context) const GENESIS_ACCOUNT_PRIVATE_KEY = "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - it("get network ids", async function () { - // Providers - let prov = context.web3.currentProvider as HttpProvider; - const provider = new ethers.providers.JsonRpcProvider(prov.host); - expect((await provider.getNetwork()).chainId).to.equal(1281); - const providerTestnet = new ethers.providers.JsonRpcProvider( - "https://rpc.testnet.moonbeam.network" - ); - expect((await providerTestnet.getNetwork()).chainId).to.equal(1287); + it("get network id", async function () { + expect((await context.ethers.getNetwork()).chainId).to.equal(1281); }); - it("deploy contract and interact with it", async function () { - // Providers - let prov = context.web3.currentProvider as HttpProvider; - const provider = new ethers.providers.JsonRpcProvider(prov.host); - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, provider); + it("deploy contract and interact with it", async function () { + let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); // deploy contract const factory = new ethers.ContractFactory( diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index ea4c427ca32..a2232bccbae 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -1,6 +1,8 @@ import Web3 from "web3"; import { ApiPromise, WsProvider } from "@polkadot/api"; import { typesBundle } from "../../../moonbeam-types-bundle"; +import { HttpProvider } from "web3-core"; +import { ethers } from "ethers"; import { spawn, ChildProcess, ChildProcessWithoutNullStreams } from "child_process"; import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "../constants"; @@ -15,6 +17,7 @@ export function log(...msg: (string | number | ErrorReport)[]) { export interface Context { web3: Web3; + ethers: ethers.providers.JsonRpcProvider; // WsProvider for the PolkadotJs API wsProvider: WsProvider; @@ -97,10 +100,14 @@ export async function startMoonbeamNode( ? new Web3(`ws://localhost:${wsPort}`) : new Web3(`http://localhost:${rpcPort}`); + const ethersApi = new ethers.providers.JsonRpcProvider( + (web3.currentProvider as HttpProvider).host + ); + // This is needed as the EVM runtime needs to warmup with a first call await web3.eth.getChainId(); - return { context: { web3, polkadotApi, wsProvider }, runningNode }; + return { context: { ethers: ethersApi, web3, polkadotApi, wsProvider }, runningNode }; } process.once("exit", function () { @@ -119,7 +126,7 @@ export function describeWithMoonbeam( provider?: string ) { describe(title, () => { - let context: Context = { web3: null, wsProvider: null, polkadotApi: null }; + let context: Context = { ethers: null, web3: null, wsProvider: null, polkadotApi: null }; let binary: ChildProcess; // Making sure the Moonbeam node has started @@ -129,6 +136,7 @@ export function describeWithMoonbeam( // Context is given prior to this assignement, so doing // context = init.context will fail because it replace the variable; context.web3 = init.context.web3; + context.ethers = init.context.ethers; context.wsProvider = init.context.wsProvider; context.polkadotApi = init.context.polkadotApi; binary = init.runningNode; From 1614a49e73de4a430d794d0311101298c009033b Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 12 Apr 2021 23:44:06 +0000 Subject: [PATCH 06/49] Adds delay to node start in test --- tests/tests/util/testWithMoonbeam.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index a2232bccbae..0d678ee1d8c 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -107,6 +107,10 @@ export async function startMoonbeamNode( // This is needed as the EVM runtime needs to warmup with a first call await web3.eth.getChainId(); + // This is needed as it takes a bit more time than when the log is printed to have all the modules + // initialized in the node. (getBalance would fail otherwise) + await polkadotApi.rpc.chain.getBlock(); + return { context: { ethers: ethersApi, web3, polkadotApi, wsProvider }, runningNode }; } From 1384de894a06b0ede30d67efddbe0d55ef2f0186 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Tue, 13 Apr 2021 02:21:05 +0000 Subject: [PATCH 07/49] Adds support for test watch --- tests/package.json | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/package.json b/tests/package.json index 8332d90f7c4..34449e6586f 100644 --- a/tests/package.json +++ b/tests/package.json @@ -3,9 +3,35 @@ "version": "1.0.0", "description": "", "main": "index.js", + "watch": { + "build": { + "patterns": [ + "../" + ], + "ignore": [ + "../tests", + "../target", + "../build" + ], + "extensions": "rs", + "quiet": false + }, + "test": { + "patterns": [ + "../target/release/moonbeam", + "./tests/**" + ], + "extensions": "ts,html,scss", + "quiet": true, + "inherit": true + } + }, "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", "test": "mocha --parallel -r ts-node/register 'tests/**/*.ts'", + "watch:test": "mocha --watch --watch-files ../target/release/moonbeam --parallel -r ts-node/register 'tests/**/*.ts'", + "watch": "npm-watch", + "build": "cargo build --release", "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" }, "author": "", @@ -19,6 +45,7 @@ "ethers": "^5.1.0", "mocha": "^8.3.2", "mocha-steps": "^1.3.0", + "npm-watch": "^0.9.0", "rimraf": "^3.0.2", "tcp-port-used": "^1.0.2", "ts-node": "9.1", From 1c8e09fa3794d8cd42cdd6aa20a486e112ffcf90 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Tue, 13 Apr 2021 02:42:40 +0000 Subject: [PATCH 08/49] Cleaned package.json --- tests/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/package.json b/tests/package.json index 34449e6586f..39ae0c9f788 100644 --- a/tests/package.json +++ b/tests/package.json @@ -14,7 +14,8 @@ "../build" ], "extensions": "rs", - "quiet": false + "quiet": true, + "inherit": true }, "test": { "patterns": [ @@ -29,7 +30,6 @@ "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", "test": "mocha --parallel -r ts-node/register 'tests/**/*.ts'", - "watch:test": "mocha --watch --watch-files ../target/release/moonbeam --parallel -r ts-node/register 'tests/**/*.ts'", "watch": "npm-watch", "build": "cargo build --release", "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" From ffc5135c5e8c78556d0a2d43f9e0b9e453300b48 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Tue, 13 Apr 2021 03:00:23 +0000 Subject: [PATCH 09/49] Prevent test to run at start of watch --- tests/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/package.json b/tests/package.json index 39ae0c9f788..b8a84e6c7d2 100644 --- a/tests/package.json +++ b/tests/package.json @@ -24,7 +24,8 @@ ], "extensions": "ts,html,scss", "quiet": true, - "inherit": true + "inherit": true, + "runOnChangeOnly": true } }, "scripts": { From 78552d8cfa9510a190212722017380f137180607 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Tue, 13 Apr 2021 03:36:43 +0000 Subject: [PATCH 10/49] Restore optimization for cargo build --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ba5755c5cea..86a1c0480e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,4 +6,3 @@ members = [ [profile.release] panic = 'unwind' -opt-level = 0 From 67c971b06c48caac7a5a0b0e9830080bc626f476 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Sat, 10 Apr 2021 10:36:53 +0200 Subject: [PATCH 11/49] Allow for non-finalization and ParentHash specification in createAndFinalizeBlock --- tests/tests/util/polkadotApiRequests.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/tests/util/polkadotApiRequests.ts b/tests/tests/util/polkadotApiRequests.ts index e01fe746ecd..6cdbf101d9b 100644 --- a/tests/tests/util/polkadotApiRequests.ts +++ b/tests/tests/util/polkadotApiRequests.ts @@ -1,11 +1,20 @@ import { ApiPromise } from "@polkadot/api"; +import { BlockHash } from "@polkadot/types/interfaces/chain"; // Create a block and finalize it. // It will include all previously executed transactions since the last finalized block. -export async function createAndFinalizeBlock(api: ApiPromise): Promise { +export async function createAndFinalizeBlock( + api: ApiPromise, + parentHash?: BlockHash, + finalize: boolean = true +): Promise { const startTime: number = Date.now(); try { - await api.rpc.engine.createBlock(true, true); + if (parentHash == undefined) { + await api.rpc.engine.createBlock(true, finalize); + } else { + await api.rpc.engine.createBlock(true, finalize, parentHash); + } } catch (e) { console.log("ERROR DURING BLOCK FINALIZATION", e); } From 9bf2d45e160bd76aa32d37254c84dd0ccfd7c288 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 9 Apr 2021 18:58:15 +0200 Subject: [PATCH 12/49] Make test-block tests non-dependent by using non-finalized chains --- tests/tests/test-block.ts | 345 ++++++++++++++++++++------------------ 1 file changed, 181 insertions(+), 164 deletions(-) diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index efca8103d22..d147a4f09aa 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -9,192 +9,209 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { // Those tests are dependant of each other in the given order. // The reason is to avoid having to restart the node each time // Running them individually will result in failure + describe("Genesis Block", async () => { + step("should be at block 0 at genesis", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(0); + }); - step("should be at block 0 at genesis", async function () { - expect(await context.web3.eth.getBlockNumber()).to.equal(0); - }); - - step("should return genesis block", async function () { - expect(await context.web3.eth.getBlockNumber()).to.equal(0); - const block = await context.web3.eth.getBlock(0); - expect(block).to.include({ - author: "0x0000000000000000000000000000000000000000", - difficulty: "0", - extraData: "0x", - gasLimit: 15000000, - gasUsed: 0, - logsBloom: `0x${"0".repeat(512)}`, - number: 0, - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - }); - - expect(block.transactions).to.be.a("array").empty; - expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); - expect(block.hash).to.be.a("string").lengthOf(66); - expect(block.parentHash).to.be.a("string").lengthOf(66); - expect(block.timestamp).to.be.a("number"); - }); + step("should return genesis block", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(0); + const block = await context.web3.eth.getBlock(0); + expect(block).to.include({ + author: "0x0000000000000000000000000000000000000000", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + logsBloom: `0x${"0".repeat(512)}`, + number: 0, + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + }); + + expect(block.transactions).to.be.a("array").empty; + expect(block.uncles).to.be.a("array").empty; + expect((block as any).sealFields).to.eql([ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000", + ]); + expect(block.hash).to.be.a("string").lengthOf(66); + expect(block.parentHash).to.be.a("string").lengthOf(66); + expect(block.timestamp).to.be.a("number"); + }); - // TODO: unskip this when https://github.com/paritytech/frontier/pull/279 is merged - it.skip("fetch genesis block by hash", async function () { - //fetch block again using hash - const block = await context.web3.eth.getBlock(0); - const blockByHash = await context.web3.eth.getBlock(block.hash); - expect(blockByHash).to.include({ - author: "0x0000000000000000000000000000000000000000", - difficulty: "0", - extraData: "0x", - gasLimit: 4294967295, - gasUsed: 0, - logsBloom: `0x${"0".repeat(512)}`, - number: 0, - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + step("fetch genesis block by hash", async function () { + //fetch block again using hash + const block = await context.web3.eth.getBlock(0); + const blockByHash = await context.web3.eth.getBlock(block.hash); + expect(blockByHash).to.include({ + author: "0x0000000000000000000000000000000000000000", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + logsBloom: `0x${"0".repeat(512)}`, + number: 0, + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + }); }); }); + describe("Post Genesis Block 1", async () => { + before(async () => { + await createAndFinalizeBlock( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(0), + false + ); + let block1 = await context.web3.eth.getBlock(1); + }); - let firstBlockCreated = false; - step("should be at block 1 after block production", async function () { - this.timeout(15000); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getBlockNumber()).to.equal(1); - firstBlockCreated = true; - }); + step("should be at block 1 after block production", async function () { + this.timeout(15000); + expect(await context.web3.eth.getBlockNumber()).to.equal(1); + }); - step("should have valid timestamp after block production", async function () { - // Originally ,this test required the timestamp be in the last finve minutes. - // This requirement doesn't make sense when we forge timestamps in manual seal. - const block = await context.web3.eth.getBlock("latest"); - const next5Minutes = Date.now() / 1000 + 300; - expect(block.timestamp).to.be.least(0); - expect(block.timestamp).to.be.below(next5Minutes); - }); + step("should have valid timestamp after block production", async function () { + // Originally ,this test required the timestamp be in the last finve minutes. + // This requirement doesn't make sense when we forge timestamps in manual seal. + const block = await context.web3.eth.getBlock("latest"); + const next5Minutes = Date.now() / 1000 + 300; + expect(block.timestamp).to.be.least(0); + expect(block.timestamp).to.be.below(next5Minutes); + }); - step("retrieve block information", async function () { - expect(firstBlockCreated).to.be.true; - - const block = await context.web3.eth.getBlock("latest"); - expect(block).to.include({ - author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - difficulty: "0", - extraData: "0x", - gasLimit: 15000000, - gasUsed: 0, - //hash: "0x14fe6f7c93597f79b901f8b5d7a84277a90915b8d355959b587e18de34f1dc17", - logsBloom: `0x${"0".repeat(512)}`, - miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", - number: 1, - //parentHash: "0x04540257811b46d103d9896e7807040e7de5080e285841c5430d1a81588a0ce4", - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - //transactions: [], - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - //uncles: [] - }); - previousBlock = block; - - expect(block.transactions).to.be.a("array").empty; - expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); - expect(block.hash).to.be.a("string").lengthOf(66); - expect(block.parentHash).to.be.a("string").lengthOf(66); - expect(block.timestamp).to.be.a("number"); - }); + step("retrieve block information", async function () { + const block = await context.web3.eth.getBlock("latest"); + expect(block).to.include({ + author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + //hash: "0x14fe6f7c93597f79b901f8b5d7a84277a90915b8d355959b587e18de34f1dc17", + logsBloom: `0x${"0".repeat(512)}`, + miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", + number: 1, + //parentHash: "0x04540257811b46d103d9896e7807040e7de5080e285841c5430d1a81588a0ce4", + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + //transactions: [], + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + //uncles: [] + }); + // previousBlock = block; + + expect(block.transactions).to.be.a("array").empty; + expect(block.uncles).to.be.a("array").empty; + expect((block as any).sealFields).to.eql([ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000", + ]); + expect(block.hash).to.be.a("string").lengthOf(66); + expect(block.parentHash).to.be.a("string").lengthOf(66); + expect(block.timestamp).to.be.a("number"); + }); - step("get block by hash", async function () { - const latest_block = await context.web3.eth.getBlock("latest"); - const block = await context.web3.eth.getBlock(latest_block.hash); - expect(block.hash).to.be.eq(latest_block.hash); - }); + step("get block by hash", async function () { + const latest_block = await context.web3.eth.getBlock("latest"); + const block = await context.web3.eth.getBlock(latest_block.hash); + expect(block.hash).to.be.eq(latest_block.hash); + }); - step("get block by number", async function () { - const block = await context.web3.eth.getBlock(1); - expect(block).not.null; + step("get block by number", async function () { + const block = await context.web3.eth.getBlock(1); + expect(block).not.null; + }); }); - step("should include previous block hash as parent (block 2)", async function () { - this.timeout(15000); - await createAndFinalizeBlock(context.polkadotApi); - const block = await context.web3.eth.getBlock("latest"); - expect(block.hash).to.not.equal(previousBlock.hash); - expect(block.parentHash).to.equal(previousBlock.hash); - }); + describe("Post Genesis Block 2 Finalization", async () => { + before(async () => { + await createAndFinalizeBlock( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(0) + ); + await createAndFinalizeBlock( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(1) + ); + }); + step("should include previous block hash as parent (block 2)", async function () { + this.timeout(15000); + const block = await context.web3.eth.getBlock("latest"); + let previousBlock = await context.web3.eth.getBlock(1); + expect(block.hash).to.not.equal(previousBlock.hash); + expect(block.parentHash).to.equal(previousBlock.hash); + }); - // tx/block tests + // tx/block tests - step("genesis balance enough to make all the transfers", async function () { - expect(Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.gte(512 * 100000); - }); + step("genesis balance enough to make all the transfers", async function () { + expect(Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.gte(512 * 100000); + }); - // the maximum number of tx/ blocks is not constant but is always around 1500 + // the maximum number of tx/ blocks is not constant but is always around 1500 - it("should be able to fill a block with a 1 tx", async function () { - this.timeout(15000); - let { txPassedFirstBlock } = await fillBlockWithTx(context, 1); - expect(txPassedFirstBlock).to.eq(1); - }); + it("should be able to fill a block with a 1 tx", async function () { + this.timeout(15000); + let { txPassedFirstBlock } = await fillBlockWithTx(context, 1); + expect(txPassedFirstBlock).to.eq(1); + }); - it.skip("should be able to fill a block with 260 tx", async function () { - this.timeout(15000); - // We have 6_000_000 Gas available for transactions per block. - // Each transaction needs 2_000 (extrinsic cost) + 21_000 (eth cost) - // 6_000_000 / 23_000 = ~260.86 - // The test will send 261 tx and verify the first block contains only 260. - let { txPassed, txPassedFirstBlock } = await fillBlockWithTx(context, 261); - expect(txPassedFirstBlock).to.eq(260); - expect(txPassed).to.eq(261); // including all blocks - }); + it.skip("should be able to fill a block with 260 tx", async function () { + this.timeout(15000); + // We have 6_000_000 Gas available for transactions per block. + // Each transaction needs 2_000 (extrinsic cost) + 21_000 (eth cost) + // 6_000_000 / 23_000 = ~260.86 + // The test will send 261 tx and verify the first block contains only 260. + let { txPassed, txPassedFirstBlock } = await fillBlockWithTx(context, 261); + expect(txPassedFirstBlock).to.eq(260); + expect(txPassed).to.eq(261); // including all blocks + }); - it.skip("should be able to fill a block with 64 contract creations tx", async function () { - this.timeout(15000); - // We have 6_000_000 Gas available for transactions per block. - // Each transaction needs 2_000 (extrinsic cost) + 91019 (contract cost) - // 6_000_000 / 92_019 = ~64.50 + it.skip("should be able to fill a block with 64 contract creations tx", async function () { + this.timeout(15000); + // We have 6_000_000 Gas available for transactions per block. + // Each transaction needs 2_000 (extrinsic cost) + 91019 (contract cost) + // 6_000_000 / 92_019 = ~64.50 - // The test will send 65 contract tx and verify the first block contains only 64. - let { txPassedFirstBlock } = await fillBlockWithTx(context, 65, contractCreation); - expect(txPassedFirstBlock).to.eq(64); - }); + // The test will send 65 contract tx and verify the first block contains only 64. + let { txPassedFirstBlock } = await fillBlockWithTx(context, 65, contractCreation); + expect(txPassedFirstBlock).to.eq(64); + }); - // 8192 is the number of tx that can be sent to the Pool - // before it throws an error and drops all tx + // 8192 is the number of tx that can be sent to the Pool + // before it throws an error and drops all tx - it.skip("should be able to send 8192 tx to the pool and have them all published\ - within the following blocks", async function () { - this.timeout(120000); - let { txPassed } = await fillBlockWithTx(context, 8192); - expect(txPassed).to.eq(8192); - }); + it.skip("should be able to send 8192 tx to the pool and have them all published\ + within the following blocks", async function () { + this.timeout(120000); + let { txPassed } = await fillBlockWithTx(context, 8192); + expect(txPassed).to.eq(8192); + }); - it.skip("but shouldn't work for 8193", async function () { - this.timeout(120000); - let { txPassed } = await fillBlockWithTx(context, 8193); - expect(txPassed).to.eq(0); - }); + it.skip("but shouldn't work for 8193", async function () { + this.timeout(120000); + let { txPassed } = await fillBlockWithTx(context, 8193); + expect(txPassed).to.eq(0); + }); - it.skip("should be able to send 8192 tx to the pool and have them all published\ - within the following blocks - bigger tx", async function () { - this.timeout(120000); - let { txPassed } = await fillBlockWithTx(context, 8192, contractCreation); - expect(txPassed).to.eq(8192); - }); + it.skip("should be able to send 8192 tx to the pool and have them all published\ + within the following blocks - bigger tx", async function () { + this.timeout(120000); + let { txPassed } = await fillBlockWithTx(context, 8192, contractCreation); + expect(txPassed).to.eq(8192); + }); - it.skip("but shouldn't work for 8193 - bigger tx", async function () { - this.timeout(120000); - let { txPassed } = await fillBlockWithTx(context, 8193, contractCreation); - expect(txPassed).to.eq(0); + it.skip("but shouldn't work for 8193 - bigger tx", async function () { + this.timeout(120000); + let { txPassed } = await fillBlockWithTx(context, 8193, contractCreation); + expect(txPassed).to.eq(0); + }); }); }); From 165c1c1a3fb749e59e79a7fdbe7000e0241d884c Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:39:17 +0200 Subject: [PATCH 13/49] Separate tests to make them non-dependent and parametrize tx hashes and nonces in test-txpool --- tests/tests/test-txpool.ts | 191 +++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 84 deletions(-) diff --git a/tests/tests/test-txpool.ts b/tests/tests/test-txpool.ts index 795e5b6f10d..f8788debb3c 100644 --- a/tests/tests/test-txpool.ts +++ b/tests/tests/test-txpool.ts @@ -7,98 +7,121 @@ import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; let txContract, contractAddress; describeWithMoonbeam("Moonbeam RPC (TxPool RPC module)", `simple-specs.json`, (context) => { - it("should get pending pool information on Create", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: ERC20_BYTECODE, - value: "0x00", - gasPrice: "0x01", + describe("TxPool test on contract creation", async () => { + let txContract, nonce, tx; + beforeEach(async () => { + nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: ERC20_BYTECODE, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + }); + it("should get pending pool information on Create", async function () { + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" + ); + + let content = await customRequest(context.web3, "txpool_content", []); + + data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - let inspect = await customRequest(context.web3, "txpool_inspect", []); - - let data = inspect.result.pending[GENESIS_ACCOUNT]["0x0"]; - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" - ); - - let content = await customRequest(context.web3, "txpool_content", []); - - data = content.result.pending[GENESIS_ACCOUNT]["0x0"]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - gas: "0x100000", - gasPrice: "0x1", - hash: "0x6073b838b5cb04e04e57d6f25dd9387ff2a3d1de5c9a7bd89206f269cb64fe1b", - nonce: "0x0", - to: "0x0000000000000000000000000000000000000000", - value: "0x0", + gasPrice: "0x1", + hash: tx.messageHash.toString(), + nonce: context.web3.utils.toHex(nonce), + to: "0x0000000000000000000000000000000000000000", + value: "0x0", + }); + await createAndFinalizeBlock(context.polkadotApi); }); - }); - - it("pool should be empty after producing a block", async function () { - await createAndFinalizeBlock(context.polkadotApi); - - const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); - contractAddress = receipt.contractAddress; + it("pool should be empty after producing a block", async function () { + await createAndFinalizeBlock(context.polkadotApi); + const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); + contractAddress = receipt.contractAddress; - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT]; + expect(data).to.be.undefined; - let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; + let content = await customRequest(context.web3, "txpool_content", []); + data = content.result.pending[GENESIS_ACCOUNT]; + expect(data).to.be.undefined; + }); }); - it("should get pending pool information on Call", async function () { - const transferFnCode = `a9059cbb000000000000000000000000`; - const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; - const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; - - const tx = await context.web3.eth.accounts.signTransaction( - { - to: contractAddress, - data: inputCode, - value: "0x00", - gasPrice: "0x01", + describe("TxPool test on contract call and finalization", async () => { + let txContract, contractAddress; + before(async function () { + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: ERC20_BYTECODE, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); + const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); + + contractAddress = receipt.contractAddress; + }); + it("should get pending pool information on Call", async function () { + this.timeout(15000); + + const transferFnCode = `a9059cbb000000000000000000000000`; + const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; + const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; + const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + const tx = await context.web3.eth.accounts.signTransaction( + { + to: contractAddress, + data: inputCode, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + contractAddress.toString().toLowerCase() + ": 0 wei + 1048576 gas x 1 wei" + ); + + let content = await customRequest(context.web3, "txpool_content", []); + data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - let inspect = await customRequest(context.web3, "txpool_inspect", []); - - let data = inspect.result.pending[GENESIS_ACCOUNT]["0x1"]; - - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a: 0 wei + 1048576 gas x 1 wei" - ); - - let content = await customRequest(context.web3, "txpool_content", []); - - data = content.result.pending[GENESIS_ACCOUNT]["0x1"]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - gas: "0x100000", - gasPrice: "0x1", - hash: "0x82e9940df25dec4f57030478ff848728e38e55cffd031cd6f43b3c114863544d", - nonce: "0x1", - to: "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a", - value: "0x0", + gasPrice: "0x1", + hash: tx.messageHash.toString(), + nonce: context.web3.utils.toHex(nonce), + to: contractAddress.toString().toLowerCase(), + value: "0x0", + }); }); }); }); From 5a1492eeb54995dc188cbb041e21842e6cc37aae Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:40:36 +0200 Subject: [PATCH 14/49] it instead of step in test-version --- tests/tests/test-version.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests/test-version.ts b/tests/tests/test-version.ts index 882a32715fc..23676774614 100644 --- a/tests/tests/test-version.ts +++ b/tests/tests/test-version.ts @@ -4,10 +4,10 @@ import { step } from "mocha-steps"; import { describeWithMoonbeam } from "./util"; describeWithMoonbeam("Moonbeam RPC (Version)", `simple-specs.json`, (context) => { - step("eth_chainId should match", async function () { + it("eth_chainId should match", async function () { expect(await context.web3.eth.getChainId()).to.equal(1281); }); - step("net_version should match", async function () { + it("net_version should match", async function () { expect(await context.web3.eth.net.getId()).to.equal(1281); }); }); From 7836dc6b3f5e2f2d62a7b12e2a9b4f0112d2193e Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:42:03 +0200 Subject: [PATCH 15/49] setup providers before tests in test-ethers.ts --- tests/tests/test-ethers.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers.ts index 45c994b082b..4404e9cb8e8 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers.ts @@ -2,18 +2,30 @@ import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; import { HttpProvider } from "web3-core"; import { expect } from "chai"; import { ethers } from "ethers"; -import { TEST_CONTRACT_ABI_ETHERS, TEST_CONTRACT_BYTECODE } from "./constants"; +import { + TEST_CONTRACT_ABI_ETHERS, + TEST_CONTRACT_BYTECODE, + GENESIS_ACCOUNT_PRIVATE_KEY, +} from "./constants"; describeWithMoonbeam("Moonbeam RPC (Ethers.js)", `simple-specs.json`, (context) => { - const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - - it("get network id", async function () { - expect((await context.ethers.getNetwork()).chainId).to.equal(1281); + let provider; + before(() => { + // Providers + let prov = context.web3.currentProvider as HttpProvider; + provider = new ethers.providers.JsonRpcProvider(prov.host); }); + it("get network ids", async function () { + expect((await provider.getNetwork()).chainId).to.equal(1281); + const providerTestnet = new ethers.providers.JsonRpcProvider( + "https://rpc.testnet.moonbeam.network" + ); + expect((await providerTestnet.getNetwork()).chainId).to.equal(1287); + }); it("deploy contract and interact with it", async function () { - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); + this.timeout(15000); + let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, provider); // deploy contract const factory = new ethers.ContractFactory( From 51ee9c461de64716118388a6be7d62edf1899181 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:47:40 +0200 Subject: [PATCH 16/49] Create a block before tests to avoid one depend on the other in test-nonce --- tests/tests/test-nonce.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/tests/test-nonce.ts b/tests/tests/test-nonce.ts index f6ae78df043..694af6d8691 100644 --- a/tests/tests/test-nonce.ts +++ b/tests/tests/test-nonce.ts @@ -6,7 +6,11 @@ import { Keyring } from "@polkadot/keyring"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; describeWithMoonbeam("Moonbeam RPC (Nonce)", `simple-specs.json`, (context) => { - step("get nonce", async function () { + before(async () => { + // For some reason fees are not well estimated otherwise + await createAndFinalizeBlock(context.polkadotApi); + }); + it("get nonce", async function () { this.timeout(10_000); const tx = await context.web3.eth.accounts.signTransaction( { From b1d8f02b2b59edb2d292f64a178d031dbe9d8c03 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:57:08 +0200 Subject: [PATCH 17/49] it for step in test-receipt --- tests/tests/test-receipt.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/test-receipt.ts b/tests/tests/test-receipt.ts index eb66ecc4177..fea1c9f71bf 100644 --- a/tests/tests/test-receipt.ts +++ b/tests/tests/test-receipt.ts @@ -11,7 +11,7 @@ const GENESIS_ACCOUNT_PRIVATE_KEY = "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; describeWithMoonbeam("Moonbeam RPC (Receipt)", `simple-specs.json`, (context) => { - step("Receipt and events logs should contain valid values", async function () { + it("Receipt and events logs should contain valid values", async function () { const createTx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, From 22b2077f85156ebe97cfcd1e2bf86b6a371a8575 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Mon, 12 Apr 2021 14:57:37 +0200 Subject: [PATCH 18/49] import constants for test-staking --- tests/tests/test-stake.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/tests/test-stake.ts b/tests/tests/test-stake.ts index ab4e0c6251c..840229b0691 100644 --- a/tests/tests/test-stake.ts +++ b/tests/tests/test-stake.ts @@ -1,15 +1,17 @@ import { expect } from "chai"; import { step } from "mocha-steps"; -import { describeWithMoonbeam } from "./util"; -import { GLMR } from "./constants"; +import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; +import { DEFAULT_GENESIS_STAKING, GENESIS_ACCOUNT } from "./constants"; describeWithMoonbeam("Moonbeam RPC (Stake)", `simple-specs.json`, (context) => { - const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; - const GENESIS_STAKED = 1_000n * GLMR; + before(async () => { + // For some reason balances are not well queried otherwise + await createAndFinalizeBlock(context.polkadotApi); + }); step("collator bond reserved in genesis", async function () { const account = await context.polkadotApi.query.system.account(GENESIS_ACCOUNT); - expect(account.data.reserved.toString()).to.equal(GENESIS_STAKED.toString()); + expect(account.data.reserved.toString()).to.equal(DEFAULT_GENESIS_STAKING.toString()); }); step("collator set in genesis", async function () { From 2c9e87e013864fa26519e6915af9ae9f385f93f1 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Tue, 13 Apr 2021 09:15:44 +0200 Subject: [PATCH 19/49] Attemp at parametrizing test-filter-api tests --- tests/tests/test-filter-api.ts | 60 +++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index 0da84cc85d0..c20d8e73fa9 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -1,14 +1,11 @@ import { expect } from "chai"; import { step } from "mocha-steps"; import { create } from "ts-node"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (context) => { - const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; - const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - // This reflects the measured gas cost of the transaction at this current point in time. // It has been known to fluctuate from release to release, so it may need adjustment. const EXPECTED_TRANSACTION_GAS_COST = 891328; @@ -138,6 +135,23 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); return tx; } + let currentId; + const block_lifespan_threshold = 100; + const max_filter_pool = 500; + beforeEach(async function () { + this.timeout(15000); + let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); + let filter_id = create_filter.result; + // If filter is NAN filter pool is full + if (isNaN(filter_id)) { + filter_id = 500; + } + // Lets have a clean environment by uninstalling all tests + for (let i = 0; i <= filter_id; i++) { + await customRequest(context.web3, "eth_uninstallFilter", [i]); + } + currentId = 0; + }); step("should create a Log filter and return the ID", async function () { let create_filter = await customRequest(context.web3, "eth_newFilter", [ @@ -151,7 +165,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq("0x1"); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); step("should increment filter ID", async function () { @@ -163,12 +177,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq("0x2"); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); step("should create a Block filter and return the ID", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(create_filter.result).to.be.eq("0x3"); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); step( @@ -182,16 +196,20 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex ); step("should return responses for Block filter polling.", async function () { - let block = await context.web3.eth.getBlock(0); - let poll = await customRequest(context.web3, "eth_getFilterChanges", ["0x3"]); - + let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); + let block = await context.web3.eth.getBlock("latest"); + let poll = await customRequest(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(create_filter.result), + ]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0]).to.be.eq(block.hash); await createAndFinalizeBlock(context.polkadotApi); - block = await context.web3.eth.getBlock(1); - poll = await customRequest(context.web3, "eth_getFilterChanges", ["0x3"]); + block = await context.web3.eth.getBlock("latest"); + poll = await customRequest(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(create_filter.result), + ]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0]).to.be.eq(block.hash); @@ -199,9 +217,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await createAndFinalizeBlock(context.polkadotApi); await createAndFinalizeBlock(context.polkadotApi); - block = await context.web3.eth.getBlock(2); - let block_b = await context.web3.eth.getBlock(3); - poll = await customRequest(context.web3, "eth_getFilterChanges", ["0x3"]); + let current_height = await context.web3.eth.getBlockNumber(); + block = await context.web3.eth.getBlock(current_height - 1); + let block_b = await context.web3.eth.getBlock(current_height); + poll = await customRequest(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(create_filter.result), + ]); expect(poll.result.length).to.be.eq(2); expect(poll.result[0]).to.be.eq(block.hash); @@ -254,7 +275,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }, ]); let poll = await customRequest(context.web3, "eth_getFilterLogs", [create_filter.result]); - expect(poll.result.length).to.be.eq(1); expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); @@ -270,7 +290,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex step("should uninstall created filters.", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); let filter_id = create_filter.result; - // Should return true when removed from the filter pool. let uninstall = await customRequest(context.web3, "eth_uninstallFilter", [filter_id]); expect(uninstall.result).to.be.eq(true); @@ -278,13 +297,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex // Should return error if does not exist. let r = await customRequest(context.web3, "eth_uninstallFilter", [filter_id]); expect(r.error).to.include({ - message: "Filter id 6 does not exist.", + message: "Filter id " + parseInt(filter_id, 16) + " does not exist.", }); }); step("should drain the filter pool.", async function () { this.timeout(15000); - const block_lifespan_threshold = 100; let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); let filter_id = create_filter.result; @@ -295,13 +313,11 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex let r = await customRequest(context.web3, "eth_getFilterChanges", [filter_id]); expect(r.error).to.include({ - message: "Filter id 6 does not exist.", + message: "Filter id " + parseInt(filter_id, 16) + " does not exist.", }); }); step("should have a filter pool max size of 500.", async function () { - const max_filter_pool = 500; - for (let i = 0; i < max_filter_pool; i++) { await customRequest(context.web3, "eth_newBlockFilter", []); } From b2121eb7e78513cbea7e92bc695da3bc0be1a6bd Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Tue, 13 Apr 2021 09:16:19 +0200 Subject: [PATCH 20/49] attemp at parametrizing test-revert-receipt --- tests/tests/test-revert-receipt.ts | 40 ++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts index bc9f67e5c09..aa4030738a9 100644 --- a/tests/tests/test-revert-receipt.ts +++ b/tests/tests/test-revert-receipt.ts @@ -25,9 +25,17 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( "80fdfea2646970667358221220c70bc8b03cdfdf57b5f6c4131b836f9c2c4df01b8202f530555333f2a00e4b8364" + "736f6c63430006060033"; + let expected_contract_address; + beforeEach(async function () { + let tx_count = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + if (tx_count == 0) { + expected_contract_address = "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a"; + } else { + expected_contract_address = "0x5c4242beB94dE30b922f57241f1D02f36e906915"; + } + }); it("should provide a tx receipt after successful deployment", async function () { this.timeout(15000); - const GOOD_TX_HASH = "0x410f72144e2c0e8b48091f5675422b7a8013335cfdb5e83825c5f27cd991ac8c"; const tx = await context.web3.eth.accounts.signTransaction( { @@ -40,25 +48,29 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( GENESIS_ACCOUNT_PRIVATE_KEY ); + const good_tx_hash = context.web3.utils.keccak256(tx.rawTransaction); + expect( await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) ).to.deep.equal({ id: 1, jsonrpc: "2.0", - result: GOOD_TX_HASH, + result: tx.transactionHash, }); // Verify the receipt exists after the block is created await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(GOOD_TX_HASH); + let current_height = await context.web3.eth.getBlockNumber(); + + const receipt = await context.web3.eth.getTransactionReceipt(good_tx_hash); expect(receipt).to.include({ - blockNumber: 1, - contractAddress: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + blockNumber: current_height, + contractAddress: expected_contract_address, cumulativeGasUsed: 67231, from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", gasUsed: 67231, to: null, - transactionHash: GOOD_TX_HASH, + transactionHash: good_tx_hash, transactionIndex: 0, status: true, }); @@ -66,8 +78,6 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( it("should provide a tx receipt after failed deployment", async function () { this.timeout(15000); - // Transaction hash depends on which nonce we're using. This hash is for nonce 2. - const FAIL_TX_HASH = "0xe5ba0bd6229c3315cefa16312b6f3674a5f928aed1b7f397596b724fb259c5ba"; const tx = await context.web3.eth.accounts.signTransaction( { @@ -80,24 +90,28 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( GENESIS_ACCOUNT_PRIVATE_KEY ); + const fail_tx_hash = context.web3.utils.keccak256(tx.rawTransaction); + expect( await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) ).to.deep.equal({ id: 1, jsonrpc: "2.0", - result: FAIL_TX_HASH, + result: tx.transactionHash, }); await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(FAIL_TX_HASH); + let current_height = await context.web3.eth.getBlockNumber(); + + const receipt = await context.web3.eth.getTransactionReceipt(fail_tx_hash); expect(receipt).to.include({ - blockNumber: 2, - contractAddress: "0x5c4242beB94dE30b922f57241f1D02f36e906915", + blockNumber: current_height, + contractAddress: expected_contract_address, cumulativeGasUsed: 54600, from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", gasUsed: 54600, to: null, - transactionHash: FAIL_TX_HASH, + transactionHash: fail_tx_hash, transactionIndex: 0, status: false, }); From adaa05e943513ce14943bca7a1f3c0c036849fed Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Tue, 13 Apr 2021 09:41:33 +0200 Subject: [PATCH 21/49] remove mocha-steps from tests --- tests/package.json | 1 - tests/tests/test-balance.ts | 13 ++++----- tests/tests/test-block.ts | 25 +++++++++-------- tests/tests/test-existential-deposit.ts | 3 +- tests/tests/test-filter-api.ts | 22 +++++++-------- tests/tests/test-nonce.ts | 1 - tests/tests/test-polkadot-api.ts | 11 ++++---- tests/tests/test-receipt.ts | 2 -- tests/tests/test-stake.ts | 6 ++-- tests/tests/test-subscription.ts | 37 ++++++++++++------------- tests/tests/test-trace-filter.ts | 15 +++++----- tests/tests/test-trace.ts | 10 +++---- tests/tests/test-version.ts | 1 - 13 files changed, 68 insertions(+), 79 deletions(-) diff --git a/tests/package.json b/tests/package.json index b8a84e6c7d2..0f861f5ec67 100644 --- a/tests/package.json +++ b/tests/package.json @@ -45,7 +45,6 @@ "chai": "^4.3.4", "ethers": "^5.1.0", "mocha": "^8.3.2", - "mocha-steps": "^1.3.0", "npm-watch": "^0.9.0", "rimraf": "^3.0.2", "tcp-port-used": "^1.0.2", diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts index 0950275a2e5..439907b9edf 100644 --- a/tests/tests/test-balance.ts +++ b/tests/tests/test-balance.ts @@ -1,6 +1,5 @@ import { expect } from "chai"; import { Keyring } from "@polkadot/keyring"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; import { @@ -12,17 +11,17 @@ import { import { Event } from "@polkadot/types/interfaces"; describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => { - step("genesis balance is setup correctly (web3)", async function () { + it("genesis balance is setup correctly (web3)", async function () { expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( GENESIS_ACCOUNT_BALANCE.toString() ); }); - step("genesis balance is setup correctly (polkadotJs)", async function () { + it("genesis balance is setup correctly (polkadotJs)", async function () { const account = await context.polkadotApi.query.system.account(GENESIS_ACCOUNT); expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); }); - step("balance to be updated after transfer", async function () { + it("balance to be updated after transfer", async function () { this.timeout(15000); const tx = await context.web3.eth.accounts.signTransaction( @@ -43,7 +42,7 @@ describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); }); - step("read ethereum.transact extrinsic events", async function () { + it("read ethereum.transact extrinsic events", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); const allRecords = await context.polkadotApi.query.system.events.at( signedBlock.block.header.hash @@ -86,7 +85,7 @@ describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => }); }); - step("balance should be the same on polkadot/web3", async function () { + it("balance should be the same on polkadot/web3", async function () { this.timeout(15000); const tx = await context.web3.eth.accounts.signTransaction( @@ -108,7 +107,7 @@ describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; - step("transfer from polkadotjs should appear in ethereum", async function () { + it("transfer from polkadotjs should appear in ethereum", async function () { this.timeout(15000); const keyring = new Keyring({ type: "ethereum" }); diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index d147a4f09aa..6d4d400261a 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { contractCreation, GENESIS_ACCOUNT } from "./constants"; import { createAndFinalizeBlock, describeWithMoonbeam, fillBlockWithTx } from "./util"; @@ -10,11 +9,12 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { // The reason is to avoid having to restart the node each time // Running them individually will result in failure describe("Genesis Block", async () => { - step("should be at block 0 at genesis", async function () { + + it("should be at block 0 at genesis", async function () { expect(await context.web3.eth.getBlockNumber()).to.equal(0); }); - step("should return genesis block", async function () { + it("should return genesis block", async function () { expect(await context.web3.eth.getBlockNumber()).to.equal(0); const block = await context.web3.eth.getBlock(0); expect(block).to.include({ @@ -42,7 +42,7 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { expect(block.timestamp).to.be.a("number"); }); - step("fetch genesis block by hash", async function () { + it("fetch genesis block by hash", async function () { //fetch block again using hash const block = await context.web3.eth.getBlock(0); const blockByHash = await context.web3.eth.getBlock(block.hash); @@ -71,12 +71,12 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { let block1 = await context.web3.eth.getBlock(1); }); - step("should be at block 1 after block production", async function () { + it("should be at block 1 after block production", async function () { this.timeout(15000); expect(await context.web3.eth.getBlockNumber()).to.equal(1); }); - step("should have valid timestamp after block production", async function () { + it("should have valid timestamp after block production", async function () { // Originally ,this test required the timestamp be in the last finve minutes. // This requirement doesn't make sense when we forge timestamps in manual seal. const block = await context.web3.eth.getBlock("latest"); @@ -85,7 +85,8 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { expect(block.timestamp).to.be.below(next5Minutes); }); - step("retrieve block information", async function () { + it("retrieve block information", async function () { + const block = await context.web3.eth.getBlock("latest"); expect(block).to.include({ author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", @@ -118,19 +119,20 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { expect(block.timestamp).to.be.a("number"); }); - step("get block by hash", async function () { + it("get block by hash", async function () { const latest_block = await context.web3.eth.getBlock("latest"); const block = await context.web3.eth.getBlock(latest_block.hash); expect(block.hash).to.be.eq(latest_block.hash); }); - step("get block by number", async function () { + it("get block by number", async function () { const block = await context.web3.eth.getBlock(1); expect(block).not.null; }); }); describe("Post Genesis Block 2 Finalization", async () => { + before(async () => { await createAndFinalizeBlock( context.polkadotApi, @@ -141,7 +143,8 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { await context.polkadotApi.rpc.chain.getBlockHash(1) ); }); - step("should include previous block hash as parent (block 2)", async function () { + + it("should include previous block hash as parent (block 2)", async function () { this.timeout(15000); const block = await context.web3.eth.getBlock("latest"); let previousBlock = await context.web3.eth.getBlock(1); @@ -151,7 +154,7 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { // tx/block tests - step("genesis balance enough to make all the transfers", async function () { + it("genesis balance enough to make all the transfers", async function () { expect(Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.gte(512 * 100000); }); diff --git a/tests/tests/test-existential-deposit.ts b/tests/tests/test-existential-deposit.ts index 13db1430794..0f88f5808d9 100644 --- a/tests/tests/test-existential-deposit.ts +++ b/tests/tests/test-existential-deposit.ts @@ -1,11 +1,10 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; describeWithMoonbeam("Moonbeam RPC (Existential Deposit)", `simple-specs.json`, (context) => { - step("Account is not reaped on zero balance", async function () { + it("Account is not reaped on zero balance", async function () { const balance = await context.web3.eth.getBalance(GENESIS_ACCOUNT); const tx = await context.web3.eth.accounts.signTransaction( { diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index c20d8e73fa9..30a80676f8f 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -1,6 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; -import { create } from "ts-node"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; @@ -153,7 +151,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex currentId = 0; }); - step("should create a Log filter and return the ID", async function () { + it("should create a Log filter and return the ID", async function () { let create_filter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x0", @@ -168,7 +166,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); - step("should increment filter ID", async function () { + it("should increment filter ID", async function () { let create_filter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x1", @@ -180,12 +178,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); - step("should create a Block filter and return the ID", async function () { + it("should create a Block filter and return the ID", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); - step( + it( "should return unsupported error for Pending Transaction filter creation", async function () { let r = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); @@ -195,7 +193,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex } ); - step("should return responses for Block filter polling.", async function () { + it("should return responses for Block filter polling.", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); let block = await context.web3.eth.getBlock("latest"); let poll = await customRequest(context.web3, "eth_getFilterChanges", [ @@ -229,7 +227,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(poll.result[1]).to.be.eq(block_b.hash); }); - step("should return responses for Log filter polling.", async function () { + it("should return responses for Log filter polling.", async function () { // Create contract. let tx = await sendTransaction(context); await createAndFinalizeBlock(context.polkadotApi); @@ -257,7 +255,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(poll.result.length).to.be.eq(0); }); - step("should return response for raw Log filter request.", async function () { + it("should return response for raw Log filter request.", async function () { // Create contract. let tx = await sendTransaction(context); await createAndFinalizeBlock(context.polkadotApi); @@ -287,7 +285,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); }); - step("should uninstall created filters.", async function () { + it("should uninstall created filters.", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); let filter_id = create_filter.result; // Should return true when removed from the filter pool. @@ -301,7 +299,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); }); - step("should drain the filter pool.", async function () { + it("should drain the filter pool.", async function () { this.timeout(15000); let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); @@ -317,7 +315,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); }); - step("should have a filter pool max size of 500.", async function () { + it("should have a filter pool max size of 500.", async function () { for (let i = 0; i < max_filter_pool; i++) { await customRequest(context.web3, "eth_newBlockFilter", []); } diff --git a/tests/tests/test-nonce.ts b/tests/tests/test-nonce.ts index 694af6d8691..76b4b120c79 100644 --- a/tests/tests/test-nonce.ts +++ b/tests/tests/test-nonce.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; import { Keyring } from "@polkadot/keyring"; diff --git a/tests/tests/test-polkadot-api.ts b/tests/tests/test-polkadot-api.ts index 0827e7d8227..d1fc03af962 100644 --- a/tests/tests/test-polkadot-api.ts +++ b/tests/tests/test-polkadot-api.ts @@ -1,25 +1,24 @@ import { expect } from "chai"; import { Keyring } from "@polkadot/keyring"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; import { AnyTuple, IEvent } from "@polkadot/types/types"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => { - step("api can retrieve last header", async function () { + it("api can retrieve last header", async function () { const lastHeader = await context.polkadotApi.rpc.chain.getHeader(); expect(Number(lastHeader.number) >= 0).to.be.true; }); - step("api can retrieve last block", async function () { + it("api can retrieve last block", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); expect(signedBlock.block.header.number.toNumber() >= 0).to.be.true; }); const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; - step("transfer from polkadotjs should appear in ethereum", async function () { + it("transfer from polkadotjs should appear in ethereum", async function () { this.timeout(30000); const keyring = new Keyring({ type: "ethereum" }); @@ -36,7 +35,7 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); }); - step("read extrinsic information", async function () { + it("read extrinsic information", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); expect(signedBlock.block.header.number.toNumber() >= 0).to.be.true; @@ -74,7 +73,7 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => }); }); - step("read extrinsic events", async function () { + it("read extrinsic events", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); const allRecords = await context.polkadotApi.query.system.events.at( signedBlock.block.header.hash diff --git a/tests/tests/test-receipt.ts b/tests/tests/test-receipt.ts index fea1c9f71bf..6402cc8473e 100644 --- a/tests/tests/test-receipt.ts +++ b/tests/tests/test-receipt.ts @@ -1,6 +1,4 @@ import { expect } from "chai"; -import { Keyring } from "@polkadot/keyring"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; diff --git a/tests/tests/test-stake.ts b/tests/tests/test-stake.ts index 840229b0691..27d000097f3 100644 --- a/tests/tests/test-stake.ts +++ b/tests/tests/test-stake.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; import { DEFAULT_GENESIS_STAKING, GENESIS_ACCOUNT } from "./constants"; @@ -9,12 +8,13 @@ describeWithMoonbeam("Moonbeam RPC (Stake)", `simple-specs.json`, (context) => { // For some reason balances are not well queried otherwise await createAndFinalizeBlock(context.polkadotApi); }); - step("collator bond reserved in genesis", async function () { + + it("collator bond reserved in genesis", async function () { const account = await context.polkadotApi.query.system.account(GENESIS_ACCOUNT); expect(account.data.reserved.toString()).to.equal(DEFAULT_GENESIS_STAKING.toString()); }); - step("collator set in genesis", async function () { + it("collator set in genesis", async function () { const collators = await context.polkadotApi.query.parachainStaking.selectedCandidates(); expect((collators[0] as Buffer).toString("hex").toLowerCase()).equal(GENESIS_ACCOUNT); }); diff --git a/tests/tests/test-subscription.ts b/tests/tests/test-subscription.ts index 7106a302d1b..f88d3e08585 100644 --- a/tests/tests/test-subscription.ts +++ b/tests/tests/test-subscription.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { Subscription as Web3Subscription } from "web3-core-subscriptions"; import { BlockHeader } from "web3-eth"; import { Log } from "web3-core"; @@ -146,13 +145,13 @@ describeWithMoonbeam( return (context.web3.eth as any).subscribe(...arguments); } - step("should connect", async function () { + it("should connect", async function () { await createAndFinalizeBlock(context.polkadotApi); // @ts-ignore expect(context.web3.currentProvider.connected).to.equal(true); }); - step("should subscribe", async function () { + it("should subscribe", async function () { const subscription = web3Subscribe("newBlockHeaders"); const subscriptionId = await new Promise((resolve) => subscription.once("connected", resolve) @@ -162,7 +161,7 @@ describeWithMoonbeam( expect(subscriptionId).to.have.lengthOf(34); }); - step("should get newHeads stream", async function () { + it("should get newHeads stream", async function () { const subscription = web3Subscribe("newBlockHeaders"); const data = await new Promise((resolve) => { createAndFinalizeBlock(context.polkadotApi); @@ -186,7 +185,7 @@ describeWithMoonbeam( ]); }); - step("should get newPendingTransactions stream", async function () { + it("should get newPendingTransactions stream", async function () { const subscription = web3Subscribe("pendingTransactions"); await new Promise((resolve) => subscription.once("connected", resolve)); @@ -202,7 +201,7 @@ describeWithMoonbeam( expect(tx["transactionHash"]).to.be.eq(data); }); - step("should subscribe to all logs", async function () { + it("should subscribe to all logs", async function () { const subscription = web3Subscribe("logs", {}); await new Promise((resolve) => { @@ -230,7 +229,7 @@ describeWithMoonbeam( }); }); - step("should subscribe to logs by address", async function () { + it("should subscribe to logs by address", async function () { const subscription = web3Subscribe("logs", { address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", }); @@ -249,7 +248,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should subscribe to logs by multiple addresses", async function () { + it("should subscribe to logs by multiple addresses", async function () { const subscription = web3Subscribe("logs", { address: [ "0xF8cef78E923919054037a1D03662bBD884fF4edf", @@ -274,7 +273,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should subscribe to logs by topic", async function () { + it("should subscribe to logs by topic", async function () { const subscription = web3Subscribe("logs", { topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }); @@ -294,7 +293,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should get past events #1: by topic", async function () { + it("should get past events #1: by topic", async function () { const subscription = web3Subscribe("logs", { fromBlock: "0x0", topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], @@ -312,7 +311,7 @@ describeWithMoonbeam( expect(data).to.not.be.empty; }); - step("should get past events #2: by address", async function () { + it("should get past events #2: by address", async function () { const subscription = web3Subscribe("logs", { fromBlock: "0x0", address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", @@ -330,7 +329,7 @@ describeWithMoonbeam( expect(data).to.not.be.empty; }); - step("should get past events #3: by address + topic", async function () { + it("should get past events #3: by address + topic", async function () { const subscription = web3Subscribe("logs", { fromBlock: "0x0", topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], @@ -349,7 +348,7 @@ describeWithMoonbeam( expect(data).to.not.be.empty; }); - step("should get past events #3: multiple addresses", async function () { + it("should get past events #3: multiple addresses", async function () { const subscription = web3Subscribe("logs", { fromBlock: "0x0", topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], @@ -374,7 +373,7 @@ describeWithMoonbeam( expect(data).to.not.be.empty; }); - step("should support topic wildcards", async function () { + it("should support topic wildcards", async function () { const subscription = web3Subscribe("logs", { topics: [null, "0x0000000000000000000000000000000000000000000000000000000000000000"], }); @@ -394,7 +393,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should support single values wrapped around a sequence", async function () { + it("should support single values wrapped around a sequence", async function () { const subscription = web3Subscribe("logs", { topics: [ ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], @@ -417,7 +416,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should support topic conditional parameters", async function () { + it("should support topic conditional parameters", async function () { const subscription = web3Subscribe("logs", { topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -442,7 +441,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should support multiple topic conditional parameters", async function () { + it("should support multiple topic conditional parameters", async function () { const subscription = web3Subscribe("logs", { topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -472,7 +471,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should combine topic wildcards and conditional parameters", async function () { + it("should combine topic wildcards and conditional parameters", async function () { const subscription = web3Subscribe("logs", { topics: [ null, @@ -499,7 +498,7 @@ describeWithMoonbeam( expect(data).to.not.be.null; }); - step("should not receive log when contract fails", async function () { + it("should not receive log when contract fails", async function () { const subscription = web3Subscribe("logs", {}); await new Promise((resolve) => { diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index 34034d52512..52c76368952 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; @@ -14,7 +13,7 @@ const address1 = "0x42e2ee7ba8975c473157634ac2af4098190fc741"; const address2 = "0xf8cef78e923919054037a1d03662bbd884ff4edf"; describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (context) => { - step("Replay succeeding CREATE", async function () { + it("Replay succeeding CREATE", async function () { // Deploy contract const contract = new context.web3.eth.Contract(CONTRACT.abi); const contract_deploy = contract.deploy({ @@ -68,7 +67,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[0].type).to.equal("create"); }); - step("Replay reverting CREATE", async function () { + it("Replay reverting CREATE", async function () { // Deploy contract const contract = new context.web3.eth.Contract(CONTRACT.abi); const contract_deploy = contract.deploy({ @@ -118,7 +117,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[0].type).to.equal("create"); }); - step("Multiple transactions in the same block + trace over multiple blocks", async function () { + it("Multiple transactions in the same block + trace over multiple blocks", async function () { const contract = new context.web3.eth.Contract(CONTRACT.abi); // Deploy 2 more contracts @@ -162,7 +161,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[2].transactionPosition).to.equal(1); }); - step("Call with subcalls, some reverting", async function () { + it("Call with subcalls, some reverting", async function () { const contract = new context.web3.eth.Contract(CONTRACT.abi); const contract_call = contract.methods.subcalls(address1, address2); @@ -208,7 +207,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[6].traceAddress).to.deep.equal([1, 1]); }); - step("Request range of blocks", async function () { + it("Request range of blocks", async function () { let response = await customRequest(context.web3, "trace_filter", [ { fromBlock: "0x03", @@ -237,7 +236,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[8].transactionPosition).to.equal(0); }); - step("Filter fromAddress", async function () { + it("Filter fromAddress", async function () { let response = await customRequest(context.web3, "trace_filter", [ { fromBlock: "0x03", @@ -249,7 +248,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result.length).to.equal(3); }); - step("Filter toAddress", async function () { + it("Filter toAddress", async function () { let response = await customRequest(context.web3, "trace_filter", [ { fromBlock: "0x03", diff --git a/tests/tests/test-trace.ts b/tests/tests/test-trace.ts index 620c1ab5b30..fc212ad5d42 100644 --- a/tests/tests/test-trace.ts +++ b/tests/tests/test-trace.ts @@ -1,6 +1,4 @@ import { expect } from "chai"; -import { Keyring } from "@polkadot/keyring"; -import { step } from "mocha-steps"; import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; @@ -61,7 +59,7 @@ async function nested(context) { } describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { - step("[Raw] should replay over an intermediate state", async function () { + it("[Raw] should replay over an intermediate state", async function () { const createTx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, @@ -128,7 +126,7 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { } }); - step("[Raw] should trace nested contract calls", async function () { + it("[Raw] should trace nested contract calls", async function () { const send = await nested(context); await createAndFinalizeBlock(context.polkadotApi); let traceTx = await customRequest(context.web3, "debug_traceTransaction", [send.result]); @@ -146,7 +144,7 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { expect(logs[1].depth).to.be.equal(1); }); - step("[Raw] should use optional disable parameters", async function () { + it("[Raw] should use optional disable parameters", async function () { const send = await nested(context); await createAndFinalizeBlock(context.polkadotApi); let traceTx = await customRequest(context.web3, "debug_traceTransaction", [ @@ -166,7 +164,7 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { expect(logs.length).to.be.equal(0); }); - step("[Blockscout] should trace nested contract calls", async function () { + it("[Blockscout] should trace nested contract calls", async function () { const send = await nested(context); await createAndFinalizeBlock(context.polkadotApi); let traceTx = await customRequest(context.web3, "debug_traceTransaction", [ diff --git a/tests/tests/test-version.ts b/tests/tests/test-version.ts index 23676774614..15f05914aee 100644 --- a/tests/tests/test-version.ts +++ b/tests/tests/test-version.ts @@ -1,5 +1,4 @@ import { expect } from "chai"; -import { step } from "mocha-steps"; import { describeWithMoonbeam } from "./util"; From f083dd66c7b92076ebb122062be55544a1073366 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Tue, 13 Apr 2021 12:42:12 +0200 Subject: [PATCH 22/49] make test-subscription tests non-dependent --- tests/tests/test-subscription.ts | 475 +++++++++++++++++-------------- 1 file changed, 258 insertions(+), 217 deletions(-) diff --git a/tests/tests/test-subscription.ts b/tests/tests/test-subscription.ts index f88d3e08585..3c10adc6caf 100644 --- a/tests/tests/test-subscription.ts +++ b/tests/tests/test-subscription.ts @@ -2,6 +2,7 @@ import { expect } from "chai"; import { Subscription as Web3Subscription } from "web3-core-subscriptions"; import { BlockHeader } from "web3-eth"; import { Log } from "web3-core"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; @@ -10,133 +11,128 @@ interface Subscription extends Web3Subscription { once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; } +// This reflects the measured gas cost of the transaction at this current point in time. +// It has been known to fluctuate from release to release, so it may need adjustment. +const EXPECTED_TRANSACTION_GAS_COST = 891328; + +const TEST_CONTRACT_BYTECODE = + "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffff" + + "ffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000" + + "0000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152" + + "602001807f45524332303a206d696e7420746f20746865207a65726f2061646472657373008152506020019150" + + "5060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d81" + + "6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff" + + "ffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffff" + + "ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + + "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffff" + + "ffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523" + + "b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156102875760" + + "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + + "8281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + + "0081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080" + + "60405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0" + + "8231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b" + + "8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b" + + "600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffff" + + "ffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515" + + "815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390" + + "f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffff" + + "ffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092" + + "9190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f3" + + "5b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffff" + + "ffffffffff1690602001909291908035906020019092919050505061049a565b60405180821515151581526020" + + "0191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffff" + + "ffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191" + + "505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffff" + + "ffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051" + + "808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b" + + "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291" + + "90505050610662565b604051808215151515815260200191505060405180910390f35b61038360048036036040" + + "81101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190" + + "929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040" + + "518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092" + + "915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560" + + "4051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffff" + + "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061" + + "0440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + + "ffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b60019050" + + "9392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffff" + + "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + + "200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + + "ffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b60019050" + + "92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + + "ffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a261070756" + + "5b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ff" + + "ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + + "200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff" + + "ffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6107" + + "0f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000" + + "600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff" + + "ffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ff" + + "ffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000" + + "33905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + + "ffffffffffffff161415610795576040517f08c379a00000000000000000000000000000000000000000000000" + + "00000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180" + + "910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffff" + + "ffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000" + + "000000008152600401808060200182810382526022815260200180610d28602291396040019150506040518091" + + "0390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + + "ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffff" + + "ffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173" + + "ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f" + + "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051808281526020019150" + + "5060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffff" + + "ffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000" + + "000000000000000000000000008152600401808060200182810382526025815260200180610d98602591396040" + + "0191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffff" + + "ffffffffffffffffffffffffffff161415610a12576040517f08c379a000000000000000000000000000000000" + + "0000000000000000000000008152600401808060200182810382526023815260200180610d0560239139604001" + + "91505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a6026913960008087" + + "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + + "5260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffff" + + "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000" + + "2081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff" + + "ffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60008084" + + "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + + "52602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffff" + + "ffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f5" + + "5a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c6957" + + "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + + "01828103825283818151815260200191508051906020019080838360005b83811015610c2e5780820151818401" + + "52602081019050610c13565b50505050905090810190601f168015610c5b578082038051600183602003610100" + + "0a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b" + + "600080828401905083811015610cfa576040517f08c379a0000000000000000000000000000000000000000000" + + "00000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a2061646469" + + "74696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056" + + "fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206170" + + "70726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f75" + + "6e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e742065786365" + + "65647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164" + + "647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332" + + "303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ff" + + "abf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; + +async function sendTransaction(context, extraData = {}) { + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: TEST_CONTRACT_BYTECODE, + value: "0x00", + gasPrice: "0x01", + gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), + ...extraData, + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + return tx; +} + describeWithMoonbeam( "Frontier RPC (Subscription)", `simple-specs.json`, (context) => { - let logs_generated = 0; // TODO: remove global variable used by tests - - const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; - const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - - // This reflects the measured gas cost of the transaction at this current point in time. - // It has been known to fluctuate from release to release, so it may need adjustment. - const EXPECTED_TRANSACTION_GAS_COST = 891328; - - const TEST_CONTRACT_BYTECODE = - "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffff" + - "ffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffff" + - "ffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000" + - "0000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152" + - "602001807f45524332303a206d696e7420746f20746865207a65726f2061646472657373008152506020019150" + - "5060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d81" + - "6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff" + - "ffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffff" + - "ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + - "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffff" + - "ffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523" + - "b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156102875760" + - "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + - "8281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + - "0081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080" + - "60405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0" + - "8231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b" + - "8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b" + - "600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffff" + - "ffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515" + - "815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390" + - "f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffff" + - "ffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092" + - "9190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f3" + - "5b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffff" + - "ffffffffff1690602001909291908035906020019092919050505061049a565b60405180821515151581526020" + - "0191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffff" + - "ffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191" + - "505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffff" + - "ffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051" + - "808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b" + - "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291" + - "90505050610662565b604051808215151515815260200191505060405180910390f35b61038360048036036040" + - "81101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190" + - "929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040" + - "518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092" + - "915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560" + - "4051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffff" + - "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061" + - "0440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + - "ffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b60019050" + - "9392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffff" + - "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + - "200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + - "ffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b60019050" + - "92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + - "ffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a261070756" + - "5b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ff" + - "ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + - "200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff" + - "ffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6107" + - "0f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000" + - "600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff" + - "ffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ff" + - "ffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000" + - "33905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + - "ffffffffffffff161415610795576040517f08c379a00000000000000000000000000000000000000000000000" + - "00000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180" + - "910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffff" + - "ffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000" + - "000000008152600401808060200182810382526022815260200180610d28602291396040019150506040518091" + - "0390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + - "ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffff" + - "ffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173" + - "ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f" + - "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051808281526020019150" + - "5060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffff" + - "ffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000" + - "000000000000000000000000008152600401808060200182810382526025815260200180610d98602591396040" + - "0191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffff" + - "ffffffffffffffffffffffffffff161415610a12576040517f08c379a000000000000000000000000000000000" + - "0000000000000000000000008152600401808060200182810382526023815260200180610d0560239139604001" + - "91505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a6026913960008087" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "5260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffff" + - "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000" + - "2081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff" + - "ffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60008084" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "52602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffff" + - "ffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f5" + - "5a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c6957" + - "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "01828103825283818151815260200191508051906020019080838360005b83811015610c2e5780820151818401" + - "52602081019050610c13565b50505050905090810190601f168015610c5b578082038051600183602003610100" + - "0a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b" + - "600080828401905083811015610cfa576040517f08c379a0000000000000000000000000000000000000000000" + - "00000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a2061646469" + - "74696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056" + - "fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206170" + - "70726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f75" + - "6e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e742065786365" + - "65647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164" + - "647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332" + - "303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ff" + - "abf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; - async function sendTransaction(context, extraData = {}) { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TEST_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), - ...extraData, - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - return tx; - } - // Little helper to hack web3 that are not complete. function web3Subscribe(type: "newBlockHeaders"): Subscription; function web3Subscribe(type: "pendingTransactions"): Subscription; @@ -145,8 +141,11 @@ describeWithMoonbeam( return (context.web3.eth as any).subscribe(...arguments); } - it("should connect", async function () { + before(async () => { await createAndFinalizeBlock(context.polkadotApi); + }); + + it("should connect", async function () { // @ts-ignore expect(context.web3.currentProvider.connected).to.equal(true); }); @@ -194,7 +193,6 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; //TODO: this is wrong, test should not be dependant of other tests subscription.unsubscribe(); expect(data).to.be.not.null; @@ -202,6 +200,7 @@ describeWithMoonbeam( }); it("should subscribe to all logs", async function () { + this.timeout(15000); const subscription = web3Subscribe("logs", {}); await new Promise((resolve) => { @@ -213,7 +212,6 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); const block = await context.web3.eth.getBlock("latest"); @@ -267,9 +265,7 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); - expect(data).to.not.be.null; }); @@ -287,92 +283,11 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); expect(data).to.not.be.null; }); - it("should get past events #1: by topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == logs_generated) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #2: by address", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #3: by address + topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #3: multiple addresses", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: [ - "0xe573BCA813c741229ffB2488F7856C6cAa841041", - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - ], - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == logs_generated) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - it("should support topic wildcards", async function () { const subscription = web3Subscribe("logs", { topics: [null, "0x0000000000000000000000000000000000000000000000000000000000000000"], @@ -387,12 +302,11 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; + subscription.unsubscribe(); expect(data).to.not.be.null; }); - it("should support single values wrapped around a sequence", async function () { const subscription = web3Subscribe("logs", { topics: [ @@ -410,12 +324,10 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); expect(data).to.not.be.null; }); - it("should support topic conditional parameters", async function () { const subscription = web3Subscribe("logs", { topics: [ @@ -435,7 +347,6 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); expect(data).to.not.be.null; @@ -465,7 +376,6 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); expect(data).to.not.be.null; @@ -492,7 +402,6 @@ describeWithMoonbeam( createAndFinalizeBlock(context.polkadotApi); subscription.once("data", resolve); }); - logs_generated += 1; subscription.unsubscribe(); expect(data).to.not.be.null; @@ -508,7 +417,6 @@ describeWithMoonbeam( await sendTransaction(context, { gas: "0x" + (EXPECTED_TRANSACTION_GAS_COST - 1).toString(16), // lower than expected by 1 }); - const data = await new Promise((resolve) => { createAndFinalizeBlock(context.polkadotApi); let result = null; @@ -523,3 +431,136 @@ describeWithMoonbeam( }, "ws" ); + +describeWithMoonbeam( + "Frontier RPC past events (Subscription)", + `simple-specs.json`, + (context) => { + // Little helper to hack web3 that are not complete. + function web3Subscribe(type: "pendingTransactions"): Subscription; + function web3Subscribe(type: "logs", params: {}): Subscription; + function web3Subscribe(type: "newBlockHeaders" | "pendingTransactions" | "logs", params?: any) { + return (context.web3.eth as any).subscribe(...arguments); + } + before(async function () { + this.timeout(15000); + let first_subscription = web3Subscribe("pendingTransactions"); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + first_subscription.once("data", resolve); + }); + first_subscription.unsubscribe(); + let second_subscription = web3Subscribe("logs", {}); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + second_subscription.once("data", resolve); + }); + second_subscription.unsubscribe(); + let third_subscription = web3Subscribe("logs", { + address: [ + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + third_subscription.once("data", resolve); + }); + third_subscription.unsubscribe(); + let forth_subscription = web3Subscribe("logs", { + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + forth_subscription.once("data", resolve); + }); + forth_subscription.unsubscribe(); + }); + it("should get past events #1: by topic", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #2: by address", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #3: by address + topic", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #3: multiple addresses", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + address: [ + "0xe573BCA813c741229ffB2488F7856C6cAa841041", + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + }, + "ws" +); From aa65135b6196776ef7ffa1dcc0919237bf2320a8 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Tue, 13 Apr 2021 15:06:51 +0200 Subject: [PATCH 23/49] comply with prettier --- tests/tests/test-block.ts | 3 --- tests/tests/test-filter-api.ts | 15 ++++++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index 6d4d400261a..4d41be99801 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -9,7 +9,6 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { // The reason is to avoid having to restart the node each time // Running them individually will result in failure describe("Genesis Block", async () => { - it("should be at block 0 at genesis", async function () { expect(await context.web3.eth.getBlockNumber()).to.equal(0); }); @@ -86,7 +85,6 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { }); it("retrieve block information", async function () { - const block = await context.web3.eth.getBlock("latest"); expect(block).to.include({ author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", @@ -132,7 +130,6 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { }); describe("Post Genesis Block 2 Finalization", async () => { - before(async () => { await createAndFinalizeBlock( context.polkadotApi, diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index 30a80676f8f..06c5b98e8ed 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -183,15 +183,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); }); - it( - "should return unsupported error for Pending Transaction filter creation", - async function () { - let r = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); - expect(r.error).to.include({ - message: "Method not available.", - }); - } - ); + it("should return unsupported error for Pending Transaction filter creation", async function () { + let r = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); + expect(r.error).to.include({ + message: "Method not available.", + }); + }); it("should return responses for Block filter polling.", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); From 0752113d7cfd459f2859ef8d6c811844f4562757 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Wed, 14 Apr 2021 18:27:18 +0200 Subject: [PATCH 24/49] Add support for retrieving the hash of the generated block --- tests/tests/util/fillBlockWithTx.ts | 6 +++++- tests/tests/util/polkadotApiRequests.ts | 10 ++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/tests/util/fillBlockWithTx.ts b/tests/tests/util/fillBlockWithTx.ts index ccdc207f06b..265c50141f7 100644 --- a/tests/tests/util/fillBlockWithTx.ts +++ b/tests/tests/util/fillBlockWithTx.ts @@ -150,7 +150,11 @@ export async function fillBlockWithTx( log("Error Report : ", errorReport); - log("created block in ", (await createAndFinalizeBlock(context.polkadotApi)) / 1000, " seconds"); + log( + "created block in ", + (await createAndFinalizeBlock(context.polkadotApi))[0] / 1000, + " seconds" + ); let numberOfBlocks = 0; let block = await context.web3.eth.getBlock("latest"); diff --git a/tests/tests/util/polkadotApiRequests.ts b/tests/tests/util/polkadotApiRequests.ts index 6cdbf101d9b..9ad54fea8b3 100644 --- a/tests/tests/util/polkadotApiRequests.ts +++ b/tests/tests/util/polkadotApiRequests.ts @@ -7,16 +7,18 @@ export async function createAndFinalizeBlock( api: ApiPromise, parentHash?: BlockHash, finalize: boolean = true -): Promise { +): Promise<[number, BlockHash]> { const startTime: number = Date.now(); + let block_hash = undefined; try { if (parentHash == undefined) { - await api.rpc.engine.createBlock(true, finalize); + block_hash = (await api.rpc.engine.createBlock(true, finalize)).toJSON()["hash"]; } else { - await api.rpc.engine.createBlock(true, finalize, parentHash); + block_hash = (await api.rpc.engine.createBlock(true, finalize, parentHash)).toJSON()["hash"]; } } catch (e) { console.log("ERROR DURING BLOCK FINALIZATION", e); } - return Date.now() - startTime; + + return [Date.now() - startTime, block_hash]; } From a3bae77646a94f93298edcd11bca7395a22d097b Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Wed, 14 Apr 2021 19:04:02 +0200 Subject: [PATCH 25/49] Make test-trace-filter tests non-dependent --- tests/tests/test-trace-filter.ts | 140 ++++++++++++++----------------- 1 file changed, 65 insertions(+), 75 deletions(-) diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index 52c76368952..0b41ad3f752 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -4,24 +4,24 @@ import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./u const CONTRACT = require("./constants/TraceFilter.json"); -const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; -const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; const address0 = "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a"; const address1 = "0x42e2ee7ba8975c473157634ac2af4098190fc741"; const address2 = "0xf8cef78e923919054037a1d03662bbd884ff4edf"; describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (context) => { - it("Replay succeeding CREATE", async function () { + before(async function () { + this.timeout(15000); + // Deploy contract const contract = new context.web3.eth.Contract(CONTRACT.abi); - const contract_deploy = contract.deploy({ + let contract_deploy = contract.deploy({ data: CONTRACT.bytecode, arguments: [false], // don't revert }); - const tx = await context.web3.eth.accounts.signTransaction( + let tx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, data: contract_deploy.encodeABI(), @@ -32,10 +32,68 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex GENESIS_ACCOUNT_PRIVATE_KEY ); - let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); + + contract_deploy = contract.deploy({ + data: CONTRACT.bytecode, + arguments: [true], // revert + }); + + tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: contract_deploy.encodeABI(), + value: "0x00", + gasPrice: "0x01", + gas: "0x500000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); + // Deploy 2 more contracts + for (var i = 0; i < 2; i++) { + const contract_deploy = contract.deploy({ + data: CONTRACT.bytecode, + arguments: [false], // don't revert + }); + + const tx = await context.web3.eth.accounts.signTransaction( + { + nonce: 2 + i, + from: GENESIS_ACCOUNT, + data: contract_deploy.encodeABI(), + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + } await createAndFinalizeBlock(context.polkadotApi); + const contract_call = contract.methods.subcalls(address1, address2); + + tx = await context.web3.eth.accounts.signTransaction( + { + to: address0, + from: GENESIS_ACCOUNT, + data: contract_call.encodeABI(), + value: "0x00", + gasPrice: "0x01", + gas: "0x500000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + + await createAndFinalizeBlock(context.polkadotApi); + }); + it("Replay succeeding CREATE", async function () { // Perform RPC call. let response = await customRequest(context.web3, "trace_filter", [ { @@ -68,28 +126,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Replay reverting CREATE", async function () { - // Deploy contract - const contract = new context.web3.eth.Contract(CONTRACT.abi); - const contract_deploy = contract.deploy({ - data: CONTRACT.bytecode, - arguments: [true], // revert - }); - - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: contract_deploy.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x500000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - await createAndFinalizeBlock(context.polkadotApi); - // Perform RPC call. let response = await customRequest(context.web3, "trace_filter", [ { @@ -118,32 +154,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Multiple transactions in the same block + trace over multiple blocks", async function () { - const contract = new context.web3.eth.Contract(CONTRACT.abi); - - // Deploy 2 more contracts - for (var i = 0; i < 2; i++) { - const contract_deploy = contract.deploy({ - data: CONTRACT.bytecode, - arguments: [false], // don't revert - }); - - const tx = await context.web3.eth.accounts.signTransaction( - { - nonce: 2 + i, - from: GENESIS_ACCOUNT, - data: contract_deploy.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - } - - await createAndFinalizeBlock(context.polkadotApi); - // Perform RPC call. let response = await customRequest(context.web3, "trace_filter", [ { @@ -162,26 +172,6 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Call with subcalls, some reverting", async function () { - const contract = new context.web3.eth.Contract(CONTRACT.abi); - - const contract_call = contract.methods.subcalls(address1, address2); - - const tx = await context.web3.eth.accounts.signTransaction( - { - to: address0, - from: GENESIS_ACCOUNT, - data: contract_call.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x500000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - await createAndFinalizeBlock(context.polkadotApi); - // Perform RPC call. let response = await customRequest(context.web3, "trace_filter", [ { From 9b5d3b6067b5e8d72b9eaa99626530d026314b55 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 10:01:41 +0200 Subject: [PATCH 26/49] balance-tests non-dependent --- tests/tests/test-balance.ts | 187 ++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 93 deletions(-) diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts index 439907b9edf..ad5262d3c87 100644 --- a/tests/tests/test-balance.ts +++ b/tests/tests/test-balance.ts @@ -11,110 +11,111 @@ import { import { Event } from "@polkadot/types/interfaces"; describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => { - it("genesis balance is setup correctly (web3)", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() - ); - }); - it("genesis balance is setup correctly (polkadotJs)", async function () { - const account = await context.polkadotApi.query.system.account(GENESIS_ACCOUNT); - expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); - }); - - it("balance to be updated after transfer", async function () { - this.timeout(15000); + describe("Check Genesis Balance", async () => { + it("genesis balance is setup correctly (web3)", async function () { + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( + GENESIS_ACCOUNT_BALANCE.toString() + ); + }); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (0) - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - (GENESIS_ACCOUNT_BALANCE - 0x200n - 21000n).toString() - ); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); + it("genesis balance is setup correctly (polkadotJs)", async function () { + const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); + const account = await context.polkadotApi.query.system.account.at( + genesisHash, + GENESIS_ACCOUNT + ); + expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); + }); }); + describe("Check post web3 transfer balances", async () => { + let genesis_balance; + before(async function () { + this.timeout(15000); + genesis_balance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT)); + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + to: TEST_ACCOUNT, + value: "0x200", // Must be higher than ExistentialDeposit (0) + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); + }); - it("read ethereum.transact extrinsic events", async function () { - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - const allRecords = await context.polkadotApi.query.system.events.at( - signedBlock.block.header.hash - ); + it("balance to be updated after transfer", async function () { + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( + (genesis_balance - 0x200n - 21000n).toString() + ); + expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); + }); - // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { - // filter the specific events based on the phase and then the - // index of our extrinsic in the block - const events: Event[] = allRecords - .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) - .map(({ event }) => event); + it("read ethereum.transact extrinsic events", async function () { + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + const allRecords = await context.polkadotApi.query.system.events.at( + signedBlock.block.header.hash + ); - switch (index) { - // First 3 events: - // timestamp.set:: system.ExtrinsicSuccess - // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess - // authorInherent.setAuthor:: system.ExtrinsicSuccess - case 0: - case 1: - case 2: - expect( - events.length === 1 && context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) - ).to.be.true; - break; - // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), - // ethereum.Executed, system.ExtrinsicSuccess - case 3: - expect(section === "ethereum" && method === "transact").to.be.true; - expect(events.length === 4); - expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; - // TODO: what event was inserted here? - expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; - break; - default: - throw new Error(`Unexpected extrinsic`); - } - }); - }); + // map between the extrinsics and events + signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { + // filter the specific events based on the phase and then the + // index of our extrinsic in the block + const events: Event[] = allRecords + .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) + .map(({ event }) => event); - it("balance should be the same on polkadot/web3", async function () { - this.timeout(15000); + switch (index) { + // First 3 events: + // timestamp.set:: system.ExtrinsicSuccess + // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess + // authorInherent.setAuthor:: system.ExtrinsicSuccess + case 0: + case 1: + case 2: + expect( + events.length === 1 && + context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) + ).to.be.true; + break; + // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), + // ethereum.Executed, system.ExtrinsicSuccess + case 3: + expect(section === "ethereum" && method === "transact").to.be.true; + expect(events.length === 4); + expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; + // TODO: what event was inserted here? + expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; + break; + default: + throw new Error(`Unexpected extrinsic`); + } + }); + }); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (currently 0) - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - (await context.polkadotApi.query.system.account(GENESIS_ACCOUNT)).data.free.toString() - ); + it("balance should be the same on polkadot/web3", async function () { + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( + (await context.polkadotApi.query.system.account(GENESIS_ACCOUNT)).data.free.toString() + ); + }); }); - const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; + describe("Check post polkadot API transfer balances", async () => { + const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; - it("transfer from polkadotjs should appear in ethereum", async function () { - this.timeout(15000); + it("transfer from polkadotjs should appear in ethereum", async function () { + this.timeout(15000); - const keyring = new Keyring({ type: "ethereum" }); - const testAccount = await keyring.createFromUri(GENESIS_ACCOUNT_PRIVATE_KEY); - await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT_2, 123).signAndSend(testAccount); + const keyring = new Keyring({ type: "ethereum" }); + const testAccount = await keyring.createFromUri(GENESIS_ACCOUNT_PRIVATE_KEY); + await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT_2, 123).signAndSend(testAccount); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); + await createAndFinalizeBlock(context.polkadotApi); + expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); + }); }); }); From 61e78aa12dc323b1866b0b1d6ea616bc02c62fb6 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 12:16:39 +0200 Subject: [PATCH 27/49] Non-dependent tests for test-polkadot-api --- tests/tests/test-polkadot-api.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tests/tests/test-polkadot-api.ts b/tests/tests/test-polkadot-api.ts index d1fc03af962..1e43b875c18 100644 --- a/tests/tests/test-polkadot-api.ts +++ b/tests/tests/test-polkadot-api.ts @@ -6,6 +6,20 @@ import { AnyTuple, IEvent } from "@polkadot/types/types"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => { + before(async function () { + this.timeout(15000); + const keyring = new Keyring({ type: "ethereum" }); + const testAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); + try { + let hash = await context.polkadotApi.tx.balances + .transfer(TEST_ACCOUNT_2, 123) + .signAndSend(testAccount); + } catch (e) { + expect(false, "error during polkadot api transfer" + e); + } + // TODO: do some testing with the hash + await createAndFinalizeBlock(context.polkadotApi); + }); it("api can retrieve last header", async function () { const lastHeader = await context.polkadotApi.rpc.chain.getHeader(); expect(Number(lastHeader.number) >= 0).to.be.true; @@ -19,19 +33,6 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; it("transfer from polkadotjs should appear in ethereum", async function () { - this.timeout(30000); - - const keyring = new Keyring({ type: "ethereum" }); - const testAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - try { - let hash = await context.polkadotApi.tx.balances - .transfer(TEST_ACCOUNT_2, 123) - .signAndSend(testAccount); - } catch (e) { - expect(false, "error during polkadot api transfer" + e); - } - // TODO: do some testing with the hash - await createAndFinalizeBlock(context.polkadotApi); expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); }); From 42e79b9a14f38a091d13d7b88d132abe3279fa80 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 15:13:31 +0200 Subject: [PATCH 28/49] Add test-fork-chain tests --- tests/tests/test-fork-chain.ts | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tests/tests/test-fork-chain.ts diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-fork-chain.ts new file mode 100644 index 00000000000..a3c25b91411 --- /dev/null +++ b/tests/tests/test-fork-chain.ts @@ -0,0 +1,59 @@ +import { expect } from "chai"; + +import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; + +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; + +describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { + let inserted_tx; + before(async function () { + this.timeout(15000); + // Creation of the best chain so far, with blocks 0-1-2 and a transfer in block 2 + await createAndFinalizeBlock( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(0), + false + ); + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + to: TEST_ACCOUNT, + value: "0x200", // Must be higher than ExistentialDeposit (currently 0) + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + + let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + inserted_tx = send.result; + await createAndFinalizeBlock( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(1), + false + ); + }); + it("Should create another best chain, finalize it and do sanity checks", async function () { + this.timeout(150000); + // Lets grab the ethereum block hashes so far + let eth_hash_1 = (await context.web3.eth.getBlock(1)).hash; + let eth_hash_2 = (await context.web3.eth.getBlock(2)).hash; + + // Now lets fork the chain + let current_height = await context.web3.eth.getBlockNumber(); + // We start parenting to the genesis + let parent_hash = await context.polkadotApi.rpc.chain.getBlockHash(0); + + for (var i = 0; i <= current_height; i++) { + parent_hash = (await createAndFinalizeBlock(context.polkadotApi, parent_hash, false))[1]; + } + + // We created at 1 block more than the previous best chain. We should be in the best chain now + // Ethereum blocks should have changed + // The previous inserted transaction should dissapear + expect(await context.web3.eth.getBlockNumber()).to.equal(current_height + 1); + expect((await context.web3.eth.getBlock(1)).hash).to.not.equal(eth_hash_1); + expect((await context.web3.eth.getBlock(2)).hash).to.not.equal(eth_hash_2); + expect(await context.web3.eth.getTransaction(inserted_tx)).to.be.null; + }); +}); From 0a046f41291e0ed71b2125ad58db26d45a9bed7a Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 16:55:39 +0200 Subject: [PATCH 29/49] remove unnecesary timeouts --- tests/tests/test-balance.ts | 1 - tests/tests/test-ethers.ts | 1 - tests/tests/test-filter-api.ts | 1 - tests/tests/test-fork-chain.ts | 1 - tests/tests/test-polkadot-api.ts | 1 - tests/tests/test-subscription.ts | 2 -- tests/tests/test-trace-filter.ts | 2 -- tests/tests/test-txpool.ts | 3 +-- 8 files changed, 1 insertion(+), 11 deletions(-) diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts index ad5262d3c87..c24871920b9 100644 --- a/tests/tests/test-balance.ts +++ b/tests/tests/test-balance.ts @@ -30,7 +30,6 @@ describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => describe("Check post web3 transfer balances", async () => { let genesis_balance; before(async function () { - this.timeout(15000); genesis_balance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT)); const tx = await context.web3.eth.accounts.signTransaction( { diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers.ts index 4404e9cb8e8..f342e8a4a5f 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers.ts @@ -24,7 +24,6 @@ describeWithMoonbeam("Moonbeam RPC (Ethers.js)", `simple-specs.json`, (context) expect((await providerTestnet.getNetwork()).chainId).to.equal(1287); }); it("deploy contract and interact with it", async function () { - this.timeout(15000); let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, provider); // deploy contract diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index 06c5b98e8ed..eea02dbc59b 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -137,7 +137,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex const block_lifespan_threshold = 100; const max_filter_pool = 500; beforeEach(async function () { - this.timeout(15000); let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); let filter_id = create_filter.result; // If filter is NAN filter pool is full diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-fork-chain.ts index a3c25b91411..6590d0c16ce 100644 --- a/tests/tests/test-fork-chain.ts +++ b/tests/tests/test-fork-chain.ts @@ -34,7 +34,6 @@ describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { ); }); it("Should create another best chain, finalize it and do sanity checks", async function () { - this.timeout(150000); // Lets grab the ethereum block hashes so far let eth_hash_1 = (await context.web3.eth.getBlock(1)).hash; let eth_hash_2 = (await context.web3.eth.getBlock(2)).hash; diff --git a/tests/tests/test-polkadot-api.ts b/tests/tests/test-polkadot-api.ts index 1e43b875c18..84f46aac708 100644 --- a/tests/tests/test-polkadot-api.ts +++ b/tests/tests/test-polkadot-api.ts @@ -7,7 +7,6 @@ import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => { before(async function () { - this.timeout(15000); const keyring = new Keyring({ type: "ethereum" }); const testAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); try { diff --git a/tests/tests/test-subscription.ts b/tests/tests/test-subscription.ts index 3c10adc6caf..2b79b8ec0ec 100644 --- a/tests/tests/test-subscription.ts +++ b/tests/tests/test-subscription.ts @@ -200,7 +200,6 @@ describeWithMoonbeam( }); it("should subscribe to all logs", async function () { - this.timeout(15000); const subscription = web3Subscribe("logs", {}); await new Promise((resolve) => { @@ -443,7 +442,6 @@ describeWithMoonbeam( return (context.web3.eth as any).subscribe(...arguments); } before(async function () { - this.timeout(15000); let first_subscription = web3Subscribe("pendingTransactions"); await sendTransaction(context); await new Promise((resolve) => { diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index 0b41ad3f752..8665f0dcddf 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -12,8 +12,6 @@ const address2 = "0xf8cef78e923919054037a1d03662bbd884ff4edf"; describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (context) => { before(async function () { - this.timeout(15000); - // Deploy contract const contract = new context.web3.eth.Contract(CONTRACT.abi); let contract_deploy = contract.deploy({ diff --git a/tests/tests/test-txpool.ts b/tests/tests/test-txpool.ts index f8788debb3c..92769918bef 100644 --- a/tests/tests/test-txpool.ts +++ b/tests/tests/test-txpool.ts @@ -82,9 +82,8 @@ describeWithMoonbeam("Moonbeam RPC (TxPool RPC module)", `simple-specs.json`, (c contractAddress = receipt.contractAddress; }); - it("should get pending pool information on Call", async function () { - this.timeout(15000); + it("should get pending pool information on Call", async function () { const transferFnCode = `a9059cbb000000000000000000000000`; const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; From 34607b5cfb14203b34f5525e4743e702df303a15 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 17:10:12 +0200 Subject: [PATCH 30/49] Use context provider for test-ether.ts --- tests/tests/test-ethers.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers.ts index f342e8a4a5f..b5b91969a09 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers.ts @@ -9,22 +9,16 @@ import { } from "./constants"; describeWithMoonbeam("Moonbeam RPC (Ethers.js)", `simple-specs.json`, (context) => { - let provider; - before(() => { - // Providers - let prov = context.web3.currentProvider as HttpProvider; - provider = new ethers.providers.JsonRpcProvider(prov.host); - }); - it("get network ids", async function () { - expect((await provider.getNetwork()).chainId).to.equal(1281); + expect((await context.ethers.getNetwork()).chainId).to.equal(1281); const providerTestnet = new ethers.providers.JsonRpcProvider( "https://rpc.testnet.moonbeam.network" ); expect((await providerTestnet.getNetwork()).chainId).to.equal(1287); }); + it("deploy contract and interact with it", async function () { - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, provider); + let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); // deploy contract const factory = new ethers.ContractFactory( From 8db05cf2fec6fbe3f825db8c97fc6fa097b774ea Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 17:23:24 +0200 Subject: [PATCH 31/49] Remove currentId from test-filter-api since we are uninstalling all filters from test to test --- tests/tests/test-filter-api.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index eea02dbc59b..960d9a7c912 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -133,7 +133,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); return tx; } - let currentId; const block_lifespan_threshold = 100; const max_filter_pool = 500; beforeEach(async function () { @@ -147,7 +146,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex for (let i = 0; i <= filter_id; i++) { await customRequest(context.web3, "eth_uninstallFilter", [i]); } - currentId = 0; }); it("should create a Log filter and return the ID", async function () { @@ -162,7 +160,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should increment filter ID", async function () { @@ -174,12 +172,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should create a Block filter and return the ID", async function () { let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(currentId + 1)); + expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should return unsupported error for Pending Transaction filter creation", async function () { From 9cb5a43728b8d3860f9688b0abd55357fc54e7bb Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 17:34:59 +0200 Subject: [PATCH 32/49] Join balance test setups and check balance at each block --- tests/tests/test-balance.ts | 180 +++++++++++++++++------------------- 1 file changed, 86 insertions(+), 94 deletions(-) diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts index c24871920b9..3498a361146 100644 --- a/tests/tests/test-balance.ts +++ b/tests/tests/test-balance.ts @@ -9,112 +9,104 @@ import { TEST_ACCOUNT, } from "./constants"; import { Event } from "@polkadot/types/interfaces"; +const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => { - describe("Check Genesis Balance", async () => { - it("genesis balance is setup correctly (web3)", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() - ); - }); + before(async function () { + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + to: TEST_ACCOUNT, + value: "0x200", // Must be higher than ExistentialDeposit (0) + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); - it("genesis balance is setup correctly (polkadotJs)", async function () { - const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - const account = await context.polkadotApi.query.system.account.at( - genesisHash, - GENESIS_ACCOUNT - ); - expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); - }); + //Inserting polkadot transfer in the second block + const keyring = new Keyring({ type: "ethereum" }); + const testAccount = await keyring.createFromUri(GENESIS_ACCOUNT_PRIVATE_KEY); + await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT_2, 123).signAndSend(testAccount); + + await createAndFinalizeBlock(context.polkadotApi); }); - describe("Check post web3 transfer balances", async () => { - let genesis_balance; - before(async function () { - genesis_balance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT)); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (0) - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - }); - it("balance to be updated after transfer", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - (genesis_balance - 0x200n - 21000n).toString() - ); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); - }); + it("genesis balance is setup correctly (web3)", async function () { + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( + GENESIS_ACCOUNT_BALANCE.toString() + ); + }); - it("read ethereum.transact extrinsic events", async function () { - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - const allRecords = await context.polkadotApi.query.system.events.at( - signedBlock.block.header.hash - ); + it("genesis balance is setup correctly (polkadotJs)", async function () { + const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); + const account = await context.polkadotApi.query.system.account.at(genesisHash, GENESIS_ACCOUNT); + expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); + }); + it("balance to be updated after transfer", async function () { + let genesis_balance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)); + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + (genesis_balance - 0x200n - 21000n).toString() + ); + expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); + }); - // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { - // filter the specific events based on the phase and then the - // index of our extrinsic in the block - const events: Event[] = allRecords - .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) - .map(({ event }) => event); + it("read ethereum.transact extrinsic events", async function () { + const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(1); + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(blockHash); + const allRecords = await context.polkadotApi.query.system.events.at( + signedBlock.block.header.hash + ); - switch (index) { - // First 3 events: - // timestamp.set:: system.ExtrinsicSuccess - // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess - // authorInherent.setAuthor:: system.ExtrinsicSuccess - case 0: - case 1: - case 2: - expect( - events.length === 1 && - context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) - ).to.be.true; - break; - // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), - // ethereum.Executed, system.ExtrinsicSuccess - case 3: - expect(section === "ethereum" && method === "transact").to.be.true; - expect(events.length === 4); - expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; - // TODO: what event was inserted here? - expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; - break; - default: - throw new Error(`Unexpected extrinsic`); - } - }); - }); + // map between the extrinsics and events + signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { + // filter the specific events based on the phase and then the + // index of our extrinsic in the block + const events: Event[] = allRecords + .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) + .map(({ event }) => event); - it("balance should be the same on polkadot/web3", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - (await context.polkadotApi.query.system.account(GENESIS_ACCOUNT)).data.free.toString() - ); + switch (index) { + // First 3 events: + // timestamp.set:: system.ExtrinsicSuccess + // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess + // authorInherent.setAuthor:: system.ExtrinsicSuccess + case 0: + case 1: + case 2: + expect( + events.length === 1 && context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) + ).to.be.true; + break; + // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), + // ethereum.Executed, system.ExtrinsicSuccess + case 3: + expect(section === "ethereum" && method === "transact").to.be.true; + expect(events.length === 4); + expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; + // TODO: what event was inserted here? + expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; + break; + default: + throw new Error(`Unexpected extrinsic`); + } }); }); - describe("Check post polkadot API transfer balances", async () => { - const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; - - it("transfer from polkadotjs should appear in ethereum", async function () { - this.timeout(15000); - - const keyring = new Keyring({ type: "ethereum" }); - const testAccount = await keyring.createFromUri(GENESIS_ACCOUNT_PRIVATE_KEY); - await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT_2, 123).signAndSend(testAccount); + it("balance should be the same on polkadot/web3", async function () { + const block1Hash = await context.polkadotApi.rpc.chain.getBlockHash(1); + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + ( + await context.polkadotApi.query.system.account.at(block1Hash, GENESIS_ACCOUNT) + ).data.free.toString() + ); + }); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); - }); + it("transfer from polkadotjs should appear in ethereum", async function () { + expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2, 2)).to.equal("123"); }); }); From 1a54e7dd70819c57bd8e3f7e514d926126751f98 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 17:55:15 +0200 Subject: [PATCH 33/49] Rename variables to camelCase in tests --- tests/package.json | 2 +- tests/tests/test-balance.ts | 4 +- tests/tests/test-block.ts | 6 +- tests/tests/test-contract-methods.ts | 6 +- tests/tests/test-filter-api.ts | 76 +- tests/tests/test-fork-chain.ts | 24 +- tests/tests/test-nonce.ts | 2 - tests/tests/test-pending-pool.ts | 18 +- tests/tests/test-revert-receipt.ts | 30 +- tests/tests/test-trace-filter.ts | 16 +- tests/tests/test-trace.ts | 26 +- tests/tests/test-web3api.ts | 4 +- tests/yarn.lock | 3908 ++++++++++++++++++++++++++ 13 files changed, 4014 insertions(+), 108 deletions(-) create mode 100644 tests/yarn.lock diff --git a/tests/package.json b/tests/package.json index 0f861f5ec67..c88aa3eff99 100644 --- a/tests/package.json +++ b/tests/package.json @@ -30,7 +30,7 @@ }, "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", - "test": "mocha --parallel -r ts-node/register 'tests/**/*.ts'", + "test": "mocha -t 15000 --parallel -r ts-node/register 'tests/test-balance.ts'", "watch": "npm-watch", "build": "cargo build --release", "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts index 3498a361146..2413b0cf1c9 100644 --- a/tests/tests/test-balance.ts +++ b/tests/tests/test-balance.ts @@ -46,9 +46,9 @@ describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); }); it("balance to be updated after transfer", async function () { - let genesis_balance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)); + const genesisBalance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)); expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - (genesis_balance - 0x200n - 21000n).toString() + (genesisBalance - 0x200n - 21000n).toString() ); expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); }); diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index 4d41be99801..7868633e73d 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -118,9 +118,9 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { }); it("get block by hash", async function () { - const latest_block = await context.web3.eth.getBlock("latest"); - const block = await context.web3.eth.getBlock(latest_block.hash); - expect(block.hash).to.be.eq(latest_block.hash); + const latestBlock = await context.web3.eth.getBlock("latest"); + const block = await context.web3.eth.getBlock(latestBlock.hash); + expect(block.hash).to.be.eq(latestBlock.hash); }); it("get block by number", async function () { diff --git a/tests/tests/test-contract-methods.ts b/tests/tests/test-contract-methods.ts index 694e307fa74..8f2461dd713 100644 --- a/tests/tests/test-contract-methods.ts +++ b/tests/tests/test-contract-methods.ts @@ -30,9 +30,9 @@ describeWithMoonbeam("Moonbeam RPC (Contract Methods)", `simple-specs.json`, (co const latestBlock = await context.web3.eth.getBlock("latest"); expect(latestBlock.transactions.length).to.equal(1); - const tx_hash = latestBlock.transactions[0]; - const tx = await context.web3.eth.getTransaction(tx_hash); - expect(tx.hash).to.equal(tx_hash); + const txHash = latestBlock.transactions[0]; + const tx = await context.web3.eth.getTransaction(txHash); + expect(tx.hash).to.equal(txHash); }); it("should return contract method result", async function () { diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index 960d9a7c912..ef89fbbd3a3 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -133,23 +133,23 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); return tx; } - const block_lifespan_threshold = 100; - const max_filter_pool = 500; + const blockLifespanThreshold = 100; + const maxFilterPool = 500; beforeEach(async function () { - let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filter_id = create_filter.result; + let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); + let filterId = createFilter.result; // If filter is NAN filter pool is full - if (isNaN(filter_id)) { - filter_id = 500; + if (isNaN(filterId)) { + filterId = 500; } // Lets have a clean environment by uninstalling all tests - for (let i = 0; i <= filter_id; i++) { + for (let i = 0; i <= filterId; i++) { await customRequest(context.web3, "eth_uninstallFilter", [i]); } }); it("should create a Log filter and return the ID", async function () { - let create_filter = await customRequest(context.web3, "eth_newFilter", [ + let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x0", toBlock: "latest", @@ -160,11 +160,11 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should increment filter ID", async function () { - let create_filter = await customRequest(context.web3, "eth_newFilter", [ + let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x1", toBlock: "0x2", @@ -172,12 +172,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should create a Block filter and return the ID", async function () { - let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(create_filter.result).to.be.eq(context.web3.utils.numberToHex(1)); + let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should return unsupported error for Pending Transaction filter creation", async function () { @@ -188,10 +188,10 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return responses for Block filter polling.", async function () { - let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); + let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); let block = await context.web3.eth.getBlock("latest"); let poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(create_filter.result), + context.web3.utils.numberToHex(createFilter.result), ]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0]).to.be.eq(block.hash); @@ -200,7 +200,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex block = await context.web3.eth.getBlock("latest"); poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(create_filter.result), + context.web3.utils.numberToHex(createFilter.result), ]); expect(poll.result.length).to.be.eq(1); @@ -209,16 +209,16 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await createAndFinalizeBlock(context.polkadotApi); await createAndFinalizeBlock(context.polkadotApi); - let current_height = await context.web3.eth.getBlockNumber(); - block = await context.web3.eth.getBlock(current_height - 1); - let block_b = await context.web3.eth.getBlock(current_height); + let currentHeight = await context.web3.eth.getBlockNumber(); + block = await context.web3.eth.getBlock(currentHeight - 1); + let blockB = await context.web3.eth.getBlock(currentHeight); poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(create_filter.result), + context.web3.utils.numberToHex(createFilter.result), ]); expect(poll.result.length).to.be.eq(2); expect(poll.result[0]).to.be.eq(block.hash); - expect(poll.result[1]).to.be.eq(block_b.hash); + expect(poll.result[1]).to.be.eq(blockB.hash); }); it("should return responses for Log filter polling.", async function () { @@ -230,7 +230,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(receipt.logs.length).to.be.eq(1); // Create a filter for the created contract. - let create_filter = await customRequest(context.web3, "eth_newFilter", [ + let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x0", toBlock: "latest", @@ -238,14 +238,14 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: receipt.logs[0].topics, }, ]); - let poll = await customRequest(context.web3, "eth_getFilterChanges", [create_filter.result]); + let poll = await customRequest(context.web3, "eth_getFilterChanges", [createFilter.result]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); // A subsequent request must be empty. - poll = await customRequest(context.web3, "eth_getFilterChanges", [create_filter.result]); + poll = await customRequest(context.web3, "eth_getFilterChanges", [createFilter.result]); expect(poll.result.length).to.be.eq(0); }); @@ -258,7 +258,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(receipt.logs.length).to.be.eq(1); // Create a filter for the created contract. - let create_filter = await customRequest(context.web3, "eth_newFilter", [ + let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x0", toBlock: "latest", @@ -266,13 +266,13 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex topics: receipt.logs[0].topics, }, ]); - let poll = await customRequest(context.web3, "eth_getFilterLogs", [create_filter.result]); + let poll = await customRequest(context.web3, "eth_getFilterLogs", [createFilter.result]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); // A subsequent request must return the same response. - poll = await customRequest(context.web3, "eth_getFilterLogs", [create_filter.result]); + poll = await customRequest(context.web3, "eth_getFilterLogs", [createFilter.result]); expect(poll.result.length).to.be.eq(1); expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); @@ -280,37 +280,37 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should uninstall created filters.", async function () { - let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filter_id = create_filter.result; + let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); + let filterId = createFilter.result; // Should return true when removed from the filter pool. - let uninstall = await customRequest(context.web3, "eth_uninstallFilter", [filter_id]); + let uninstall = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); expect(uninstall.result).to.be.eq(true); // Should return error if does not exist. - let r = await customRequest(context.web3, "eth_uninstallFilter", [filter_id]); + let r = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); expect(r.error).to.include({ - message: "Filter id " + parseInt(filter_id, 16) + " does not exist.", + message: "Filter id " + parseInt(filterId, 16) + " does not exist.", }); }); it("should drain the filter pool.", async function () { this.timeout(15000); - let create_filter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filter_id = create_filter.result; + let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); + let filterId = createFilter.result; - for (let i = 0; i <= block_lifespan_threshold; i++) { + for (let i = 0; i <= blockLifespanThreshold; i++) { await createAndFinalizeBlock(context.polkadotApi); } - let r = await customRequest(context.web3, "eth_getFilterChanges", [filter_id]); + let r = await customRequest(context.web3, "eth_getFilterChanges", [filterId]); expect(r.error).to.include({ - message: "Filter id " + parseInt(filter_id, 16) + " does not exist.", + message: "Filter id " + parseInt(filterId, 16) + " does not exist.", }); }); it("should have a filter pool max size of 500.", async function () { - for (let i = 0; i < max_filter_pool; i++) { + for (let i = 0; i < maxFilterPool; i++) { await customRequest(context.web3, "eth_newBlockFilter", []); } diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-fork-chain.ts index 6590d0c16ce..05964770c07 100644 --- a/tests/tests/test-fork-chain.ts +++ b/tests/tests/test-fork-chain.ts @@ -5,7 +5,7 @@ import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./u import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { - let inserted_tx; + let insertedTx; before(async function () { this.timeout(15000); // Creation of the best chain so far, with blocks 0-1-2 and a transfer in block 2 @@ -26,7 +26,7 @@ describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { ); let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - inserted_tx = send.result; + insertedTx = send.result; await createAndFinalizeBlock( context.polkadotApi, await context.polkadotApi.rpc.chain.getBlockHash(1), @@ -35,24 +35,24 @@ describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { }); it("Should create another best chain, finalize it and do sanity checks", async function () { // Lets grab the ethereum block hashes so far - let eth_hash_1 = (await context.web3.eth.getBlock(1)).hash; - let eth_hash_2 = (await context.web3.eth.getBlock(2)).hash; + let ethHash1 = (await context.web3.eth.getBlock(1)).hash; + let ethHash2 = (await context.web3.eth.getBlock(2)).hash; // Now lets fork the chain - let current_height = await context.web3.eth.getBlockNumber(); + let currentHeight = await context.web3.eth.getBlockNumber(); // We start parenting to the genesis - let parent_hash = await context.polkadotApi.rpc.chain.getBlockHash(0); + let parentHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - for (var i = 0; i <= current_height; i++) { - parent_hash = (await createAndFinalizeBlock(context.polkadotApi, parent_hash, false))[1]; + for (var i = 0; i <= currentHeight; i++) { + parentHash = (await createAndFinalizeBlock(context.polkadotApi, parentHash, false))[1]; } // We created at 1 block more than the previous best chain. We should be in the best chain now // Ethereum blocks should have changed // The previous inserted transaction should dissapear - expect(await context.web3.eth.getBlockNumber()).to.equal(current_height + 1); - expect((await context.web3.eth.getBlock(1)).hash).to.not.equal(eth_hash_1); - expect((await context.web3.eth.getBlock(2)).hash).to.not.equal(eth_hash_2); - expect(await context.web3.eth.getTransaction(inserted_tx)).to.be.null; + expect(await context.web3.eth.getBlockNumber()).to.equal(currentHeight + 1); + expect((await context.web3.eth.getBlock(1)).hash).to.not.equal(ethHash1); + expect((await context.web3.eth.getBlock(2)).hash).to.not.equal(ethHash2); + expect(await context.web3.eth.getTransaction(insertedTx)).to.be.null; }); }); diff --git a/tests/tests/test-nonce.ts b/tests/tests/test-nonce.ts index 76b4b120c79..8c50487e7af 100644 --- a/tests/tests/test-nonce.ts +++ b/tests/tests/test-nonce.ts @@ -37,8 +37,6 @@ describeWithMoonbeam("Moonbeam RPC (Nonce)", `simple-specs.json`, (context) => { }); it("nonce should not be reset to 0 when emptying dust accounts", async function () { - this.timeout(15000); - const testAccountPrivateKey1 = context.web3.utils.randomHex(32); const testAccountPrivateKey2 = context.web3.utils.randomHex(32); const keyring = new Keyring({ type: "ethereum" }); diff --git a/tests/tests/test-pending-pool.ts b/tests/tests/test-pending-pool.ts index 5021beae8b6..e08f4ee1289 100644 --- a/tests/tests/test-pending-pool.ts +++ b/tests/tests/test-pending-pool.ts @@ -20,17 +20,17 @@ describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (contex GENESIS_ACCOUNT_PRIVATE_KEY ); - const tx_hash = ( + const txHash = ( await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) ).result; - const pending_transaction = ( - await customRequest(context.web3, "eth_getTransactionByHash", [tx_hash]) + const pendingTransaction = ( + await customRequest(context.web3, "eth_getTransactionByHash", [txHash]) ).result; // pending transactions do not know yet to which block they belong to - expect(pending_transaction).to.include({ + expect(pendingTransaction).to.include({ blockNumber: null, - hash: tx_hash, + hash: txHash, publicKey: "0x624f720eae676a04111631c9ca338c11d0f5a80ee42210c6be72983ceb620fbf645a96f951529f" + "a2d70750432d11b7caba5270c4d677255be90b3871c8c58069", @@ -41,12 +41,12 @@ describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (contex await createAndFinalizeBlock(context.polkadotApi); - const processed_transaction = ( - await customRequest(context.web3, "eth_getTransactionByHash", [tx_hash]) + const processedTransaction = ( + await customRequest(context.web3, "eth_getTransactionByHash", [txHash]) ).result; - expect(processed_transaction).to.include({ + expect(pendingTransaction).to.include({ blockNumber: "0x1", - hash: tx_hash, + hash: txHash, publicKey: "0x624f720eae676a04111631c9ca338c11d0f5a80ee42210c6be72983ceb620fbf645a96f951529f" + "a2d70750432d11b7caba5270c4d677255be90b3871c8c58069", diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts index aa4030738a9..5babe0bc67c 100644 --- a/tests/tests/test-revert-receipt.ts +++ b/tests/tests/test-revert-receipt.ts @@ -25,13 +25,13 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( "80fdfea2646970667358221220c70bc8b03cdfdf57b5f6c4131b836f9c2c4df01b8202f530555333f2a00e4b8364" + "736f6c63430006060033"; - let expected_contract_address; + let expectedContractAddress; beforeEach(async function () { - let tx_count = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - if (tx_count == 0) { - expected_contract_address = "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a"; + let txCount = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + if (txCount == 0) { + expectedContractAddress = "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a"; } else { - expected_contract_address = "0x5c4242beB94dE30b922f57241f1D02f36e906915"; + expectedContractAddress = "0x5c4242beB94dE30b922f57241f1D02f36e906915"; } }); it("should provide a tx receipt after successful deployment", async function () { @@ -48,7 +48,7 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( GENESIS_ACCOUNT_PRIVATE_KEY ); - const good_tx_hash = context.web3.utils.keccak256(tx.rawTransaction); + const goodTxHash = context.web3.utils.keccak256(tx.rawTransaction); expect( await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) @@ -60,17 +60,17 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( // Verify the receipt exists after the block is created await createAndFinalizeBlock(context.polkadotApi); - let current_height = await context.web3.eth.getBlockNumber(); + let currentHeight = await context.web3.eth.getBlockNumber(); - const receipt = await context.web3.eth.getTransactionReceipt(good_tx_hash); + const receipt = await context.web3.eth.getTransactionReceipt(goodTxHash); expect(receipt).to.include({ - blockNumber: current_height, - contractAddress: expected_contract_address, + blockNumber: currentHeight, + contractAddress: expectedContractAddress, cumulativeGasUsed: 67231, from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", gasUsed: 67231, to: null, - transactionHash: good_tx_hash, + transactionHash: goodTxHash, transactionIndex: 0, status: true, }); @@ -90,7 +90,7 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( GENESIS_ACCOUNT_PRIVATE_KEY ); - const fail_tx_hash = context.web3.utils.keccak256(tx.rawTransaction); + const failTxHash = context.web3.utils.keccak256(tx.rawTransaction); expect( await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) @@ -103,15 +103,15 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( await createAndFinalizeBlock(context.polkadotApi); let current_height = await context.web3.eth.getBlockNumber(); - const receipt = await context.web3.eth.getTransactionReceipt(fail_tx_hash); + const receipt = await context.web3.eth.getTransactionReceipt(failTxHash); expect(receipt).to.include({ blockNumber: current_height, - contractAddress: expected_contract_address, + contractAddress: expectedContractAddress, cumulativeGasUsed: 54600, from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", gasUsed: 54600, to: null, - transactionHash: fail_tx_hash, + transactionHash: failTxHash, transactionIndex: 0, status: false, }); diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index 8665f0dcddf..cb07fb87261 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -14,7 +14,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex before(async function () { // Deploy contract const contract = new context.web3.eth.Contract(CONTRACT.abi); - let contract_deploy = contract.deploy({ + let contractDeploy = contract.deploy({ data: CONTRACT.bytecode, arguments: [false], // don't revert }); @@ -22,7 +22,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex let tx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, - data: contract_deploy.encodeABI(), + data: contractDeploy.encodeABI(), value: "0x00", gasPrice: "0x01", gas: "0x500000", @@ -33,7 +33,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); - contract_deploy = contract.deploy({ + contractDeploy = contract.deploy({ data: CONTRACT.bytecode, arguments: [true], // revert }); @@ -41,7 +41,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex tx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, - data: contract_deploy.encodeABI(), + data: contractDeploy.encodeABI(), value: "0x00", gasPrice: "0x01", gas: "0x500000", @@ -52,7 +52,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex await createAndFinalizeBlock(context.polkadotApi); // Deploy 2 more contracts for (var i = 0; i < 2; i++) { - const contract_deploy = contract.deploy({ + const contractDeploy = contract.deploy({ data: CONTRACT.bytecode, arguments: [false], // don't revert }); @@ -61,7 +61,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex { nonce: 2 + i, from: GENESIS_ACCOUNT, - data: contract_deploy.encodeABI(), + data: contractDeploy.encodeABI(), value: "0x00", gasPrice: "0x01", gas: "0x100000", @@ -73,13 +73,13 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex } await createAndFinalizeBlock(context.polkadotApi); - const contract_call = contract.methods.subcalls(address1, address2); + const contractCall = contract.methods.subcalls(address1, address2); tx = await context.web3.eth.accounts.signTransaction( { to: address0, from: GENESIS_ACCOUNT, - data: contract_call.encodeABI(), + data: contractCall.encodeABI(), value: "0x00", gasPrice: "0x01", gas: "0x500000", diff --git a/tests/tests/test-trace.ts b/tests/tests/test-trace.ts index fc212ad5d42..7daaa027f3e 100644 --- a/tests/tests/test-trace.ts +++ b/tests/tests/test-trace.ts @@ -26,8 +26,8 @@ async function nested(context) { let send = await customRequest(context.web3, "eth_sendRawTransaction", [calleeTx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); let receipt = await context.web3.eth.getTransactionReceipt(send.result); - const callee_addr = receipt.contractAddress; - const callee = new context.web3.eth.Contract(CALLEE.abi, callee_addr); + const calleeAddr = receipt.contractAddress; + const callee = new context.web3.eth.Contract(CALLEE.abi, calleeAddr); // Create Caller contract. const callerTx = await context.web3.eth.accounts.signTransaction( { @@ -42,16 +42,16 @@ async function nested(context) { send = await customRequest(context.web3, "eth_sendRawTransaction", [callerTx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); receipt = await context.web3.eth.getTransactionReceipt(send.result); - const caller_addr = receipt.contractAddress; - const caller = new context.web3.eth.Contract(CALLER.abi, caller_addr); + const callerAddr = receipt.contractAddress; + const caller = new context.web3.eth.Contract(CALLER.abi, callerAddr); // Nested call let callTx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, - to: caller_addr, + to: callerAddr, gas: "0x100000", value: "0x00", - data: caller.methods.someAction(callee_addr, 6).encodeABI(), // calls callee + data: caller.methods.someAction(calleeAddr, 6).encodeABI(), // calls callee }, GENESIS_ACCOUNT_PRIVATE_KEY ); @@ -86,20 +86,20 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { // // So we set 5 different target txs for a single block: the 1st, 3 intermediate, and // the last. - const total_txs = 10; + const totalTxs = 10; let targets = [1, 2, 5, 8, 10]; let iteration = 0; let txs = []; - let num_txs; + let numTxs; // Create 10 transactions in a block. - for (num_txs = 1; num_txs <= total_txs; num_txs++) { + for (numTxs = 1; numTxs <= totalTxs; numTxs++) { let callTx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, to: receipt.contractAddress, gas: "0x100000", value: "0x00", - nonce: num_txs, + nonce: numTxs, data: contract.methods.sum(1).encodeABI(), // increments by one }, GENESIS_ACCOUNT_PRIVATE_KEY @@ -115,14 +115,14 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { let receipt = await context.web3.eth.getTransactionReceipt(txs[index]); - let intermediate_tx = await customRequest(context.web3, "debug_traceTransaction", [ + let intermediateTx = await customRequest(context.web3, "debug_traceTransaction", [ txs[index], ]); - let evm_result = context.web3.utils.hexToNumber("0x" + intermediate_tx.result.returnValue); + let evmResult = context.web3.utils.hexToNumber("0x" + intermediateTx.result.returnValue); // console.log(`Matching target ${target} against evm result ${evm_result}`); - expect(evm_result).to.equal(target); + expect(evmResult).to.equal(target); } }); diff --git a/tests/tests/test-web3api.ts b/tests/tests/test-web3api.ts index d5a35b52f99..3a8f1049bc4 100644 --- a/tests/tests/test-web3api.ts +++ b/tests/tests/test-web3api.ts @@ -14,8 +14,8 @@ describeWithMoonbeam("Moonbeam RPC (Web3Api)", `simple-specs.json`, (context) => it("should remote sha3", async function () { const data = context.web3.utils.stringToHex("hello"); const hash = await customRequest(context.web3, "web3_sha3", [data]); - const local_hash = context.web3.utils.sha3("hello"); - expect(hash.result).to.be.equal(local_hash); + const localhash = context.web3.utils.sha3("hello"); + expect(hash.result).to.be.equal(localhash); }); it("should report peer count in hex", async function () { diff --git a/tests/yarn.lock b/tests/yarn.lock new file mode 100644 index 00000000000..73565c40065 --- /dev/null +++ b/tests/yarn.lock @@ -0,0 +1,3908 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.13.10", "@babel/runtime@^7.13.9": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" + integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + dependencies: + regenerator-runtime "^0.13.4" + +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abi@5.1.0", "@ethersproject/abi@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.0.tgz#d582c9f6a8e8192778b5f2c991ce19d7b336b0c5" + integrity sha512-N/W9Sbn1/C6Kh2kuHRjf/hX6euMK4+9zdJRBB8sDWmihVntjUAfxbusGZKzDQD8i3szAHhTz8K7XADV5iFNfJw== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" + integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/networks" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/web" "^5.1.0" + +"@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" + integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + +"@ethersproject/address@5.1.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" + integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + +"@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" + integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== + dependencies: + "@ethersproject/bytes" "^5.1.0" + +"@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" + integrity sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + +"@ethersproject/bignumber@5.1.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.0.tgz#966a013a5d871fc03fc67bf33cd8aadae627f0fd" + integrity sha512-wUvQlhTjPjFXIdLPOuTrFeQmSa6Wvls1bGXQNQWvB/SEn1NsTCE8PmumIEZxmOPjSHl1eV2uyHP5jBm5Cgj92Q== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + bn.js "^4.4.0" + +"@ethersproject/bytes@5.1.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" + integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/constants@5.1.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" + integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + +"@ethersproject/contracts@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.0.tgz#f7c3451f1af77e029005733ccab3419d07d23f6b" + integrity sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og== + dependencies: + "@ethersproject/abi" "^5.1.0" + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + +"@ethersproject/hash@5.1.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" + integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== + dependencies: + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" + integrity sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg== + dependencies: + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/basex" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/pbkdf2" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/sha2" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/wordlists" "^5.1.0" + +"@ethersproject/json-wallets@5.1.0", "@ethersproject/json-wallets@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz#bba7af2e520e8aea4d3829d80520db5d2e4fb8d2" + integrity sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA== + dependencies: + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/hdnode" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/pbkdf2" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/random" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.1.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" + integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@5.1.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" + integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== + +"@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" + integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" + integrity sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/sha2" "^5.1.0" + +"@ethersproject/properties@5.1.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" + integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/providers@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.0.tgz#27695a02cfafa370428cde1c7a4abab13afb6a35" + integrity sha512-FjpZL2lSXrYpQDg2fMjugZ0HjQD9a+2fOOoRhhihh+Z+qi/xZ8vIlPoumrEP1DzIG4DBV6liUqLNqnX2C6FIAA== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/basex" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/networks" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/random" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/sha2" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/web" "^5.1.0" + bech32 "1.1.4" + ws "7.2.3" + +"@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" + integrity sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/rlp@5.1.0", "@ethersproject/rlp@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" + integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" + integrity sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + hash.js "1.1.3" + +"@ethersproject/signing-key@5.1.0", "@ethersproject/signing-key@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" + integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + bn.js "^4.4.0" + elliptic "6.5.4" + +"@ethersproject/solidity@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" + integrity sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/sha2" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/strings@5.1.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" + integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/transactions@5.1.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.0.tgz#da7fcd7e77e23dcfcca317a945f60bc228c61b36" + integrity sha512-s10crRLZEA0Bgv6FGEl/AKkTw9f+RVUrlWDX1rHnD4ZncPFeiV2AJr4nT7QSUhxJdFPvjyKRDb3nEH27dIqcPQ== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + +"@ethersproject/units@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" + integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/wallet@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.1.0.tgz#134c5816eaeaa586beae9f9ff67891104a2c9a15" + integrity sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/hdnode" "^5.1.0" + "@ethersproject/json-wallets" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/random" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/wordlists" "^5.1.0" + +"@ethersproject/web@5.1.0", "@ethersproject/web@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" + integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== + dependencies: + "@ethersproject/base64" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" + integrity sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@polkadot/api-derive@4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-4.5.1.tgz#7bcbcadce4e70aa645cd64cdc31e979deffe857e" + integrity sha512-La2FWlwWpjDv5F+TLCxm+air2LINNrav0nCq62bzZ4uaIlWI8yN2W7ejtT29vuDK8DY46qemOZ/7ZA2wKeylEg== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/api" "4.5.1" + "@polkadot/rpc-core" "4.5.1" + "@polkadot/types" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/util-crypto" "^6.1.1" + "@polkadot/x-rxjs" "^6.1.1" + bn.js "^4.11.9" + +"@polkadot/api@4.5.1", "@polkadot/api@^4.4.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-4.5.1.tgz#02672ebb4c34110048fd4308974c20f03328be0f" + integrity sha512-b9CBG1ZGhyFwXDiVP0vKZbY8RdW2rbtHxw3BYPYUZ4bk6NVsDCk7vPD2z3B19RxHOv7Chkjtx+b5MU6ASfKRhg== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/api-derive" "4.5.1" + "@polkadot/keyring" "^6.1.1" + "@polkadot/metadata" "4.5.1" + "@polkadot/rpc-core" "4.5.1" + "@polkadot/rpc-provider" "4.5.1" + "@polkadot/types" "4.5.1" + "@polkadot/types-known" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/util-crypto" "^6.1.1" + "@polkadot/x-rxjs" "^6.1.1" + bn.js "^4.11.9" + eventemitter3 "^4.0.7" + +"@polkadot/keyring@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-6.1.1.tgz#937103e3c98bb92942f91502577fcc3b6bcd4aef" + integrity sha512-gpOJ8L7MyuFe9/bYOJ+0qIXZIqob1IMl1xrsULTlF03ijENv7XvMeUUf6hN8hbxkgEWugow060M7SUnLQ4zTTA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/util" "6.1.1" + "@polkadot/util-crypto" "6.1.1" + +"@polkadot/metadata@4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.5.1.tgz#53c63d6e5a7c3965184b783bbff4dff339c1c65c" + integrity sha512-DLbeDx1MiYJaZJLG4YrM/YQXilqHCxuyxuN4H7UZ6UrnE1E1Tariz0B/EhJE7gSR5kCGCxscLIvO0pxJGGGSCA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/types" "4.5.1" + "@polkadot/types-known" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/util-crypto" "^6.1.1" + bn.js "^4.11.9" + +"@polkadot/networks@6.1.1", "@polkadot/networks@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.1.1.tgz#7725b75a421e80ad6bc152c6ba0e0b5f82153939" + integrity sha512-QJynYW/S00UT9R59w+RPPhUG7zCQURqCDwyJQWKc+yWxnVacBFKvtokrCbYZIViE1lMY4FvdA6blUT3eYmABYg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@polkadot/rpc-core@4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-4.5.1.tgz#30eb7c3172ab6a4e5db7be8c1da782e0c04fe8a9" + integrity sha512-nYbFY2U7h0p39EE7OZLhnrHnLIghWnz13hCdY4ApFTVFrPGq83z2zBAObyhbELxXw+kFQf867svbpvcpB9MclA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/metadata" "4.5.1" + "@polkadot/rpc-provider" "4.5.1" + "@polkadot/types" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/x-rxjs" "^6.1.1" + +"@polkadot/rpc-provider@4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-4.5.1.tgz#ed7f3726e43a6480025522756e6dee973ebde08d" + integrity sha512-XaXFf6+rqV+E9uq5AYtYkl8cSqq0yb3LrMSTWGklHE5Fi1yJZWhTpnpjslmatPsyEMdZhQmsLd5rOER1ua7wCw== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/types" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/util-crypto" "^6.1.1" + "@polkadot/x-fetch" "^6.1.1" + "@polkadot/x-global" "^6.1.1" + "@polkadot/x-ws" "^6.1.1" + bn.js "^4.11.9" + eventemitter3 "^4.0.7" + +"@polkadot/types-known@4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.5.1.tgz#812121cc73a56ad55982870aa69e1cfb9ed98cee" + integrity sha512-CY57/cMCxaaHm3/bQHi2U9QNjbJOm19Krj6J6DCrnBphHaxZXANcZpLAC9LGaQ61gLeItSPb2i9skH9BoOL+sQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/networks" "^6.1.1" + "@polkadot/types" "4.5.1" + "@polkadot/util" "^6.1.1" + bn.js "^4.11.9" + +"@polkadot/types@4.5.1", "@polkadot/types@^4.4.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.5.1.tgz#73f096a0ffbda6bcd4cf1d16c66a98ddddd36746" + integrity sha512-EcRdhk4od9e1ju6/upK02nvJ/eji5DOe4vA5YzdvIls98M4H0TgRNr9x6FE+WWPBIeJFrskarINA9ErCCpkQIA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/metadata" "4.5.1" + "@polkadot/util" "^6.1.1" + "@polkadot/util-crypto" "^6.1.1" + "@polkadot/x-rxjs" "^6.1.1" + "@types/bn.js" "^4.11.6" + bn.js "^4.11.9" + +"@polkadot/util-crypto@6.1.1", "@polkadot/util-crypto@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.1.1.tgz#dc9ee86656bbaf59b41c5a1cf40fa025b44aaf27" + integrity sha512-xKDqudvMCirQZ4df2PiWEdlNntNn5gUx/2gTNId7MoE4j4y0edLTwiQ6B2EgRCyLxCaIY+sw6Z5NL5ik1NHdcw== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/networks" "6.1.1" + "@polkadot/util" "6.1.1" + "@polkadot/wasm-crypto" "^4.0.2" + "@polkadot/x-randomvalues" "6.1.1" + base-x "^3.0.8" + base64-js "^1.5.1" + blakejs "^1.1.0" + bn.js "^4.11.9" + create-hash "^1.2.0" + elliptic "^6.5.4" + hash.js "^1.1.7" + js-sha3 "^0.8.0" + scryptsy "^2.1.0" + tweetnacl "^1.0.3" + xxhashjs "^0.2.2" + +"@polkadot/util@6.1.1", "@polkadot/util@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.1.1.tgz#d4ab0bf8f0d38f60b93124e7efb4339c16d0b1a1" + integrity sha512-xdm2UF6SIjW50jnIyzT1+m1sLBjulExDAo+7JnrTZe4OQfUL8JyQzJ3jdy9hFNBHjXkLRENc94DR4HSJ+n3Uyg== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-textdecoder" "6.1.1" + "@polkadot/x-textencoder" "6.1.1" + "@types/bn.js" "^4.11.6" + bn.js "^4.11.9" + camelcase "^5.3.1" + ip-regex "^4.3.0" + +"@polkadot/wasm-crypto-asmjs@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz#f42c353a64e1243841daf90e4bd54eff01a4e3cf" + integrity sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA== + dependencies: + "@babel/runtime" "^7.13.9" + +"@polkadot/wasm-crypto-wasm@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz#89f9e0a1e4d076784d4a42bea37fc8b06bdd8bb6" + integrity sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ== + dependencies: + "@babel/runtime" "^7.13.9" + +"@polkadot/wasm-crypto@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz#9649057adee8383cc86433d107ba526b718c5a3b" + integrity sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng== + dependencies: + "@babel/runtime" "^7.13.9" + "@polkadot/wasm-crypto-asmjs" "^4.0.2" + "@polkadot/wasm-crypto-wasm" "^4.0.2" + +"@polkadot/x-fetch@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-6.1.1.tgz#433300cd6c9ca98c8e610e34bf30922f480879d9" + integrity sha512-9idoVhFjEZYTRhufqqVXSParVebRwTCGYhZx2yYsF5R9+BKS/noTSBBtOmhdICtCT9evl3xgUdZkiiGVfD6sJw== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-global" "6.1.1" + "@types/node-fetch" "^2.5.10" + node-fetch "^2.6.1" + +"@polkadot/x-global@6.1.1", "@polkadot/x-global@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.1.1.tgz#c9dab736cb0ff3274bebabeb5a9f1c57d126b73c" + integrity sha512-h/5K2i8S7oteQITD2aF3Scxd7uOPH4HaBk/DDiM7M89TvzMp+QLISkBapK2boAKRejceKULuKlFVKFGzryF1NA== + dependencies: + "@babel/runtime" "^7.13.10" + "@types/node-fetch" "^2.5.10" + node-fetch "^2.6.1" + +"@polkadot/x-randomvalues@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-6.1.1.tgz#e57a31bc51513c88fd8228a24a154b5e426dcff1" + integrity sha512-b6IFmV64YdyWwWYnnqD/piQALRA4Xs/eQklBaldoBzg/INTWx8sA3M43HUOZlmcY4TLNAOG8mBxzrDmsFj3Ezw== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-global" "6.1.1" + +"@polkadot/x-rxjs@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-6.1.1.tgz#dae950f5034c3f357baaea9ad5be3ac6e990c49f" + integrity sha512-Hfpb3aIQkVlGM2bknMVZBudW2F7t5TJepPiiLoHJKA6IJ8mpQYZAUOQMUMt/teM8Ni4fTNGqrCGgR/xLm62mRA== + dependencies: + "@babel/runtime" "^7.13.10" + rxjs "^6.6.7" + +"@polkadot/x-textdecoder@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.1.1.tgz#b19bfc375224c8c4069a6d69bc813419b1715942" + integrity sha512-z4a91pNkD6WNDp+Jl4nf6kLM5ZM1x5Zmrrs2qDmX3WP+/okJUb5J+RYXSDnPnKeuoyQHHV0cNuWos5nQZxmmrA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-global" "6.1.1" + +"@polkadot/x-textencoder@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.1.1.tgz#1963034091398e93465ec2709d68ced88008a62e" + integrity sha512-NLL9HxigxKeI30X89z40m6DWu1RrL9mZvXwLbl5Se1ditNsOK5/3+gBSlLqZiuB7LuY0YJCCbkqMSp/mAANglA== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-global" "6.1.1" + +"@polkadot/x-ws@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-6.1.1.tgz#a1685366c2ee741968dcbcf35787d23b6db84a5a" + integrity sha512-deUXlOeTiPPukc5B/KwNg24xGSuTOqCE1SF5CjLX2R4e/ypjcjjO34zmmTHPEQBH4ms5t1amwRwyg8WYDXwARw== + dependencies: + "@babel/runtime" "^7.13.10" + "@polkadot/x-global" "6.1.1" + "@types/websocket" "^1.0.2" + websocket "^1.0.33" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5", "@types/bn.js@^4.11.6": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/chai@^4.2.11": + version "4.2.16" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.16.tgz#f09cc36e18d28274f942e7201147cce34d97e8c8" + integrity sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw== + +"@types/mocha@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" + integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== + +"@types/node-fetch@^2.5.10": + version "2.5.10" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" + integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "14.14.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" + integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + +"@types/node@^12.12.6": + version "12.20.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" + integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" + +"@types/websocket@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.2.tgz#d2855c6a312b7da73ed16ba6781815bf30c6187a" + integrity sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ== + dependencies: + "@types/node" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blakejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" + integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.4.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" + integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + dependencies: + node-gyp-build "^4.2.0" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chai@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.9" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" + integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.0.tgz#8a8758e0b6cbbc19fd4b87f4d551170fa6f1a995" + integrity sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g== + dependencies: + "@ethersproject/abi" "5.1.0" + "@ethersproject/abstract-provider" "5.1.0" + "@ethersproject/abstract-signer" "5.1.0" + "@ethersproject/address" "5.1.0" + "@ethersproject/base64" "5.1.0" + "@ethersproject/basex" "5.1.0" + "@ethersproject/bignumber" "5.1.0" + "@ethersproject/bytes" "5.1.0" + "@ethersproject/constants" "5.1.0" + "@ethersproject/contracts" "5.1.0" + "@ethersproject/hash" "5.1.0" + "@ethersproject/hdnode" "5.1.0" + "@ethersproject/json-wallets" "5.1.0" + "@ethersproject/keccak256" "5.1.0" + "@ethersproject/logger" "5.1.0" + "@ethersproject/networks" "5.1.0" + "@ethersproject/pbkdf2" "5.1.0" + "@ethersproject/properties" "5.1.0" + "@ethersproject/providers" "5.1.0" + "@ethersproject/random" "5.1.0" + "@ethersproject/rlp" "5.1.0" + "@ethersproject/sha2" "5.1.0" + "@ethersproject/signing-key" "5.1.0" + "@ethersproject/solidity" "5.1.0" + "@ethersproject/strings" "5.1.0" + "@ethersproject/transactions" "5.1.0" + "@ethersproject/units" "5.1.0" + "@ethersproject/wallet" "5.1.0" + "@ethersproject/web" "5.1.0" + "@ethersproject/wordlists" "5.1.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ip-regex@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.47.0: + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + dependencies: + mime-db "1.47.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha-steps@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mocha-steps/-/mocha-steps-1.3.0.tgz#2449231ec45ec56810f65502cb22e2571862957f" + integrity sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg== + +mocha@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" + integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mock-fs@^4.1.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" + integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +request@^2.79.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + +rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +scryptsy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" + integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== + +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +ts-node@9.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^3.9.6: + version "3.9.9" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" + integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +utf-8-validate@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" + integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q== + dependencies: + node-gyp-build "^4.2.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +web3-bzz@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" + integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +web3-core-helpers@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" + integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.5" + web3-utils "1.3.5" + +web3-core-method@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" + integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-utils "1.3.5" + +web3-core-promievent@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" + integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" + integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== + dependencies: + underscore "1.9.1" + util "^0.12.0" + web3-core-helpers "1.3.5" + web3-providers-http "1.3.5" + web3-providers-ipc "1.3.5" + web3-providers-ws "1.3.5" + +web3-core-subscriptions@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" + integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-core@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" + integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-requestmanager "1.3.5" + web3-utils "1.3.5" + +web3-eth-abi@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" + integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.9.1" + web3-utils "1.3.5" + +web3-eth-accounts@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" + integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-eth-contract@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" + integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-utils "1.3.5" + +web3-eth-ens@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" + integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-contract "1.3.5" + web3-utils "1.3.5" + +web3-eth-iban@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" + integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.5" + +web3-eth-personal@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" + integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-eth@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" + integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== + dependencies: + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-accounts "1.3.5" + web3-eth-contract "1.3.5" + web3-eth-ens "1.3.5" + web3-eth-iban "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-net@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" + integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-providers-http@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" + integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== + dependencies: + web3-core-helpers "1.3.5" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" + integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-providers-ws@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" + integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + websocket "^1.0.32" + +web3-shh@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" + integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-net "1.3.5" + +web3-utils@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" + integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" + integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== + dependencies: + web3-bzz "1.3.5" + web3-core "1.3.5" + web3-eth "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-shh "1.3.5" + web3-utils "1.3.5" + +websocket@^1.0.32, websocket@^1.0.33: + version "1.0.33" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" + integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +which@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" + integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xxhashjs@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== + dependencies: + cuint "^0.2.2" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 5786d28e66d6974c7a05078e736b9ec8b37f3347 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 18:02:59 +0200 Subject: [PATCH 34/49] small introduced bug in test-pool-pending when camelCasing variables --- tests/tests/test-pending-pool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/test-pending-pool.ts b/tests/tests/test-pending-pool.ts index e08f4ee1289..4ff87f4deef 100644 --- a/tests/tests/test-pending-pool.ts +++ b/tests/tests/test-pending-pool.ts @@ -44,7 +44,7 @@ describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (contex const processedTransaction = ( await customRequest(context.web3, "eth_getTransactionByHash", [txHash]) ).result; - expect(pendingTransaction).to.include({ + expect(processedTransaction).to.include({ blockNumber: "0x1", hash: txHash, publicKey: From b65f6d5dd27e20e15e02844051b310abce9be324 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 18:53:13 +0200 Subject: [PATCH 35/49] Use a different account for test-revert-receipt deployment contract to avoid non-determinism of the nonce --- tests/tests/test-revert-receipt.ts | 38 ++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts index 5babe0bc67c..9822db06e11 100644 --- a/tests/tests/test-revert-receipt.ts +++ b/tests/tests/test-revert-receipt.ts @@ -1,12 +1,15 @@ import { expect } from "chai"; import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; +import { Keyring } from "@polkadot/keyring"; describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, (context) => { const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; const GENESIS_ACCOUNT_PRIVATE_KEY = "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - + const TEST_ACCOUNT_PRIVATE_KEY = + "0x1111111111111111111111111111111111111111111111111111111111111111"; // ``` // pragma solidity >=0.4.22 <0.7.0; // @@ -25,15 +28,24 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( "80fdfea2646970667358221220c70bc8b03cdfdf57b5f6c4131b836f9c2c4df01b8202f530555333f2a00e4b8364" + "736f6c63430006060033"; - let expectedContractAddress; - beforeEach(async function () { - let txCount = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - if (txCount == 0) { - expectedContractAddress = "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a"; - } else { - expectedContractAddress = "0x5c4242beB94dE30b922f57241f1D02f36e906915"; - } + before(async function () { + console.log(await context.web3.eth.getBalance("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")); + // We send some money to make TEST_ACCOUNT so that it can also deploy a contract at the nonce is deterministic + const testAccount1 = context.web3.eth.accounts.privateKeyToAccount(TEST_ACCOUNT_PRIVATE_KEY); + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + to: testAccount1.address, + value: "0x200000", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + await createAndFinalizeBlock(context.polkadotApi); }); + it("should provide a tx receipt after successful deployment", async function () { this.timeout(15000); @@ -65,7 +77,7 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( const receipt = await context.web3.eth.getTransactionReceipt(goodTxHash); expect(receipt).to.include({ blockNumber: currentHeight, - contractAddress: expectedContractAddress, + contractAddress: "0x5c4242beB94dE30b922f57241f1D02f36e906915", cumulativeGasUsed: 67231, from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", gasUsed: 67231, @@ -87,7 +99,7 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( gasPrice: "0x01", gas: "0x100000", }, - GENESIS_ACCOUNT_PRIVATE_KEY + TEST_ACCOUNT_PRIVATE_KEY ); const failTxHash = context.web3.utils.keccak256(tx.rawTransaction); @@ -106,9 +118,9 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( const receipt = await context.web3.eth.getTransactionReceipt(failTxHash); expect(receipt).to.include({ blockNumber: current_height, - contractAddress: expectedContractAddress, + contractAddress: "0xAE519FC2Ba8e6fFE6473195c092bF1BAe986ff90", cumulativeGasUsed: 54600, - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + from: "0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a", gasUsed: 54600, to: null, transactionHash: failTxHash, From 0876554708062c58f040d790325850c558eee15b Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 18:56:37 +0200 Subject: [PATCH 36/49] shorten line because of editconfig --- tests/tests/test-revert-receipt.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts index 9822db06e11..4b1b1606aec 100644 --- a/tests/tests/test-revert-receipt.ts +++ b/tests/tests/test-revert-receipt.ts @@ -30,7 +30,7 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( before(async function () { console.log(await context.web3.eth.getBalance("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")); - // We send some money to make TEST_ACCOUNT so that it can also deploy a contract at the nonce is deterministic + // We send some money to TEST_ACCOUNT in order to have deterministic nonces const testAccount1 = context.web3.eth.accounts.privateKeyToAccount(TEST_ACCOUNT_PRIVATE_KEY); const tx = await context.web3.eth.accounts.signTransaction( { From 66f3f6c207d89736ad8b5b148657bec15f620aa9 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Thu, 15 Apr 2021 19:10:23 +0200 Subject: [PATCH 37/49] Separate test-subscription and test-subscription-past-events.ts --- tests/tests/constants/testContracts.ts | 98 ++++++++ tests/tests/test-subscription-past-events.ts | 168 +++++++++++++ tests/tests/test-subscription.ts | 239 +------------------ 3 files changed, 273 insertions(+), 232 deletions(-) create mode 100644 tests/tests/test-subscription-past-events.ts diff --git a/tests/tests/constants/testContracts.ts b/tests/tests/constants/testContracts.ts index e9b8f9d4195..e058d9acbe8 100644 --- a/tests/tests/constants/testContracts.ts +++ b/tests/tests/constants/testContracts.ts @@ -294,3 +294,101 @@ export const ERC20_BYTECODE = "65207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f7720" + "7a65726fa265627a7a723158208bfd5c482ccbde97b679a417e6f0a1698bb5491e25bb256602f6c4271b11757b6473" + "6f6c63430005110032"; + +export const TEST_SUBSCRIPTION_CONTRACT_BYTECODE = + "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffff" + + "ffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000" + + "0000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152" + + "602001807f45524332303a206d696e7420746f20746865207a65726f2061646472657373008152506020019150" + + "5060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d81" + + "6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff" + + "ffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffff" + + "ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + + "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffff" + + "ffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523" + + "b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156102875760" + + "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + + "8281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + + "0081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080" + + "60405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0" + + "8231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b" + + "8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b" + + "600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffff" + + "ffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515" + + "815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390" + + "f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffff" + + "ffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092" + + "9190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f3" + + "5b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffff" + + "ffffffffff1690602001909291908035906020019092919050505061049a565b60405180821515151581526020" + + "0191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffff" + + "ffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191" + + "505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffff" + + "ffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051" + + "808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b" + + "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291" + + "90505050610662565b604051808215151515815260200191505060405180910390f35b61038360048036036040" + + "81101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190" + + "929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040" + + "518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092" + + "915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560" + + "4051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffff" + + "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061" + + "0440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + + "ffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b60019050" + + "9392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffff" + + "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + + "200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + + "ffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b60019050" + + "92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + + "ffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a261070756" + + "5b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ff" + + "ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + + "200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff" + + "ffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6107" + + "0f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000" + + "600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff" + + "ffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ff" + + "ffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000" + + "33905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + + "ffffffffffffff161415610795576040517f08c379a00000000000000000000000000000000000000000000000" + + "00000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180" + + "910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffff" + + "ffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000" + + "000000008152600401808060200182810382526022815260200180610d28602291396040019150506040518091" + + "0390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + + "ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffff" + + "ffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173" + + "ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f" + + "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051808281526020019150" + + "5060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffff" + + "ffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000" + + "000000000000000000000000008152600401808060200182810382526025815260200180610d98602591396040" + + "0191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffff" + + "ffffffffffffffffffffffffffff161415610a12576040517f08c379a000000000000000000000000000000000" + + "0000000000000000000000008152600401808060200182810382526023815260200180610d0560239139604001" + + "91505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a6026913960008087" + + "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + + "5260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffff" + + "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000" + + "2081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff" + + "ffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60008084" + + "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + + "52602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffff" + + "ffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f5" + + "5a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c6957" + + "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + + "01828103825283818151815260200191508051906020019080838360005b83811015610c2e5780820151818401" + + "52602081019050610c13565b50505050905090810190601f168015610c5b578082038051600183602003610100" + + "0a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b" + + "600080828401905083811015610cfa576040517f08c379a0000000000000000000000000000000000000000000" + + "00000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a2061646469" + + "74696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056" + + "fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206170" + + "70726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f75" + + "6e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e742065786365" + + "65647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164" + + "647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332" + + "303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ff" + + "abf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; diff --git a/tests/tests/test-subscription-past-events.ts b/tests/tests/test-subscription-past-events.ts new file mode 100644 index 00000000000..d70149154d7 --- /dev/null +++ b/tests/tests/test-subscription-past-events.ts @@ -0,0 +1,168 @@ +import { expect } from "chai"; +import { Subscription as Web3Subscription } from "web3-core-subscriptions"; +import { BlockHeader } from "web3-eth"; +import { Log } from "web3-core"; +import { + GENESIS_ACCOUNT, + GENESIS_ACCOUNT_PRIVATE_KEY, + TEST_SUBSCRIPTION_CONTRACT_BYTECODE, +} from "./constants"; + +import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; + +// Extra type because web3 is not well typed +interface Subscription extends Web3Subscription { + once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; +} + +// This reflects the measured gas cost of the transaction at this current point in time. +// It has been known to fluctuate from release to release, so it may need adjustment. +const EXPECTED_TRANSACTION_GAS_COST = 891328; + +async function sendTransaction(context, extraData = {}) { + const tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: TEST_SUBSCRIPTION_CONTRACT_BYTECODE, + value: "0x00", + gasPrice: "0x01", + gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), + ...extraData, + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + return tx; +} + +describeWithMoonbeam( + "Frontier RPC past events (Subscription)", + `simple-specs.json`, + (context) => { + // Little helper to hack web3 that are not complete. + function web3Subscribe(type: "pendingTransactions"): Subscription; + function web3Subscribe(type: "logs", params: {}): Subscription; + function web3Subscribe(type: "newBlockHeaders" | "pendingTransactions" | "logs", params?: any) { + return (context.web3.eth as any).subscribe(...arguments); + } + before(async function () { + let first_subscription = web3Subscribe("pendingTransactions"); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + first_subscription.once("data", resolve); + }); + first_subscription.unsubscribe(); + let second_subscription = web3Subscribe("logs", {}); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + second_subscription.once("data", resolve); + }); + second_subscription.unsubscribe(); + let third_subscription = web3Subscribe("logs", { + address: [ + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + third_subscription.once("data", resolve); + }); + third_subscription.unsubscribe(); + let forth_subscription = web3Subscribe("logs", { + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }); + await sendTransaction(context); + await new Promise((resolve) => { + createAndFinalizeBlock(context.polkadotApi); + forth_subscription.once("data", resolve); + }); + forth_subscription.unsubscribe(); + }); + it("should get past events #1: by topic", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #2: by address", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #3: by address + topic", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should get past events #3: multiple addresses", async function () { + const subscription = web3Subscribe("logs", { + fromBlock: "0x0", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + address: [ + "0xe573BCA813c741229ffB2488F7856C6cAa841041", + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); + + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); + }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + }, + "ws" +); diff --git a/tests/tests/test-subscription.ts b/tests/tests/test-subscription.ts index 2b79b8ec0ec..e1003a7040f 100644 --- a/tests/tests/test-subscription.ts +++ b/tests/tests/test-subscription.ts @@ -2,7 +2,12 @@ import { expect } from "chai"; import { Subscription as Web3Subscription } from "web3-core-subscriptions"; import { BlockHeader } from "web3-eth"; import { Log } from "web3-core"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; + +import { + GENESIS_ACCOUNT, + GENESIS_ACCOUNT_PRIVATE_KEY, + TEST_SUBSCRIPTION_CONTRACT_BYTECODE, +} from "./constants"; import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; @@ -15,109 +20,11 @@ interface Subscription extends Web3Subscription { // It has been known to fluctuate from release to release, so it may need adjustment. const EXPECTED_TRANSACTION_GAS_COST = 891328; -const TEST_CONTRACT_BYTECODE = - "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffff" + - "ffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffff" + - "ffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000" + - "0000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152" + - "602001807f45524332303a206d696e7420746f20746865207a65726f2061646472657373008152506020019150" + - "5060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d81" + - "6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff" + - "ffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffff" + - "ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + - "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffff" + - "ffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523" + - "b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156102875760" + - "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + - "8281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + - "0081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080" + - "60405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0" + - "8231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b" + - "8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b" + - "600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffff" + - "ffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515" + - "815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390" + - "f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffff" + - "ffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092" + - "9190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f3" + - "5b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffff" + - "ffffffffff1690602001909291908035906020019092919050505061049a565b60405180821515151581526020" + - "0191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffff" + - "ffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191" + - "505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffff" + - "ffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051" + - "808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b" + - "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291" + - "90505050610662565b604051808215151515815260200191505060405180910390f35b61038360048036036040" + - "81101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190" + - "929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040" + - "518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092" + - "915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560" + - "4051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffff" + - "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061" + - "0440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + - "ffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b60019050" + - "9392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffff" + - "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + - "200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + - "ffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b60019050" + - "92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + - "ffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a261070756" + - "5b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ff" + - "ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + - "200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff" + - "ffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6107" + - "0f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000" + - "600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff" + - "ffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ff" + - "ffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000" + - "33905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + - "ffffffffffffff161415610795576040517f08c379a00000000000000000000000000000000000000000000000" + - "00000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180" + - "910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffff" + - "ffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000" + - "000000008152600401808060200182810382526022815260200180610d28602291396040019150506040518091" + - "0390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + - "ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffff" + - "ffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173" + - "ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f" + - "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051808281526020019150" + - "5060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffff" + - "ffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000" + - "000000000000000000000000008152600401808060200182810382526025815260200180610d98602591396040" + - "0191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffff" + - "ffffffffffffffffffffffffffff161415610a12576040517f08c379a000000000000000000000000000000000" + - "0000000000000000000000008152600401808060200182810382526023815260200180610d0560239139604001" + - "91505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a6026913960008087" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "5260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffff" + - "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000" + - "2081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff" + - "ffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60008084" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "52602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffff" + - "ffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f5" + - "5a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c6957" + - "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "01828103825283818151815260200191508051906020019080838360005b83811015610c2e5780820151818401" + - "52602081019050610c13565b50505050905090810190601f168015610c5b578082038051600183602003610100" + - "0a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b" + - "600080828401905083811015610cfa576040517f08c379a0000000000000000000000000000000000000000000" + - "00000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a2061646469" + - "74696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056" + - "fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206170" + - "70726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f75" + - "6e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e742065786365" + - "65647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164" + - "647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332" + - "303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ff" + - "abf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; - async function sendTransaction(context, extraData = {}) { const tx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, - data: TEST_CONTRACT_BYTECODE, + data: TEST_SUBSCRIPTION_CONTRACT_BYTECODE, value: "0x00", gasPrice: "0x01", gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), @@ -430,135 +337,3 @@ describeWithMoonbeam( }, "ws" ); - -describeWithMoonbeam( - "Frontier RPC past events (Subscription)", - `simple-specs.json`, - (context) => { - // Little helper to hack web3 that are not complete. - function web3Subscribe(type: "pendingTransactions"): Subscription; - function web3Subscribe(type: "logs", params: {}): Subscription; - function web3Subscribe(type: "newBlockHeaders" | "pendingTransactions" | "logs", params?: any) { - return (context.web3.eth as any).subscribe(...arguments); - } - before(async function () { - let first_subscription = web3Subscribe("pendingTransactions"); - await sendTransaction(context); - await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - first_subscription.once("data", resolve); - }); - first_subscription.unsubscribe(); - let second_subscription = web3Subscribe("logs", {}); - await sendTransaction(context); - await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - second_subscription.once("data", resolve); - }); - second_subscription.unsubscribe(); - let third_subscription = web3Subscribe("logs", { - address: [ - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - ], - }); - await sendTransaction(context); - await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - third_subscription.once("data", resolve); - }); - third_subscription.unsubscribe(); - let forth_subscription = web3Subscribe("logs", { - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }); - await sendTransaction(context); - await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - forth_subscription.once("data", resolve); - }); - forth_subscription.unsubscribe(); - }); - it("should get past events #1: by topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 4) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #2: by address", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #3: by address + topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - - it("should get past events #3: multiple addresses", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: [ - "0xe573BCA813c741229ffB2488F7856C6cAa841041", - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - ], - }); - - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 4) resolve(data); - }); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; - }); - }, - "ws" -); From 0e923fe9c40b330d2c873b6c849a417688c2ab19 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 16 Apr 2021 10:32:18 +0200 Subject: [PATCH 38/49] remove single letter variable in test-filter-api --- tests/tests/test-filter-api.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index ef89fbbd3a3..f0ab28b9c05 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -181,8 +181,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return unsupported error for Pending Transaction filter creation", async function () { - let r = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); - expect(r.error).to.include({ + let createFilter = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); + expect(createFilter.error).to.include({ message: "Method not available.", }); }); @@ -224,6 +224,9 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex it("should return responses for Log filter polling.", async function () { // Create contract. let tx = await sendTransaction(context); + console.log("HEREEE"); + console.log(tx); + console.log("HEREEE"); await createAndFinalizeBlock(context.polkadotApi); let receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); From 611df422097e46b0403bbcdc4a91dc50ad09c975 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 16 Apr 2021 15:38:24 +0200 Subject: [PATCH 39/49] Small cosmetic changes --- tests/tests/test-block.ts | 1 - tests/tests/test-contract-loops.ts | 10 +++++----- tests/tests/test-filter-api.ts | 19 ++++++++----------- tests/tests/test-revert-receipt.ts | 1 - 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts index 7868633e73d..544aec6fae9 100644 --- a/tests/tests/test-block.ts +++ b/tests/tests/test-block.ts @@ -67,7 +67,6 @@ describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { await context.polkadotApi.rpc.chain.getBlockHash(0), false ); - let block1 = await context.web3.eth.getBlock(1); }); it("should be at block 1 after block production", async function () { diff --git a/tests/tests/test-contract-loops.ts b/tests/tests/test-contract-loops.ts index 61ff9ad7838..8e7ee54e43b 100644 --- a/tests/tests/test-contract-loops.ts +++ b/tests/tests/test-contract-loops.ts @@ -69,9 +69,9 @@ describeWithMoonbeam("Moonbeam RPC (Contract Loops)", `simple-specs.json`, (cont block.transactions[0] ); expect(receipt.status).to.eq(false); - } catch (e) { - console.log("error caught", e); - throw new Error(e); + } catch (err) { + console.log("error caught", err); + throw new Error(err); } }); @@ -94,8 +94,8 @@ describeWithMoonbeam("Moonbeam RPC (Contract Loops)", `simple-specs.json`, (cont try { await callContractFunctionMS(context, contract.options.address, bytesCode); return Number(await contract.methods.count().call()) - startIncr; - } catch (e) { - console.log("error caught", e); + } catch (err) { + console.log("error caught", err); } } // 1 loop to make sure it works diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index f0ab28b9c05..055987d0890 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -181,8 +181,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return unsupported error for Pending Transaction filter creation", async function () { - let createFilter = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); - expect(createFilter.error).to.include({ + let result = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); + expect(result.error).to.include({ message: "Method not available.", }); }); @@ -224,9 +224,6 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex it("should return responses for Log filter polling.", async function () { // Create contract. let tx = await sendTransaction(context); - console.log("HEREEE"); - console.log(tx); - console.log("HEREEE"); await createAndFinalizeBlock(context.polkadotApi); let receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); @@ -290,8 +287,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex expect(uninstall.result).to.be.eq(true); // Should return error if does not exist. - let r = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); - expect(r.error).to.include({ + let result = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); + expect(result.error).to.include({ message: "Filter id " + parseInt(filterId, 16) + " does not exist.", }); }); @@ -306,8 +303,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await createAndFinalizeBlock(context.polkadotApi); } - let r = await customRequest(context.web3, "eth_getFilterChanges", [filterId]); - expect(r.error).to.include({ + let result = await customRequest(context.web3, "eth_getFilterChanges", [filterId]); + expect(result.error).to.include({ message: "Filter id " + parseInt(filterId, 16) + " does not exist.", }); }); @@ -317,8 +314,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_newBlockFilter", []); } - let r = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(r.error).to.include({ + let result = await customRequest(context.web3, "eth_newBlockFilter", []); + expect(result.error).to.include({ message: "Filter pool is full (limit 500).", }); }); diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts index 4b1b1606aec..81b7c2d91e1 100644 --- a/tests/tests/test-revert-receipt.ts +++ b/tests/tests/test-revert-receipt.ts @@ -29,7 +29,6 @@ describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, ( "736f6c63430006060033"; before(async function () { - console.log(await context.web3.eth.getBalance("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")); // We send some money to TEST_ACCOUNT in order to have deterministic nonces const testAccount1 = context.web3.eth.accounts.privateKeyToAccount(TEST_ACCOUNT_PRIVATE_KEY); const tx = await context.web3.eth.accounts.signTransaction( From 6ee7e5a938ed0b0a3cfccbedb89d80b4ba110eae Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 16 Apr 2021 15:42:53 +0200 Subject: [PATCH 40/49] revert changes in package.json --- tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/package.json b/tests/package.json index c88aa3eff99..0f861f5ec67 100644 --- a/tests/package.json +++ b/tests/package.json @@ -30,7 +30,7 @@ }, "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", - "test": "mocha -t 15000 --parallel -r ts-node/register 'tests/test-balance.ts'", + "test": "mocha --parallel -r ts-node/register 'tests/**/*.ts'", "watch": "npm-watch", "build": "cargo build --release", "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" From 4305984916e5a508120e78452bd1992640c3c837 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 16 Apr 2021 18:21:48 +0200 Subject: [PATCH 41/49] Remove beforeEach and substitute it for common function --- tests/tests/test-filter-api.ts | 25 +++-- tests/tests/test-txpool.ts | 196 ++++++++++++++++----------------- 2 files changed, 110 insertions(+), 111 deletions(-) diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts index 055987d0890..cc987ba823a 100644 --- a/tests/tests/test-filter-api.ts +++ b/tests/tests/test-filter-api.ts @@ -118,6 +118,9 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex "6420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ffabf642bda147" + "00b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; + const BLOCK_LIFESPAN_THRESHOLD = 100; + const MAX_FILTER_POOL = 500; + async function sendTransaction(context) { const tx = await context.web3.eth.accounts.signTransaction( { @@ -133,22 +136,22 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); return tx; } - const blockLifespanThreshold = 100; - const maxFilterPool = 500; - beforeEach(async function () { + + async function clean_filters(context) { let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); let filterId = createFilter.result; // If filter is NAN filter pool is full if (isNaN(filterId)) { - filterId = 500; + filterId = MAX_FILTER_POOL; } // Lets have a clean environment by uninstalling all tests for (let i = 0; i <= filterId; i++) { await customRequest(context.web3, "eth_uninstallFilter", [i]); } - }); + } it("should create a Log filter and return the ID", async function () { + await clean_filters(context); let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x0", @@ -164,6 +167,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should increment filter ID", async function () { + await clean_filters(context); let createFilter = await customRequest(context.web3, "eth_newFilter", [ { fromBlock: "0x1", @@ -176,11 +180,13 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should create a Block filter and return the ID", async function () { + await clean_filters(context); let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); }); it("should return unsupported error for Pending Transaction filter creation", async function () { + await clean_filters(context); let result = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); expect(result.error).to.include({ message: "Method not available.", @@ -188,6 +194,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return responses for Block filter polling.", async function () { + await clean_filters(context); let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); let block = await context.web3.eth.getBlock("latest"); let poll = await customRequest(context.web3, "eth_getFilterChanges", [ @@ -222,6 +229,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return responses for Log filter polling.", async function () { + await clean_filters(context); // Create contract. let tx = await sendTransaction(context); await createAndFinalizeBlock(context.polkadotApi); @@ -250,6 +258,7 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should return response for raw Log filter request.", async function () { + await clean_filters(context); // Create contract. let tx = await sendTransaction(context); await createAndFinalizeBlock(context.polkadotApi); @@ -295,11 +304,12 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex it("should drain the filter pool.", async function () { this.timeout(15000); + await clean_filters(context); let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); let filterId = createFilter.result; - for (let i = 0; i <= blockLifespanThreshold; i++) { + for (let i = 0; i <= BLOCK_LIFESPAN_THRESHOLD; i++) { await createAndFinalizeBlock(context.polkadotApi); } @@ -310,7 +320,8 @@ describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (contex }); it("should have a filter pool max size of 500.", async function () { - for (let i = 0; i < maxFilterPool; i++) { + await clean_filters(context); + for (let i = 0; i < MAX_FILTER_POOL; i++) { await customRequest(context.web3, "eth_newBlockFilter", []); } diff --git a/tests/tests/test-txpool.ts b/tests/tests/test-txpool.ts index 92769918bef..03c841d008e 100644 --- a/tests/tests/test-txpool.ts +++ b/tests/tests/test-txpool.ts @@ -4,123 +4,111 @@ import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./u import { ERC20_BYTECODE } from "./constants/testContracts"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -let txContract, contractAddress; +async function insert_to_mempool(context) { + // Insert a transaction + let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + let tx = await context.web3.eth.accounts.signTransaction( + { + from: GENESIS_ACCOUNT, + data: ERC20_BYTECODE, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + let txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + return [txContract, tx, nonce]; +} describeWithMoonbeam("Moonbeam RPC (TxPool RPC module)", `simple-specs.json`, (context) => { - describe("TxPool test on contract creation", async () => { - let txContract, nonce, tx; - beforeEach(async () => { - nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: ERC20_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - }); - it("should get pending pool information on Create", async function () { - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" - ); + it("should get pending pool information on Create", async function () { + // Clean state + await createAndFinalizeBlock(context.polkadotApi); + // Insert mempool + let [, tx, nonce] = await insert_to_mempool(context); + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" + ); - let content = await customRequest(context.web3, "txpool_content", []); + let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: GENESIS_ACCOUNT.toString(), - gas: "0x100000", - gasPrice: "0x1", - hash: tx.messageHash.toString(), - nonce: context.web3.utils.toHex(nonce), - to: "0x0000000000000000000000000000000000000000", - value: "0x0", - }); - await createAndFinalizeBlock(context.polkadotApi); + data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), + gas: "0x100000", + gasPrice: "0x1", + hash: tx.messageHash.toString(), + nonce: context.web3.utils.toHex(nonce), + to: "0x0000000000000000000000000000000000000000", + value: "0x0", }); + }); - it("pool should be empty after producing a block", async function () { - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); - contractAddress = receipt.contractAddress; - - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; + it("pool should be empty after producing a block", async function () { + // Clean state + await createAndFinalizeBlock(context.polkadotApi); + await insert_to_mempool(context); + await createAndFinalizeBlock(context.polkadotApi); + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT]; + expect(data).to.be.undefined; - let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; - }); + let content = await customRequest(context.web3, "txpool_content", []); + data = content.result.pending[GENESIS_ACCOUNT]; + expect(data).to.be.undefined; }); - describe("TxPool test on contract call and finalization", async () => { - let txContract, contractAddress; - before(async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: ERC20_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); + it("should get pending pool information on Call", async function () { + // Clean state + await createAndFinalizeBlock(context.polkadotApi); + // Insert mempool + let [txContract, ,] = await insert_to_mempool(context); + await createAndFinalizeBlock(context.polkadotApi); + const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); - contractAddress = receipt.contractAddress; - }); - - it("should get pending pool information on Call", async function () { - const transferFnCode = `a9059cbb000000000000000000000000`; - const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; - const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; - const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - const tx = await context.web3.eth.accounts.signTransaction( - { - to: contractAddress, - data: inputCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + let contractAddress = receipt.contractAddress; + const transferFnCode = `a9059cbb000000000000000000000000`; + const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; + const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; + const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + const tx = await context.web3.eth.accounts.signTransaction( + { + to: contractAddress, + data: inputCode, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + GENESIS_ACCOUNT_PRIVATE_KEY + ); + await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + let inspect = await customRequest(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - contractAddress.toString().toLowerCase() + ": 0 wei + 1048576 gas x 1 wei" - ); + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + contractAddress.toString().toLowerCase() + ": 0 wei + 1048576 gas x 1 wei" + ); - let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: GENESIS_ACCOUNT.toString(), - gas: "0x100000", - gasPrice: "0x1", - hash: tx.messageHash.toString(), - nonce: context.web3.utils.toHex(nonce), - to: contractAddress.toString().toLowerCase(), - value: "0x0", - }); + let content = await customRequest(context.web3, "txpool_content", []); + data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), + gas: "0x100000", + gasPrice: "0x1", + hash: tx.messageHash.toString(), + nonce: context.web3.utils.toHex(nonce), + to: contractAddress.toString().toLowerCase(), + value: "0x0", }); }); }); From 5870a7bdf6ba6ac077b4aa7ad674cdb6e9d2a996 Mon Sep 17 00:00:00 2001 From: Gorka Irazoqui Date: Fri, 16 Apr 2021 18:49:27 +0200 Subject: [PATCH 42/49] change var for let or const --- tests/tests/test-fork-chain.ts | 2 +- tests/tests/test-precompiles.ts | 6 +++--- tests/tests/test-trace-filter.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-fork-chain.ts index 05964770c07..6bb20480c95 100644 --- a/tests/tests/test-fork-chain.ts +++ b/tests/tests/test-fork-chain.ts @@ -43,7 +43,7 @@ describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { // We start parenting to the genesis let parentHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - for (var i = 0; i <= currentHeight; i++) { + for (let i = 0; i <= currentHeight; i++) { parentHash = (await createAndFinalizeBlock(context.polkadotApi, parentHash, false))[1]; } diff --git a/tests/tests/test-precompiles.ts b/tests/tests/test-precompiles.ts index 67586c8e96c..dfb29187295 100644 --- a/tests/tests/test-precompiles.ts +++ b/tests/tests/test-precompiles.ts @@ -310,7 +310,7 @@ describeWithMoonbeam("Moonbeam (Precompiles)", `simple-specs.json`, (context) => ); await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); - var receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); + const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( "0x6080604052600080fdfea264697066735822122075fa7407f63bde9752715fbe31095ab6ad9273e2" + "d758ca548cdb9d581cc4fcd264736f6c63430007060033" @@ -331,7 +331,7 @@ describeWithMoonbeam("Moonbeam (Precompiles)", `simple-specs.json`, (context) => ); await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); - var receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); + const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( "0x6080604052600080fdfea264697066735822122075cd0f518b5eecae53e271cd43201f7af10ba181" + "ece35fe769e037d2ce152f9864736f6c63430007060033" @@ -352,7 +352,7 @@ describeWithMoonbeam("Moonbeam (Precompiles)", `simple-specs.json`, (context) => ); await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); - var receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); + const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( "0x6080604052600080fdfea26469706673582212202c2287769364a973256a3d99b3689d357bf3f403e9" + "81a27be30121349505bb5c64736f6c63430007060033" diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index cb07fb87261..9a646768286 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -51,7 +51,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); await createAndFinalizeBlock(context.polkadotApi); // Deploy 2 more contracts - for (var i = 0; i < 2; i++) { + for (let i = 0; i < 2; i++) { const contractDeploy = contract.deploy({ data: CONTRACT.bytecode, arguments: [false], // don't revert From 8ecddf9cf69c7fe560cd9c669148e8a11a931f8e Mon Sep 17 00:00:00 2001 From: Crystalin Date: Sun, 18 Apr 2021 03:10:00 +0000 Subject: [PATCH 43/49] Removes solc from tests --- .../compiled/FiniteLoopContract.json | 1 + .../contracts/compiled/InfiniteContract.json | 1 + .../compiled/InfiniteContractVar.json | 1 + tests/contracts/compiled/TestContract.json | 1 + .../contracts/compiled/TestContractIncr.json | 1 + .../sources.ts} | 0 tests/fixtures/contract-fixtures.ts | 9 - tests/package.json | 7 +- tests/pre-build-contracts.ts | 60 + .../compiledContracts/FiniteLoopContract.json | 2128 ----------------- .../compiledContracts/InfiniteContract.json | 772 ------ .../InfiniteContractVar.json | 1423 ----------- .../compiledContracts/TestContract.json | 1952 --------------- .../compiledContracts/TestContractIncr.json | 1389 ----------- tests/tests/util/contracts.ts | 68 +- tests/tests/util/testWithMoonbeam.ts | 2 +- 16 files changed, 72 insertions(+), 7743 deletions(-) create mode 100644 tests/contracts/compiled/FiniteLoopContract.json create mode 100644 tests/contracts/compiled/InfiniteContract.json create mode 100644 tests/contracts/compiled/InfiniteContractVar.json create mode 100644 tests/contracts/compiled/TestContract.json create mode 100644 tests/contracts/compiled/TestContractIncr.json rename tests/{tests/constants/contractSources.ts => contracts/sources.ts} (100%) delete mode 100644 tests/fixtures/contract-fixtures.ts create mode 100644 tests/pre-build-contracts.ts delete mode 100644 tests/tests/constants/compiledContracts/FiniteLoopContract.json delete mode 100644 tests/tests/constants/compiledContracts/InfiniteContract.json delete mode 100644 tests/tests/constants/compiledContracts/InfiniteContractVar.json delete mode 100644 tests/tests/constants/compiledContracts/TestContract.json delete mode 100644 tests/tests/constants/compiledContracts/TestContractIncr.json diff --git a/tests/contracts/compiled/FiniteLoopContract.json b/tests/contracts/compiled/FiniteLoopContract.json new file mode 100644 index 00000000000..c731f6f5e43 --- /dev/null +++ b/tests/contracts/compiled/FiniteLoopContract.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ","sourceMap":"39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"100600","executionCost":"5161","totalCost":"105761"},"external":{"count()":"1107","incr(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":109,"end":164,"name":"CALLVALUE","source":0},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"ISZERO","source":0},{"begin":109,"end":164,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPI","source":0},{"begin":109,"end":164,"name":"PUSH","source":0,"value":"0"},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"REVERT","source":0},{"begin":109,"end":164,"name":"tag","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPDEST","source":0},{"begin":109,"end":164,"name":"POP","source":0},{"begin":152,"end":153,"name":"PUSH","source":0,"value":"0"},{"begin":144,"end":149,"name":"DUP1","source":0},{"begin":144,"end":153,"name":"DUP2","source":0},{"begin":144,"end":153,"name":"SWAP1","source":0},{"begin":144,"end":153,"name":"SSTORE","source":0},{"begin":144,"end":153,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CODECOPY","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033",".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":39,"end":339,"name":"CALLVALUE","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"ISZERO","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":339,"name":"CALLDATASIZE","source":0},{"begin":39,"end":339,"name":"LT","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CALLDATALOAD","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":339,"name":"SHR","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"21B13C48"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"3"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"5"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"7"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"DUP1","source":0},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SUB","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"RETURN","source":0},{"begin":178,"end":333,"name":"tag","source":0,"value":"4"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":178,"end":333,"name":"PUSH","source":0,"value":"4"},{"begin":178,"end":333,"name":"DUP1","source":0},{"begin":178,"end":333,"name":"CALLDATASIZE","source":0},{"begin":178,"end":333,"name":"SUB","source":0},{"begin":178,"end":333,"name":"DUP2","source":0},{"begin":178,"end":333,"name":"ADD","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":178,"end":333,"name":"SWAP2","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"10"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"9"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"STOP","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"0"},{"begin":77,"end":94,"name":"SLOAD","source":0},{"begin":77,"end":94,"name":"DUP2","source":0},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[out]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":221,"end":227,"name":"PUSH","source":0,"value":"0"},{"begin":243,"end":323,"name":"tag","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":252,"end":253,"name":"DUP2","source":0},{"begin":250,"end":251,"name":"DUP2","source":0},{"begin":250,"end":253,"name":"LT","source":0},{"begin":243,"end":323,"name":"ISZERO","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPI","source":0},{"begin":285,"end":286,"name":"PUSH","source":0,"value":"1"},{"begin":279,"end":284,"name":"PUSH","source":0,"value":"0"},{"begin":279,"end":284,"name":"SLOAD","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":279,"end":286,"name":"SWAP2","source":0},{"begin":279,"end":286,"name":"SWAP1","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":279,"end":286,"name":"JUMP","source":0,"value":"[in]"},{"begin":279,"end":286,"name":"tag","source":0,"value":"16"},{"begin":279,"end":286,"name":"JUMPDEST","source":0},{"begin":273,"end":278,"name":"PUSH","source":0,"value":"0"},{"begin":273,"end":286,"name":"DUP2","source":0},{"begin":273,"end":286,"name":"SWAP1","source":0},{"begin":273,"end":286,"name":"SSTORE","source":0},{"begin":273,"end":286,"name":"POP","source":0},{"begin":307,"end":308,"name":"PUSH","source":0,"value":"1"},{"begin":304,"end":308,"name":"DUP2","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":304,"end":308,"name":"SWAP2","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":304,"end":308,"name":"JUMP","source":0,"value":"[in]"},{"begin":304,"end":308,"name":"tag","source":0,"value":"18"},{"begin":304,"end":308,"name":"JUMPDEST","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"POP","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMP","source":0},{"begin":243,"end":323,"name":"tag","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"20"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"22"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"26"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"27"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"29"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"8"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"32"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1077,"name":"tag","source":1,"value":"17"},{"begin":772,"end":1077,"name":"JUMPDEST","source":1},{"begin":772,"end":1077,"name":"PUSH","source":1,"value":"0"},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"34"},{"begin":849,"end":850,"name":"DUP3","source":1},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":831,"end":851,"name":"JUMP","source":1,"value":"[in]"},{"begin":831,"end":851,"name":"tag","source":1,"value":"34"},{"begin":831,"end":851,"name":"JUMPDEST","source":1},{"begin":826,"end":851,"name":"SWAP2","source":1},{"begin":826,"end":851,"name":"POP","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":883,"end":884,"name":"DUP4","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":865,"end":885,"name":"JUMP","source":1,"value":"[in]"},{"begin":865,"end":885,"name":"tag","source":1,"value":"35"},{"begin":865,"end":885,"name":"JUMPDEST","source":1},{"begin":860,"end":885,"name":"SWAP3","source":1},{"begin":860,"end":885,"name":"POP","source":1},{"begin":1019,"end":1020,"name":"DUP3","source":1},{"begin":951,"end":1017,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":947,"end":1021,"name":"SUB","source":1},{"begin":944,"end":945,"name":"DUP3","source":1},{"begin":941,"end":1022,"name":"GT","source":1},{"begin":938,"end":940,"name":"ISZERO","source":1},{"begin":938,"end":940,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPI","source":1},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1025,"end":1043,"name":"JUMP","source":1,"value":"[in]"},{"begin":1025,"end":1043,"name":"tag","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"JUMPDEST","source":1},{"begin":938,"end":940,"name":"tag","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPDEST","source":1},{"begin":1069,"end":1070,"name":"DUP3","source":1},{"begin":1066,"end":1067,"name":"DUP3","source":1},{"begin":1062,"end":1071,"name":"ADD","source":1},{"begin":1055,"end":1071,"name":"SWAP1","source":1},{"begin":1055,"end":1071,"name":"POP","source":1},{"begin":816,"end":1077,"name":"SWAP3","source":1},{"begin":816,"end":1077,"name":"SWAP2","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"JUMP","source":1,"value":"[out]"},{"begin":1083,"end":1160,"name":"tag","source":1,"value":"30"},{"begin":1083,"end":1160,"name":"JUMPDEST","source":1},{"begin":1083,"end":1160,"name":"PUSH","source":1,"value":"0"},{"begin":1149,"end":1154,"name":"DUP2","source":1},{"begin":1138,"end":1154,"name":"SWAP1","source":1},{"begin":1138,"end":1154,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"SWAP2","source":1},{"begin":1128,"end":1160,"name":"SWAP1","source":1},{"begin":1128,"end":1160,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"JUMP","source":1,"value":"[out]"},{"begin":1166,"end":1346,"name":"tag","source":1,"value":"38"},{"begin":1166,"end":1346,"name":"JUMPDEST","source":1},{"begin":1214,"end":1291,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1211,"end":1212,"name":"PUSH","source":1,"value":"0"},{"begin":1204,"end":1292,"name":"MSTORE","source":1},{"begin":1311,"end":1315,"name":"PUSH","source":1,"value":"11"},{"begin":1308,"end":1309,"name":"PUSH","source":1,"value":"4"},{"begin":1301,"end":1316,"name":"MSTORE","source":1},{"begin":1335,"end":1339,"name":"PUSH","source":1,"value":"24"},{"begin":1332,"end":1333,"name":"PUSH","source":1,"value":"0"},{"begin":1325,"end":1340,"name":"REVERT","source":1},{"begin":1352,"end":1474,"name":"tag","source":1,"value":"23"},{"begin":1352,"end":1474,"name":"JUMPDEST","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"42"},{"begin":1443,"end":1448,"name":"DUP2","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1425,"end":1449,"name":"JUMP","source":1,"value":"[in]"},{"begin":1425,"end":1449,"name":"tag","source":1,"value":"42"},{"begin":1425,"end":1449,"name":"JUMPDEST","source":1},{"begin":1418,"end":1423,"name":"DUP2","source":1},{"begin":1415,"end":1450,"name":"EQ","source":1},{"begin":1405,"end":1407,"name":"PUSH [tag]","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPI","source":1},{"begin":1464,"end":1465,"name":"PUSH","source":1,"value":"0"},{"begin":1461,"end":1462,"name":"DUP1","source":1},{"begin":1454,"end":1466,"name":"REVERT","source":1},{"begin":1405,"end":1407,"name":"tag","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPDEST","source":1},{"begin":1395,"end":1474,"name":"POP","source":1},{"begin":1395,"end":1474,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"count()":"06661abd","incr(uint256)":"21b13c48"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:FiniteLoopContract","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"37800","executionCost":"87","totalCost":"37887"},"external":{"infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CODECOPY","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033",".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":146,"name":"CALLDATASIZE","source":0},{"begin":39,"end":146,"name":"LT","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CALLDATALOAD","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":146,"name":"SHR","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":146,"name":"EQ","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"3"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"4"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"6"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"DUP1","source":0},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SUB","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"RETURN","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":115,"end":121,"name":"PUSH","source":0,"value":"0"},{"begin":124,"end":139,"name":"tag","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":131,"end":135,"name":"PUSH","source":0,"value":"1"},{"begin":124,"end":139,"name":"ISZERO","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPI","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMP","source":0},{"begin":124,"end":139,"name":"tag","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"12"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"14"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"7"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":436,"name":"tag","source":1,"value":"15"},{"begin":359,"end":436,"name":"JUMPDEST","source":1},{"begin":359,"end":436,"name":"PUSH","source":1,"value":"0"},{"begin":425,"end":430,"name":"DUP2","source":1},{"begin":414,"end":430,"name":"SWAP1","source":1},{"begin":414,"end":430,"name":"POP","source":1},{"begin":404,"end":436,"name":"SWAP2","source":1},{"begin":404,"end":436,"name":"SWAP1","source":1},{"begin":404,"end":436,"name":"POP","source":1},{"begin":404,"end":436,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/InfiniteContractVar.json b/tests/contracts/compiled/InfiniteContractVar.json new file mode 100644 index 00000000000..8d2c2c82bf7 --- /dev/null +++ b/tests/contracts/compiled/InfiniteContractVar.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinite","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":98:149 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":139:140 0 */\n 0x00\n /* \"main.sol\":131:136 count */\n dup1\n /* \"main.sol\":131:140 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":70:87 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":70:87 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_10:\n /* \"main.sol\":198:253 while (true) {... */\n tag_12:\n /* \"main.sol\":205:209 true */\n 0x01\n /* \"main.sol\":198:253 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":239:240 1 */\n 0x01\n /* \"main.sol\":233:238 count */\n sload(0x00)\n /* \"main.sol\":233:240 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":227:232 count */\n 0x00\n /* \"main.sol\":227:240 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":198:253 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":159:261 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ","sourceMap":"33:232:0:-:0;;;98:51;;;;;;;;;;139:1;131:5;:9;;;;33:232;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ","sourceMap":"33:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;159:102;;;:::i;:::-;;70:17;;;;:::o;159:102::-;198:55;205:4;198:55;;;239:1;233:5;;:7;;;;:::i;:::-;227:5;:13;;;;198:55;;;159:102::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"76000","executionCost":"5137","totalCost":"81137"},"external":{"count()":"1107","infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":33,"end":265,"name":"PUSH","source":0,"value":"80"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"40"},{"begin":33,"end":265,"name":"MSTORE","source":0},{"begin":98,"end":149,"name":"CALLVALUE","source":0},{"begin":98,"end":149,"name":"DUP1","source":0},{"begin":98,"end":149,"name":"ISZERO","source":0},{"begin":98,"end":149,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":98,"end":149,"name":"JUMPI","source":0},{"begin":98,"end":149,"name":"PUSH","source":0,"value":"0"},{"begin":98,"end":149,"name":"DUP1","source":0},{"begin":98,"end":149,"name":"REVERT","source":0},{"begin":98,"end":149,"name":"tag","source":0,"value":"1"},{"begin":98,"end":149,"name":"JUMPDEST","source":0},{"begin":98,"end":149,"name":"POP","source":0},{"begin":139,"end":140,"name":"PUSH","source":0,"value":"0"},{"begin":131,"end":136,"name":"DUP1","source":0},{"begin":131,"end":140,"name":"DUP2","source":0},{"begin":131,"end":140,"name":"SWAP1","source":0},{"begin":131,"end":140,"name":"SSTORE","source":0},{"begin":131,"end":140,"name":"POP","source":0},{"begin":33,"end":265,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"CODECOPY","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033",".code":[{"begin":33,"end":265,"name":"PUSH","source":0,"value":"80"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"40"},{"begin":33,"end":265,"name":"MSTORE","source":0},{"begin":33,"end":265,"name":"CALLVALUE","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"ISZERO","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"REVERT","source":0},{"begin":33,"end":265,"name":"tag","source":0,"value":"1"},{"begin":33,"end":265,"name":"JUMPDEST","source":0},{"begin":33,"end":265,"name":"POP","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"4"},{"begin":33,"end":265,"name":"CALLDATASIZE","source":0},{"begin":33,"end":265,"name":"LT","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"CALLDATALOAD","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"E0"},{"begin":33,"end":265,"name":"SHR","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":33,"end":265,"name":"EQ","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":33,"end":265,"name":"EQ","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"tag","source":0,"value":"2"},{"begin":33,"end":265,"name":"JUMPDEST","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"REVERT","source":0},{"begin":70,"end":87,"name":"tag","source":0,"value":"3"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[in]"},{"begin":70,"end":87,"name":"tag","source":0,"value":"5"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"40"},{"begin":70,"end":87,"name":"MLOAD","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":70,"end":87,"name":"SWAP2","source":0},{"begin":70,"end":87,"name":"SWAP1","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[in]"},{"begin":70,"end":87,"name":"tag","source":0,"value":"7"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"40"},{"begin":70,"end":87,"name":"MLOAD","source":0},{"begin":70,"end":87,"name":"DUP1","source":0},{"begin":70,"end":87,"name":"SWAP2","source":0},{"begin":70,"end":87,"name":"SUB","source":0},{"begin":70,"end":87,"name":"SWAP1","source":0},{"begin":70,"end":87,"name":"RETURN","source":0},{"begin":159,"end":261,"name":"tag","source":0,"value":"4"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":159,"end":261,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":159,"end":261,"name":"JUMP","source":0,"value":"[in]"},{"begin":159,"end":261,"name":"tag","source":0,"value":"9"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"STOP","source":0},{"begin":70,"end":87,"name":"tag","source":0,"value":"6"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"0"},{"begin":70,"end":87,"name":"SLOAD","source":0},{"begin":70,"end":87,"name":"DUP2","source":0},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[out]"},{"begin":159,"end":261,"name":"tag","source":0,"value":"10"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":198,"end":253,"name":"tag","source":0,"value":"12"},{"begin":198,"end":253,"name":"JUMPDEST","source":0},{"begin":205,"end":209,"name":"PUSH","source":0,"value":"1"},{"begin":198,"end":253,"name":"ISZERO","source":0},{"begin":198,"end":253,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":198,"end":253,"name":"JUMPI","source":0},{"begin":239,"end":240,"name":"PUSH","source":0,"value":"1"},{"begin":233,"end":238,"name":"PUSH","source":0,"value":"0"},{"begin":233,"end":238,"name":"SLOAD","source":0},{"begin":233,"end":240,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":233,"end":240,"name":"SWAP2","source":0},{"begin":233,"end":240,"name":"SWAP1","source":0},{"begin":233,"end":240,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":233,"end":240,"name":"JUMP","source":0,"value":"[in]"},{"begin":233,"end":240,"name":"tag","source":0,"value":"14"},{"begin":233,"end":240,"name":"JUMPDEST","source":0},{"begin":227,"end":232,"name":"PUSH","source":0,"value":"0"},{"begin":227,"end":240,"name":"DUP2","source":0},{"begin":227,"end":240,"name":"SWAP1","source":0},{"begin":227,"end":240,"name":"SSTORE","source":0},{"begin":227,"end":240,"name":"POP","source":0},{"begin":198,"end":253,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":198,"end":253,"name":"JUMP","source":0},{"begin":198,"end":253,"name":"tag","source":0,"value":"13"},{"begin":198,"end":253,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"17"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"19"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"22"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"15"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"24"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"25"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"27"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"20"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"28"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x51a8c959c8212265da566e81fc6e172fe096fdb362e5247b5f4962e6f7fe5e5c\",\"urls\":[\"bzz-raw://38d00129ce5053e6ed7fa4655a83f8acb315c1e6754b5d20f8072f1da8498b5c\",\"dweb:/ipfs/QmPuwgoHiXtDjqBxKxijxaqY88FpQd6PyfM76LC6691C9W\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:InfiniteContractVar","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/TestContract.json b/tests/contracts/compiled/TestContract.json new file mode 100644 index 00000000000..c8e0df92b75 --- /dev/null +++ b/tests/contracts/compiled/TestContract.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"multiply","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":112:118 uint d */\n 0x00\n /* \"main.sol\":132:133 7 */\n 0x07\n /* \"main.sol\":128:129 a */\n dup3\n /* \"main.sol\":128:133 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":121:133 return a * 7 */\n swap1\n pop\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:93:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1520:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"485:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"502:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"525:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"507:17:1"},"nodeType":"YulFunctionCall","src":"507:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"495:6:1"},"nodeType":"YulFunctionCall","src":"495:37:1"},"nodeType":"YulExpressionStatement","src":"495:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"473:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"480:3:1","type":""}],"src":"420:118:1"},{"body":{"nodeType":"YulBlock","src":"642:124:1","statements":[{"nodeType":"YulAssignment","src":"652:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"664:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"675:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"660:3:1"},"nodeType":"YulFunctionCall","src":"660:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"652:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"732:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"756:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"741:3:1"},"nodeType":"YulFunctionCall","src":"741:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"688:43:1"},"nodeType":"YulFunctionCall","src":"688:71:1"},"nodeType":"YulExpressionStatement","src":"688:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"614:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"637:4:1","type":""}],"src":"544:222:1"},{"body":{"nodeType":"YulBlock","src":"820:300:1","statements":[{"nodeType":"YulAssignment","src":"830:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"853:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"835:17:1"},"nodeType":"YulFunctionCall","src":"835:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"830:1:1"}]},{"nodeType":"YulAssignment","src":"864:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"887:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"869:17:1"},"nodeType":"YulFunctionCall","src":"869:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"864:1:1"}]},{"body":{"nodeType":"YulBlock","src":"1062:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"1064:16:1"},"nodeType":"YulFunctionCall","src":"1064:18:1"},"nodeType":"YulExpressionStatement","src":"1064:18:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"974:1:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:9:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"960:6:1"},"nodeType":"YulFunctionCall","src":"960:17:1"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"982:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"989:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"1057:1:1"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"985:3:1"},"nodeType":"YulFunctionCall","src":"985:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"979:2:1"},"nodeType":"YulFunctionCall","src":"979:81:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"956:3:1"},"nodeType":"YulFunctionCall","src":"956:105:1"},"nodeType":"YulIf","src":"953:2:1"},{"nodeType":"YulAssignment","src":"1094:20:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1109:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"1112:1:1"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1105:3:1"},"nodeType":"YulFunctionCall","src":"1105:9:1"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"1094:7:1"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"803:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"806:1:1","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"812:7:1","type":""}],"src":"772:348:1"},{"body":{"nodeType":"YulBlock","src":"1171:32:1","statements":[{"nodeType":"YulAssignment","src":"1181:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1192:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1181:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1153:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1163:7:1","type":""}],"src":"1126:77:1"},{"body":{"nodeType":"YulBlock","src":"1237:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:88:1"},"nodeType":"YulExpressionStatement","src":"1247:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1351:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1344:6:1"},"nodeType":"YulFunctionCall","src":"1344:15:1"},"nodeType":"YulExpressionStatement","src":"1344:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1375:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1378:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1368:6:1"},"nodeType":"YulFunctionCall","src":"1368:15:1"},"nodeType":"YulExpressionStatement","src":"1368:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1209:180:1"},{"body":{"nodeType":"YulBlock","src":"1438:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1495:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1504:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1507:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1497:6:1"},"nodeType":"YulFunctionCall","src":"1497:12:1"},"nodeType":"YulExpressionStatement","src":"1497:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1461:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1486:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1468:17:1"},"nodeType":"YulFunctionCall","src":"1468:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1458:2:1"},"nodeType":"YulFunctionCall","src":"1458:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1451:6:1"},"nodeType":"YulFunctionCall","src":"1451:43:1"},"nodeType":"YulIf","src":"1448:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1431:5:1","type":""}],"src":"1395:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;112:6;132:1;128;:5;;;;:::i;:::-;121:12;;66:69;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"89200","executionCost":"135","totalCost":"89335"},"external":{"multiply(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":43,"end":136,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":136,"name":"MSTORE","source":0},{"begin":43,"end":136,"name":"CALLVALUE","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"ISZERO","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"POP","source":0},{"begin":43,"end":136,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"CODECOPY","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033",".code":[{"begin":43,"end":136,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":136,"name":"MSTORE","source":0},{"begin":43,"end":136,"name":"CALLVALUE","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"ISZERO","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"POP","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"4"},{"begin":43,"end":136,"name":"CALLDATASIZE","source":0},{"begin":43,"end":136,"name":"LT","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"CALLDATALOAD","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"E0"},{"begin":43,"end":136,"name":"SHR","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"C6888FA1"},{"begin":43,"end":136,"name":"EQ","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"2"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":66,"end":135,"name":"tag","source":0,"value":"3"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"4"},{"begin":66,"end":135,"name":"DUP1","source":0},{"begin":66,"end":135,"name":"CALLDATASIZE","source":0},{"begin":66,"end":135,"name":"SUB","source":0},{"begin":66,"end":135,"name":"DUP2","source":0},{"begin":66,"end":135,"name":"ADD","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"5"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"4"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"40"},{"begin":66,"end":135,"name":"MLOAD","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"8"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"40"},{"begin":66,"end":135,"name":"MLOAD","source":0},{"begin":66,"end":135,"name":"DUP1","source":0},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SUB","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"RETURN","source":0},{"begin":66,"end":135,"name":"tag","source":0,"value":"7"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":112,"end":118,"name":"PUSH","source":0,"value":"0"},{"begin":132,"end":133,"name":"PUSH","source":0,"value":"7"},{"begin":128,"end":129,"name":"DUP3","source":0},{"begin":128,"end":133,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":128,"end":133,"name":"SWAP2","source":0},{"begin":128,"end":133,"name":"SWAP1","source":0},{"begin":128,"end":133,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":128,"end":133,"name":"JUMP","source":0,"value":"[in]"},{"begin":128,"end":133,"name":"tag","source":0,"value":"11"},{"begin":128,"end":133,"name":"JUMPDEST","source":0},{"begin":121,"end":133,"name":"SWAP1","source":0},{"begin":121,"end":133,"name":"POP","source":0},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"POP","source":0},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"14"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"6"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"21"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"23"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"9"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"26"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1120,"name":"tag","source":1,"value":"12"},{"begin":772,"end":1120,"name":"JUMPDEST","source":1},{"begin":772,"end":1120,"name":"PUSH","source":1,"value":"0"},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":853,"end":854,"name":"DUP3","source":1},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":835,"end":855,"name":"JUMP","source":1,"value":"[in]"},{"begin":835,"end":855,"name":"tag","source":1,"value":"28"},{"begin":835,"end":855,"name":"JUMPDEST","source":1},{"begin":830,"end":855,"name":"SWAP2","source":1},{"begin":830,"end":855,"name":"POP","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":887,"end":888,"name":"DUP4","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":869,"end":889,"name":"JUMP","source":1,"value":"[in]"},{"begin":869,"end":889,"name":"tag","source":1,"value":"29"},{"begin":869,"end":889,"name":"JUMPDEST","source":1},{"begin":864,"end":889,"name":"SWAP3","source":1},{"begin":864,"end":889,"name":"POP","source":1},{"begin":1057,"end":1058,"name":"DUP2","source":1},{"begin":989,"end":1055,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":985,"end":1059,"name":"DIV","source":1},{"begin":982,"end":983,"name":"DUP4","source":1},{"begin":979,"end":1060,"name":"GT","source":1},{"begin":974,"end":975,"name":"DUP3","source":1},{"begin":967,"end":976,"name":"ISZERO","source":1},{"begin":960,"end":977,"name":"ISZERO","source":1},{"begin":956,"end":1061,"name":"AND","source":1},{"begin":953,"end":955,"name":"ISZERO","source":1},{"begin":953,"end":955,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPI","source":1},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1064,"end":1082,"name":"JUMP","source":1,"value":"[in]"},{"begin":1064,"end":1082,"name":"tag","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"JUMPDEST","source":1},{"begin":953,"end":955,"name":"tag","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPDEST","source":1},{"begin":1112,"end":1113,"name":"DUP3","source":1},{"begin":1109,"end":1110,"name":"DUP3","source":1},{"begin":1105,"end":1114,"name":"MUL","source":1},{"begin":1094,"end":1114,"name":"SWAP1","source":1},{"begin":1094,"end":1114,"name":"POP","source":1},{"begin":820,"end":1120,"name":"SWAP3","source":1},{"begin":820,"end":1120,"name":"SWAP2","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"JUMP","source":1,"value":"[out]"},{"begin":1126,"end":1203,"name":"tag","source":1,"value":"24"},{"begin":1126,"end":1203,"name":"JUMPDEST","source":1},{"begin":1126,"end":1203,"name":"PUSH","source":1,"value":"0"},{"begin":1192,"end":1197,"name":"DUP2","source":1},{"begin":1181,"end":1197,"name":"SWAP1","source":1},{"begin":1181,"end":1197,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"SWAP2","source":1},{"begin":1171,"end":1203,"name":"SWAP1","source":1},{"begin":1171,"end":1203,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"JUMP","source":1,"value":"[out]"},{"begin":1209,"end":1389,"name":"tag","source":1,"value":"32"},{"begin":1209,"end":1389,"name":"JUMPDEST","source":1},{"begin":1257,"end":1334,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1254,"end":1255,"name":"PUSH","source":1,"value":"0"},{"begin":1247,"end":1335,"name":"MSTORE","source":1},{"begin":1354,"end":1358,"name":"PUSH","source":1,"value":"11"},{"begin":1351,"end":1352,"name":"PUSH","source":1,"value":"4"},{"begin":1344,"end":1359,"name":"MSTORE","source":1},{"begin":1378,"end":1382,"name":"PUSH","source":1,"value":"24"},{"begin":1375,"end":1376,"name":"PUSH","source":1,"value":"0"},{"begin":1368,"end":1383,"name":"REVERT","source":1},{"begin":1395,"end":1517,"name":"tag","source":1,"value":"17"},{"begin":1395,"end":1517,"name":"JUMPDEST","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1486,"end":1491,"name":"DUP2","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1468,"end":1492,"name":"JUMP","source":1,"value":"[in]"},{"begin":1468,"end":1492,"name":"tag","source":1,"value":"36"},{"begin":1468,"end":1492,"name":"JUMPDEST","source":1},{"begin":1461,"end":1466,"name":"DUP2","source":1},{"begin":1458,"end":1493,"name":"EQ","source":1},{"begin":1448,"end":1450,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPI","source":1},{"begin":1507,"end":1508,"name":"PUSH","source":1,"value":"0"},{"begin":1504,"end":1505,"name":"DUP1","source":1},{"begin":1497,"end":1509,"name":"REVERT","source":1},{"begin":1448,"end":1450,"name":"tag","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPDEST","source":1},{"begin":1438,"end":1517,"name":"POP","source":1},{"begin":1438,"end":1517,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"multiply(uint256)":"c6888fa1"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x64093515f0aec3a3a0b7eac9c2f54014bc21af374f317107f57a1b1f9ee18903\",\"urls\":[\"bzz-raw://4ead303344848f88c9feaaf32ea8cffb05639878f5ec5260611c6775d43cff36\",\"dweb:/ipfs/QmRvLYD1pq872sHHn7hbFnz7ALyVRfN3SAbTyUMmPTrRQs\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}"} \ No newline at end of file diff --git a/tests/contracts/compiled/TestContractIncr.json b/tests/contracts/compiled/TestContractIncr.json new file mode 100644 index 00000000000..b1a28735367 --- /dev/null +++ b/tests/contracts/compiled/TestContractIncr.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":119:178 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":164:165 0 */\n 0x00\n /* \"main.sol\":156:161 count */\n dup1\n /* \"main.sol\":156:165 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":83:100 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":196:261 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":83:100 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":196:261 function incr() public {... */\n tag_10:\n /* \"main.sol\":247:248 1 */\n 0x01\n /* \"main.sol\":241:246 count */\n sload(0x00)\n /* \"main.sol\":241:248 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":235:240 count */\n 0x00\n /* \"main.sol\":235:248 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":196:261 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ","sourceMap":"45:224:0:-:0;;;119:59;;;;;;;;;;164:1;156:5;:9;;;;45:224;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ","sourceMap":"45:224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:65;;;:::i;:::-;;83:17;;;;:::o;196:65::-;247:1;241:5;;:7;;;;:::i;:::-;235:5;:13;;;;196:65::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"73400","executionCost":"5137","totalCost":"78537"},"external":{"count()":"1107","incr()":"infinite"}},"legacyAssembly":{".code":[{"begin":45,"end":269,"name":"PUSH","source":0,"value":"80"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"40"},{"begin":45,"end":269,"name":"MSTORE","source":0},{"begin":119,"end":178,"name":"CALLVALUE","source":0},{"begin":119,"end":178,"name":"DUP1","source":0},{"begin":119,"end":178,"name":"ISZERO","source":0},{"begin":119,"end":178,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":119,"end":178,"name":"JUMPI","source":0},{"begin":119,"end":178,"name":"PUSH","source":0,"value":"0"},{"begin":119,"end":178,"name":"DUP1","source":0},{"begin":119,"end":178,"name":"REVERT","source":0},{"begin":119,"end":178,"name":"tag","source":0,"value":"1"},{"begin":119,"end":178,"name":"JUMPDEST","source":0},{"begin":119,"end":178,"name":"POP","source":0},{"begin":164,"end":165,"name":"PUSH","source":0,"value":"0"},{"begin":156,"end":161,"name":"DUP1","source":0},{"begin":156,"end":165,"name":"DUP2","source":0},{"begin":156,"end":165,"name":"SWAP1","source":0},{"begin":156,"end":165,"name":"SSTORE","source":0},{"begin":156,"end":165,"name":"POP","source":0},{"begin":45,"end":269,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"CODECOPY","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033",".code":[{"begin":45,"end":269,"name":"PUSH","source":0,"value":"80"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"40"},{"begin":45,"end":269,"name":"MSTORE","source":0},{"begin":45,"end":269,"name":"CALLVALUE","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"ISZERO","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"REVERT","source":0},{"begin":45,"end":269,"name":"tag","source":0,"value":"1"},{"begin":45,"end":269,"name":"JUMPDEST","source":0},{"begin":45,"end":269,"name":"POP","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"4"},{"begin":45,"end":269,"name":"CALLDATASIZE","source":0},{"begin":45,"end":269,"name":"LT","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"CALLDATALOAD","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"E0"},{"begin":45,"end":269,"name":"SHR","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":45,"end":269,"name":"EQ","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"119FBBD4"},{"begin":45,"end":269,"name":"EQ","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"tag","source":0,"value":"2"},{"begin":45,"end":269,"name":"JUMPDEST","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"REVERT","source":0},{"begin":83,"end":100,"name":"tag","source":0,"value":"3"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[in]"},{"begin":83,"end":100,"name":"tag","source":0,"value":"5"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"40"},{"begin":83,"end":100,"name":"MLOAD","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":83,"end":100,"name":"SWAP2","source":0},{"begin":83,"end":100,"name":"SWAP1","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[in]"},{"begin":83,"end":100,"name":"tag","source":0,"value":"7"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"40"},{"begin":83,"end":100,"name":"MLOAD","source":0},{"begin":83,"end":100,"name":"DUP1","source":0},{"begin":83,"end":100,"name":"SWAP2","source":0},{"begin":83,"end":100,"name":"SUB","source":0},{"begin":83,"end":100,"name":"SWAP1","source":0},{"begin":83,"end":100,"name":"RETURN","source":0},{"begin":196,"end":261,"name":"tag","source":0,"value":"4"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":196,"end":261,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":196,"end":261,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":196,"end":261,"name":"JUMP","source":0,"value":"[in]"},{"begin":196,"end":261,"name":"tag","source":0,"value":"9"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":196,"end":261,"name":"STOP","source":0},{"begin":83,"end":100,"name":"tag","source":0,"value":"6"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"0"},{"begin":83,"end":100,"name":"SLOAD","source":0},{"begin":83,"end":100,"name":"DUP2","source":0},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[out]"},{"begin":196,"end":261,"name":"tag","source":0,"value":"10"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":247,"end":248,"name":"PUSH","source":0,"value":"1"},{"begin":241,"end":246,"name":"PUSH","source":0,"value":"0"},{"begin":241,"end":246,"name":"SLOAD","source":0},{"begin":241,"end":248,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":241,"end":248,"name":"SWAP2","source":0},{"begin":241,"end":248,"name":"SWAP1","source":0},{"begin":241,"end":248,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":241,"end":248,"name":"JUMP","source":0,"value":"[in]"},{"begin":241,"end":248,"name":"tag","source":0,"value":"12"},{"begin":241,"end":248,"name":"JUMPDEST","source":0},{"begin":235,"end":240,"name":"PUSH","source":0,"value":"0"},{"begin":235,"end":248,"name":"DUP2","source":0},{"begin":235,"end":248,"name":"SWAP1","source":0},{"begin":235,"end":248,"name":"SSTORE","source":0},{"begin":235,"end":248,"name":"POP","source":0},{"begin":196,"end":261,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"15"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"17"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"20"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"13"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"22"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"23"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"25"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"18"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"26"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","incr()":"119fbbd4"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x161594fe2faed3800e9f57432fc82cb10aafdd837124bb96d783ca3b48de7edf\",\"urls\":[\"bzz-raw://4111db064f989ae4503ab09a7ffde6486119c3738c72a111b12aa017c86681e8\",\"dweb:/ipfs/QmTGeM7tpCF5ebm1YDzimQqaVm2F3JzkLLJZMXFL2Vf4KV\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:TestContractIncr","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }"} \ No newline at end of file diff --git a/tests/tests/constants/contractSources.ts b/tests/contracts/sources.ts similarity index 100% rename from tests/tests/constants/contractSources.ts rename to tests/contracts/sources.ts diff --git a/tests/fixtures/contract-fixtures.ts b/tests/fixtures/contract-fixtures.ts deleted file mode 100644 index de81efa5712..00000000000 --- a/tests/fixtures/contract-fixtures.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { contractSources } from "../tests/constants/contractSources"; -import { compile } from "../tests/util/contracts"; - -exports.mochaGlobalSetup = async function () { - // First compile all contracts - console.log("Making sure all contracts are compiled..."); - await Promise.all(Object.keys(contractSources).map(compile)); - console.log("Done"); -}; diff --git a/tests/package.json b/tests/package.json index 0d2dcc959bf..5a048a06c58 100644 --- a/tests/package.json +++ b/tests/package.json @@ -29,11 +29,12 @@ } }, "scripts": { - "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/*.ts'", - "test": "mocha --parallel -r ts-node/register -r fixtures/contract-fixtures.ts 'tests/**/*.ts'", + "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/test-*.ts'", + "build-contracts": "TS_NODE_TRANSPILE_ONLY=true ts-node ./pre-build-contracts.ts", + "test": "TS_NODE_TRANSPILE_ONLY=true mocha --parallel -r ts-node/register 'tests/**/test-*.ts'", "watch": "npm-watch", "build": "cargo build --release", - "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/*.ts'" + "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/test-*.ts'" }, "author": "", "license": "ISC", diff --git a/tests/pre-build-contracts.ts b/tests/pre-build-contracts.ts new file mode 100644 index 00000000000..1b3357a049e --- /dev/null +++ b/tests/pre-build-contracts.ts @@ -0,0 +1,60 @@ +import solc from "solc"; +import fs from "fs/promises"; +import { contractSources } from "./contracts/sources"; +import { Compiled } from "./tests/util/contracts"; + +function compileSolidity(contractContent: string, contractName: string = "Test"): Compiled { + let result = JSON.parse( + solc.compile( + JSON.stringify({ + language: "Solidity", + sources: { + "main.sol": { + content: contractContent, + }, + }, + settings: { + outputSelection: { + "*": { + "*": ["*"], + }, + }, + }, + }) + ) + ); + + const contract = result.contracts["main.sol"][contractName]; + return { + byteCode: "0x" + contract.evm.bytecode.object, + contract, + sourceCode: contractContent, + }; +} + +// Shouldn't be run concurrently with the same 'name' +async function compile(name: string): Promise { + if (!contractSources[name]) + throw new Error(`Contract name (${name}) doesn't exist in test suite`); + try { + return JSON.parse(await (await fs.readFile(`./contracts/compiled/${name}.json`)).toString()); + } catch (e) { + const contractCompiled = compileSolidity(contractSources[name], name); + let compiled = JSON.stringify(contractCompiled); + await fs.mkdir(`contracts/compiled`, { recursive: true }); + await fs.writeFile(`./contracts/compiled/${name}.json`, compiled, { + flag: "w", + }); + console.log("New compiled contract file has been saved!"); + return contractCompiled; + } +} + +const main = async () => { + await Promise.all(Object.keys(contractSources).map(compile)); + + // Forcing exit to avoid solc maintaining the process + process.exit(0); +}; + +main(); diff --git a/tests/tests/constants/compiledContracts/FiniteLoopContract.json b/tests/tests/constants/compiledContracts/FiniteLoopContract.json deleted file mode 100644 index 723b6f0796c..00000000000 --- a/tests/tests/constants/compiledContracts/FiniteLoopContract.json +++ /dev/null @@ -1,2128 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "n", "type": "uint256" } - ], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ", - "sourceMap": "39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "100600", - "executionCost": "5161", - "totalCost": "105761" - }, - "external": { "count()": "1107", "incr(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 109, "end": 164, "name": "CALLVALUE", "source": 0 }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "ISZERO", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPI", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "REVERT", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPDEST", "source": 0 }, - { "begin": 109, "end": 164, "name": "POP", "source": 0 }, - { - "begin": 152, - "end": 153, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 144, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "DUP2", "source": 0 }, - { "begin": 144, "end": 153, "name": "SWAP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "SSTORE", "source": 0 }, - { "begin": 144, "end": 153, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 339, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 339, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 339, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 339, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "21B13C48" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SUB", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "RETURN", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 178, - "end": 333, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "DUP1", "source": 0 }, - { "begin": 178, "end": 333, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 178, "end": 333, "name": "SUB", "source": 0 }, - { "begin": 178, "end": 333, "name": "DUP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "ADD", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "SWAP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "STOP", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 77, "end": 94, "name": "SLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP2", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 221, - "end": 227, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 252, "end": 253, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 251, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 253, "name": "LT", "source": 0 }, - { "begin": 243, "end": 323, "name": "ISZERO", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPI", "source": 0 }, - { - "begin": 285, - "end": 286, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 279, - "end": 284, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 279, "end": 284, "name": "SLOAD", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "SWAP2", "source": 0 }, - { "begin": 279, "end": 286, "name": "SWAP1", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 279, - "end": 286, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 279, - "end": 286, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "JUMPDEST", "source": 0 }, - { - "begin": 273, - "end": 278, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 273, "end": 286, "name": "DUP2", "source": 0 }, - { "begin": 273, "end": 286, "name": "SWAP1", "source": 0 }, - { "begin": 273, "end": 286, "name": "SSTORE", "source": 0 }, - { "begin": 273, "end": 286, "name": "POP", "source": 0 }, - { - "begin": 307, - "end": 308, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 304, "end": 308, "name": "DUP2", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "SWAP2", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 304, - "end": 308, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 304, - "end": 308, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "JUMPDEST", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { "begin": 304, "end": 308, "name": "POP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1077, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "38" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1083, - "end": 1160, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "38" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "count()": "06661abd", - "incr(uint256)": "21b13c48" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:FiniteLoopContract", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "37800", - "executionCost": "87", - "totalCost": "37887" - }, - "external": { "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { "begin": 39, "end": 146, "name": "tag", "source": 0, "value": "1" }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 146, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 146, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 146, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 39, "end": 146, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { "begin": 75, "end": 140, "name": "DUP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SUB", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "RETURN", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 115, - "end": 121, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 131, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 124, "end": 139, "name": "ISZERO", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPI", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMP", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "7" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "12" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 436, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 436, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, - { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, - { "begin": 414, "end": 430, "name": "POP", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, - { "begin": 404, "end": 436, "name": "POP", "source": 1 }, - { - "begin": 404, - "end": 436, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }" -} diff --git a/tests/tests/constants/compiledContracts/InfiniteContractVar.json b/tests/tests/constants/compiledContracts/InfiniteContractVar.json deleted file mode 100644 index 62cd297b830..00000000000 --- a/tests/tests/constants/compiledContracts/InfiniteContractVar.json +++ /dev/null @@ -1,1423 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "infinite", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":98:149 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":139:140 0 */\n 0x00\n /* \"main.sol\":131:136 count */\n dup1\n /* \"main.sol\":131:140 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":70:87 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":70:87 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_10:\n /* \"main.sol\":198:253 while (true) {... */\n tag_12:\n /* \"main.sol\":205:209 true */\n 0x01\n /* \"main.sol\":198:253 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":239:240 1 */\n 0x01\n /* \"main.sol\":233:238 count */\n sload(0x00)\n /* \"main.sol\":233:240 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":227:232 count */\n 0x00\n /* \"main.sol\":227:240 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":198:253 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":159:261 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", - "sourceMap": "33:232:0:-:0;;;98:51;;;;;;;;;;139:1;131:5;:9;;;;33:232;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", - "sourceMap": "33:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;159:102;;;:::i;:::-;;70:17;;;;:::o;159:102::-;198:55;205:4;198:55;;;239:1;233:5;;:7;;;;:::i;:::-;227:5;:13;;;;198:55;;;159:102::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "76000", - "executionCost": "5137", - "totalCost": "81137" - }, - "external": { "count()": "1107", "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, - { "begin": 98, "end": 149, "name": "CALLVALUE", "source": 0 }, - { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 98, "end": 149, "name": "ISZERO", "source": 0 }, - { - "begin": 98, - "end": 149, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 98, "end": 149, "name": "JUMPI", "source": 0 }, - { - "begin": 98, - "end": 149, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 98, "end": 149, "name": "REVERT", "source": 0 }, - { "begin": 98, "end": 149, "name": "tag", "source": 0, "value": "1" }, - { "begin": 98, "end": 149, "name": "JUMPDEST", "source": 0 }, - { "begin": 98, "end": 149, "name": "POP", "source": 0 }, - { - "begin": 139, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 131, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 131, "end": 140, "name": "DUP2", "source": 0 }, - { "begin": 131, "end": 140, "name": "SWAP1", "source": 0 }, - { "begin": 131, "end": 140, "name": "SSTORE", "source": 0 }, - { "begin": 131, "end": 140, "name": "POP", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "CODECOPY", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - ".code": [ - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, - { "begin": 33, "end": 265, "name": "CALLVALUE", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "ISZERO", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, - { "begin": 33, "end": 265, "name": "POP", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 33, "end": 265, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 33, "end": 265, "name": "LT", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 33, "end": 265, "name": "SHR", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, - { "begin": 70, "end": 87, "name": "DUP1", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, - { "begin": 70, "end": 87, "name": "SUB", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, - { "begin": 70, "end": 87, "name": "RETURN", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 159, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 159, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { "begin": 159, "end": 261, "name": "STOP", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 70, "end": 87, "name": "SLOAD", "source": 0 }, - { "begin": 70, "end": 87, "name": "DUP2", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, - { - "begin": 205, - "end": 209, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 198, "end": 253, "name": "ISZERO", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 198, "end": 253, "name": "JUMPI", "source": 0 }, - { - "begin": 239, - "end": 240, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 233, - "end": 238, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 233, "end": 238, "name": "SLOAD", "source": 0 }, - { - "begin": 233, - "end": 240, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 233, "end": 240, "name": "SWAP2", "source": 0 }, - { "begin": 233, "end": 240, "name": "SWAP1", "source": 0 }, - { - "begin": 233, - "end": 240, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 233, - "end": 240, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 233, - "end": 240, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 233, "end": 240, "name": "JUMPDEST", "source": 0 }, - { - "begin": 227, - "end": 232, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 227, "end": 240, "name": "DUP2", "source": 0 }, - { "begin": 227, "end": 240, "name": "SWAP1", "source": 0 }, - { "begin": 227, "end": 240, "name": "SSTORE", "source": 0 }, - { "begin": 227, "end": 240, "name": "POP", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 198, "end": 253, "name": "JUMP", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x51a8c959c8212265da566e81fc6e172fe096fdb362e5247b5f4962e6f7fe5e5c\",\"urls\":[\"bzz-raw://38d00129ce5053e6ed7fa4655a83f8acb315c1e6754b5d20f8072f1da8498b5c\",\"dweb:/ipfs/QmPuwgoHiXtDjqBxKxijxaqY88FpQd6PyfM76LC6691C9W\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:InfiniteContractVar", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }" -} diff --git a/tests/tests/constants/compiledContracts/TestContract.json b/tests/tests/constants/compiledContracts/TestContract.json deleted file mode 100644 index 8db89a0ee63..00000000000 --- a/tests/tests/constants/compiledContracts/TestContract.json +++ /dev/null @@ -1,1952 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint256", "name": "a", "type": "uint256" } - ], - "name": "multiply", - "outputs": [ - { "internalType": "uint256", "name": "d", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":112:118 uint d */\n 0x00\n /* \"main.sol\":132:133 7 */\n 0x07\n /* \"main.sol\":128:129 a */\n dup3\n /* \"main.sol\":128:133 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":121:133 return a * 7 */\n swap1\n pop\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1520:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "218:196:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "260:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "231:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "231:32:1" - }, - "nodeType": "YulIf", - "src": "228:2:1" - }, - { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "319:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "485:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "502:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "525:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "507:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "507:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "495:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "480:3:1", - "type": "" - } - ], - "src": "420:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "652:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "664:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "675:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "660:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "652:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "732:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "741:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "741:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "688:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "688:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "688:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "614:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "626:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "637:4:1", - "type": "" - } - ], - "src": "544:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "820:300:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "830:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "853:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "835:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "835:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "830:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "864:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "887:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "869:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "869:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "864:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1062:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1064:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1064:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1064:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "974:1:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "967:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "967:9:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "960:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "960:17:1" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "982:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1057:1:1" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "985:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "985:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "979:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "979:81:1" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "956:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "956:105:1" - }, - "nodeType": "YulIf", - "src": "953:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "1094:20:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1109:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1112:1:1" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "1105:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1105:9:1" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "1094:7:1" - } - ] - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "803:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "806:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "812:7:1", - "type": "" - } - ], - "src": "772:348:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1171:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1181:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1192:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1181:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1153:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1163:7:1", - "type": "" - } - ], - "src": "1126:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1237:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1254:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1247:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1247:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1247:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1351:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1354:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1344:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1344:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1344:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1375:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1378:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1368:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1368:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1368:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1209:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1438:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1495:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1504:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1507:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1497:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1497:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1497:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1461:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1486:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1468:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1468:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1458:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1458:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1451:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1451:43:1" - }, - "nodeType": "YulIf", - "src": "1448:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1431:5:1", - "type": "" - } - ], - "src": "1395:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;112:6;132:1;128;:5;;;;:::i;:::-;121:12;;66:69;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "89200", - "executionCost": "135", - "totalCost": "89335" - }, - "external": { "multiply(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, - { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { "begin": 43, "end": 136, "name": "tag", "source": 0, "value": "1" }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { "begin": 43, "end": 136, "name": "POP", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "CODECOPY", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - ".code": [ - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, - { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { "begin": 43, "end": 136, "name": "POP", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 43, "end": 136, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 43, "end": 136, "name": "LT", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 43, "end": 136, "name": "SHR", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "C6888FA1" - }, - { "begin": 43, "end": 136, "name": "EQ", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 135, "name": "DUP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "ADD", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, - { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "RETURN", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 112, - "end": 118, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 132, - "end": 133, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 128, "end": 129, "name": "DUP3", "source": 0 }, - { - "begin": 128, - "end": 133, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 128, "end": 133, "name": "SWAP2", "source": 0 }, - { "begin": 128, "end": 133, "name": "SWAP1", "source": 0 }, - { - "begin": 128, - "end": 133, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 128, - "end": 133, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 128, - "end": 133, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 128, "end": 133, "name": "JUMPDEST", "source": 0 }, - { "begin": 121, "end": 133, "name": "SWAP1", "source": 0 }, - { "begin": 121, "end": 133, "name": "POP", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "POP", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "6" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1120, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 772, "end": 1120, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1120, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { "begin": 853, "end": 854, "name": "DUP3", "source": 1 }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 835, - "end": 855, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 835, - "end": 855, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 835, "end": 855, "name": "JUMPDEST", "source": 1 }, - { "begin": 830, "end": 855, "name": "SWAP2", "source": 1 }, - { "begin": 830, "end": 855, "name": "POP", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 887, "end": 888, "name": "DUP4", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 869, - "end": 889, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 869, - "end": 889, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 869, "end": 889, "name": "JUMPDEST", "source": 1 }, - { "begin": 864, "end": 889, "name": "SWAP3", "source": 1 }, - { "begin": 864, "end": 889, "name": "POP", "source": 1 }, - { "begin": 1057, "end": 1058, "name": "DUP2", "source": 1 }, - { - "begin": 989, - "end": 1055, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 985, "end": 1059, "name": "DIV", "source": 1 }, - { "begin": 982, "end": 983, "name": "DUP4", "source": 1 }, - { "begin": 979, "end": 1060, "name": "GT", "source": 1 }, - { "begin": 974, "end": 975, "name": "DUP3", "source": 1 }, - { "begin": 967, "end": 976, "name": "ISZERO", "source": 1 }, - { "begin": 960, "end": 977, "name": "ISZERO", "source": 1 }, - { "begin": 956, "end": 1061, "name": "AND", "source": 1 }, - { "begin": 953, "end": 955, "name": "ISZERO", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPI", "source": 1 }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1064, - "end": 1082, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1064, - "end": 1082, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1064, "end": 1082, "name": "JUMPDEST", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPDEST", "source": 1 }, - { "begin": 1112, "end": 1113, "name": "DUP3", "source": 1 }, - { "begin": 1109, "end": 1110, "name": "DUP3", "source": 1 }, - { "begin": 1105, "end": 1114, "name": "MUL", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "SWAP1", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP3", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP2", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { - "begin": 820, - "end": 1120, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1126, - "end": 1203, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1126, "end": 1203, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1126, - "end": 1203, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1192, "end": 1197, "name": "DUP2", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "SWAP1", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "POP", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP2", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP1", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "POP", "source": 1 }, - { - "begin": 1171, - "end": 1203, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1209, - "end": 1389, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1209, "end": 1389, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1257, - "end": 1334, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1254, - "end": 1255, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1247, "end": 1335, "name": "MSTORE", "source": 1 }, - { - "begin": 1354, - "end": 1358, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1351, - "end": 1352, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1344, "end": 1359, "name": "MSTORE", "source": 1 }, - { - "begin": 1378, - "end": 1382, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1375, - "end": 1376, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1368, "end": 1383, "name": "REVERT", "source": 1 }, - { - "begin": 1395, - "end": 1517, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 1395, "end": 1517, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 1486, "end": 1491, "name": "DUP2", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1468, - "end": 1492, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1468, - "end": 1492, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 1468, "end": 1492, "name": "JUMPDEST", "source": 1 }, - { "begin": 1461, "end": 1466, "name": "DUP2", "source": 1 }, - { "begin": 1458, "end": 1493, "name": "EQ", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPI", "source": 1 }, - { - "begin": 1507, - "end": 1508, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1504, "end": 1505, "name": "DUP1", "source": 1 }, - { "begin": 1497, "end": 1509, "name": "REVERT", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPDEST", "source": 1 }, - { "begin": 1438, "end": 1517, "name": "POP", "source": 1 }, - { - "begin": 1438, - "end": 1517, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x64093515f0aec3a3a0b7eac9c2f54014bc21af374f317107f57a1b1f9ee18903\",\"urls\":[\"bzz-raw://4ead303344848f88c9feaaf32ea8cffb05639878f5ec5260611c6775d43cff36\",\"dweb:/ipfs/QmRvLYD1pq872sHHn7hbFnz7ALyVRfN3SAbTyUMmPTrRQs\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}" -} diff --git a/tests/tests/constants/compiledContracts/TestContractIncr.json b/tests/tests/constants/compiledContracts/TestContractIncr.json deleted file mode 100644 index d25453d7db1..00000000000 --- a/tests/tests/constants/compiledContracts/TestContractIncr.json +++ /dev/null @@ -1,1389 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":119:178 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":164:165 0 */\n 0x00\n /* \"main.sol\":156:161 count */\n dup1\n /* \"main.sol\":156:165 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":83:100 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":196:261 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":83:100 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":196:261 function incr() public {... */\n tag_10:\n /* \"main.sol\":247:248 1 */\n 0x01\n /* \"main.sol\":241:246 count */\n sload(0x00)\n /* \"main.sol\":241:248 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":235:240 count */\n 0x00\n /* \"main.sol\":235:248 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":196:261 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", - "sourceMap": "45:224:0:-:0;;;119:59;;;;;;;;;;164:1;156:5;:9;;;;45:224;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", - "sourceMap": "45:224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:65;;;:::i;:::-;;83:17;;;;:::o;196:65::-;247:1;241:5;;:7;;;;:::i;:::-;235:5;:13;;;;196:65::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "73400", - "executionCost": "5137", - "totalCost": "78537" - }, - "external": { "count()": "1107", "incr()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, - { "begin": 119, "end": 178, "name": "CALLVALUE", "source": 0 }, - { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, - { "begin": 119, "end": 178, "name": "ISZERO", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 119, "end": 178, "name": "JUMPI", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, - { "begin": 119, "end": 178, "name": "REVERT", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 119, "end": 178, "name": "JUMPDEST", "source": 0 }, - { "begin": 119, "end": 178, "name": "POP", "source": 0 }, - { - "begin": 164, - "end": 165, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 156, "end": 161, "name": "DUP1", "source": 0 }, - { "begin": 156, "end": 165, "name": "DUP2", "source": 0 }, - { "begin": 156, "end": 165, "name": "SWAP1", "source": 0 }, - { "begin": 156, "end": 165, "name": "SSTORE", "source": 0 }, - { "begin": 156, "end": 165, "name": "POP", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "CODECOPY", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - ".code": [ - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, - { "begin": 45, "end": 269, "name": "CALLVALUE", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "ISZERO", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, - { "begin": 45, "end": 269, "name": "POP", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 45, "end": 269, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 45, "end": 269, "name": "LT", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 45, "end": 269, "name": "SHR", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "119FBBD4" - }, - { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, - { "begin": 83, "end": 100, "name": "DUP1", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 83, "end": 100, "name": "SUB", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, - { "begin": 83, "end": 100, "name": "RETURN", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 196, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 196, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { "begin": 196, "end": 261, "name": "STOP", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 83, "end": 100, "name": "SLOAD", "source": 0 }, - { "begin": 83, "end": 100, "name": "DUP2", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 247, - "end": 248, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 241, - "end": 246, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 241, "end": 246, "name": "SLOAD", "source": 0 }, - { - "begin": 241, - "end": 248, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 241, "end": 248, "name": "SWAP2", "source": 0 }, - { "begin": 241, "end": 248, "name": "SWAP1", "source": 0 }, - { - "begin": 241, - "end": 248, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 241, - "end": 248, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 241, - "end": 248, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 241, "end": 248, "name": "JUMPDEST", "source": 0 }, - { - "begin": 235, - "end": 240, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 235, "end": 248, "name": "DUP2", "source": 0 }, - { "begin": 235, "end": 248, "name": "SWAP1", "source": 0 }, - { "begin": 235, "end": 248, "name": "SSTORE", "source": 0 }, - { "begin": 235, "end": 248, "name": "POP", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "incr()": "119fbbd4" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x161594fe2faed3800e9f57432fc82cb10aafdd837124bb96d783ca3b48de7edf\",\"urls\":[\"bzz-raw://4111db064f989ae4503ab09a7ffde6486119c3738c72a111b12aa017c86681e8\",\"dweb:/ipfs/QmTGeM7tpCF5ebm1YDzimQqaVm2F3JzkLLJZMXFL2Vf4KV\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:TestContractIncr", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }" -} diff --git a/tests/tests/util/contracts.ts b/tests/tests/util/contracts.ts index 1ad97534389..c585f0bfd89 100644 --- a/tests/tests/util/contracts.ts +++ b/tests/tests/util/contracts.ts @@ -4,42 +4,12 @@ import { AbiItem } from "web3-utils"; import { Contract } from "web3-eth-contract"; import { createAndFinalizeBlock } from "./polkadotApiRequests"; import { Context } from "./testWithMoonbeam"; -import solc from "solc"; import Web3 from "web3"; -import fs from "fs"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../constants"; import { customRequest } from "."; -import { contractSources } from "../constants/contractSources"; +import { contractSources } from "../contracts/sources"; -export function compileSolidity(contractContent: string, contractName: string = "Test"): Compiled { - let result = JSON.parse( - solc.compile( - JSON.stringify({ - language: "Solidity", - sources: { - "main.sol": { - content: contractContent, - }, - }, - settings: { - outputSelection: { - "*": { - "*": ["*"], - }, - }, - }, - }) - ) - ); - - const contract = result.contracts["main.sol"][contractName]; - return { - byteCode: "0x" + contract.evm.bytecode.object, - contract, - sourceCode: contractContent, - }; -} export interface Compiled { byteCode: string; contract: any; @@ -66,7 +36,7 @@ export async function getCompiled(name: string): Promise { setImmediate(() => { try { console.log(`Loading ${name}.json`); - contracts[name] = require(`../constants/compiledContracts/${name}.json`); + contracts[name] = require(`../../contracts/compiled/${name}.json`); } catch (e) { throw new Error( `Contract name ${name} is not compiled. (should be done in mochaGlobalSetup)` @@ -84,40 +54,6 @@ export async function getCompiled(name: string): Promise { return promise; } -// Shouldn't be run concurrently with the same 'name' -export async function compile(name: string): Promise { - if (!contractSources[name]) - throw new Error(`Contract name (${name}) doesn't exist in test suite`); - let finalCompiled: Compiled = await new Promise((res) => { - fs.readFile(`./tests/constants/compiledContracts/${name}.json`, async (err, data) => { - if (err) { - const contractCompiled = compileSolidity(contractSources[name], name); - let compiled = JSON.stringify(contractCompiled); - await new Promise((res2) => { - fs.writeFile( - `./tests/constants/compiledContracts/${name}.json`, - compiled, - { - flag: "w", - }, - (err) => { - if (err) { - console.log("error whilst writing,e", err); - } - console.log("New compiled contract file has been saved!"); - res2(); - } - ); - }); - res(contractCompiled); - } else { - res(JSON.parse(data.toString())); - } - }); - }); - return finalCompiled; -} - export async function deployContractByName( api: ApiPromise, web3: Web3, diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index 45c8da89952..990e5b3cb1e 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -9,7 +9,7 @@ import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "../consta import { ErrorReport } from "./fillBlockWithTx"; import { findAvailablePorts } from "./findAvailablePorts"; -import { contractSources } from "../constants/contractSources"; +import { contractSources } from "../contracts/sources"; import { getCompiled } from "./contracts"; export async function mochaGlobalSetup() { // First compile all contracts From 1525e88739f449d6ffdf6a3eeddaa818254fd706 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Sun, 18 Apr 2021 03:25:00 +0000 Subject: [PATCH 44/49] Fixes path for contract tests --- tests/tests/util/contracts.ts | 2 +- tests/tests/util/testWithMoonbeam.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests/util/contracts.ts b/tests/tests/util/contracts.ts index c585f0bfd89..84bece50a5c 100644 --- a/tests/tests/util/contracts.ts +++ b/tests/tests/util/contracts.ts @@ -8,7 +8,7 @@ import Web3 from "web3"; import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../constants"; import { customRequest } from "."; -import { contractSources } from "../contracts/sources"; +import { contractSources } from "../../contracts/sources"; export interface Compiled { byteCode: string; diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts index 990e5b3cb1e..ff0f4b983f5 100644 --- a/tests/tests/util/testWithMoonbeam.ts +++ b/tests/tests/util/testWithMoonbeam.ts @@ -9,7 +9,7 @@ import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "../consta import { ErrorReport } from "./fillBlockWithTx"; import { findAvailablePorts } from "./findAvailablePorts"; -import { contractSources } from "../contracts/sources"; +import { contractSources } from "../../contracts/sources"; import { getCompiled } from "./contracts"; export async function mochaGlobalSetup() { // First compile all contracts From 5e8ec5b4ba7ffd2c8042e3b87be8f4fd989625b5 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Sun, 18 Apr 2021 03:33:40 +0000 Subject: [PATCH 45/49] Adds formatting for compiled contracts --- .../compiled/FiniteLoopContract.json | 2129 ++++++++++++++++- .../contracts/compiled/InfiniteContract.json | 773 +++++- .../compiled/InfiniteContractVar.json | 1424 ++++++++++- tests/contracts/compiled/TestContract.json | 1953 ++++++++++++++- .../contracts/compiled/TestContractIncr.json | 1390 ++++++++++- tests/package.json | 2 +- tests/pre-build-contracts.ts | 20 +- 7 files changed, 7673 insertions(+), 18 deletions(-) diff --git a/tests/contracts/compiled/FiniteLoopContract.json b/tests/contracts/compiled/FiniteLoopContract.json index c731f6f5e43..723b6f0796c 100644 --- a/tests/contracts/compiled/FiniteLoopContract.json +++ b/tests/contracts/compiled/FiniteLoopContract.json @@ -1 +1,2128 @@ -{"byteCode":"0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ","sourceMap":"39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"100600","executionCost":"5161","totalCost":"105761"},"external":{"count()":"1107","incr(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":109,"end":164,"name":"CALLVALUE","source":0},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"ISZERO","source":0},{"begin":109,"end":164,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPI","source":0},{"begin":109,"end":164,"name":"PUSH","source":0,"value":"0"},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"REVERT","source":0},{"begin":109,"end":164,"name":"tag","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPDEST","source":0},{"begin":109,"end":164,"name":"POP","source":0},{"begin":152,"end":153,"name":"PUSH","source":0,"value":"0"},{"begin":144,"end":149,"name":"DUP1","source":0},{"begin":144,"end":153,"name":"DUP2","source":0},{"begin":144,"end":153,"name":"SWAP1","source":0},{"begin":144,"end":153,"name":"SSTORE","source":0},{"begin":144,"end":153,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CODECOPY","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033",".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":39,"end":339,"name":"CALLVALUE","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"ISZERO","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":339,"name":"CALLDATASIZE","source":0},{"begin":39,"end":339,"name":"LT","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CALLDATALOAD","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":339,"name":"SHR","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"21B13C48"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"3"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"5"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"7"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"DUP1","source":0},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SUB","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"RETURN","source":0},{"begin":178,"end":333,"name":"tag","source":0,"value":"4"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":178,"end":333,"name":"PUSH","source":0,"value":"4"},{"begin":178,"end":333,"name":"DUP1","source":0},{"begin":178,"end":333,"name":"CALLDATASIZE","source":0},{"begin":178,"end":333,"name":"SUB","source":0},{"begin":178,"end":333,"name":"DUP2","source":0},{"begin":178,"end":333,"name":"ADD","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":178,"end":333,"name":"SWAP2","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"10"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"9"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"STOP","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"0"},{"begin":77,"end":94,"name":"SLOAD","source":0},{"begin":77,"end":94,"name":"DUP2","source":0},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[out]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":221,"end":227,"name":"PUSH","source":0,"value":"0"},{"begin":243,"end":323,"name":"tag","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":252,"end":253,"name":"DUP2","source":0},{"begin":250,"end":251,"name":"DUP2","source":0},{"begin":250,"end":253,"name":"LT","source":0},{"begin":243,"end":323,"name":"ISZERO","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPI","source":0},{"begin":285,"end":286,"name":"PUSH","source":0,"value":"1"},{"begin":279,"end":284,"name":"PUSH","source":0,"value":"0"},{"begin":279,"end":284,"name":"SLOAD","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":279,"end":286,"name":"SWAP2","source":0},{"begin":279,"end":286,"name":"SWAP1","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":279,"end":286,"name":"JUMP","source":0,"value":"[in]"},{"begin":279,"end":286,"name":"tag","source":0,"value":"16"},{"begin":279,"end":286,"name":"JUMPDEST","source":0},{"begin":273,"end":278,"name":"PUSH","source":0,"value":"0"},{"begin":273,"end":286,"name":"DUP2","source":0},{"begin":273,"end":286,"name":"SWAP1","source":0},{"begin":273,"end":286,"name":"SSTORE","source":0},{"begin":273,"end":286,"name":"POP","source":0},{"begin":307,"end":308,"name":"PUSH","source":0,"value":"1"},{"begin":304,"end":308,"name":"DUP2","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":304,"end":308,"name":"SWAP2","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":304,"end":308,"name":"JUMP","source":0,"value":"[in]"},{"begin":304,"end":308,"name":"tag","source":0,"value":"18"},{"begin":304,"end":308,"name":"JUMPDEST","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"POP","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMP","source":0},{"begin":243,"end":323,"name":"tag","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"20"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"22"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"26"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"27"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"29"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"8"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"32"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1077,"name":"tag","source":1,"value":"17"},{"begin":772,"end":1077,"name":"JUMPDEST","source":1},{"begin":772,"end":1077,"name":"PUSH","source":1,"value":"0"},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"34"},{"begin":849,"end":850,"name":"DUP3","source":1},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":831,"end":851,"name":"JUMP","source":1,"value":"[in]"},{"begin":831,"end":851,"name":"tag","source":1,"value":"34"},{"begin":831,"end":851,"name":"JUMPDEST","source":1},{"begin":826,"end":851,"name":"SWAP2","source":1},{"begin":826,"end":851,"name":"POP","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":883,"end":884,"name":"DUP4","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":865,"end":885,"name":"JUMP","source":1,"value":"[in]"},{"begin":865,"end":885,"name":"tag","source":1,"value":"35"},{"begin":865,"end":885,"name":"JUMPDEST","source":1},{"begin":860,"end":885,"name":"SWAP3","source":1},{"begin":860,"end":885,"name":"POP","source":1},{"begin":1019,"end":1020,"name":"DUP3","source":1},{"begin":951,"end":1017,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":947,"end":1021,"name":"SUB","source":1},{"begin":944,"end":945,"name":"DUP3","source":1},{"begin":941,"end":1022,"name":"GT","source":1},{"begin":938,"end":940,"name":"ISZERO","source":1},{"begin":938,"end":940,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPI","source":1},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1025,"end":1043,"name":"JUMP","source":1,"value":"[in]"},{"begin":1025,"end":1043,"name":"tag","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"JUMPDEST","source":1},{"begin":938,"end":940,"name":"tag","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPDEST","source":1},{"begin":1069,"end":1070,"name":"DUP3","source":1},{"begin":1066,"end":1067,"name":"DUP3","source":1},{"begin":1062,"end":1071,"name":"ADD","source":1},{"begin":1055,"end":1071,"name":"SWAP1","source":1},{"begin":1055,"end":1071,"name":"POP","source":1},{"begin":816,"end":1077,"name":"SWAP3","source":1},{"begin":816,"end":1077,"name":"SWAP2","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"JUMP","source":1,"value":"[out]"},{"begin":1083,"end":1160,"name":"tag","source":1,"value":"30"},{"begin":1083,"end":1160,"name":"JUMPDEST","source":1},{"begin":1083,"end":1160,"name":"PUSH","source":1,"value":"0"},{"begin":1149,"end":1154,"name":"DUP2","source":1},{"begin":1138,"end":1154,"name":"SWAP1","source":1},{"begin":1138,"end":1154,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"SWAP2","source":1},{"begin":1128,"end":1160,"name":"SWAP1","source":1},{"begin":1128,"end":1160,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"JUMP","source":1,"value":"[out]"},{"begin":1166,"end":1346,"name":"tag","source":1,"value":"38"},{"begin":1166,"end":1346,"name":"JUMPDEST","source":1},{"begin":1214,"end":1291,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1211,"end":1212,"name":"PUSH","source":1,"value":"0"},{"begin":1204,"end":1292,"name":"MSTORE","source":1},{"begin":1311,"end":1315,"name":"PUSH","source":1,"value":"11"},{"begin":1308,"end":1309,"name":"PUSH","source":1,"value":"4"},{"begin":1301,"end":1316,"name":"MSTORE","source":1},{"begin":1335,"end":1339,"name":"PUSH","source":1,"value":"24"},{"begin":1332,"end":1333,"name":"PUSH","source":1,"value":"0"},{"begin":1325,"end":1340,"name":"REVERT","source":1},{"begin":1352,"end":1474,"name":"tag","source":1,"value":"23"},{"begin":1352,"end":1474,"name":"JUMPDEST","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"42"},{"begin":1443,"end":1448,"name":"DUP2","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1425,"end":1449,"name":"JUMP","source":1,"value":"[in]"},{"begin":1425,"end":1449,"name":"tag","source":1,"value":"42"},{"begin":1425,"end":1449,"name":"JUMPDEST","source":1},{"begin":1418,"end":1423,"name":"DUP2","source":1},{"begin":1415,"end":1450,"name":"EQ","source":1},{"begin":1405,"end":1407,"name":"PUSH [tag]","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPI","source":1},{"begin":1464,"end":1465,"name":"PUSH","source":1,"value":"0"},{"begin":1461,"end":1462,"name":"DUP1","source":1},{"begin":1454,"end":1466,"name":"REVERT","source":1},{"begin":1405,"end":1407,"name":"tag","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPDEST","source":1},{"begin":1395,"end":1474,"name":"POP","source":1},{"begin":1395,"end":1474,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"count()":"06661abd","incr(uint256)":"21b13c48"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:FiniteLoopContract","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ", + "sourceMap": "39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "100600", + "executionCost": "5161", + "totalCost": "105761" + }, + "external": { "count()": "1107", "incr(uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, + { "begin": 109, "end": 164, "name": "CALLVALUE", "source": 0 }, + { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, + { "begin": 109, "end": 164, "name": "ISZERO", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 109, "end": 164, "name": "JUMPI", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, + { "begin": 109, "end": 164, "name": "REVERT", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 109, "end": 164, "name": "JUMPDEST", "source": 0 }, + { "begin": 109, "end": 164, "name": "POP", "source": 0 }, + { + "begin": 152, + "end": 153, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 144, "end": 149, "name": "DUP1", "source": 0 }, + { "begin": 144, "end": 153, "name": "DUP2", "source": 0 }, + { "begin": 144, "end": 153, "name": "SWAP1", "source": 0 }, + { "begin": 144, "end": 153, "name": "SSTORE", "source": 0 }, + { "begin": 144, "end": 153, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 339, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 339, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 339, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 339, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 339, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "21B13C48" + }, + { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, + { "begin": 77, "end": 94, "name": "DUP1", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, + { "begin": 77, "end": 94, "name": "SUB", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, + { "begin": 77, "end": 94, "name": "RETURN", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 178, + "end": 333, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 178, "end": 333, "name": "DUP1", "source": 0 }, + { "begin": 178, "end": 333, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 178, "end": 333, "name": "SUB", "source": 0 }, + { "begin": 178, "end": 333, "name": "DUP2", "source": 0 }, + { "begin": 178, "end": 333, "name": "ADD", "source": 0 }, + { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 178, "end": 333, "name": "SWAP2", "source": 0 }, + { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { "begin": 178, "end": 333, "name": "STOP", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 77, "end": 94, "name": "SLOAD", "source": 0 }, + { "begin": 77, "end": 94, "name": "DUP2", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 221, + "end": 227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 243, + "end": 323, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, + { "begin": 252, "end": 253, "name": "DUP2", "source": 0 }, + { "begin": 250, "end": 251, "name": "DUP2", "source": 0 }, + { "begin": 250, "end": 253, "name": "LT", "source": 0 }, + { "begin": 243, "end": 323, "name": "ISZERO", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 243, "end": 323, "name": "JUMPI", "source": 0 }, + { + "begin": 285, + "end": 286, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 279, + "end": 284, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 279, "end": 284, "name": "SLOAD", "source": 0 }, + { + "begin": 279, + "end": 286, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 279, "end": 286, "name": "SWAP2", "source": 0 }, + { "begin": 279, "end": 286, "name": "SWAP1", "source": 0 }, + { + "begin": 279, + "end": 286, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 279, + "end": 286, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 279, + "end": 286, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 279, "end": 286, "name": "JUMPDEST", "source": 0 }, + { + "begin": 273, + "end": 278, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 273, "end": 286, "name": "DUP2", "source": 0 }, + { "begin": 273, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 273, "end": 286, "name": "SSTORE", "source": 0 }, + { "begin": 273, "end": 286, "name": "POP", "source": 0 }, + { + "begin": 307, + "end": 308, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 304, "end": 308, "name": "DUP2", "source": 0 }, + { + "begin": 304, + "end": 308, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 304, "end": 308, "name": "SWAP2", "source": 0 }, + { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, + { + "begin": 304, + "end": 308, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 304, + "end": 308, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 304, + "end": 308, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 304, "end": 308, "name": "JUMPDEST", "source": 0 }, + { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, + { "begin": 304, "end": 308, "name": "POP", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 243, "end": 323, "name": "JUMP", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, + { "begin": 178, "end": 333, "name": "POP", "source": 0 }, + { "begin": 178, "end": 333, "name": "POP", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 414, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 414, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 260, + "end": 262, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, + { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, + { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, + { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, + { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { + "begin": 276, + "end": 277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, + { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { + "begin": 319, + "end": 320, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, + { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, + { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, + { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 344, + "end": 397, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 344, + "end": 397, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 397, "name": "POP", "source": 1 }, + { "begin": 290, "end": 407, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { + "begin": 218, + "end": 414, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 420, + "end": 538, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 507, + "end": 531, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 507, + "end": 531, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, + { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, + { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { + "begin": 485, + "end": 538, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 544, + "end": 766, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, + { + "begin": 544, + "end": 766, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 675, + "end": 677, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, + { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, + { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, + { "begin": 652, "end": 678, "name": "POP", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 756, + "end": 757, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, + { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, + { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 688, + "end": 759, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 688, + "end": 759, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { + "begin": 642, + "end": 766, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 772, + "end": 1077, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, + { + "begin": 772, + "end": 1077, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 831, + "end": 851, + "name": "PUSH [tag]", + "source": 1, + "value": "34" + }, + { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, + { + "begin": 831, + "end": 851, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 831, + "end": 851, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 831, + "end": 851, + "name": "tag", + "source": 1, + "value": "34" + }, + { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, + { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, + { "begin": 826, "end": 851, "name": "POP", "source": 1 }, + { + "begin": 865, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "35" + }, + { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, + { + "begin": 865, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 865, + "end": 885, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 865, + "end": 885, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, + { "begin": 860, "end": 885, "name": "POP", "source": 1 }, + { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, + { + "begin": 951, + "end": 1017, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, + { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, + { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, + { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, + { + "begin": 938, + "end": 940, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, + { + "begin": 1025, + "end": 1043, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { + "begin": 1025, + "end": 1043, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 1025, + "end": 1043, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1025, + "end": 1043, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, + { + "begin": 938, + "end": 940, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, + { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, + { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, + { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, + { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, + { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, + { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, + { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, + { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, + { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, + { + "begin": 816, + "end": 1077, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1083, + "end": 1160, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1083, + "end": 1160, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, + { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, + { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, + { + "begin": 1128, + "end": 1160, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1166, + "end": 1346, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1214, + "end": 1291, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1211, + "end": 1212, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, + { + "begin": 1311, + "end": 1315, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1308, + "end": 1309, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, + { + "begin": 1335, + "end": 1339, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1332, + "end": 1333, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, + { + "begin": 1352, + "end": 1474, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1449, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, + { + "begin": 1425, + "end": 1449, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 1425, + "end": 1449, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1425, + "end": 1449, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, + { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, + { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, + { + "begin": 1405, + "end": 1407, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, + { + "begin": 1464, + "end": 1465, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, + { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, + { + "begin": 1405, + "end": 1407, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, + { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, + { + "begin": 1395, + "end": 1474, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "count()": "06661abd", + "incr(uint256)": "21b13c48" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:FiniteLoopContract", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"37800","executionCost":"87","totalCost":"37887"},"external":{"infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CODECOPY","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033",".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":146,"name":"CALLDATASIZE","source":0},{"begin":39,"end":146,"name":"LT","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CALLDATALOAD","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":146,"name":"SHR","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":146,"name":"EQ","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"3"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"4"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"6"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"DUP1","source":0},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SUB","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"RETURN","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":115,"end":121,"name":"PUSH","source":0,"value":"0"},{"begin":124,"end":139,"name":"tag","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":131,"end":135,"name":"PUSH","source":0,"value":"1"},{"begin":124,"end":139,"name":"ISZERO","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPI","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMP","source":0},{"begin":124,"end":139,"name":"tag","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"12"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"14"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"7"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":436,"name":"tag","source":1,"value":"15"},{"begin":359,"end":436,"name":"JUMPDEST","source":1},{"begin":359,"end":436,"name":"PUSH","source":1,"value":"0"},{"begin":425,"end":430,"name":"DUP2","source":1},{"begin":414,"end":430,"name":"SWAP1","source":1},{"begin":414,"end":430,"name":"POP","source":1},{"begin":404,"end":436,"name":"SWAP2","source":1},{"begin":404,"end":436,"name":"SWAP1","source":1},{"begin":404,"end":436,"name":"POP","source":1},{"begin":404,"end":436,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "contract": { + "abi": [ + { + "inputs": [], + "name": "infinite", + "outputs": [ + { "internalType": "uint256", "name": "d", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:439:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "404:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "414:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "425:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "414:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "386:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "396:7:1", + "type": "" + } + ], + "src": "359:77:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "37800", + "executionCost": "87", + "totalCost": "37887" + }, + "external": { "infinite()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { "begin": 39, "end": 146, "name": "tag", "source": 0, "value": "1" }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 146, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 146, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 146, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 146, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 146, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "5BEC9E67" + }, + { "begin": 39, "end": 146, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, + { "begin": 75, "end": 140, "name": "DUP1", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 140, "name": "SUB", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { "begin": 75, "end": 140, "name": "RETURN", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 115, + "end": 121, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 124, + "end": 139, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, + { + "begin": 131, + "end": 135, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 124, "end": 139, "name": "ISZERO", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 124, "end": 139, "name": "JUMPI", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 124, "end": 139, "name": "JUMP", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "7" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "12" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 436, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 436, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, + { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, + { "begin": 414, "end": 430, "name": "POP", "source": 1 }, + { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, + { "begin": 404, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 404, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "infinite()": "5bec9e67" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }" +} diff --git a/tests/contracts/compiled/InfiniteContractVar.json b/tests/contracts/compiled/InfiniteContractVar.json index 8d2c2c82bf7..62cd297b830 100644 --- a/tests/contracts/compiled/InfiniteContractVar.json +++ b/tests/contracts/compiled/InfiniteContractVar.json @@ -1 +1,1423 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinite","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":98:149 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":139:140 0 */\n 0x00\n /* \"main.sol\":131:136 count */\n dup1\n /* \"main.sol\":131:140 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":70:87 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":70:87 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_10:\n /* \"main.sol\":198:253 while (true) {... */\n tag_12:\n /* \"main.sol\":205:209 true */\n 0x01\n /* \"main.sol\":198:253 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":239:240 1 */\n 0x01\n /* \"main.sol\":233:238 count */\n sload(0x00)\n /* \"main.sol\":233:240 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":227:232 count */\n 0x00\n /* \"main.sol\":227:240 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":198:253 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":159:261 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ","sourceMap":"33:232:0:-:0;;;98:51;;;;;;;;;;139:1;131:5;:9;;;;33:232;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ","sourceMap":"33:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;159:102;;;:::i;:::-;;70:17;;;;:::o;159:102::-;198:55;205:4;198:55;;;239:1;233:5;;:7;;;;:::i;:::-;227:5;:13;;;;198:55;;;159:102::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"76000","executionCost":"5137","totalCost":"81137"},"external":{"count()":"1107","infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":33,"end":265,"name":"PUSH","source":0,"value":"80"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"40"},{"begin":33,"end":265,"name":"MSTORE","source":0},{"begin":98,"end":149,"name":"CALLVALUE","source":0},{"begin":98,"end":149,"name":"DUP1","source":0},{"begin":98,"end":149,"name":"ISZERO","source":0},{"begin":98,"end":149,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":98,"end":149,"name":"JUMPI","source":0},{"begin":98,"end":149,"name":"PUSH","source":0,"value":"0"},{"begin":98,"end":149,"name":"DUP1","source":0},{"begin":98,"end":149,"name":"REVERT","source":0},{"begin":98,"end":149,"name":"tag","source":0,"value":"1"},{"begin":98,"end":149,"name":"JUMPDEST","source":0},{"begin":98,"end":149,"name":"POP","source":0},{"begin":139,"end":140,"name":"PUSH","source":0,"value":"0"},{"begin":131,"end":136,"name":"DUP1","source":0},{"begin":131,"end":140,"name":"DUP2","source":0},{"begin":131,"end":140,"name":"SWAP1","source":0},{"begin":131,"end":140,"name":"SSTORE","source":0},{"begin":131,"end":140,"name":"POP","source":0},{"begin":33,"end":265,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"CODECOPY","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033",".code":[{"begin":33,"end":265,"name":"PUSH","source":0,"value":"80"},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"40"},{"begin":33,"end":265,"name":"MSTORE","source":0},{"begin":33,"end":265,"name":"CALLVALUE","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"ISZERO","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"REVERT","source":0},{"begin":33,"end":265,"name":"tag","source":0,"value":"1"},{"begin":33,"end":265,"name":"JUMPDEST","source":0},{"begin":33,"end":265,"name":"POP","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"4"},{"begin":33,"end":265,"name":"CALLDATASIZE","source":0},{"begin":33,"end":265,"name":"LT","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"CALLDATALOAD","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"E0"},{"begin":33,"end":265,"name":"SHR","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":33,"end":265,"name":"EQ","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":33,"end":265,"name":"EQ","source":0},{"begin":33,"end":265,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":33,"end":265,"name":"JUMPI","source":0},{"begin":33,"end":265,"name":"tag","source":0,"value":"2"},{"begin":33,"end":265,"name":"JUMPDEST","source":0},{"begin":33,"end":265,"name":"PUSH","source":0,"value":"0"},{"begin":33,"end":265,"name":"DUP1","source":0},{"begin":33,"end":265,"name":"REVERT","source":0},{"begin":70,"end":87,"name":"tag","source":0,"value":"3"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[in]"},{"begin":70,"end":87,"name":"tag","source":0,"value":"5"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"40"},{"begin":70,"end":87,"name":"MLOAD","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":70,"end":87,"name":"SWAP2","source":0},{"begin":70,"end":87,"name":"SWAP1","source":0},{"begin":70,"end":87,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[in]"},{"begin":70,"end":87,"name":"tag","source":0,"value":"7"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"40"},{"begin":70,"end":87,"name":"MLOAD","source":0},{"begin":70,"end":87,"name":"DUP1","source":0},{"begin":70,"end":87,"name":"SWAP2","source":0},{"begin":70,"end":87,"name":"SUB","source":0},{"begin":70,"end":87,"name":"SWAP1","source":0},{"begin":70,"end":87,"name":"RETURN","source":0},{"begin":159,"end":261,"name":"tag","source":0,"value":"4"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":159,"end":261,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":159,"end":261,"name":"JUMP","source":0,"value":"[in]"},{"begin":159,"end":261,"name":"tag","source":0,"value":"9"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"STOP","source":0},{"begin":70,"end":87,"name":"tag","source":0,"value":"6"},{"begin":70,"end":87,"name":"JUMPDEST","source":0},{"begin":70,"end":87,"name":"PUSH","source":0,"value":"0"},{"begin":70,"end":87,"name":"SLOAD","source":0},{"begin":70,"end":87,"name":"DUP2","source":0},{"begin":70,"end":87,"name":"JUMP","source":0,"value":"[out]"},{"begin":159,"end":261,"name":"tag","source":0,"value":"10"},{"begin":159,"end":261,"name":"JUMPDEST","source":0},{"begin":198,"end":253,"name":"tag","source":0,"value":"12"},{"begin":198,"end":253,"name":"JUMPDEST","source":0},{"begin":205,"end":209,"name":"PUSH","source":0,"value":"1"},{"begin":198,"end":253,"name":"ISZERO","source":0},{"begin":198,"end":253,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":198,"end":253,"name":"JUMPI","source":0},{"begin":239,"end":240,"name":"PUSH","source":0,"value":"1"},{"begin":233,"end":238,"name":"PUSH","source":0,"value":"0"},{"begin":233,"end":238,"name":"SLOAD","source":0},{"begin":233,"end":240,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":233,"end":240,"name":"SWAP2","source":0},{"begin":233,"end":240,"name":"SWAP1","source":0},{"begin":233,"end":240,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":233,"end":240,"name":"JUMP","source":0,"value":"[in]"},{"begin":233,"end":240,"name":"tag","source":0,"value":"14"},{"begin":233,"end":240,"name":"JUMPDEST","source":0},{"begin":227,"end":232,"name":"PUSH","source":0,"value":"0"},{"begin":227,"end":240,"name":"DUP2","source":0},{"begin":227,"end":240,"name":"SWAP1","source":0},{"begin":227,"end":240,"name":"SSTORE","source":0},{"begin":227,"end":240,"name":"POP","source":0},{"begin":198,"end":253,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":198,"end":253,"name":"JUMP","source":0},{"begin":198,"end":253,"name":"tag","source":0,"value":"13"},{"begin":198,"end":253,"name":"JUMPDEST","source":0},{"begin":159,"end":261,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"17"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"19"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"22"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"15"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"24"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"25"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"27"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"20"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"28"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x51a8c959c8212265da566e81fc6e172fe096fdb362e5247b5f4962e6f7fe5e5c\",\"urls\":[\"bzz-raw://38d00129ce5053e6ed7fa4655a83f8acb315c1e6754b5d20f8072f1da8498b5c\",\"dweb:/ipfs/QmPuwgoHiXtDjqBxKxijxaqY88FpQd6PyfM76LC6691C9W\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:InfiniteContractVar","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "infinite", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":98:149 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":139:140 0 */\n 0x00\n /* \"main.sol\":131:136 count */\n dup1\n /* \"main.sol\":131:140 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":70:87 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":70:87 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_10:\n /* \"main.sol\":198:253 while (true) {... */\n tag_12:\n /* \"main.sol\":205:209 true */\n 0x01\n /* \"main.sol\":198:253 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":239:240 1 */\n 0x01\n /* \"main.sol\":233:238 count */\n sload(0x00)\n /* \"main.sol\":233:240 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":227:232 count */\n 0x00\n /* \"main.sol\":227:240 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":198:253 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":159:261 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", + "sourceMap": "33:232:0:-:0;;;98:51;;;;;;;;;;139:1;131:5;:9;;;;33:232;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:936:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "403:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "413:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "436:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "418:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "418:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "413:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "447:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "470:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "452:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "452:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "447:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "610:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "612:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "612:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "612:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "531:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "538:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "606:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "534:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "534:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "528:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "528:81:1" + }, + "nodeType": "YulIf", + "src": "525:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "642:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "653:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "656:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "649:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "642:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "390:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "393:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "399:3:1", + "type": "" + } + ], + "src": "359:305:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "715:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "725:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "736:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "725:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "697:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "707:7:1", + "type": "" + } + ], + "src": "670:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "781:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "801:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "791:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "791:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "791:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "895:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "898:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "888:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "888:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "888:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "919:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "912:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "912:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "912:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "753:180:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", + "sourceMap": "33:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;159:102;;;:::i;:::-;;70:17;;;;:::o;159:102::-;198:55;205:4;198:55;;;239:1;233:5;;:7;;;;:::i;:::-;227:5;:13;;;;198:55;;;159:102::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "76000", + "executionCost": "5137", + "totalCost": "81137" + }, + "external": { "count()": "1107", "infinite()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, + { "begin": 98, "end": 149, "name": "CALLVALUE", "source": 0 }, + { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, + { "begin": 98, "end": 149, "name": "ISZERO", "source": 0 }, + { + "begin": 98, + "end": 149, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 98, "end": 149, "name": "JUMPI", "source": 0 }, + { + "begin": 98, + "end": 149, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, + { "begin": 98, "end": 149, "name": "REVERT", "source": 0 }, + { "begin": 98, "end": 149, "name": "tag", "source": 0, "value": "1" }, + { "begin": 98, "end": 149, "name": "JUMPDEST", "source": 0 }, + { "begin": 98, "end": 149, "name": "POP", "source": 0 }, + { + "begin": 139, + "end": 140, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 131, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 131, "end": 140, "name": "DUP2", "source": 0 }, + { "begin": 131, "end": 140, "name": "SWAP1", "source": 0 }, + { "begin": 131, "end": 140, "name": "SSTORE", "source": 0 }, + { "begin": 131, "end": 140, "name": "POP", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 33, "end": 265, "name": "CODECOPY", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 33, "end": 265, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", + ".code": [ + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, + { "begin": 33, "end": 265, "name": "CALLVALUE", "source": 0 }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { "begin": 33, "end": 265, "name": "ISZERO", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, + { "begin": 33, "end": 265, "name": "POP", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 33, "end": 265, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 33, "end": 265, "name": "LT", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 33, "end": 265, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 33, "end": 265, "name": "SHR", "source": 0 }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "5BEC9E67" + }, + { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, + { + "begin": 33, + "end": 265, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, + { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 70, + "end": 87, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 70, + "end": 87, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 70, + "end": 87, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, + { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 70, + "end": 87, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 70, + "end": 87, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, + { "begin": 70, "end": 87, "name": "DUP1", "source": 0 }, + { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, + { "begin": 70, "end": 87, "name": "SUB", "source": 0 }, + { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, + { "begin": 70, "end": 87, "name": "RETURN", "source": 0 }, + { + "begin": 159, + "end": 261, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, + { + "begin": 159, + "end": 261, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 159, + "end": 261, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 159, + "end": 261, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 159, + "end": 261, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, + { "begin": 159, "end": 261, "name": "STOP", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 70, "end": 87, "name": "SLOAD", "source": 0 }, + { "begin": 70, "end": 87, "name": "DUP2", "source": 0 }, + { + "begin": 70, + "end": 87, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 159, + "end": 261, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, + { + "begin": 198, + "end": 253, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, + { + "begin": 205, + "end": 209, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 198, "end": 253, "name": "ISZERO", "source": 0 }, + { + "begin": 198, + "end": 253, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 198, "end": 253, "name": "JUMPI", "source": 0 }, + { + "begin": 239, + "end": 240, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 233, + "end": 238, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 233, "end": 238, "name": "SLOAD", "source": 0 }, + { + "begin": 233, + "end": 240, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 233, "end": 240, "name": "SWAP2", "source": 0 }, + { "begin": 233, "end": 240, "name": "SWAP1", "source": 0 }, + { + "begin": 233, + "end": 240, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 233, + "end": 240, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 233, + "end": 240, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 233, "end": 240, "name": "JUMPDEST", "source": 0 }, + { + "begin": 227, + "end": 232, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 227, "end": 240, "name": "DUP2", "source": 0 }, + { "begin": 227, "end": 240, "name": "SWAP1", "source": 0 }, + { "begin": 227, "end": 240, "name": "SSTORE", "source": 0 }, + { "begin": 227, "end": 240, "name": "POP", "source": 0 }, + { + "begin": 198, + "end": 253, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 198, "end": 253, "name": "JUMP", "source": 0 }, + { + "begin": 198, + "end": 253, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, + { + "begin": 159, + "end": 261, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 664, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 664, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 418, + "end": 438, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 418, + "end": 438, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, + { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, + { "begin": 413, "end": 438, "name": "POP", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 452, + "end": 472, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 452, + "end": 472, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, + { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, + { "begin": 447, "end": 472, "name": "POP", "source": 1 }, + { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, + { + "begin": 538, + "end": 604, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, + { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, + { "begin": 528, "end": 609, "name": "GT", "source": 1 }, + { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 612, + "end": 630, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 612, + "end": 630, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, + { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, + { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, + { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, + { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, + { "begin": 642, "end": 658, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { + "begin": 403, + "end": 664, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 670, + "end": 747, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, + { + "begin": 670, + "end": 747, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, + { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, + { "begin": 725, "end": 741, "name": "POP", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, + { "begin": 715, "end": 747, "name": "POP", "source": 1 }, + { + "begin": 715, + "end": 747, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 753, + "end": 933, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, + { + "begin": 801, + "end": 878, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 798, + "end": 799, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, + { + "begin": 898, + "end": 902, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 895, + "end": 896, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, + { + "begin": 922, + "end": 926, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 919, + "end": 920, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } + ] + } + } + }, + "methodIdentifiers": { "count()": "06661abd", "infinite()": "5bec9e67" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x51a8c959c8212265da566e81fc6e172fe096fdb362e5247b5f4962e6f7fe5e5c\",\"urls\":[\"bzz-raw://38d00129ce5053e6ed7fa4655a83f8acb315c1e6754b5d20f8072f1da8498b5c\",\"dweb:/ipfs/QmPuwgoHiXtDjqBxKxijxaqY88FpQd6PyfM76LC6691C9W\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:InfiniteContractVar", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }" +} diff --git a/tests/contracts/compiled/TestContract.json b/tests/contracts/compiled/TestContract.json index c8e0df92b75..8db89a0ee63 100644 --- a/tests/contracts/compiled/TestContract.json +++ b/tests/contracts/compiled/TestContract.json @@ -1 +1,1952 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"multiply","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":112:118 uint d */\n 0x00\n /* \"main.sol\":132:133 7 */\n 0x07\n /* \"main.sol\":128:129 a */\n dup3\n /* \"main.sol\":128:133 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":121:133 return a * 7 */\n swap1\n pop\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:93:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1520:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"485:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"502:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"525:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"507:17:1"},"nodeType":"YulFunctionCall","src":"507:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"495:6:1"},"nodeType":"YulFunctionCall","src":"495:37:1"},"nodeType":"YulExpressionStatement","src":"495:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"473:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"480:3:1","type":""}],"src":"420:118:1"},{"body":{"nodeType":"YulBlock","src":"642:124:1","statements":[{"nodeType":"YulAssignment","src":"652:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"664:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"675:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"660:3:1"},"nodeType":"YulFunctionCall","src":"660:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"652:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"732:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"756:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"741:3:1"},"nodeType":"YulFunctionCall","src":"741:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"688:43:1"},"nodeType":"YulFunctionCall","src":"688:71:1"},"nodeType":"YulExpressionStatement","src":"688:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"614:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"637:4:1","type":""}],"src":"544:222:1"},{"body":{"nodeType":"YulBlock","src":"820:300:1","statements":[{"nodeType":"YulAssignment","src":"830:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"853:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"835:17:1"},"nodeType":"YulFunctionCall","src":"835:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"830:1:1"}]},{"nodeType":"YulAssignment","src":"864:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"887:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"869:17:1"},"nodeType":"YulFunctionCall","src":"869:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"864:1:1"}]},{"body":{"nodeType":"YulBlock","src":"1062:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"1064:16:1"},"nodeType":"YulFunctionCall","src":"1064:18:1"},"nodeType":"YulExpressionStatement","src":"1064:18:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"974:1:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:9:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"960:6:1"},"nodeType":"YulFunctionCall","src":"960:17:1"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"982:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"989:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"1057:1:1"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"985:3:1"},"nodeType":"YulFunctionCall","src":"985:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"979:2:1"},"nodeType":"YulFunctionCall","src":"979:81:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"956:3:1"},"nodeType":"YulFunctionCall","src":"956:105:1"},"nodeType":"YulIf","src":"953:2:1"},{"nodeType":"YulAssignment","src":"1094:20:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1109:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"1112:1:1"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1105:3:1"},"nodeType":"YulFunctionCall","src":"1105:9:1"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"1094:7:1"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"803:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"806:1:1","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"812:7:1","type":""}],"src":"772:348:1"},{"body":{"nodeType":"YulBlock","src":"1171:32:1","statements":[{"nodeType":"YulAssignment","src":"1181:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1192:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1181:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1153:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1163:7:1","type":""}],"src":"1126:77:1"},{"body":{"nodeType":"YulBlock","src":"1237:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:88:1"},"nodeType":"YulExpressionStatement","src":"1247:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1351:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1344:6:1"},"nodeType":"YulFunctionCall","src":"1344:15:1"},"nodeType":"YulExpressionStatement","src":"1344:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1375:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1378:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1368:6:1"},"nodeType":"YulFunctionCall","src":"1368:15:1"},"nodeType":"YulExpressionStatement","src":"1368:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1209:180:1"},{"body":{"nodeType":"YulBlock","src":"1438:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1495:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1504:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1507:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1497:6:1"},"nodeType":"YulFunctionCall","src":"1497:12:1"},"nodeType":"YulExpressionStatement","src":"1497:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1461:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1486:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1468:17:1"},"nodeType":"YulFunctionCall","src":"1468:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1458:2:1"},"nodeType":"YulFunctionCall","src":"1458:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1451:6:1"},"nodeType":"YulFunctionCall","src":"1451:43:1"},"nodeType":"YulIf","src":"1448:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1431:5:1","type":""}],"src":"1395:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;112:6;132:1;128;:5;;;;:::i;:::-;121:12;;66:69;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"89200","executionCost":"135","totalCost":"89335"},"external":{"multiply(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":43,"end":136,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":136,"name":"MSTORE","source":0},{"begin":43,"end":136,"name":"CALLVALUE","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"ISZERO","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"POP","source":0},{"begin":43,"end":136,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"CODECOPY","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033",".code":[{"begin":43,"end":136,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":136,"name":"MSTORE","source":0},{"begin":43,"end":136,"name":"CALLVALUE","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"ISZERO","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"1"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"POP","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"4"},{"begin":43,"end":136,"name":"CALLDATASIZE","source":0},{"begin":43,"end":136,"name":"LT","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"CALLDATALOAD","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"E0"},{"begin":43,"end":136,"name":"SHR","source":0},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"C6888FA1"},{"begin":43,"end":136,"name":"EQ","source":0},{"begin":43,"end":136,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":43,"end":136,"name":"JUMPI","source":0},{"begin":43,"end":136,"name":"tag","source":0,"value":"2"},{"begin":43,"end":136,"name":"JUMPDEST","source":0},{"begin":43,"end":136,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":136,"name":"DUP1","source":0},{"begin":43,"end":136,"name":"REVERT","source":0},{"begin":66,"end":135,"name":"tag","source":0,"value":"3"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"4"},{"begin":66,"end":135,"name":"DUP1","source":0},{"begin":66,"end":135,"name":"CALLDATASIZE","source":0},{"begin":66,"end":135,"name":"SUB","source":0},{"begin":66,"end":135,"name":"DUP2","source":0},{"begin":66,"end":135,"name":"ADD","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"5"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"4"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"40"},{"begin":66,"end":135,"name":"MLOAD","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[in]"},{"begin":66,"end":135,"name":"tag","source":0,"value":"8"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":66,"end":135,"name":"PUSH","source":0,"value":"40"},{"begin":66,"end":135,"name":"MLOAD","source":0},{"begin":66,"end":135,"name":"DUP1","source":0},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SUB","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"RETURN","source":0},{"begin":66,"end":135,"name":"tag","source":0,"value":"7"},{"begin":66,"end":135,"name":"JUMPDEST","source":0},{"begin":112,"end":118,"name":"PUSH","source":0,"value":"0"},{"begin":132,"end":133,"name":"PUSH","source":0,"value":"7"},{"begin":128,"end":129,"name":"DUP3","source":0},{"begin":128,"end":133,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":128,"end":133,"name":"SWAP2","source":0},{"begin":128,"end":133,"name":"SWAP1","source":0},{"begin":128,"end":133,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":128,"end":133,"name":"JUMP","source":0,"value":"[in]"},{"begin":128,"end":133,"name":"tag","source":0,"value":"11"},{"begin":128,"end":133,"name":"JUMPDEST","source":0},{"begin":121,"end":133,"name":"SWAP1","source":0},{"begin":121,"end":133,"name":"POP","source":0},{"begin":66,"end":135,"name":"SWAP2","source":0},{"begin":66,"end":135,"name":"SWAP1","source":0},{"begin":66,"end":135,"name":"POP","source":0},{"begin":66,"end":135,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"14"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"6"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"21"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"23"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"9"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"26"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1120,"name":"tag","source":1,"value":"12"},{"begin":772,"end":1120,"name":"JUMPDEST","source":1},{"begin":772,"end":1120,"name":"PUSH","source":1,"value":"0"},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":853,"end":854,"name":"DUP3","source":1},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":835,"end":855,"name":"JUMP","source":1,"value":"[in]"},{"begin":835,"end":855,"name":"tag","source":1,"value":"28"},{"begin":835,"end":855,"name":"JUMPDEST","source":1},{"begin":830,"end":855,"name":"SWAP2","source":1},{"begin":830,"end":855,"name":"POP","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":887,"end":888,"name":"DUP4","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":869,"end":889,"name":"JUMP","source":1,"value":"[in]"},{"begin":869,"end":889,"name":"tag","source":1,"value":"29"},{"begin":869,"end":889,"name":"JUMPDEST","source":1},{"begin":864,"end":889,"name":"SWAP3","source":1},{"begin":864,"end":889,"name":"POP","source":1},{"begin":1057,"end":1058,"name":"DUP2","source":1},{"begin":989,"end":1055,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":985,"end":1059,"name":"DIV","source":1},{"begin":982,"end":983,"name":"DUP4","source":1},{"begin":979,"end":1060,"name":"GT","source":1},{"begin":974,"end":975,"name":"DUP3","source":1},{"begin":967,"end":976,"name":"ISZERO","source":1},{"begin":960,"end":977,"name":"ISZERO","source":1},{"begin":956,"end":1061,"name":"AND","source":1},{"begin":953,"end":955,"name":"ISZERO","source":1},{"begin":953,"end":955,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPI","source":1},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1064,"end":1082,"name":"JUMP","source":1,"value":"[in]"},{"begin":1064,"end":1082,"name":"tag","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"JUMPDEST","source":1},{"begin":953,"end":955,"name":"tag","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPDEST","source":1},{"begin":1112,"end":1113,"name":"DUP3","source":1},{"begin":1109,"end":1110,"name":"DUP3","source":1},{"begin":1105,"end":1114,"name":"MUL","source":1},{"begin":1094,"end":1114,"name":"SWAP1","source":1},{"begin":1094,"end":1114,"name":"POP","source":1},{"begin":820,"end":1120,"name":"SWAP3","source":1},{"begin":820,"end":1120,"name":"SWAP2","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"JUMP","source":1,"value":"[out]"},{"begin":1126,"end":1203,"name":"tag","source":1,"value":"24"},{"begin":1126,"end":1203,"name":"JUMPDEST","source":1},{"begin":1126,"end":1203,"name":"PUSH","source":1,"value":"0"},{"begin":1192,"end":1197,"name":"DUP2","source":1},{"begin":1181,"end":1197,"name":"SWAP1","source":1},{"begin":1181,"end":1197,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"SWAP2","source":1},{"begin":1171,"end":1203,"name":"SWAP1","source":1},{"begin":1171,"end":1203,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"JUMP","source":1,"value":"[out]"},{"begin":1209,"end":1389,"name":"tag","source":1,"value":"32"},{"begin":1209,"end":1389,"name":"JUMPDEST","source":1},{"begin":1257,"end":1334,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1254,"end":1255,"name":"PUSH","source":1,"value":"0"},{"begin":1247,"end":1335,"name":"MSTORE","source":1},{"begin":1354,"end":1358,"name":"PUSH","source":1,"value":"11"},{"begin":1351,"end":1352,"name":"PUSH","source":1,"value":"4"},{"begin":1344,"end":1359,"name":"MSTORE","source":1},{"begin":1378,"end":1382,"name":"PUSH","source":1,"value":"24"},{"begin":1375,"end":1376,"name":"PUSH","source":1,"value":"0"},{"begin":1368,"end":1383,"name":"REVERT","source":1},{"begin":1395,"end":1517,"name":"tag","source":1,"value":"17"},{"begin":1395,"end":1517,"name":"JUMPDEST","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1486,"end":1491,"name":"DUP2","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1468,"end":1492,"name":"JUMP","source":1,"value":"[in]"},{"begin":1468,"end":1492,"name":"tag","source":1,"value":"36"},{"begin":1468,"end":1492,"name":"JUMPDEST","source":1},{"begin":1461,"end":1466,"name":"DUP2","source":1},{"begin":1458,"end":1493,"name":"EQ","source":1},{"begin":1448,"end":1450,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPI","source":1},{"begin":1507,"end":1508,"name":"PUSH","source":1,"value":"0"},{"begin":1504,"end":1505,"name":"DUP1","source":1},{"begin":1497,"end":1509,"name":"REVERT","source":1},{"begin":1448,"end":1450,"name":"tag","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPDEST","source":1},{"begin":1438,"end":1517,"name":"POP","source":1},{"begin":1438,"end":1517,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"multiply(uint256)":"c6888fa1"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x64093515f0aec3a3a0b7eac9c2f54014bc21af374f317107f57a1b1f9ee18903\",\"urls\":[\"bzz-raw://4ead303344848f88c9feaaf32ea8cffb05639878f5ec5260611c6775d43cff36\",\"dweb:/ipfs/QmRvLYD1pq872sHHn7hbFnz7ALyVRfN3SAbTyUMmPTrRQs\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "uint256", "name": "a", "type": "uint256" } + ], + "name": "multiply", + "outputs": [ + { "internalType": "uint256", "name": "d", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":112:118 uint d */\n 0x00\n /* \"main.sol\":132:133 7 */\n 0x07\n /* \"main.sol\":128:129 a */\n dup3\n /* \"main.sol\":128:133 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":121:133 return a * 7 */\n swap1\n pop\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1520:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "59:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "69:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "91:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "78:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "78:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "69:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "134:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "107:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "107:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "107:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "37:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "45:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "53:5:1", + "type": "" + } + ], + "src": "7:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "218:196:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "264:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "273:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "276:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "266:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "266:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "266:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "239:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "248:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "235:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "235:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "260:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "231:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "231:32:1" + }, + "nodeType": "YulIf", + "src": "228:2:1" + }, + { + "nodeType": "YulBlock", + "src": "290:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "305:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "319:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "309:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "334:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "369:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "380:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "365:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "365:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "344:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "344:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "334:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "188:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "199:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "211:6:1", + "type": "" + } + ], + "src": "152:262:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "485:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "502:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "525:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "507:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "507:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "495:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "495:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "495:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "473:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "480:3:1", + "type": "" + } + ], + "src": "420:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "642:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "652:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "664:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "675:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "660:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "660:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "652:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "732:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "745:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "756:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "741:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "741:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "688:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "688:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "688:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "614:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "626:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "637:4:1", + "type": "" + } + ], + "src": "544:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "820:300:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "830:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "853:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "835:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "835:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "830:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "864:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "887:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "869:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "869:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "864:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1062:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1064:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1064:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1064:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "974:1:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "967:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "967:9:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "960:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "960:17:1" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "982:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "989:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1057:1:1" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "985:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "985:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "979:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "979:81:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "956:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "956:105:1" + }, + "nodeType": "YulIf", + "src": "953:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "1094:20:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1109:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1112:1:1" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1105:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1105:9:1" + }, + "variableNames": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "1094:7:1" + } + ] + } + ] + }, + "name": "checked_mul_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "803:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "806:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nodeType": "YulTypedName", + "src": "812:7:1", + "type": "" + } + ], + "src": "772:348:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1171:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1181:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1192:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1181:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1153:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1163:7:1", + "type": "" + } + ], + "src": "1126:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1237:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1254:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1257:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1247:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1247:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1247:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1351:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1354:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1344:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1344:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1344:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1375:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1378:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1368:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1368:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1368:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1209:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1438:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1495:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1504:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1507:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1497:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1497:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1497:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1461:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1486:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1468:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1468:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1458:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1458:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1451:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1451:43:1" + }, + "nodeType": "YulIf", + "src": "1448:2:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1431:5:1", + "type": "" + } + ], + "src": "1395:122:1" + } + ] + }, + "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;112:6;132:1;128;:5;;;;:::i;:::-;121:12;;66:69;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "89200", + "executionCost": "135", + "totalCost": "89335" + }, + "external": { "multiply(uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, + { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, + { "begin": 43, "end": 136, "name": "tag", "source": 0, "value": "1" }, + { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, + { "begin": 43, "end": 136, "name": "POP", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "CODECOPY", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", + ".code": [ + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, + { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, + { "begin": 43, "end": 136, "name": "POP", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 43, "end": 136, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 43, "end": 136, "name": "LT", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 43, "end": 136, "name": "SHR", "source": 0 }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "C6888FA1" + }, + { "begin": 43, "end": 136, "name": "EQ", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, + { + "begin": 43, + "end": 136, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 66, + "end": 135, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 135, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, + { "begin": 66, "end": 135, "name": "DUP2", "source": 0 }, + { "begin": 66, "end": 135, "name": "ADD", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 66, + "end": 135, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 66, + "end": 135, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 66, + "end": 135, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 66, + "end": 135, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 66, + "end": 135, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 66, + "end": 135, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, + { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, + { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, + { "begin": 66, "end": 135, "name": "RETURN", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, + { + "begin": 112, + "end": 118, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 132, + "end": 133, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 128, "end": 129, "name": "DUP3", "source": 0 }, + { + "begin": 128, + "end": 133, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 128, "end": 133, "name": "SWAP2", "source": 0 }, + { "begin": 128, "end": 133, "name": "SWAP1", "source": 0 }, + { + "begin": 128, + "end": 133, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 128, + "end": 133, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 128, + "end": 133, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 128, "end": 133, "name": "JUMPDEST", "source": 0 }, + { "begin": 121, "end": 133, "name": "SWAP1", "source": 0 }, + { "begin": 121, "end": 133, "name": "POP", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, + { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, + { "begin": 66, "end": 135, "name": "POP", "source": 0 }, + { + "begin": 66, + "end": 135, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 414, + "name": "tag", + "source": 1, + "value": "6" + }, + { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 414, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 260, + "end": 262, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, + { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, + { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, + { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, + { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { + "begin": 276, + "end": 277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, + { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { + "begin": 319, + "end": 320, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, + { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, + { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, + { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { + "begin": 344, + "end": 397, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 344, + "end": 397, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 397, "name": "POP", "source": 1 }, + { "begin": 290, "end": 407, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { + "begin": 218, + "end": 414, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 420, + "end": 538, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 507, + "end": 531, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 507, + "end": 531, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, + { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, + { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { + "begin": 485, + "end": 538, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 544, + "end": 766, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, + { + "begin": 544, + "end": 766, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 675, + "end": 677, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, + { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, + { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, + { "begin": 652, "end": 678, "name": "POP", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 756, + "end": 757, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, + { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, + { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 688, + "end": 759, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 688, + "end": 759, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { + "begin": 642, + "end": 766, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 772, + "end": 1120, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 772, "end": 1120, "name": "JUMPDEST", "source": 1 }, + { + "begin": 772, + "end": 1120, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 835, + "end": 855, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { "begin": 853, "end": 854, "name": "DUP3", "source": 1 }, + { + "begin": 835, + "end": 855, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 835, + "end": 855, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 835, + "end": 855, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 835, "end": 855, "name": "JUMPDEST", "source": 1 }, + { "begin": 830, "end": 855, "name": "SWAP2", "source": 1 }, + { "begin": 830, "end": 855, "name": "POP", "source": 1 }, + { + "begin": 869, + "end": 889, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { "begin": 887, "end": 888, "name": "DUP4", "source": 1 }, + { + "begin": 869, + "end": 889, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 869, + "end": 889, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 869, + "end": 889, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 869, "end": 889, "name": "JUMPDEST", "source": 1 }, + { "begin": 864, "end": 889, "name": "SWAP3", "source": 1 }, + { "begin": 864, "end": 889, "name": "POP", "source": 1 }, + { "begin": 1057, "end": 1058, "name": "DUP2", "source": 1 }, + { + "begin": 989, + "end": 1055, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 985, "end": 1059, "name": "DIV", "source": 1 }, + { "begin": 982, "end": 983, "name": "DUP4", "source": 1 }, + { "begin": 979, "end": 1060, "name": "GT", "source": 1 }, + { "begin": 974, "end": 975, "name": "DUP3", "source": 1 }, + { "begin": 967, "end": 976, "name": "ISZERO", "source": 1 }, + { "begin": 960, "end": 977, "name": "ISZERO", "source": 1 }, + { "begin": 956, "end": 1061, "name": "AND", "source": 1 }, + { "begin": 953, "end": 955, "name": "ISZERO", "source": 1 }, + { + "begin": 953, + "end": 955, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 953, "end": 955, "name": "JUMPI", "source": 1 }, + { + "begin": 1064, + "end": 1082, + "name": "PUSH [tag]", + "source": 1, + "value": "31" + }, + { + "begin": 1064, + "end": 1082, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 1064, + "end": 1082, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1064, + "end": 1082, + "name": "tag", + "source": 1, + "value": "31" + }, + { "begin": 1064, "end": 1082, "name": "JUMPDEST", "source": 1 }, + { + "begin": 953, + "end": 955, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 953, "end": 955, "name": "JUMPDEST", "source": 1 }, + { "begin": 1112, "end": 1113, "name": "DUP3", "source": 1 }, + { "begin": 1109, "end": 1110, "name": "DUP3", "source": 1 }, + { "begin": 1105, "end": 1114, "name": "MUL", "source": 1 }, + { "begin": 1094, "end": 1114, "name": "SWAP1", "source": 1 }, + { "begin": 1094, "end": 1114, "name": "POP", "source": 1 }, + { "begin": 820, "end": 1120, "name": "SWAP3", "source": 1 }, + { "begin": 820, "end": 1120, "name": "SWAP2", "source": 1 }, + { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, + { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, + { + "begin": 820, + "end": 1120, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1126, + "end": 1203, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 1126, "end": 1203, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1126, + "end": 1203, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1192, "end": 1197, "name": "DUP2", "source": 1 }, + { "begin": 1181, "end": 1197, "name": "SWAP1", "source": 1 }, + { "begin": 1181, "end": 1197, "name": "POP", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "SWAP2", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "SWAP1", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "POP", "source": 1 }, + { + "begin": 1171, + "end": 1203, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1209, + "end": 1389, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 1209, "end": 1389, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1257, + "end": 1334, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1254, + "end": 1255, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1247, "end": 1335, "name": "MSTORE", "source": 1 }, + { + "begin": 1354, + "end": 1358, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1351, + "end": 1352, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1344, "end": 1359, "name": "MSTORE", "source": 1 }, + { + "begin": 1378, + "end": 1382, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1375, + "end": 1376, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1368, "end": 1383, "name": "REVERT", "source": 1 }, + { + "begin": 1395, + "end": 1517, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 1395, "end": 1517, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1468, + "end": 1492, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 1486, "end": 1491, "name": "DUP2", "source": 1 }, + { + "begin": 1468, + "end": 1492, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 1468, + "end": 1492, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1468, + "end": 1492, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 1468, "end": 1492, "name": "JUMPDEST", "source": 1 }, + { "begin": 1461, "end": 1466, "name": "DUP2", "source": 1 }, + { "begin": 1458, "end": 1493, "name": "EQ", "source": 1 }, + { + "begin": 1448, + "end": 1450, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { "begin": 1448, "end": 1450, "name": "JUMPI", "source": 1 }, + { + "begin": 1507, + "end": 1508, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1504, "end": 1505, "name": "DUP1", "source": 1 }, + { "begin": 1497, "end": 1509, "name": "REVERT", "source": 1 }, + { + "begin": 1448, + "end": 1450, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 1448, "end": 1450, "name": "JUMPDEST", "source": 1 }, + { "begin": 1438, "end": 1517, "name": "POP", "source": 1 }, + { + "begin": 1438, + "end": 1517, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x64093515f0aec3a3a0b7eac9c2f54014bc21af374f317107f57a1b1f9ee18903\",\"urls\":[\"bzz-raw://4ead303344848f88c9feaaf32ea8cffb05639878f5ec5260611c6775d43cff36\",\"dweb:/ipfs/QmRvLYD1pq872sHHn7hbFnz7ALyVRfN3SAbTyUMmPTrRQs\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}" +} diff --git a/tests/contracts/compiled/TestContractIncr.json b/tests/contracts/compiled/TestContractIncr.json index b1a28735367..d25453d7db1 100644 --- a/tests/contracts/compiled/TestContractIncr.json +++ b/tests/contracts/compiled/TestContractIncr.json @@ -1 +1,1389 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":119:178 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":164:165 0 */\n 0x00\n /* \"main.sol\":156:161 count */\n dup1\n /* \"main.sol\":156:165 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":83:100 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":196:261 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":83:100 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":196:261 function incr() public {... */\n tag_10:\n /* \"main.sol\":247:248 1 */\n 0x01\n /* \"main.sol\":241:246 count */\n sload(0x00)\n /* \"main.sol\":241:248 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":235:240 count */\n 0x00\n /* \"main.sol\":235:248 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":196:261 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ","sourceMap":"45:224:0:-:0;;;119:59;;;;;;;;;;164:1;156:5;:9;;;;45:224;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ","sourceMap":"45:224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:65;;;:::i;:::-;;83:17;;;;:::o;196:65::-;247:1;241:5;;:7;;;;:::i;:::-;235:5;:13;;;;196:65::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"73400","executionCost":"5137","totalCost":"78537"},"external":{"count()":"1107","incr()":"infinite"}},"legacyAssembly":{".code":[{"begin":45,"end":269,"name":"PUSH","source":0,"value":"80"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"40"},{"begin":45,"end":269,"name":"MSTORE","source":0},{"begin":119,"end":178,"name":"CALLVALUE","source":0},{"begin":119,"end":178,"name":"DUP1","source":0},{"begin":119,"end":178,"name":"ISZERO","source":0},{"begin":119,"end":178,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":119,"end":178,"name":"JUMPI","source":0},{"begin":119,"end":178,"name":"PUSH","source":0,"value":"0"},{"begin":119,"end":178,"name":"DUP1","source":0},{"begin":119,"end":178,"name":"REVERT","source":0},{"begin":119,"end":178,"name":"tag","source":0,"value":"1"},{"begin":119,"end":178,"name":"JUMPDEST","source":0},{"begin":119,"end":178,"name":"POP","source":0},{"begin":164,"end":165,"name":"PUSH","source":0,"value":"0"},{"begin":156,"end":161,"name":"DUP1","source":0},{"begin":156,"end":165,"name":"DUP2","source":0},{"begin":156,"end":165,"name":"SWAP1","source":0},{"begin":156,"end":165,"name":"SSTORE","source":0},{"begin":156,"end":165,"name":"POP","source":0},{"begin":45,"end":269,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"CODECOPY","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033",".code":[{"begin":45,"end":269,"name":"PUSH","source":0,"value":"80"},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"40"},{"begin":45,"end":269,"name":"MSTORE","source":0},{"begin":45,"end":269,"name":"CALLVALUE","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"ISZERO","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"REVERT","source":0},{"begin":45,"end":269,"name":"tag","source":0,"value":"1"},{"begin":45,"end":269,"name":"JUMPDEST","source":0},{"begin":45,"end":269,"name":"POP","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"4"},{"begin":45,"end":269,"name":"CALLDATASIZE","source":0},{"begin":45,"end":269,"name":"LT","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"CALLDATALOAD","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"E0"},{"begin":45,"end":269,"name":"SHR","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":45,"end":269,"name":"EQ","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"119FBBD4"},{"begin":45,"end":269,"name":"EQ","source":0},{"begin":45,"end":269,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":45,"end":269,"name":"JUMPI","source":0},{"begin":45,"end":269,"name":"tag","source":0,"value":"2"},{"begin":45,"end":269,"name":"JUMPDEST","source":0},{"begin":45,"end":269,"name":"PUSH","source":0,"value":"0"},{"begin":45,"end":269,"name":"DUP1","source":0},{"begin":45,"end":269,"name":"REVERT","source":0},{"begin":83,"end":100,"name":"tag","source":0,"value":"3"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[in]"},{"begin":83,"end":100,"name":"tag","source":0,"value":"5"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"40"},{"begin":83,"end":100,"name":"MLOAD","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":83,"end":100,"name":"SWAP2","source":0},{"begin":83,"end":100,"name":"SWAP1","source":0},{"begin":83,"end":100,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[in]"},{"begin":83,"end":100,"name":"tag","source":0,"value":"7"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"40"},{"begin":83,"end":100,"name":"MLOAD","source":0},{"begin":83,"end":100,"name":"DUP1","source":0},{"begin":83,"end":100,"name":"SWAP2","source":0},{"begin":83,"end":100,"name":"SUB","source":0},{"begin":83,"end":100,"name":"SWAP1","source":0},{"begin":83,"end":100,"name":"RETURN","source":0},{"begin":196,"end":261,"name":"tag","source":0,"value":"4"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":196,"end":261,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":196,"end":261,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":196,"end":261,"name":"JUMP","source":0,"value":"[in]"},{"begin":196,"end":261,"name":"tag","source":0,"value":"9"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":196,"end":261,"name":"STOP","source":0},{"begin":83,"end":100,"name":"tag","source":0,"value":"6"},{"begin":83,"end":100,"name":"JUMPDEST","source":0},{"begin":83,"end":100,"name":"PUSH","source":0,"value":"0"},{"begin":83,"end":100,"name":"SLOAD","source":0},{"begin":83,"end":100,"name":"DUP2","source":0},{"begin":83,"end":100,"name":"JUMP","source":0,"value":"[out]"},{"begin":196,"end":261,"name":"tag","source":0,"value":"10"},{"begin":196,"end":261,"name":"JUMPDEST","source":0},{"begin":247,"end":248,"name":"PUSH","source":0,"value":"1"},{"begin":241,"end":246,"name":"PUSH","source":0,"value":"0"},{"begin":241,"end":246,"name":"SLOAD","source":0},{"begin":241,"end":248,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":241,"end":248,"name":"SWAP2","source":0},{"begin":241,"end":248,"name":"SWAP1","source":0},{"begin":241,"end":248,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":241,"end":248,"name":"JUMP","source":0,"value":"[in]"},{"begin":241,"end":248,"name":"tag","source":0,"value":"12"},{"begin":241,"end":248,"name":"JUMPDEST","source":0},{"begin":235,"end":240,"name":"PUSH","source":0,"value":"0"},{"begin":235,"end":248,"name":"DUP2","source":0},{"begin":235,"end":248,"name":"SWAP1","source":0},{"begin":235,"end":248,"name":"SSTORE","source":0},{"begin":235,"end":248,"name":"POP","source":0},{"begin":196,"end":261,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"15"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"17"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"20"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"13"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"22"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"23"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"25"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"18"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"26"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","incr()":"119fbbd4"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x161594fe2faed3800e9f57432fc82cb10aafdd837124bb96d783ca3b48de7edf\",\"urls\":[\"bzz-raw://4111db064f989ae4503ab09a7ffde6486119c3738c72a111b12aa017c86681e8\",\"dweb:/ipfs/QmTGeM7tpCF5ebm1YDzimQqaVm2F3JzkLLJZMXFL2Vf4KV\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:TestContractIncr","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":119:178 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":164:165 0 */\n 0x00\n /* \"main.sol\":156:161 count */\n dup1\n /* \"main.sol\":156:165 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":83:100 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":196:261 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":83:100 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":196:261 function incr() public {... */\n tag_10:\n /* \"main.sol\":247:248 1 */\n 0x01\n /* \"main.sol\":241:246 count */\n sload(0x00)\n /* \"main.sol\":241:248 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":235:240 count */\n 0x00\n /* \"main.sol\":235:248 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":196:261 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", + "sourceMap": "45:224:0:-:0;;;119:59;;;;;;;;;;164:1;156:5;:9;;;;45:224;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:936:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "403:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "413:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "436:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "418:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "418:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "413:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "447:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "470:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "452:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "452:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "447:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "610:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "612:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "612:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "612:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "531:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "538:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "606:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "534:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "534:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "528:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "528:81:1" + }, + "nodeType": "YulIf", + "src": "525:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "642:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "653:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "656:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "649:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "642:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "390:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "393:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "399:3:1", + "type": "" + } + ], + "src": "359:305:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "715:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "725:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "736:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "725:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "697:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "707:7:1", + "type": "" + } + ], + "src": "670:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "781:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "801:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "791:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "791:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "791:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "895:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "898:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "888:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "888:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "888:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "919:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "912:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "912:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "912:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "753:180:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", + "sourceMap": "45:224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:65;;;:::i;:::-;;83:17;;;;:::o;196:65::-;247:1;241:5;;:7;;;;:::i;:::-;235:5;:13;;;;196:65::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "73400", + "executionCost": "5137", + "totalCost": "78537" + }, + "external": { "count()": "1107", "incr()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, + { "begin": 119, "end": 178, "name": "CALLVALUE", "source": 0 }, + { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 178, "name": "ISZERO", "source": 0 }, + { + "begin": 119, + "end": 178, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 119, "end": 178, "name": "JUMPI", "source": 0 }, + { + "begin": 119, + "end": 178, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 178, "name": "REVERT", "source": 0 }, + { + "begin": 119, + "end": 178, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 119, "end": 178, "name": "JUMPDEST", "source": 0 }, + { "begin": 119, "end": 178, "name": "POP", "source": 0 }, + { + "begin": 164, + "end": 165, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 156, "end": 161, "name": "DUP1", "source": 0 }, + { "begin": 156, "end": 165, "name": "DUP2", "source": 0 }, + { "begin": 156, "end": 165, "name": "SWAP1", "source": 0 }, + { "begin": 156, "end": 165, "name": "SSTORE", "source": 0 }, + { "begin": 156, "end": 165, "name": "POP", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 45, "end": 269, "name": "CODECOPY", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 45, "end": 269, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", + ".code": [ + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, + { "begin": 45, "end": 269, "name": "CALLVALUE", "source": 0 }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { "begin": 45, "end": 269, "name": "ISZERO", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, + { "begin": 45, "end": 269, "name": "POP", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 45, "end": 269, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 45, "end": 269, "name": "LT", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 45, "end": 269, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 45, "end": 269, "name": "SHR", "source": 0 }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "119FBBD4" + }, + { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, + { + "begin": 45, + "end": 269, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, + { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 83, + "end": 100, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 83, + "end": 100, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 83, + "end": 100, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, + { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 83, + "end": 100, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 83, + "end": 100, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, + { "begin": 83, "end": 100, "name": "DUP1", "source": 0 }, + { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, + { "begin": 83, "end": 100, "name": "SUB", "source": 0 }, + { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, + { "begin": 83, "end": 100, "name": "RETURN", "source": 0 }, + { + "begin": 196, + "end": 261, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, + { + "begin": 196, + "end": 261, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 196, + "end": 261, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 196, + "end": 261, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 196, + "end": 261, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, + { "begin": 196, "end": 261, "name": "STOP", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 83, "end": 100, "name": "SLOAD", "source": 0 }, + { "begin": 83, "end": 100, "name": "DUP2", "source": 0 }, + { + "begin": 83, + "end": 100, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 196, + "end": 261, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, + { + "begin": 247, + "end": 248, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 241, + "end": 246, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 241, "end": 246, "name": "SLOAD", "source": 0 }, + { + "begin": 241, + "end": 248, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 241, "end": 248, "name": "SWAP2", "source": 0 }, + { "begin": 241, "end": 248, "name": "SWAP1", "source": 0 }, + { + "begin": 241, + "end": 248, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 241, + "end": 248, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 241, + "end": 248, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 241, "end": 248, "name": "JUMPDEST", "source": 0 }, + { + "begin": 235, + "end": 240, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 235, "end": 248, "name": "DUP2", "source": 0 }, + { "begin": 235, "end": 248, "name": "SWAP1", "source": 0 }, + { "begin": 235, "end": 248, "name": "SSTORE", "source": 0 }, + { "begin": 235, "end": 248, "name": "POP", "source": 0 }, + { + "begin": 196, + "end": 261, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 664, + "name": "tag", + "source": 1, + "value": "13" + }, + { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 664, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 418, + "end": 438, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 418, + "end": 438, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, + { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, + { "begin": 413, "end": 438, "name": "POP", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 452, + "end": 472, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 452, + "end": 472, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, + { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, + { "begin": 447, "end": 472, "name": "POP", "source": 1 }, + { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, + { + "begin": 538, + "end": 604, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, + { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, + { "begin": 528, "end": 609, "name": "GT", "source": 1 }, + { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 612, + "end": 630, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 612, + "end": 630, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, + { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, + { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, + { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, + { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, + { "begin": 642, "end": 658, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { + "begin": 403, + "end": 664, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 670, + "end": 747, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, + { + "begin": 670, + "end": 747, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, + { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, + { "begin": 725, "end": 741, "name": "POP", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, + { "begin": 715, "end": 747, "name": "POP", "source": 1 }, + { + "begin": 715, + "end": 747, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 753, + "end": 933, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, + { + "begin": 801, + "end": 878, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 798, + "end": 799, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, + { + "begin": 898, + "end": 902, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 895, + "end": 896, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, + { + "begin": 922, + "end": 926, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 919, + "end": 920, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } + ] + } + } + }, + "methodIdentifiers": { "count()": "06661abd", "incr()": "119fbbd4" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x161594fe2faed3800e9f57432fc82cb10aafdd837124bb96d783ca3b48de7edf\",\"urls\":[\"bzz-raw://4111db064f989ae4503ab09a7ffde6486119c3738c72a111b12aa017c86681e8\",\"dweb:/ipfs/QmTGeM7tpCF5ebm1YDzimQqaVm2F3JzkLLJZMXFL2Vf4KV\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:TestContractIncr", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }" +} diff --git a/tests/package.json b/tests/package.json index 5a048a06c58..527f66a9d60 100644 --- a/tests/package.json +++ b/tests/package.json @@ -30,7 +30,7 @@ }, "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/test-*.ts'", - "build-contracts": "TS_NODE_TRANSPILE_ONLY=true ts-node ./pre-build-contracts.ts", + "pre-build-contracts": "TS_NODE_TRANSPILE_ONLY=true ts-node ./pre-build-contracts.ts && npx prettier -w ./contracts/compiled/*.json", "test": "TS_NODE_TRANSPILE_ONLY=true mocha --parallel -r ts-node/register 'tests/**/test-*.ts'", "watch": "npm-watch", "build": "cargo build --release", diff --git a/tests/pre-build-contracts.ts b/tests/pre-build-contracts.ts index 1b3357a049e..5613940794d 100644 --- a/tests/pre-build-contracts.ts +++ b/tests/pre-build-contracts.ts @@ -36,18 +36,14 @@ function compileSolidity(contractContent: string, contractName: string = "Test") async function compile(name: string): Promise { if (!contractSources[name]) throw new Error(`Contract name (${name}) doesn't exist in test suite`); - try { - return JSON.parse(await (await fs.readFile(`./contracts/compiled/${name}.json`)).toString()); - } catch (e) { - const contractCompiled = compileSolidity(contractSources[name], name); - let compiled = JSON.stringify(contractCompiled); - await fs.mkdir(`contracts/compiled`, { recursive: true }); - await fs.writeFile(`./contracts/compiled/${name}.json`, compiled, { - flag: "w", - }); - console.log("New compiled contract file has been saved!"); - return contractCompiled; - } + const contractCompiled = compileSolidity(contractSources[name], name); + let compiled = JSON.stringify(contractCompiled); + await fs.mkdir(`contracts/compiled`, { recursive: true }); + await fs.writeFile(`./contracts/compiled/${name}.json`, compiled, { + flag: "w", + }); + console.log("New compiled contract file has been saved!"); + return contractCompiled; } const main = async () => { From fc2a7af88aa01ac9975e7408a4779e09faf8d7a1 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 19 Apr 2021 04:55:40 +0000 Subject: [PATCH 46/49] Refactor tests --- .../constants => contracts/abis}/Callee.json | 0 .../constants => contracts/abis}/Caller.json | 0 .../abis}/Incrementer.json | 0 .../abis}/blockscout_tracer.min.json | 0 tests/contracts/compiled/Bn128Addition.json | 1 + tests/contracts/compiled/Bn128Multiply.json | 1 + tests/contracts/compiled/Bn128Pairing.json | 1 + tests/contracts/compiled/FailContract.json | 1 + .../compiled/FiniteLoopContract.json | 2129 +---------------- tests/contracts/compiled/HashRipmd160.json | 1 + .../contracts/compiled/InfiniteContract.json | 773 +----- .../compiled/InfiniteContractVar.json | 1424 +---------- tests/contracts/compiled/ModularCheck.json | 1 + .../compiled/SingleEventContract.json | 1 + tests/contracts/compiled/TestContract.json | 1953 +-------------- .../contracts/compiled/TestContractIncr.json | 1390 +---------- tests/contracts/compiled/TraceFilter.json | 1 + tests/contracts/sources.ts | 242 +- tests/pre-build-contracts.ts | 7 +- .../tests/constants/IncrementerWithEvent.json | 44 - tests/tests/constants/TraceFilter.json | 64 - tests/tests/constants/TraceFilter.sol | 25 - tests/tests/constants/constants.ts | 17 - tests/tests/constants/contractConstants.ts | 193 -- tests/tests/constants/index.ts | 38 - tests/tests/constants/transactionConfigs.ts | 32 - tests/tests/test-balance-extrinsics.ts | 56 + tests/tests/test-balance-genesis.ts | 18 + tests/tests/test-balance-transfer.ts | 48 + tests/tests/test-balance.ts | 112 - tests/tests/test-block-1.ts | 61 + tests/tests/test-block-2.ts | 20 + tests/tests/test-block-gas.ts | 34 + tests/tests/test-block-genesis.ts | 55 + tests/tests/test-block.ts | 207 -- tests/tests/test-contract-creation.ts | 41 + tests/tests/test-contract-error.ts | 44 + tests/tests/test-contract-incr-loop.ts | 30 + tests/tests/test-contract-loop-cost.ts | 38 + tests/tests/test-contract-loops.ts | 108 - tests/tests/test-contract-methods.ts | 84 +- tests/tests/test-contract.ts | 61 - tests/tests/test-deprecated.ts | 9 +- tests/tests/test-ethers.ts | 70 +- tests/tests/test-event.ts | 20 + tests/tests/test-existential-deposit.ts | 36 +- tests/tests/test-filter-api-creation.ts | 58 + tests/tests/test-filter-api-pending.ts | 12 + tests/tests/test-filter-api-polling.ts | 83 + tests/tests/test-filter-api.ts | 332 --- tests/tests/test-fork-chain.ts | 63 +- tests/tests/test-gas-contract-creation.ts | 17 + tests/tests/test-gas-estimation.ts | 55 + tests/tests/test-gas.ts | 98 - tests/tests/test-nonce.ts | 120 +- tests/tests/test-pending-pool.ts | 57 +- tests/tests/test-polkadot-api.ts | 61 +- tests/tests/test-precompile-bn128add.ts | 17 + tests/tests/test-precompile-bn128mul.ts | 17 + tests/tests/test-precompile-bn128pairing.ts | 17 + tests/tests/test-precompile-modexp.ts | 16 + tests/tests/test-precompile-ripemd160.ts | 38 + tests/tests/test-precompiles.ts | 356 --- tests/tests/test-receipt-revert.ts | 24 + tests/tests/test-receipt.ts | 62 +- tests/tests/test-revert-receipt.ts | 126 - tests/tests/test-rpc-constants.ts | 6 +- tests/tests/test-stake.ts | 19 +- tests/tests/test-subscription-logs.ts | 224 ++ tests/tests/test-subscription-past-events.ts | 208 +- tests/tests/test-subscription.ts | 403 +--- tests/tests/test-trace-filter.ts | 188 +- tests/tests/test-trace.ts | 67 +- tests/tests/test-txpool-limits.ts | 19 + tests/tests/test-txpool-pending.ts | 86 + tests/tests/test-txpool-reset.ts | 31 + tests/tests/test-txpool.ts | 114 - tests/tests/test-version.ts | 9 +- tests/tests/test-web3api.ts | 13 +- tests/tests/util/fillBlockWithTx.ts | 190 -- tests/tests/util/findAvailablePorts.ts | 28 - tests/tests/util/index.ts | 5 - tests/tests/util/polkadotApiRequests.ts | 24 - tests/tests/util/testWithFrontier.ts | 126 - tests/tests/util/testWithMoonbeam.ts | 173 -- tests/tests/util/web3Requests.ts | 44 - tests/util/block.ts | 28 + tests/util/constants.ts | 33 + tests/{tests => }/util/contracts.ts | 202 +- tests/util/dev-node.ts | 125 + tests/util/logging.ts | 5 + tests/util/providers.ts | 84 + tests/util/setup-dev-tests.ts | 114 + tests/util/transactions.ts | 122 + 94 files changed, 2566 insertions(+), 11244 deletions(-) rename tests/{tests/constants => contracts/abis}/Callee.json (100%) rename tests/{tests/constants => contracts/abis}/Caller.json (100%) rename tests/{tests/constants => contracts/abis}/Incrementer.json (100%) rename tests/{tests/constants => contracts/abis}/blockscout_tracer.min.json (100%) create mode 100644 tests/contracts/compiled/Bn128Addition.json create mode 100644 tests/contracts/compiled/Bn128Multiply.json create mode 100644 tests/contracts/compiled/Bn128Pairing.json create mode 100644 tests/contracts/compiled/FailContract.json create mode 100644 tests/contracts/compiled/HashRipmd160.json create mode 100644 tests/contracts/compiled/ModularCheck.json create mode 100644 tests/contracts/compiled/SingleEventContract.json create mode 100644 tests/contracts/compiled/TraceFilter.json delete mode 100644 tests/tests/constants/IncrementerWithEvent.json delete mode 100644 tests/tests/constants/TraceFilter.json delete mode 100644 tests/tests/constants/TraceFilter.sol delete mode 100644 tests/tests/constants/constants.ts delete mode 100644 tests/tests/constants/contractConstants.ts delete mode 100644 tests/tests/constants/index.ts delete mode 100644 tests/tests/constants/transactionConfigs.ts create mode 100644 tests/tests/test-balance-extrinsics.ts create mode 100644 tests/tests/test-balance-genesis.ts create mode 100644 tests/tests/test-balance-transfer.ts delete mode 100644 tests/tests/test-balance.ts create mode 100644 tests/tests/test-block-1.ts create mode 100644 tests/tests/test-block-2.ts create mode 100644 tests/tests/test-block-gas.ts create mode 100644 tests/tests/test-block-genesis.ts delete mode 100644 tests/tests/test-block.ts create mode 100644 tests/tests/test-contract-creation.ts create mode 100644 tests/tests/test-contract-error.ts create mode 100644 tests/tests/test-contract-incr-loop.ts create mode 100644 tests/tests/test-contract-loop-cost.ts delete mode 100644 tests/tests/test-contract-loops.ts delete mode 100644 tests/tests/test-contract.ts create mode 100644 tests/tests/test-event.ts create mode 100644 tests/tests/test-filter-api-creation.ts create mode 100644 tests/tests/test-filter-api-pending.ts create mode 100644 tests/tests/test-filter-api-polling.ts delete mode 100644 tests/tests/test-filter-api.ts create mode 100644 tests/tests/test-gas-contract-creation.ts create mode 100644 tests/tests/test-gas-estimation.ts delete mode 100644 tests/tests/test-gas.ts create mode 100644 tests/tests/test-precompile-bn128add.ts create mode 100644 tests/tests/test-precompile-bn128mul.ts create mode 100644 tests/tests/test-precompile-bn128pairing.ts create mode 100644 tests/tests/test-precompile-modexp.ts create mode 100644 tests/tests/test-precompile-ripemd160.ts delete mode 100644 tests/tests/test-precompiles.ts create mode 100644 tests/tests/test-receipt-revert.ts delete mode 100644 tests/tests/test-revert-receipt.ts create mode 100644 tests/tests/test-subscription-logs.ts create mode 100644 tests/tests/test-txpool-limits.ts create mode 100644 tests/tests/test-txpool-pending.ts create mode 100644 tests/tests/test-txpool-reset.ts delete mode 100644 tests/tests/test-txpool.ts delete mode 100644 tests/tests/util/fillBlockWithTx.ts delete mode 100644 tests/tests/util/findAvailablePorts.ts delete mode 100644 tests/tests/util/index.ts delete mode 100644 tests/tests/util/polkadotApiRequests.ts delete mode 100644 tests/tests/util/testWithFrontier.ts delete mode 100644 tests/tests/util/testWithMoonbeam.ts delete mode 100644 tests/tests/util/web3Requests.ts create mode 100644 tests/util/block.ts create mode 100644 tests/util/constants.ts rename tests/{tests => }/util/contracts.ts (52%) create mode 100644 tests/util/dev-node.ts create mode 100644 tests/util/logging.ts create mode 100644 tests/util/providers.ts create mode 100644 tests/util/setup-dev-tests.ts create mode 100644 tests/util/transactions.ts diff --git a/tests/tests/constants/Callee.json b/tests/contracts/abis/Callee.json similarity index 100% rename from tests/tests/constants/Callee.json rename to tests/contracts/abis/Callee.json diff --git a/tests/tests/constants/Caller.json b/tests/contracts/abis/Caller.json similarity index 100% rename from tests/tests/constants/Caller.json rename to tests/contracts/abis/Caller.json diff --git a/tests/tests/constants/Incrementer.json b/tests/contracts/abis/Incrementer.json similarity index 100% rename from tests/tests/constants/Incrementer.json rename to tests/contracts/abis/Incrementer.json diff --git a/tests/tests/constants/blockscout_tracer.min.json b/tests/contracts/abis/blockscout_tracer.min.json similarity index 100% rename from tests/tests/constants/blockscout_tracer.min.json rename to tests/contracts/abis/blockscout_tracer.min.json diff --git a/tests/contracts/compiled/Bn128Addition.json b/tests/contracts/compiled/Bn128Addition.json new file mode 100644 index 00000000000..6952bfc6b6b --- /dev/null +++ b/tests/contracts/compiled/Bn128Addition.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1320 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[4] memory input */\n dup1\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":164:230 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703 */\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":248:314 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915 */\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":332:398 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9 */\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":416:482 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 */\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":510:534 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":915:917 64 */\n 0x40\n /* \"main.sol\":907:913 result */\n dup2\n /* \"main.sol\":902:905 128 */\n 0x80\n /* \"main.sol\":895:900 input */\n dup5\n /* \"main.sol\":892:893 0 */\n 0x00\n /* \"main.sol\":886:890 0x06 */\n 0x06\n /* \"main.sol\":882:883 0 */\n 0x00\n /* \"main.sol\":878:884 not(0) */\n not\n /* \"main.sol\":873:918 call(not(0), 0x06, 0, input, 128, result, 64) */\n call\n /* \"main.sol\":862:918 success := call(not(0), 0x06, 0, input, 128, result, 64) */\n swap3\n pop\n /* \"main.sol\":953:960 success */\n dup3\n /* \"main.sol\":945:995 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1063:1129 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7 */\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7\n /* \"main.sol\":1034:1040 result */\n dup2\n /* \"main.sol\":1041:1042 0 */\n 0x00\n /* \"main.sol\":1034:1043 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1034:1129 result[0] ==... */\n eq\n /* \"main.sol\":1009:1152 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1220:1286 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204 */\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204\n /* \"main.sol\":1191:1197 result */\n dup2\n /* \"main.sol\":1198:1199 1 */\n 0x01\n /* \"main.sol\":1191:1200 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1191:1286 result[1] ==... */\n eq\n /* \"main.sol\":1166:1309 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1320 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2120:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:220:1","statements":[{"nodeType":"YulAssignment","src":"163:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:2:1","type":"","value":"30"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"335:3:1"}],"functionName":{"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulIdentifier","src":"246:88:1"},"nodeType":"YulFunctionCall","src":"246:93:1"},"nodeType":"YulExpressionStatement","src":"246:93:1"},{"nodeType":"YulAssignment","src":"348:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"359:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"355:3:1"},"nodeType":"YulFunctionCall","src":"355:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"348:3:1"}]}]},"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:366:1"},{"body":{"nodeType":"YulBlock","src":"525:219:1","statements":[{"nodeType":"YulAssignment","src":"535:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"601:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"606:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"542:58:1"},"nodeType":"YulFunctionCall","src":"542:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"535:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"513:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"521:3:1","type":""}],"src":"379:365:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:74:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:32:1","type":"","value":"elliptic curve addition failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:56:1"},"nodeType":"YulExpressionStatement","src":"1892:56:1"}]},"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:180:1"},{"body":{"nodeType":"YulBlock","src":"2067:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2089:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2097:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:1"},"nodeType":"YulFunctionCall","src":"2085:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2101:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2078:6:1"},"nodeType":"YulFunctionCall","src":"2078:32:1"},"nodeType":"YulExpressionStatement","src":"2078:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2059:6:1","type":""}],"src":"1961:156:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0xBF PUSH2 0x257 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x10F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x106 SWAP1 PUSH2 0x2BF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x16A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x1AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A6 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x20A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x246 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x286 PUSH1 0x1E DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x291 DUP3 PUSH2 0x310 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A9 PUSH1 0x6 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x2B4 DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D8 DUP2 PUSH2 0x279 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2F8 DUP2 PUSH2 0x29C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x370 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1292:0:-:0;;;66:1254;;;;;;;;;;94:12;120:23;:376;;;;;;;;164:66;120:376;;;;248:66;120:376;;;;332:66;120:376;;;;416:66;120:376;;;;;510:24;;:::i;:::-;915:2;907:6;902:3;895:5;892:1;886:4;882:1;878:6;873:45;862:56;;953:7;945:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1063:66;1034:6;1041:1;1034:9;;;;;;;;;;;;;;;;;;;:95;1009:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1220:66;1191:6;1198:1;1191:9;;;;;;;;;;;;;;;;;;;:95;1166:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1254;;;34:1292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1292:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1292:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":66,"end":1320,"name":"CALLVALUE","source":0},{"begin":66,"end":1320,"name":"DUP1","source":0},{"begin":66,"end":1320,"name":"ISZERO","source":0},{"begin":66,"end":1320,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1320,"name":"JUMPI","source":0},{"begin":66,"end":1320,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1320,"name":"DUP1","source":0},{"begin":66,"end":1320,"name":"REVERT","source":0},{"begin":66,"end":1320,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1320,"name":"JUMPDEST","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":94,"end":106,"name":"PUSH","source":0,"value":"0"},{"begin":120,"end":143,"name":"DUP1","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":496,"name":"MLOAD","source":0},{"begin":120,"end":496,"name":"DUP1","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"80"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"DUP1","source":0},{"begin":164,"end":230,"name":"PUSH","source":0,"value":"2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":248,"end":314,"name":"PUSH","source":0,"value":"301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":332,"end":398,"name":"PUSH","source":0,"value":"18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":416,"end":482,"name":"PUSH","source":0,"value":"63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"POP","source":0},{"begin":120,"end":496,"name":"SWAP1","source":0},{"begin":120,"end":496,"name":"POP","source":0},{"begin":510,"end":534,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":510,"end":534,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":510,"end":534,"name":"JUMP","source":0,"value":"[in]"},{"begin":510,"end":534,"name":"tag","source":0,"value":"4"},{"begin":510,"end":534,"name":"JUMPDEST","source":0},{"begin":915,"end":917,"name":"PUSH","source":0,"value":"40"},{"begin":907,"end":913,"name":"DUP2","source":0},{"begin":902,"end":905,"name":"PUSH","source":0,"value":"80"},{"begin":895,"end":900,"name":"DUP5","source":0},{"begin":892,"end":893,"name":"PUSH","source":0,"value":"0"},{"begin":886,"end":890,"name":"PUSH","source":0,"value":"6"},{"begin":882,"end":883,"name":"PUSH","source":0,"value":"0"},{"begin":878,"end":884,"name":"NOT","source":0},{"begin":873,"end":918,"name":"CALL","source":0},{"begin":862,"end":918,"name":"SWAP3","source":0},{"begin":862,"end":918,"name":"POP","source":0},{"begin":953,"end":960,"name":"DUP3","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":945,"end":995,"name":"JUMPI","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"40"},{"begin":945,"end":995,"name":"MLOAD","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":945,"end":995,"name":"DUP2","source":0},{"begin":945,"end":995,"name":"MSTORE","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"4"},{"begin":945,"end":995,"name":"ADD","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":945,"end":995,"name":"SWAP1","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":945,"end":995,"name":"JUMP","source":0,"value":"[in]"},{"begin":945,"end":995,"name":"tag","source":0,"value":"7"},{"begin":945,"end":995,"name":"JUMPDEST","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"40"},{"begin":945,"end":995,"name":"MLOAD","source":0},{"begin":945,"end":995,"name":"DUP1","source":0},{"begin":945,"end":995,"name":"SWAP2","source":0},{"begin":945,"end":995,"name":"SUB","source":0},{"begin":945,"end":995,"name":"SWAP1","source":0},{"begin":945,"end":995,"name":"REVERT","source":0},{"begin":945,"end":995,"name":"tag","source":0,"value":"6"},{"begin":945,"end":995,"name":"JUMPDEST","source":0},{"begin":1063,"end":1129,"name":"PUSH","source":0,"value":"2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7"},{"begin":1034,"end":1040,"name":"DUP2","source":0},{"begin":1041,"end":1042,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"2"},{"begin":1034,"end":1043,"name":"DUP2","source":0},{"begin":1034,"end":1043,"name":"LT","source":0},{"begin":1034,"end":1043,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":1034,"end":1043,"name":"JUMPI","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"MSTORE","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"32"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"4"},{"begin":1034,"end":1043,"name":"MSTORE","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"24"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"REVERT","source":0},{"begin":1034,"end":1043,"name":"tag","source":0,"value":"9"},{"begin":1034,"end":1043,"name":"JUMPDEST","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"20"},{"begin":1034,"end":1043,"name":"MUL","source":0},{"begin":1034,"end":1043,"name":"ADD","source":0},{"begin":1034,"end":1043,"name":"MLOAD","source":0},{"begin":1034,"end":1129,"name":"EQ","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":1009,"end":1152,"name":"JUMPI","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"40"},{"begin":1009,"end":1152,"name":"MLOAD","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1009,"end":1152,"name":"DUP2","source":0},{"begin":1009,"end":1152,"name":"MSTORE","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"4"},{"begin":1009,"end":1152,"name":"ADD","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1009,"end":1152,"name":"SWAP1","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1009,"end":1152,"name":"JUMP","source":0,"value":"[in]"},{"begin":1009,"end":1152,"name":"tag","source":0,"value":"11"},{"begin":1009,"end":1152,"name":"JUMPDEST","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"40"},{"begin":1009,"end":1152,"name":"MLOAD","source":0},{"begin":1009,"end":1152,"name":"DUP1","source":0},{"begin":1009,"end":1152,"name":"SWAP2","source":0},{"begin":1009,"end":1152,"name":"SUB","source":0},{"begin":1009,"end":1152,"name":"SWAP1","source":0},{"begin":1009,"end":1152,"name":"REVERT","source":0},{"begin":1009,"end":1152,"name":"tag","source":0,"value":"10"},{"begin":1009,"end":1152,"name":"JUMPDEST","source":0},{"begin":1220,"end":1286,"name":"PUSH","source":0,"value":"21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204"},{"begin":1191,"end":1197,"name":"DUP2","source":0},{"begin":1198,"end":1199,"name":"PUSH","source":0,"value":"1"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"2"},{"begin":1191,"end":1200,"name":"DUP2","source":0},{"begin":1191,"end":1200,"name":"LT","source":0},{"begin":1191,"end":1200,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":1191,"end":1200,"name":"JUMPI","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"0"},{"begin":1191,"end":1200,"name":"MSTORE","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"32"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"4"},{"begin":1191,"end":1200,"name":"MSTORE","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"24"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"0"},{"begin":1191,"end":1200,"name":"REVERT","source":0},{"begin":1191,"end":1200,"name":"tag","source":0,"value":"13"},{"begin":1191,"end":1200,"name":"JUMPDEST","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"20"},{"begin":1191,"end":1200,"name":"MUL","source":0},{"begin":1191,"end":1200,"name":"ADD","source":0},{"begin":1191,"end":1200,"name":"MLOAD","source":0},{"begin":1191,"end":1286,"name":"EQ","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":1166,"end":1309,"name":"JUMPI","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"40"},{"begin":1166,"end":1309,"name":"MLOAD","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1166,"end":1309,"name":"DUP2","source":0},{"begin":1166,"end":1309,"name":"MSTORE","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"4"},{"begin":1166,"end":1309,"name":"ADD","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":1166,"end":1309,"name":"SWAP1","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1166,"end":1309,"name":"JUMP","source":0,"value":"[in]"},{"begin":1166,"end":1309,"name":"tag","source":0,"value":"15"},{"begin":1166,"end":1309,"name":"JUMPDEST","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"40"},{"begin":1166,"end":1309,"name":"MLOAD","source":0},{"begin":1166,"end":1309,"name":"DUP1","source":0},{"begin":1166,"end":1309,"name":"SWAP2","source":0},{"begin":1166,"end":1309,"name":"SUB","source":0},{"begin":1166,"end":1309,"name":"SWAP1","source":0},{"begin":1166,"end":1309,"name":"REVERT","source":0},{"begin":1166,"end":1309,"name":"tag","source":0,"value":"14"},{"begin":1166,"end":1309,"name":"JUMPDEST","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":34,"end":1326,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":34,"end":1326,"name":"JUMP","source":0},{"begin":34,"end":1326,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1326,"name":"JUMPDEST","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MLOAD","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"ADD","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"2"},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1326,"name":"DUP3","source":0},{"begin":34,"end":1326,"name":"MUL","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1326,"name":"DUP4","source":0},{"begin":34,"end":1326,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"DUP3","source":0},{"begin":34,"end":1326,"name":"ADD","source":0},{"begin":34,"end":1326,"name":"SWAP2","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":373,"name":"tag","source":1,"value":"18"},{"begin":7,"end":373,"name":"JUMPDEST","source":1},{"begin":7,"end":373,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":234,"end":236,"name":"PUSH","source":1,"value":"1E"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":170,"end":237,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":237,"name":"tag","source":1,"value":"20"},{"begin":170,"end":237,"name":"JUMPDEST","source":1},{"begin":163,"end":237,"name":"SWAP2","source":1},{"begin":163,"end":237,"name":"POP","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":335,"end":338,"name":"DUP3","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":246,"end":339,"name":"JUMP","source":1,"value":"[in]"},{"begin":246,"end":339,"name":"tag","source":1,"value":"22"},{"begin":246,"end":339,"name":"JUMPDEST","source":1},{"begin":364,"end":366,"name":"PUSH","source":1,"value":"20"},{"begin":359,"end":362,"name":"DUP3","source":1},{"begin":355,"end":367,"name":"ADD","source":1},{"begin":348,"end":367,"name":"SWAP1","source":1},{"begin":348,"end":367,"name":"POP","source":1},{"begin":153,"end":373,"name":"SWAP2","source":1},{"begin":153,"end":373,"name":"SWAP1","source":1},{"begin":153,"end":373,"name":"POP","source":1},{"begin":153,"end":373,"name":"JUMP","source":1,"value":"[out]"},{"begin":379,"end":744,"name":"tag","source":1,"value":"24"},{"begin":379,"end":744,"name":"JUMPDEST","source":1},{"begin":379,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":606,"end":607,"name":"PUSH","source":1,"value":"6"},{"begin":601,"end":604,"name":"DUP4","source":1},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":542,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":542,"end":608,"name":"tag","source":1,"value":"26"},{"begin":542,"end":608,"name":"JUMPDEST","source":1},{"begin":535,"end":608,"name":"SWAP2","source":1},{"begin":535,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"27"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":525,"end":744,"name":"SWAP2","source":1},{"begin":525,"end":744,"name":"SWAP1","source":1},{"begin":525,"end":744,"name":"POP","source":1},{"begin":525,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"8"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"30"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"12"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"32"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"21"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1955,"name":"tag","source":1,"value":"23"},{"begin":1775,"end":1955,"name":"JUMPDEST","source":1},{"begin":1915,"end":1947,"name":"PUSH","source":1,"value":"656C6C6970746963206375727665206164646974696F6E206661696C65640000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1948,"name":"MSTORE","source":1},{"begin":1881,"end":1955,"name":"POP","source":1},{"begin":1881,"end":1955,"name":"JUMP","source":1,"value":"[out]"},{"begin":1961,"end":2117,"name":"tag","source":1,"value":"28"},{"begin":1961,"end":2117,"name":"JUMPDEST","source":1},{"begin":2101,"end":2109,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":2097,"end":2098,"name":"PUSH","source":1,"value":"0"},{"begin":2089,"end":2095,"name":"DUP3","source":1},{"begin":2085,"end":2099,"name":"ADD","source":1},{"begin":2078,"end":2110,"name":"MSTORE","source":1},{"begin":2067,"end":2117,"name":"POP","source":1},{"begin":2067,"end":2117,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1326,"name":"tag","source":0,"value":"16"},{"begin":34,"end":1326,"name":"JUMPDEST","source":0},{"begin":34,"end":1326,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"CODECOPY","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033",".code":[{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Addition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa69c6a43cafc5dee64bc54ce2a53939c8a8e4f352073e190d2d966c2776ce646\",\"urls\":[\"bzz-raw://5349651b4604d8e14aefaefb5c3dd7cc9f18250cc2e405afb196f1d932cfc602\",\"dweb:/ipfs/QmRqKv4ehqib45LwVT7EQZfm6vn7zjk8AwJiSDNL1ubhtb\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Addition{\n constructor() {\n bool success;\n uint256[4] memory input = [\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x06 id of the bn256Add precompile\n // 0 number of ether to transfer\n // 128 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x06, 0, input, 128, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,\n \"failed\");\n require(\n result[1] ==\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,\n \"failed\");\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/Bn128Multiply.json b/tests/contracts/compiled/Bn128Multiply.json new file mode 100644 index 00000000000..f3ff57863ae --- /dev/null +++ b/tests/contracts/compiled/Bn128Multiply.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1223 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[3] memory input */\n dup1\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n mload(0x40)\n dup1\n 0x60\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":160:226 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":240:306 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6 */\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":320:386 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 */\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":414:438 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":818:820 64 */\n 0x40\n /* \"main.sol\":810:816 result */\n dup2\n /* \"main.sol\":806:808 96 */\n 0x60\n /* \"main.sol\":799:804 input */\n dup5\n /* \"main.sol\":796:797 0 */\n 0x00\n /* \"main.sol\":790:794 0x07 */\n 0x07\n /* \"main.sol\":786:787 0 */\n 0x00\n /* \"main.sol\":782:788 not(0) */\n not\n /* \"main.sol\":777:821 call(not(0), 0x07, 0, input, 96, result, 64) */\n call\n /* \"main.sol\":766:821 success := call(not(0), 0x07, 0, input, 96, result, 64) */\n swap3\n pop\n /* \"main.sol\":856:863 success */\n dup3\n /* \"main.sol\":848:898 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":966:1032 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":937:943 result */\n dup2\n /* \"main.sol\":944:945 0 */\n 0x00\n /* \"main.sol\":937:946 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":937:1032 result[0] ==... */\n eq\n /* \"main.sol\":912:1055 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1123:1189 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451 */\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451\n /* \"main.sol\":1094:1100 result */\n dup2\n /* \"main.sol\":1101:1102 1 */\n 0x01\n /* \"main.sol\":1094:1103 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1094:1189 result[1] ==... */\n eq\n /* \"main.sol\":1069:1212 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1223 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2120:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:220:1","statements":[{"nodeType":"YulAssignment","src":"163:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:2:1","type":"","value":"30"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"335:3:1"}],"functionName":{"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulIdentifier","src":"246:88:1"},"nodeType":"YulFunctionCall","src":"246:93:1"},"nodeType":"YulExpressionStatement","src":"246:93:1"},{"nodeType":"YulAssignment","src":"348:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"359:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"355:3:1"},"nodeType":"YulFunctionCall","src":"355:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"348:3:1"}]}]},"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:366:1"},{"body":{"nodeType":"YulBlock","src":"525:219:1","statements":[{"nodeType":"YulAssignment","src":"535:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"601:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"606:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"542:58:1"},"nodeType":"YulFunctionCall","src":"542:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"535:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"513:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"521:3:1","type":""}],"src":"379:365:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:74:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:32:1","type":"","value":"elliptic curve addition failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:56:1"},"nodeType":"YulExpressionStatement","src":"1892:56:1"}]},"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:180:1"},{"body":{"nodeType":"YulBlock","src":"2067:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2089:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2097:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:1"},"nodeType":"YulFunctionCall","src":"2085:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2101:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2078:6:1"},"nodeType":"YulFunctionCall","src":"2078:32:1"},"nodeType":"YulExpressionStatement","src":"2078:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2059:6:1","type":""}],"src":"1961:156:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0x99 PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE0 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x144 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x180 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x229 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x220 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x260 PUSH1 0x1E DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x26B DUP3 PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x283 PUSH1 0x6 DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x28E DUP3 PUSH2 0x313 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2B2 DUP2 PUSH2 0x253 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D2 DUP2 PUSH2 0x276 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x34A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1195:0:-:0;;;66:1157;;;;;;;;;;94:12;120:23;:280;;;;;;;;160:66;120:280;;;;240:66;120:280;;;;320:66;120:280;;;;;414:24;;:::i;:::-;818:2;810:6;806:2;799:5;796:1;790:4;786:1;782:6;777:44;766:55;;856:7;848:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;966:66;937:6;944:1;937:9;;;;;;;;;;;;;;;;;;;:95;912:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:66;1094:6;1101:1;1094:9;;;;;;;;;;;;;;;;;;;:95;1069:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1157;;;34:1195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1195:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1195:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":66,"end":1223,"name":"CALLVALUE","source":0},{"begin":66,"end":1223,"name":"DUP1","source":0},{"begin":66,"end":1223,"name":"ISZERO","source":0},{"begin":66,"end":1223,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1223,"name":"JUMPI","source":0},{"begin":66,"end":1223,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1223,"name":"DUP1","source":0},{"begin":66,"end":1223,"name":"REVERT","source":0},{"begin":66,"end":1223,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1223,"name":"JUMPDEST","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":94,"end":106,"name":"PUSH","source":0,"value":"0"},{"begin":120,"end":143,"name":"DUP1","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":400,"name":"MLOAD","source":0},{"begin":120,"end":400,"name":"DUP1","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"60"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"DUP1","source":0},{"begin":160,"end":226,"name":"PUSH","source":0,"value":"1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":240,"end":306,"name":"PUSH","source":0,"value":"1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":320,"end":386,"name":"PUSH","source":0,"value":"30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"POP","source":0},{"begin":120,"end":400,"name":"SWAP1","source":0},{"begin":120,"end":400,"name":"POP","source":0},{"begin":414,"end":438,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":414,"end":438,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":414,"end":438,"name":"JUMP","source":0,"value":"[in]"},{"begin":414,"end":438,"name":"tag","source":0,"value":"4"},{"begin":414,"end":438,"name":"JUMPDEST","source":0},{"begin":818,"end":820,"name":"PUSH","source":0,"value":"40"},{"begin":810,"end":816,"name":"DUP2","source":0},{"begin":806,"end":808,"name":"PUSH","source":0,"value":"60"},{"begin":799,"end":804,"name":"DUP5","source":0},{"begin":796,"end":797,"name":"PUSH","source":0,"value":"0"},{"begin":790,"end":794,"name":"PUSH","source":0,"value":"7"},{"begin":786,"end":787,"name":"PUSH","source":0,"value":"0"},{"begin":782,"end":788,"name":"NOT","source":0},{"begin":777,"end":821,"name":"CALL","source":0},{"begin":766,"end":821,"name":"SWAP3","source":0},{"begin":766,"end":821,"name":"POP","source":0},{"begin":856,"end":863,"name":"DUP3","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":848,"end":898,"name":"JUMPI","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"40"},{"begin":848,"end":898,"name":"MLOAD","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":848,"end":898,"name":"DUP2","source":0},{"begin":848,"end":898,"name":"MSTORE","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"4"},{"begin":848,"end":898,"name":"ADD","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":848,"end":898,"name":"SWAP1","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":848,"end":898,"name":"JUMP","source":0,"value":"[in]"},{"begin":848,"end":898,"name":"tag","source":0,"value":"7"},{"begin":848,"end":898,"name":"JUMPDEST","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"40"},{"begin":848,"end":898,"name":"MLOAD","source":0},{"begin":848,"end":898,"name":"DUP1","source":0},{"begin":848,"end":898,"name":"SWAP2","source":0},{"begin":848,"end":898,"name":"SUB","source":0},{"begin":848,"end":898,"name":"SWAP1","source":0},{"begin":848,"end":898,"name":"REVERT","source":0},{"begin":848,"end":898,"name":"tag","source":0,"value":"6"},{"begin":848,"end":898,"name":"JUMPDEST","source":0},{"begin":966,"end":1032,"name":"PUSH","source":0,"value":"1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3"},{"begin":937,"end":943,"name":"DUP2","source":0},{"begin":944,"end":945,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"2"},{"begin":937,"end":946,"name":"DUP2","source":0},{"begin":937,"end":946,"name":"LT","source":0},{"begin":937,"end":946,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":937,"end":946,"name":"JUMPI","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"MSTORE","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"32"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"4"},{"begin":937,"end":946,"name":"MSTORE","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"24"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"REVERT","source":0},{"begin":937,"end":946,"name":"tag","source":0,"value":"9"},{"begin":937,"end":946,"name":"JUMPDEST","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"20"},{"begin":937,"end":946,"name":"MUL","source":0},{"begin":937,"end":946,"name":"ADD","source":0},{"begin":937,"end":946,"name":"MLOAD","source":0},{"begin":937,"end":1032,"name":"EQ","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":912,"end":1055,"name":"JUMPI","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"40"},{"begin":912,"end":1055,"name":"MLOAD","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":912,"end":1055,"name":"DUP2","source":0},{"begin":912,"end":1055,"name":"MSTORE","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"4"},{"begin":912,"end":1055,"name":"ADD","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":912,"end":1055,"name":"SWAP1","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":912,"end":1055,"name":"JUMP","source":0,"value":"[in]"},{"begin":912,"end":1055,"name":"tag","source":0,"value":"11"},{"begin":912,"end":1055,"name":"JUMPDEST","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"40"},{"begin":912,"end":1055,"name":"MLOAD","source":0},{"begin":912,"end":1055,"name":"DUP1","source":0},{"begin":912,"end":1055,"name":"SWAP2","source":0},{"begin":912,"end":1055,"name":"SUB","source":0},{"begin":912,"end":1055,"name":"SWAP1","source":0},{"begin":912,"end":1055,"name":"REVERT","source":0},{"begin":912,"end":1055,"name":"tag","source":0,"value":"10"},{"begin":912,"end":1055,"name":"JUMPDEST","source":0},{"begin":1123,"end":1189,"name":"PUSH","source":0,"value":"163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451"},{"begin":1094,"end":1100,"name":"DUP2","source":0},{"begin":1101,"end":1102,"name":"PUSH","source":0,"value":"1"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"2"},{"begin":1094,"end":1103,"name":"DUP2","source":0},{"begin":1094,"end":1103,"name":"LT","source":0},{"begin":1094,"end":1103,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":1094,"end":1103,"name":"JUMPI","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"0"},{"begin":1094,"end":1103,"name":"MSTORE","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"32"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"4"},{"begin":1094,"end":1103,"name":"MSTORE","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"24"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"0"},{"begin":1094,"end":1103,"name":"REVERT","source":0},{"begin":1094,"end":1103,"name":"tag","source":0,"value":"13"},{"begin":1094,"end":1103,"name":"JUMPDEST","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"20"},{"begin":1094,"end":1103,"name":"MUL","source":0},{"begin":1094,"end":1103,"name":"ADD","source":0},{"begin":1094,"end":1103,"name":"MLOAD","source":0},{"begin":1094,"end":1189,"name":"EQ","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":1069,"end":1212,"name":"JUMPI","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"40"},{"begin":1069,"end":1212,"name":"MLOAD","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1069,"end":1212,"name":"DUP2","source":0},{"begin":1069,"end":1212,"name":"MSTORE","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"4"},{"begin":1069,"end":1212,"name":"ADD","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":1069,"end":1212,"name":"SWAP1","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1069,"end":1212,"name":"JUMP","source":0,"value":"[in]"},{"begin":1069,"end":1212,"name":"tag","source":0,"value":"15"},{"begin":1069,"end":1212,"name":"JUMPDEST","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"40"},{"begin":1069,"end":1212,"name":"MLOAD","source":0},{"begin":1069,"end":1212,"name":"DUP1","source":0},{"begin":1069,"end":1212,"name":"SWAP2","source":0},{"begin":1069,"end":1212,"name":"SUB","source":0},{"begin":1069,"end":1212,"name":"SWAP1","source":0},{"begin":1069,"end":1212,"name":"REVERT","source":0},{"begin":1069,"end":1212,"name":"tag","source":0,"value":"14"},{"begin":1069,"end":1212,"name":"JUMPDEST","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":34,"end":1229,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":34,"end":1229,"name":"JUMP","source":0},{"begin":34,"end":1229,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1229,"name":"JUMPDEST","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MLOAD","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"ADD","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"2"},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1229,"name":"DUP3","source":0},{"begin":34,"end":1229,"name":"MUL","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1229,"name":"DUP4","source":0},{"begin":34,"end":1229,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"DUP3","source":0},{"begin":34,"end":1229,"name":"ADD","source":0},{"begin":34,"end":1229,"name":"SWAP2","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":373,"name":"tag","source":1,"value":"18"},{"begin":7,"end":373,"name":"JUMPDEST","source":1},{"begin":7,"end":373,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":234,"end":236,"name":"PUSH","source":1,"value":"1E"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":170,"end":237,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":237,"name":"tag","source":1,"value":"20"},{"begin":170,"end":237,"name":"JUMPDEST","source":1},{"begin":163,"end":237,"name":"SWAP2","source":1},{"begin":163,"end":237,"name":"POP","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":335,"end":338,"name":"DUP3","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":246,"end":339,"name":"JUMP","source":1,"value":"[in]"},{"begin":246,"end":339,"name":"tag","source":1,"value":"22"},{"begin":246,"end":339,"name":"JUMPDEST","source":1},{"begin":364,"end":366,"name":"PUSH","source":1,"value":"20"},{"begin":359,"end":362,"name":"DUP3","source":1},{"begin":355,"end":367,"name":"ADD","source":1},{"begin":348,"end":367,"name":"SWAP1","source":1},{"begin":348,"end":367,"name":"POP","source":1},{"begin":153,"end":373,"name":"SWAP2","source":1},{"begin":153,"end":373,"name":"SWAP1","source":1},{"begin":153,"end":373,"name":"POP","source":1},{"begin":153,"end":373,"name":"JUMP","source":1,"value":"[out]"},{"begin":379,"end":744,"name":"tag","source":1,"value":"24"},{"begin":379,"end":744,"name":"JUMPDEST","source":1},{"begin":379,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":606,"end":607,"name":"PUSH","source":1,"value":"6"},{"begin":601,"end":604,"name":"DUP4","source":1},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":542,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":542,"end":608,"name":"tag","source":1,"value":"26"},{"begin":542,"end":608,"name":"JUMPDEST","source":1},{"begin":535,"end":608,"name":"SWAP2","source":1},{"begin":535,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"27"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":525,"end":744,"name":"SWAP2","source":1},{"begin":525,"end":744,"name":"SWAP1","source":1},{"begin":525,"end":744,"name":"POP","source":1},{"begin":525,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"8"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"30"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"12"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"32"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"21"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1955,"name":"tag","source":1,"value":"23"},{"begin":1775,"end":1955,"name":"JUMPDEST","source":1},{"begin":1915,"end":1947,"name":"PUSH","source":1,"value":"656C6C6970746963206375727665206164646974696F6E206661696C65640000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1948,"name":"MSTORE","source":1},{"begin":1881,"end":1955,"name":"POP","source":1},{"begin":1881,"end":1955,"name":"JUMP","source":1,"value":"[out]"},{"begin":1961,"end":2117,"name":"tag","source":1,"value":"28"},{"begin":1961,"end":2117,"name":"JUMPDEST","source":1},{"begin":2101,"end":2109,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":2097,"end":2098,"name":"PUSH","source":1,"value":"0"},{"begin":2089,"end":2095,"name":"DUP3","source":1},{"begin":2085,"end":2099,"name":"ADD","source":1},{"begin":2078,"end":2110,"name":"MSTORE","source":1},{"begin":2067,"end":2117,"name":"POP","source":1},{"begin":2067,"end":2117,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1229,"name":"tag","source":0,"value":"16"},{"begin":34,"end":1229,"name":"JUMPDEST","source":0},{"begin":34,"end":1229,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"CODECOPY","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033",".code":[{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Multiply\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x0866695f85e6c1a4e1a8cb93dfeef35e2b9269877a1562fbd3e145c2e75e3395\",\"urls\":[\"bzz-raw://84a275684a19c387b2ffd04d1b4df333ff4c72127508ea5a3604b35ccd21492e\",\"dweb:/ipfs/QmQmBMj75rX9QqPYae9GiDacPuGieUfXsYjZavjPvkrRH2\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Multiply{\n constructor() {\n bool success;\n uint256[3] memory input = [\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x07 id of the bn256Mul precompile\n // 0 number of ether to transfer\n // 96 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x07, 0, input, 96, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n \"failed\");\n require(\n result[1] ==\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,\n \"failed\");\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/Bn128Pairing.json b/tests/contracts/compiled/Bn128Pairing.json new file mode 100644 index 00000000000..c280a99bb4a --- /dev/null +++ b/tests/contracts/compiled/Bn128Pairing.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1702 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":90:114 uint256[12] memory input */\n 0x00\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n mload(0x40)\n dup1\n 0x0180\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":131:197 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02 */\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":211:277 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84 */\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":291:357 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee */\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":371:437 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f */\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":451:517 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237 */\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":531:597 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f */\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":611:677 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9 */\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":691:757 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1 */\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":771:837 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 */\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":851:917 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed */\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":931:997 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b */\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1011:1077 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa */\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1097:1121 uint256[1] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":1131:1143 bool success */\n 0x00\n /* \"main.sol\":1577:1579 32 */\n 0x20\n /* \"main.sol\":1569:1575 result */\n dup3\n /* \"main.sol\":1564:1567 384 */\n 0x0180\n /* \"main.sol\":1557:1562 input */\n dup6\n /* \"main.sol\":1554:1555 0 */\n 0x00\n /* \"main.sol\":1548:1552 0x08 */\n 0x08\n /* \"main.sol\":1541:1545 2000 */\n 0x07d0\n /* \"main.sol\":1534:1539 gas() */\n gas\n /* \"main.sol\":1530:1546 sub(gas(), 2000) */\n sub\n /* \"main.sol\":1525:1580 call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n call\n /* \"main.sol\":1514:1580 success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n swap1\n pop\n /* \"main.sol\":1607:1614 success */\n dup1\n /* \"main.sol\":1599:1648 require(success, \"elliptic curve pairing failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1679:1680 1 */\n 0x01\n /* \"main.sol\":1666:1672 result */\n dup3\n /* \"main.sol\":1673:1674 0 */\n 0x00\n /* \"main.sol\":1666:1675 result[0] */\n 0x01\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1666:1680 result[0] == 1 */\n eq\n /* \"main.sol\":1658:1691 require(result[0] == 1, \"failed\") */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":66:1702 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n jump(tag_13)\ntag_5:\n mload(0x40)\n dup1\n 0x20\n add\n 0x40\n mstore\n dup1\n 0x01\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:372 */\ntag_15:\n 0x00\n /* \"#utility.yul\":170:236 */\n tag_17\n /* \"#utility.yul\":234:235 */\n 0x06\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:236 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":163:236 */\n swap2\n pop\n /* \"#utility.yul\":245:338 */\n tag_19\n /* \"#utility.yul\":334:337 */\n dup3\n /* \"#utility.yul\":245:338 */\n tag_20\n jump\t// in\ntag_19:\n /* \"#utility.yul\":363:365 */\n 0x20\n /* \"#utility.yul\":358:361 */\n dup3\n /* \"#utility.yul\":354:366 */\n add\n /* \"#utility.yul\":347:366 */\n swap1\n pop\n /* \"#utility.yul\":153:372 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":378:744 */\ntag_21:\n 0x00\n /* \"#utility.yul\":541:608 */\n tag_23\n /* \"#utility.yul\":605:607 */\n 0x1d\n /* \"#utility.yul\":600:603 */\n dup4\n /* \"#utility.yul\":541:608 */\n tag_18\n jump\t// in\ntag_23:\n /* \"#utility.yul\":534:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_24\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_25\n jump\t// in\ntag_24:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":524:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_12:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_27\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_15\n jump\t// in\ntag_27:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_8:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_29\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_21\n jump\t// in\ntag_29:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_18:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1931 */\ntag_20:\n /* \"#utility.yul\":1915:1923 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1924 */\n mstore\n /* \"#utility.yul\":1881:1931 */\n pop\n jump\t// out\n /* \"#utility.yul\":1937:2116 */\ntag_25:\n /* \"#utility.yul\":2077:2108 */\n 0x656c6c69707469632063757276652070616972696e67206661696c6564000000\n /* \"#utility.yul\":2073:2074 */\n 0x00\n /* \"#utility.yul\":2065:2071 */\n dup3\n /* \"#utility.yul\":2061:2075 */\n add\n /* \"#utility.yul\":2054:2109 */\n mstore\n /* \"#utility.yul\":2043:2116 */\n pop\n jump\t// out\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\ntag_13:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2119:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:219:1","statements":[{"nodeType":"YulAssignment","src":"163:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"334:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"245:88:1"},"nodeType":"YulFunctionCall","src":"245:93:1"},"nodeType":"YulExpressionStatement","src":"245:93:1"},{"nodeType":"YulAssignment","src":"347:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"358:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"363:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"354:3:1"},"nodeType":"YulFunctionCall","src":"354:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"347:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:365:1"},{"body":{"nodeType":"YulBlock","src":"524:220:1","statements":[{"nodeType":"YulAssignment","src":"534:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"600:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"605:2:1","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"541:58:1"},"nodeType":"YulFunctionCall","src":"541:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"534:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"512:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"520:3:1","type":""}],"src":"378:366:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:32:1"},"nodeType":"YulExpressionStatement","src":"1892:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:156:1"},{"body":{"nodeType":"YulBlock","src":"2043:73:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2065:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2073:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2061:3:1"},"nodeType":"YulFunctionCall","src":"2061:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2077:31:1","type":"","value":"elliptic curve pairing failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2054:6:1"},"nodeType":"YulFunctionCall","src":"2054:55:1"},"nodeType":"YulExpressionStatement","src":"2054:55:1"}]},"name":"store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2035:6:1","type":""}],"src":"1937:179:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n function store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve pairing failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x1EF PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x244 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x23B SWAP1 PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x280 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BC SWAP1 PUSH2 0x335 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FC PUSH1 0x6 DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x307 DUP3 PUSH2 0x386 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31F PUSH1 0x1D DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x32A DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34E DUP2 PUSH2 0x2EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x36E DUP2 PUSH2 0x312 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x3E6 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ","sourceMap":"34:1674:0:-:0;;;66:1636;;;;;;;;;;90:24;:997;;;;;;;;131:66;90:997;;;;211:66;90:997;;;;291:66;90:997;;;;371:66;90:997;;;;451:66;90:997;;;;531:66;90:997;;;;611:66;90:997;;;;691:66;90:997;;;;771:66;90:997;;;;851:66;90:997;;;;931:66;90:997;;;;1011:66;90:997;;;;;1097:24;;:::i;:::-;1131:12;1577:2;1569:6;1564:3;1557:5;1554:1;1548:4;1541;1534:5;1530:16;1525:55;1514:66;;1607:7;1599:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1679:1;1666:6;1673:1;1666:9;;;;;;;;;;;;;;;;;;;:14;1658:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1636;;;34:1674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:365:1:-;;170:66;234:1;229:3;170:66;:::i;:::-;163:73;;245:93;334:3;245:93;:::i;:::-;363:2;358:3;354:12;347:19;;153:219;;;:::o;378:366::-;;541:67;605:2;600:3;541:67;:::i;:::-;534:74;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;524:220;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:156::-;1915:8;1911:1;1903:6;1899:14;1892:32;1881:50;:::o;1937:179::-;2077:31;2073:1;2065:6;2061:14;2054:55;2043:73;:::o;34:1674:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ","sourceMap":"34:1674:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":66,"end":1702,"name":"CALLVALUE","source":0},{"begin":66,"end":1702,"name":"DUP1","source":0},{"begin":66,"end":1702,"name":"ISZERO","source":0},{"begin":66,"end":1702,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1702,"name":"JUMPI","source":0},{"begin":66,"end":1702,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1702,"name":"DUP1","source":0},{"begin":66,"end":1702,"name":"REVERT","source":0},{"begin":66,"end":1702,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1702,"name":"JUMPDEST","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":90,"end":114,"name":"PUSH","source":0,"value":"0"},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"40"},{"begin":90,"end":1087,"name":"MLOAD","source":0},{"begin":90,"end":1087,"name":"DUP1","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"180"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"40"},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"DUP1","source":0},{"begin":131,"end":197,"name":"PUSH","source":0,"value":"2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":211,"end":277,"name":"PUSH","source":0,"value":"3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":291,"end":357,"name":"PUSH","source":0,"value":"1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":371,"end":437,"name":"PUSH","source":0,"value":"2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":451,"end":517,"name":"PUSH","source":0,"value":"21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":531,"end":597,"name":"PUSH","source":0,"value":"96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":611,"end":677,"name":"PUSH","source":0,"value":"6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":691,"end":757,"name":"PUSH","source":0,"value":"22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":771,"end":837,"name":"PUSH","source":0,"value":"198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":851,"end":917,"name":"PUSH","source":0,"value":"1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":931,"end":997,"name":"PUSH","source":0,"value":"90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":1011,"end":1077,"name":"PUSH","source":0,"value":"12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"POP","source":0},{"begin":90,"end":1087,"name":"SWAP1","source":0},{"begin":90,"end":1087,"name":"POP","source":0},{"begin":1097,"end":1121,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":1097,"end":1121,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":1097,"end":1121,"name":"JUMP","source":0,"value":"[in]"},{"begin":1097,"end":1121,"name":"tag","source":0,"value":"4"},{"begin":1097,"end":1121,"name":"JUMPDEST","source":0},{"begin":1131,"end":1143,"name":"PUSH","source":0,"value":"0"},{"begin":1577,"end":1579,"name":"PUSH","source":0,"value":"20"},{"begin":1569,"end":1575,"name":"DUP3","source":0},{"begin":1564,"end":1567,"name":"PUSH","source":0,"value":"180"},{"begin":1557,"end":1562,"name":"DUP6","source":0},{"begin":1554,"end":1555,"name":"PUSH","source":0,"value":"0"},{"begin":1548,"end":1552,"name":"PUSH","source":0,"value":"8"},{"begin":1541,"end":1545,"name":"PUSH","source":0,"value":"7D0"},{"begin":1534,"end":1539,"name":"GAS","source":0},{"begin":1530,"end":1546,"name":"SUB","source":0},{"begin":1525,"end":1580,"name":"CALL","source":0},{"begin":1514,"end":1580,"name":"SWAP1","source":0},{"begin":1514,"end":1580,"name":"POP","source":0},{"begin":1607,"end":1614,"name":"DUP1","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":1599,"end":1648,"name":"JUMPI","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"40"},{"begin":1599,"end":1648,"name":"MLOAD","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1599,"end":1648,"name":"DUP2","source":0},{"begin":1599,"end":1648,"name":"MSTORE","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"4"},{"begin":1599,"end":1648,"name":"ADD","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":1599,"end":1648,"name":"SWAP1","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":1599,"end":1648,"name":"JUMP","source":0,"value":"[in]"},{"begin":1599,"end":1648,"name":"tag","source":0,"value":"7"},{"begin":1599,"end":1648,"name":"JUMPDEST","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"40"},{"begin":1599,"end":1648,"name":"MLOAD","source":0},{"begin":1599,"end":1648,"name":"DUP1","source":0},{"begin":1599,"end":1648,"name":"SWAP2","source":0},{"begin":1599,"end":1648,"name":"SUB","source":0},{"begin":1599,"end":1648,"name":"SWAP1","source":0},{"begin":1599,"end":1648,"name":"REVERT","source":0},{"begin":1599,"end":1648,"name":"tag","source":0,"value":"6"},{"begin":1599,"end":1648,"name":"JUMPDEST","source":0},{"begin":1679,"end":1680,"name":"PUSH","source":0,"value":"1"},{"begin":1666,"end":1672,"name":"DUP3","source":0},{"begin":1673,"end":1674,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"1"},{"begin":1666,"end":1675,"name":"DUP2","source":0},{"begin":1666,"end":1675,"name":"LT","source":0},{"begin":1666,"end":1675,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":1666,"end":1675,"name":"JUMPI","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"MSTORE","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"32"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"4"},{"begin":1666,"end":1675,"name":"MSTORE","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"24"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"REVERT","source":0},{"begin":1666,"end":1675,"name":"tag","source":0,"value":"9"},{"begin":1666,"end":1675,"name":"JUMPDEST","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"20"},{"begin":1666,"end":1675,"name":"MUL","source":0},{"begin":1666,"end":1675,"name":"ADD","source":0},{"begin":1666,"end":1675,"name":"MLOAD","source":0},{"begin":1666,"end":1680,"name":"EQ","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":1658,"end":1691,"name":"JUMPI","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"40"},{"begin":1658,"end":1691,"name":"MLOAD","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1658,"end":1691,"name":"DUP2","source":0},{"begin":1658,"end":1691,"name":"MSTORE","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"4"},{"begin":1658,"end":1691,"name":"ADD","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1658,"end":1691,"name":"SWAP1","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1658,"end":1691,"name":"JUMP","source":0,"value":"[in]"},{"begin":1658,"end":1691,"name":"tag","source":0,"value":"11"},{"begin":1658,"end":1691,"name":"JUMPDEST","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"40"},{"begin":1658,"end":1691,"name":"MLOAD","source":0},{"begin":1658,"end":1691,"name":"DUP1","source":0},{"begin":1658,"end":1691,"name":"SWAP2","source":0},{"begin":1658,"end":1691,"name":"SUB","source":0},{"begin":1658,"end":1691,"name":"SWAP1","source":0},{"begin":1658,"end":1691,"name":"REVERT","source":0},{"begin":1658,"end":1691,"name":"tag","source":0,"value":"10"},{"begin":1658,"end":1691,"name":"JUMPDEST","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":34,"end":1708,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":34,"end":1708,"name":"JUMP","source":0},{"begin":34,"end":1708,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1708,"name":"JUMPDEST","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MLOAD","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1708,"name":"ADD","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"1"},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1708,"name":"DUP3","source":0},{"begin":34,"end":1708,"name":"MUL","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1708,"name":"DUP4","source":0},{"begin":34,"end":1708,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"DUP3","source":0},{"begin":34,"end":1708,"name":"ADD","source":0},{"begin":34,"end":1708,"name":"SWAP2","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":372,"name":"tag","source":1,"value":"15"},{"begin":7,"end":372,"name":"JUMPDEST","source":1},{"begin":7,"end":372,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":236,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":234,"end":235,"name":"PUSH","source":1,"value":"6"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":236,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":170,"end":236,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":236,"name":"tag","source":1,"value":"17"},{"begin":170,"end":236,"name":"JUMPDEST","source":1},{"begin":163,"end":236,"name":"SWAP2","source":1},{"begin":163,"end":236,"name":"POP","source":1},{"begin":245,"end":338,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":334,"end":337,"name":"DUP3","source":1},{"begin":245,"end":338,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":245,"end":338,"name":"JUMP","source":1,"value":"[in]"},{"begin":245,"end":338,"name":"tag","source":1,"value":"19"},{"begin":245,"end":338,"name":"JUMPDEST","source":1},{"begin":363,"end":365,"name":"PUSH","source":1,"value":"20"},{"begin":358,"end":361,"name":"DUP3","source":1},{"begin":354,"end":366,"name":"ADD","source":1},{"begin":347,"end":366,"name":"SWAP1","source":1},{"begin":347,"end":366,"name":"POP","source":1},{"begin":153,"end":372,"name":"SWAP2","source":1},{"begin":153,"end":372,"name":"SWAP1","source":1},{"begin":153,"end":372,"name":"POP","source":1},{"begin":153,"end":372,"name":"JUMP","source":1,"value":"[out]"},{"begin":378,"end":744,"name":"tag","source":1,"value":"21"},{"begin":378,"end":744,"name":"JUMPDEST","source":1},{"begin":378,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":541,"end":608,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":605,"end":607,"name":"PUSH","source":1,"value":"1D"},{"begin":600,"end":603,"name":"DUP4","source":1},{"begin":541,"end":608,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":541,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":541,"end":608,"name":"tag","source":1,"value":"23"},{"begin":541,"end":608,"name":"JUMPDEST","source":1},{"begin":534,"end":608,"name":"SWAP2","source":1},{"begin":534,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"24"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":524,"end":744,"name":"SWAP2","source":1},{"begin":524,"end":744,"name":"SWAP1","source":1},{"begin":524,"end":744,"name":"POP","source":1},{"begin":524,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"12"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"27"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"8"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"29"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"18"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1931,"name":"tag","source":1,"value":"20"},{"begin":1775,"end":1931,"name":"JUMPDEST","source":1},{"begin":1915,"end":1923,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1924,"name":"MSTORE","source":1},{"begin":1881,"end":1931,"name":"POP","source":1},{"begin":1881,"end":1931,"name":"JUMP","source":1,"value":"[out]"},{"begin":1937,"end":2116,"name":"tag","source":1,"value":"25"},{"begin":1937,"end":2116,"name":"JUMPDEST","source":1},{"begin":2077,"end":2108,"name":"PUSH","source":1,"value":"656C6C69707469632063757276652070616972696E67206661696C6564000000"},{"begin":2073,"end":2074,"name":"PUSH","source":1,"value":"0"},{"begin":2065,"end":2071,"name":"DUP3","source":1},{"begin":2061,"end":2075,"name":"ADD","source":1},{"begin":2054,"end":2109,"name":"MSTORE","source":1},{"begin":2043,"end":2116,"name":"POP","source":1},{"begin":2043,"end":2116,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1708,"name":"tag","source":0,"value":"13"},{"begin":34,"end":1708,"name":"JUMPDEST","source":0},{"begin":34,"end":1708,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"CODECOPY","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033",".code":[{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Pairing\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x53e3d63190581fae7ffa509a011ef9051a34716920e445019ec671b70f62ce7b\",\"urls\":[\"bzz-raw://03fe2554e9fd58d008751b86eb89d2b31e5eac80d93f76dc939b0d13945cdd38\",\"dweb:/ipfs/QmUThb48t3ZMNE6a99sgqtWNUVGitj4eRrS2Gj3oxxRfMu\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Pairing {\n constructor() {\n uint256[12] memory input = [\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n ];\n uint256[1] memory result;\n bool success;\n assembly {\n // 0x08 id of the bn256CheckPairing precompile\n // 0 number of ether to transfer\n // 0 since we have an array of fixed length, our input starts in 0\n // 384 size of call parameters, i.e. 12*256 bits == 384 bytes\n // 32 size of result (one 32 byte boolean!)\n success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)\n }\n require(success, \"elliptic curve pairing failed\");\n require(result[0] == 1, \"failed\");\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/FailContract.json b/tests/contracts/compiled/FailContract.json new file mode 100644 index 00000000000..38bb29194d7 --- /dev/null +++ b/tests/contracts/compiled/FailContract.json @@ -0,0 +1 @@ +{"byteCode":"0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":71:131 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":114:119 false */\n 0x00\n /* \"main.sol\":106:120 require(false) */\n tag_4\n jumpi\n 0x00\n dup1\n revert\ntag_4:\n /* \"main.sol\":39:137 contract FailContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F DUP1 PUSH1 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:98:0:-:0;;;71:60;;;;;;;;;;114:5;106:14;;;;;;39:98;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:98:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"64","totalCost":"12664"}},"legacyAssembly":{".code":[{"begin":39,"end":137,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":137,"name":"MSTORE","source":0},{"begin":71,"end":131,"name":"CALLVALUE","source":0},{"begin":71,"end":131,"name":"DUP1","source":0},{"begin":71,"end":131,"name":"ISZERO","source":0},{"begin":71,"end":131,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":71,"end":131,"name":"JUMPI","source":0},{"begin":71,"end":131,"name":"PUSH","source":0,"value":"0"},{"begin":71,"end":131,"name":"DUP1","source":0},{"begin":71,"end":131,"name":"REVERT","source":0},{"begin":71,"end":131,"name":"tag","source":0,"value":"1"},{"begin":71,"end":131,"name":"JUMPDEST","source":0},{"begin":71,"end":131,"name":"POP","source":0},{"begin":114,"end":119,"name":"PUSH","source":0,"value":"0"},{"begin":106,"end":120,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":106,"end":120,"name":"JUMPI","source":0},{"begin":106,"end":120,"name":"PUSH","source":0,"value":"0"},{"begin":106,"end":120,"name":"DUP1","source":0},{"begin":106,"end":120,"name":"REVERT","source":0},{"begin":106,"end":120,"name":"tag","source":0,"value":"4"},{"begin":106,"end":120,"name":"JUMPDEST","source":0},{"begin":39,"end":137,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":137,"name":"DUP1","source":0},{"begin":39,"end":137,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"CODECOPY","source":0},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033",".code":[{"begin":39,"end":137,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":137,"name":"MSTORE","source":0},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"DUP1","source":0},{"begin":39,"end":137,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FailContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4de9ab93b7ba7a82d8e58a903a5a297b8a8dc5263369657b062496782a5a51e9\",\"urls\":[\"bzz-raw://70e08b1c0fff16d5982491d2b46221465b0094cd251f991786aa1ca409f6c431\",\"dweb:/ipfs/QmVc7Qm8cNSUa4CrQhPtuSUJndczcDARrLoYc4z1CCuJ3m\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FailContract {\n constructor() public {\n require(false);\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/FiniteLoopContract.json b/tests/contracts/compiled/FiniteLoopContract.json index 723b6f0796c..c731f6f5e43 100644 --- a/tests/contracts/compiled/FiniteLoopContract.json +++ b/tests/contracts/compiled/FiniteLoopContract.json @@ -1,2128 +1 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "n", "type": "uint256" } - ], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ", - "sourceMap": "39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "100600", - "executionCost": "5161", - "totalCost": "105761" - }, - "external": { "count()": "1107", "incr(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 109, "end": 164, "name": "CALLVALUE", "source": 0 }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "ISZERO", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPI", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "REVERT", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPDEST", "source": 0 }, - { "begin": 109, "end": 164, "name": "POP", "source": 0 }, - { - "begin": 152, - "end": 153, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 144, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "DUP2", "source": 0 }, - { "begin": 144, "end": 153, "name": "SWAP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "SSTORE", "source": 0 }, - { "begin": 144, "end": 153, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 339, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 339, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 339, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 339, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "21B13C48" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SUB", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "RETURN", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 178, - "end": 333, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "DUP1", "source": 0 }, - { "begin": 178, "end": 333, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 178, "end": 333, "name": "SUB", "source": 0 }, - { "begin": 178, "end": 333, "name": "DUP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "ADD", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "SWAP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "STOP", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 77, "end": 94, "name": "SLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP2", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 221, - "end": 227, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 252, "end": 253, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 251, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 253, "name": "LT", "source": 0 }, - { "begin": 243, "end": 323, "name": "ISZERO", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPI", "source": 0 }, - { - "begin": 285, - "end": 286, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 279, - "end": 284, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 279, "end": 284, "name": "SLOAD", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "SWAP2", "source": 0 }, - { "begin": 279, "end": 286, "name": "SWAP1", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 279, - "end": 286, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 279, - "end": 286, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "JUMPDEST", "source": 0 }, - { - "begin": 273, - "end": 278, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 273, "end": 286, "name": "DUP2", "source": 0 }, - { "begin": 273, "end": 286, "name": "SWAP1", "source": 0 }, - { "begin": 273, "end": 286, "name": "SSTORE", "source": 0 }, - { "begin": 273, "end": 286, "name": "POP", "source": 0 }, - { - "begin": 307, - "end": 308, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 304, "end": 308, "name": "DUP2", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "SWAP2", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 304, - "end": 308, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 304, - "end": 308, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "JUMPDEST", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { "begin": 304, "end": 308, "name": "POP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1077, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "38" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1083, - "end": 1160, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "38" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "count()": "06661abd", - "incr(uint256)": "21b13c48" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:FiniteLoopContract", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ","sourceMap":"39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"100600","executionCost":"5161","totalCost":"105761"},"external":{"count()":"1107","incr(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":109,"end":164,"name":"CALLVALUE","source":0},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"ISZERO","source":0},{"begin":109,"end":164,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPI","source":0},{"begin":109,"end":164,"name":"PUSH","source":0,"value":"0"},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"REVERT","source":0},{"begin":109,"end":164,"name":"tag","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPDEST","source":0},{"begin":109,"end":164,"name":"POP","source":0},{"begin":152,"end":153,"name":"PUSH","source":0,"value":"0"},{"begin":144,"end":149,"name":"DUP1","source":0},{"begin":144,"end":153,"name":"DUP2","source":0},{"begin":144,"end":153,"name":"SWAP1","source":0},{"begin":144,"end":153,"name":"SSTORE","source":0},{"begin":144,"end":153,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CODECOPY","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033",".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":39,"end":339,"name":"CALLVALUE","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"ISZERO","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":339,"name":"CALLDATASIZE","source":0},{"begin":39,"end":339,"name":"LT","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CALLDATALOAD","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":339,"name":"SHR","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"21B13C48"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"3"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"5"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"7"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"DUP1","source":0},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SUB","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"RETURN","source":0},{"begin":178,"end":333,"name":"tag","source":0,"value":"4"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":178,"end":333,"name":"PUSH","source":0,"value":"4"},{"begin":178,"end":333,"name":"DUP1","source":0},{"begin":178,"end":333,"name":"CALLDATASIZE","source":0},{"begin":178,"end":333,"name":"SUB","source":0},{"begin":178,"end":333,"name":"DUP2","source":0},{"begin":178,"end":333,"name":"ADD","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":178,"end":333,"name":"SWAP2","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"10"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"9"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"STOP","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"0"},{"begin":77,"end":94,"name":"SLOAD","source":0},{"begin":77,"end":94,"name":"DUP2","source":0},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[out]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":221,"end":227,"name":"PUSH","source":0,"value":"0"},{"begin":243,"end":323,"name":"tag","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":252,"end":253,"name":"DUP2","source":0},{"begin":250,"end":251,"name":"DUP2","source":0},{"begin":250,"end":253,"name":"LT","source":0},{"begin":243,"end":323,"name":"ISZERO","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPI","source":0},{"begin":285,"end":286,"name":"PUSH","source":0,"value":"1"},{"begin":279,"end":284,"name":"PUSH","source":0,"value":"0"},{"begin":279,"end":284,"name":"SLOAD","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":279,"end":286,"name":"SWAP2","source":0},{"begin":279,"end":286,"name":"SWAP1","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":279,"end":286,"name":"JUMP","source":0,"value":"[in]"},{"begin":279,"end":286,"name":"tag","source":0,"value":"16"},{"begin":279,"end":286,"name":"JUMPDEST","source":0},{"begin":273,"end":278,"name":"PUSH","source":0,"value":"0"},{"begin":273,"end":286,"name":"DUP2","source":0},{"begin":273,"end":286,"name":"SWAP1","source":0},{"begin":273,"end":286,"name":"SSTORE","source":0},{"begin":273,"end":286,"name":"POP","source":0},{"begin":307,"end":308,"name":"PUSH","source":0,"value":"1"},{"begin":304,"end":308,"name":"DUP2","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":304,"end":308,"name":"SWAP2","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":304,"end":308,"name":"JUMP","source":0,"value":"[in]"},{"begin":304,"end":308,"name":"tag","source":0,"value":"18"},{"begin":304,"end":308,"name":"JUMPDEST","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"POP","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMP","source":0},{"begin":243,"end":323,"name":"tag","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"20"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"22"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"26"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"27"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"29"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"8"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"32"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1077,"name":"tag","source":1,"value":"17"},{"begin":772,"end":1077,"name":"JUMPDEST","source":1},{"begin":772,"end":1077,"name":"PUSH","source":1,"value":"0"},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"34"},{"begin":849,"end":850,"name":"DUP3","source":1},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":831,"end":851,"name":"JUMP","source":1,"value":"[in]"},{"begin":831,"end":851,"name":"tag","source":1,"value":"34"},{"begin":831,"end":851,"name":"JUMPDEST","source":1},{"begin":826,"end":851,"name":"SWAP2","source":1},{"begin":826,"end":851,"name":"POP","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":883,"end":884,"name":"DUP4","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":865,"end":885,"name":"JUMP","source":1,"value":"[in]"},{"begin":865,"end":885,"name":"tag","source":1,"value":"35"},{"begin":865,"end":885,"name":"JUMPDEST","source":1},{"begin":860,"end":885,"name":"SWAP3","source":1},{"begin":860,"end":885,"name":"POP","source":1},{"begin":1019,"end":1020,"name":"DUP3","source":1},{"begin":951,"end":1017,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":947,"end":1021,"name":"SUB","source":1},{"begin":944,"end":945,"name":"DUP3","source":1},{"begin":941,"end":1022,"name":"GT","source":1},{"begin":938,"end":940,"name":"ISZERO","source":1},{"begin":938,"end":940,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPI","source":1},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1025,"end":1043,"name":"JUMP","source":1,"value":"[in]"},{"begin":1025,"end":1043,"name":"tag","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"JUMPDEST","source":1},{"begin":938,"end":940,"name":"tag","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPDEST","source":1},{"begin":1069,"end":1070,"name":"DUP3","source":1},{"begin":1066,"end":1067,"name":"DUP3","source":1},{"begin":1062,"end":1071,"name":"ADD","source":1},{"begin":1055,"end":1071,"name":"SWAP1","source":1},{"begin":1055,"end":1071,"name":"POP","source":1},{"begin":816,"end":1077,"name":"SWAP3","source":1},{"begin":816,"end":1077,"name":"SWAP2","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"JUMP","source":1,"value":"[out]"},{"begin":1083,"end":1160,"name":"tag","source":1,"value":"30"},{"begin":1083,"end":1160,"name":"JUMPDEST","source":1},{"begin":1083,"end":1160,"name":"PUSH","source":1,"value":"0"},{"begin":1149,"end":1154,"name":"DUP2","source":1},{"begin":1138,"end":1154,"name":"SWAP1","source":1},{"begin":1138,"end":1154,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"SWAP2","source":1},{"begin":1128,"end":1160,"name":"SWAP1","source":1},{"begin":1128,"end":1160,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"JUMP","source":1,"value":"[out]"},{"begin":1166,"end":1346,"name":"tag","source":1,"value":"38"},{"begin":1166,"end":1346,"name":"JUMPDEST","source":1},{"begin":1214,"end":1291,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1211,"end":1212,"name":"PUSH","source":1,"value":"0"},{"begin":1204,"end":1292,"name":"MSTORE","source":1},{"begin":1311,"end":1315,"name":"PUSH","source":1,"value":"11"},{"begin":1308,"end":1309,"name":"PUSH","source":1,"value":"4"},{"begin":1301,"end":1316,"name":"MSTORE","source":1},{"begin":1335,"end":1339,"name":"PUSH","source":1,"value":"24"},{"begin":1332,"end":1333,"name":"PUSH","source":1,"value":"0"},{"begin":1325,"end":1340,"name":"REVERT","source":1},{"begin":1352,"end":1474,"name":"tag","source":1,"value":"23"},{"begin":1352,"end":1474,"name":"JUMPDEST","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"42"},{"begin":1443,"end":1448,"name":"DUP2","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1425,"end":1449,"name":"JUMP","source":1,"value":"[in]"},{"begin":1425,"end":1449,"name":"tag","source":1,"value":"42"},{"begin":1425,"end":1449,"name":"JUMPDEST","source":1},{"begin":1418,"end":1423,"name":"DUP2","source":1},{"begin":1415,"end":1450,"name":"EQ","source":1},{"begin":1405,"end":1407,"name":"PUSH [tag]","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPI","source":1},{"begin":1464,"end":1465,"name":"PUSH","source":1,"value":"0"},{"begin":1461,"end":1462,"name":"DUP1","source":1},{"begin":1454,"end":1466,"name":"REVERT","source":1},{"begin":1405,"end":1407,"name":"tag","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPDEST","source":1},{"begin":1395,"end":1474,"name":"POP","source":1},{"begin":1395,"end":1474,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"count()":"06661abd","incr(uint256)":"21b13c48"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:FiniteLoopContract","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b507f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161007791906100ed565b602060405180830381855afa158015610094573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146100b757600080fd5b61014d565b60006100c782610104565b6100d1818561010f565b93506100e181856020860161011a565b80840191505092915050565b60006100f982846100bc565b915081905092915050565b600081519050919050565b600081905092915050565b60005b8381101561013857808201518184015260208101905061011d565b83811115610147576000848401525b50505050565b603f8061015b6000396000f3fe6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x77 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7 DUP3 PUSH2 0x104 JUMP JUMPDEST PUSH2 0xD1 DUP2 DUP6 PUSH2 0x10F JUMP JUMPDEST SWAP4 POP PUSH2 0xE1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x11A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9 DUP3 DUP5 PUSH2 0xBC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x15B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"32:170:0:-:0;;;62:134;;;;;;;;;;94:92;:33;104:22;;;;;;;;;;;;;;;;;94:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;86:101;;;;;;32:170;;7:373:1;;139:38;171:5;139:38;:::i;:::-;193:88;274:6;269:3;193:88;:::i;:::-;186:95;;290:52;335:6;330:3;323:4;316:5;312:16;290:52;:::i;:::-;367:6;362:3;358:16;351:23;;115:265;;;;;:::o;386:271::-;;538:93;627:3;618:6;538:93;:::i;:::-;531:100;;648:3;641:10;;520:137;;;;:::o;663:98::-;;748:5;742:12;732:22;;721:40;;;:::o;767:147::-;;905:3;890:18;;880:34;;;;:::o;920:307::-;988:1;998:113;1012:6;1009:1;1006:13;998:113;;;1097:1;1092:3;1088:11;1082:18;1078:1;1073:3;1069:11;1062:39;1034:2;1031:1;1027:10;1022:15;;998:113;;;1129:6;1126:1;1123:13;1120:2;;;1209:1;1200:6;1195:3;1191:16;1184:27;1120:2;969:258;;;;:::o;32:170:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"32:170:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":32,"end":202,"name":"PUSH","source":0,"value":"80"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"40"},{"begin":32,"end":202,"name":"MSTORE","source":0},{"begin":62,"end":196,"name":"CALLVALUE","source":0},{"begin":62,"end":196,"name":"DUP1","source":0},{"begin":62,"end":196,"name":"ISZERO","source":0},{"begin":62,"end":196,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":62,"end":196,"name":"JUMPI","source":0},{"begin":62,"end":196,"name":"PUSH","source":0,"value":"0"},{"begin":62,"end":196,"name":"DUP1","source":0},{"begin":62,"end":196,"name":"REVERT","source":0},{"begin":62,"end":196,"name":"tag","source":0,"value":"1"},{"begin":62,"end":196,"name":"JUMPDEST","source":0},{"begin":62,"end":196,"name":"POP","source":0},{"begin":94,"end":186,"name":"PUSH","source":0,"value":"8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000"},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"3"},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"MLOAD","source":0},{"begin":104,"end":126,"name":"DUP1","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"ADD","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"DUP1","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"C"},{"begin":104,"end":126,"name":"DUP2","source":0},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"20"},{"begin":104,"end":126,"name":"ADD","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"48656C6C6F20576F726C64210000000000000000000000000000000000000000"},{"begin":104,"end":126,"name":"DUP2","source":0},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"POP","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":94,"end":127,"name":"SWAP2","source":0},{"begin":94,"end":127,"name":"SWAP1","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":94,"end":127,"name":"JUMP","source":0,"value":"[in]"},{"begin":94,"end":127,"name":"tag","source":0,"value":"4"},{"begin":94,"end":127,"name":"JUMPDEST","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"20"},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"DUP4","source":0},{"begin":94,"end":127,"name":"SUB","source":0},{"begin":94,"end":127,"name":"DUP2","source":0},{"begin":94,"end":127,"name":"DUP6","source":0},{"begin":94,"end":127,"name":"GAS","source":0},{"begin":94,"end":127,"name":"STATICCALL","source":0},{"begin":94,"end":127,"name":"ISZERO","source":0},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"ISZERO","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":94,"end":127,"name":"JUMPI","source":0},{"begin":94,"end":127,"name":"RETURNDATASIZE","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"0"},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"RETURNDATACOPY","source":0},{"begin":94,"end":127,"name":"RETURNDATASIZE","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"0"},{"begin":94,"end":127,"name":"REVERT","source":0},{"begin":94,"end":127,"name":"tag","source":0,"value":"7"},{"begin":94,"end":127,"name":"JUMPDEST","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"60"},{"begin":94,"end":127,"name":"SHL","source":0},{"begin":94,"end":186,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":94,"end":186,"name":"NOT","source":0},{"begin":94,"end":186,"name":"AND","source":0},{"begin":94,"end":186,"name":"EQ","source":0},{"begin":86,"end":187,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":86,"end":187,"name":"JUMPI","source":0},{"begin":86,"end":187,"name":"PUSH","source":0,"value":"0"},{"begin":86,"end":187,"name":"DUP1","source":0},{"begin":86,"end":187,"name":"REVERT","source":0},{"begin":86,"end":187,"name":"tag","source":0,"value":"8"},{"begin":86,"end":187,"name":"JUMPDEST","source":0},{"begin":32,"end":202,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":32,"end":202,"name":"JUMP","source":0},{"begin":7,"end":380,"name":"tag","source":1,"value":"11"},{"begin":7,"end":380,"name":"JUMPDEST","source":1},{"begin":7,"end":380,"name":"PUSH","source":1,"value":"0"},{"begin":139,"end":177,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":171,"end":176,"name":"DUP3","source":1},{"begin":139,"end":177,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":139,"end":177,"name":"JUMP","source":1,"value":"[in]"},{"begin":139,"end":177,"name":"tag","source":1,"value":"13"},{"begin":139,"end":177,"name":"JUMPDEST","source":1},{"begin":193,"end":281,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":274,"end":280,"name":"DUP2","source":1},{"begin":269,"end":272,"name":"DUP6","source":1},{"begin":193,"end":281,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":193,"end":281,"name":"JUMP","source":1,"value":"[in]"},{"begin":193,"end":281,"name":"tag","source":1,"value":"15"},{"begin":193,"end":281,"name":"JUMPDEST","source":1},{"begin":186,"end":281,"name":"SWAP4","source":1},{"begin":186,"end":281,"name":"POP","source":1},{"begin":290,"end":342,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":335,"end":341,"name":"DUP2","source":1},{"begin":330,"end":333,"name":"DUP6","source":1},{"begin":323,"end":327,"name":"PUSH","source":1,"value":"20"},{"begin":316,"end":321,"name":"DUP7","source":1},{"begin":312,"end":328,"name":"ADD","source":1},{"begin":290,"end":342,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":290,"end":342,"name":"JUMP","source":1,"value":"[in]"},{"begin":290,"end":342,"name":"tag","source":1,"value":"17"},{"begin":290,"end":342,"name":"JUMPDEST","source":1},{"begin":367,"end":373,"name":"DUP1","source":1},{"begin":362,"end":365,"name":"DUP5","source":1},{"begin":358,"end":374,"name":"ADD","source":1},{"begin":351,"end":374,"name":"SWAP2","source":1},{"begin":351,"end":374,"name":"POP","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"SWAP3","source":1},{"begin":115,"end":380,"name":"SWAP2","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"JUMP","source":1,"value":"[out]"},{"begin":386,"end":657,"name":"tag","source":1,"value":"5"},{"begin":386,"end":657,"name":"JUMPDEST","source":1},{"begin":386,"end":657,"name":"PUSH","source":1,"value":"0"},{"begin":538,"end":631,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":627,"end":630,"name":"DUP3","source":1},{"begin":618,"end":624,"name":"DUP5","source":1},{"begin":538,"end":631,"name":"PUSH [tag]","source":1,"value":"11"},{"begin":538,"end":631,"name":"JUMP","source":1,"value":"[in]"},{"begin":538,"end":631,"name":"tag","source":1,"value":"20"},{"begin":538,"end":631,"name":"JUMPDEST","source":1},{"begin":531,"end":631,"name":"SWAP2","source":1},{"begin":531,"end":631,"name":"POP","source":1},{"begin":648,"end":651,"name":"DUP2","source":1},{"begin":641,"end":651,"name":"SWAP1","source":1},{"begin":641,"end":651,"name":"POP","source":1},{"begin":520,"end":657,"name":"SWAP3","source":1},{"begin":520,"end":657,"name":"SWAP2","source":1},{"begin":520,"end":657,"name":"POP","source":1},{"begin":520,"end":657,"name":"POP","source":1},{"begin":520,"end":657,"name":"JUMP","source":1,"value":"[out]"},{"begin":663,"end":761,"name":"tag","source":1,"value":"14"},{"begin":663,"end":761,"name":"JUMPDEST","source":1},{"begin":663,"end":761,"name":"PUSH","source":1,"value":"0"},{"begin":748,"end":753,"name":"DUP2","source":1},{"begin":742,"end":754,"name":"MLOAD","source":1},{"begin":732,"end":754,"name":"SWAP1","source":1},{"begin":732,"end":754,"name":"POP","source":1},{"begin":721,"end":761,"name":"SWAP2","source":1},{"begin":721,"end":761,"name":"SWAP1","source":1},{"begin":721,"end":761,"name":"POP","source":1},{"begin":721,"end":761,"name":"JUMP","source":1,"value":"[out]"},{"begin":767,"end":914,"name":"tag","source":1,"value":"16"},{"begin":767,"end":914,"name":"JUMPDEST","source":1},{"begin":767,"end":914,"name":"PUSH","source":1,"value":"0"},{"begin":905,"end":908,"name":"DUP2","source":1},{"begin":890,"end":908,"name":"SWAP1","source":1},{"begin":890,"end":908,"name":"POP","source":1},{"begin":880,"end":914,"name":"SWAP3","source":1},{"begin":880,"end":914,"name":"SWAP2","source":1},{"begin":880,"end":914,"name":"POP","source":1},{"begin":880,"end":914,"name":"POP","source":1},{"begin":880,"end":914,"name":"JUMP","source":1,"value":"[out]"},{"begin":920,"end":1227,"name":"tag","source":1,"value":"18"},{"begin":920,"end":1227,"name":"JUMPDEST","source":1},{"begin":988,"end":989,"name":"PUSH","source":1,"value":"0"},{"begin":998,"end":1111,"name":"tag","source":1,"value":"24"},{"begin":998,"end":1111,"name":"JUMPDEST","source":1},{"begin":1012,"end":1018,"name":"DUP4","source":1},{"begin":1009,"end":1010,"name":"DUP2","source":1},{"begin":1006,"end":1019,"name":"LT","source":1},{"begin":998,"end":1111,"name":"ISZERO","source":1},{"begin":998,"end":1111,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":998,"end":1111,"name":"JUMPI","source":1},{"begin":1097,"end":1098,"name":"DUP1","source":1},{"begin":1092,"end":1095,"name":"DUP3","source":1},{"begin":1088,"end":1099,"name":"ADD","source":1},{"begin":1082,"end":1100,"name":"MLOAD","source":1},{"begin":1078,"end":1079,"name":"DUP2","source":1},{"begin":1073,"end":1076,"name":"DUP5","source":1},{"begin":1069,"end":1080,"name":"ADD","source":1},{"begin":1062,"end":1101,"name":"MSTORE","source":1},{"begin":1034,"end":1036,"name":"PUSH","source":1,"value":"20"},{"begin":1031,"end":1032,"name":"DUP2","source":1},{"begin":1027,"end":1037,"name":"ADD","source":1},{"begin":1022,"end":1037,"name":"SWAP1","source":1},{"begin":1022,"end":1037,"name":"POP","source":1},{"begin":998,"end":1111,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":998,"end":1111,"name":"JUMP","source":1},{"begin":998,"end":1111,"name":"tag","source":1,"value":"26"},{"begin":998,"end":1111,"name":"JUMPDEST","source":1},{"begin":1129,"end":1135,"name":"DUP4","source":1},{"begin":1126,"end":1127,"name":"DUP2","source":1},{"begin":1123,"end":1136,"name":"GT","source":1},{"begin":1120,"end":1122,"name":"ISZERO","source":1},{"begin":1120,"end":1122,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1120,"end":1122,"name":"JUMPI","source":1},{"begin":1209,"end":1210,"name":"PUSH","source":1,"value":"0"},{"begin":1200,"end":1206,"name":"DUP5","source":1},{"begin":1195,"end":1198,"name":"DUP5","source":1},{"begin":1191,"end":1207,"name":"ADD","source":1},{"begin":1184,"end":1211,"name":"MSTORE","source":1},{"begin":1120,"end":1122,"name":"tag","source":1,"value":"27"},{"begin":1120,"end":1122,"name":"JUMPDEST","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"JUMP","source":1,"value":"[out]"},{"begin":32,"end":202,"name":"tag","source":0,"value":"9"},{"begin":32,"end":202,"name":"JUMPDEST","source":0},{"begin":32,"end":202,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":32,"end":202,"name":"DUP1","source":0},{"begin":32,"end":202,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"CODECOPY","source":0},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033",".code":[{"begin":32,"end":202,"name":"PUSH","source":0,"value":"80"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"40"},{"begin":32,"end":202,"name":"MSTORE","source":0},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"DUP1","source":0},{"begin":32,"end":202,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"HashRipmd160\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf3ae788ee7dce70defb6af44a4f7bfa31cb824bd3be9b4975e130191d96ea505\",\"urls\":[\"bzz-raw://4a252a1c455fb39492f493b58841b260aa4d0675a94cc892e218e07fc2d27b82\",\"dweb:/ipfs/QmUVQYPzqdmRavXJddNkSDZQ6hXThqVLHfYWFNj1yNMgSJ\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract HashRipmd160 {\n constructor() {\n require(ripemd160(bytes ('Hello World!')) ==\n hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c');\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/InfiniteContract.json b/tests/contracts/compiled/InfiniteContract.json index e89a9b9afe3..b8132ac18e3 100644 --- a/tests/contracts/compiled/InfiniteContract.json +++ b/tests/contracts/compiled/InfiniteContract.json @@ -1,772 +1 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [], - "name": "infinite", - "outputs": [ - { "internalType": "uint256", "name": "d", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:439:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "404:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "414:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "425:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "414:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "386:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "396:7:1", - "type": "" - } - ], - "src": "359:77:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "37800", - "executionCost": "87", - "totalCost": "37887" - }, - "external": { "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { "begin": 39, "end": 146, "name": "tag", "source": 0, "value": "1" }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 146, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 146, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 146, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 39, "end": 146, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { "begin": 75, "end": 140, "name": "DUP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SUB", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "RETURN", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 115, - "end": 121, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 131, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 124, "end": 139, "name": "ISZERO", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPI", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMP", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "7" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "12" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 436, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 436, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, - { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, - { "begin": 414, "end": 430, "name": "POP", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, - { "begin": 404, "end": 436, "name": "POP", "source": 1 }, - { - "begin": 404, - "end": 436, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }" -} +{"byteCode":"0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","contract":{"abi":[{"inputs":[],"name":"infinite","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:439:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"404:32:1","statements":[{"nodeType":"YulAssignment","src":"414:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"425:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"414:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"386:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"396:7:1","type":""}],"src":"359:77:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"37800","executionCost":"87","totalCost":"37887"},"external":{"infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CODECOPY","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033",".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":146,"name":"CALLDATASIZE","source":0},{"begin":39,"end":146,"name":"LT","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CALLDATALOAD","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":146,"name":"SHR","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":146,"name":"EQ","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"3"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"4"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"6"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"DUP1","source":0},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SUB","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"RETURN","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":115,"end":121,"name":"PUSH","source":0,"value":"0"},{"begin":124,"end":139,"name":"tag","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":131,"end":135,"name":"PUSH","source":0,"value":"1"},{"begin":124,"end":139,"name":"ISZERO","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPI","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMP","source":0},{"begin":124,"end":139,"name":"tag","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"12"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"14"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"7"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":436,"name":"tag","source":1,"value":"15"},{"begin":359,"end":436,"name":"JUMPDEST","source":1},{"begin":359,"end":436,"name":"PUSH","source":1,"value":"0"},{"begin":425,"end":430,"name":"DUP2","source":1},{"begin":414,"end":430,"name":"SWAP1","source":1},{"begin":414,"end":430,"name":"POP","source":1},{"begin":404,"end":436,"name":"SWAP2","source":1},{"begin":404,"end":436,"name":"SWAP1","source":1},{"begin":404,"end":436,"name":"POP","source":1},{"begin":404,"end":436,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/InfiniteContractVar.json b/tests/contracts/compiled/InfiniteContractVar.json index 62cd297b830..d056385f910 100644 --- a/tests/contracts/compiled/InfiniteContractVar.json +++ b/tests/contracts/compiled/InfiniteContractVar.json @@ -1,1423 +1 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "infinite", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":98:149 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":139:140 0 */\n 0x00\n /* \"main.sol\":131:136 count */\n dup1\n /* \"main.sol\":131:140 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":33:265 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":70:87 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":70:87 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":159:261 function infinite() public {... */\n tag_10:\n /* \"main.sol\":198:253 while (true) {... */\n tag_12:\n /* \"main.sol\":205:209 true */\n 0x01\n /* \"main.sol\":198:253 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":239:240 1 */\n 0x01\n /* \"main.sol\":233:238 count */\n sload(0x00)\n /* \"main.sol\":233:240 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":227:232 count */\n 0x00\n /* \"main.sol\":227:240 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":198:253 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":159:261 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", - "sourceMap": "33:232:0:-:0;;;98:51;;;;;;;;;;139:1;131:5;:9;;;;33:232;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x246618EDFDFE75761B39090A ADDRESS 0xBC PUSH31 0x4AD3BFDA696A8A4F7B0EEB0D4C4AD364736F6C634300080300330000000000 ", - "sourceMap": "33:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;159:102;;;:::i;:::-;;70:17;;;;:::o;159:102::-;198:55;205:4;198:55;;;239:1;233:5;;:7;;;;:::i;:::-;227:5;:13;;;;198:55;;;159:102::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "76000", - "executionCost": "5137", - "totalCost": "81137" - }, - "external": { "count()": "1107", "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, - { "begin": 98, "end": 149, "name": "CALLVALUE", "source": 0 }, - { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 98, "end": 149, "name": "ISZERO", "source": 0 }, - { - "begin": 98, - "end": 149, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 98, "end": 149, "name": "JUMPI", "source": 0 }, - { - "begin": 98, - "end": 149, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 98, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 98, "end": 149, "name": "REVERT", "source": 0 }, - { "begin": 98, "end": 149, "name": "tag", "source": 0, "value": "1" }, - { "begin": 98, "end": 149, "name": "JUMPDEST", "source": 0 }, - { "begin": 98, "end": 149, "name": "POP", "source": 0 }, - { - "begin": 139, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 131, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 131, "end": 140, "name": "DUP2", "source": 0 }, - { "begin": 131, "end": 140, "name": "SWAP1", "source": 0 }, - { "begin": 131, "end": 140, "name": "SSTORE", "source": 0 }, - { "begin": 131, "end": 140, "name": "POP", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "CODECOPY", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212206c00246618edfdfe75761b39090a30bc7e4ad3bfda696a8a4f7b0eeb0d4c4ad364736f6c63430008030033", - ".code": [ - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 33, "end": 265, "name": "MSTORE", "source": 0 }, - { "begin": 33, "end": 265, "name": "CALLVALUE", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "ISZERO", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, - { "begin": 33, "end": 265, "name": "POP", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 33, "end": 265, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 33, "end": 265, "name": "LT", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 33, "end": 265, "name": "SHR", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 33, "end": 265, "name": "EQ", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 33, "end": 265, "name": "JUMPI", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 33, "end": 265, "name": "JUMPDEST", "source": 0 }, - { - "begin": 33, - "end": 265, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 33, "end": 265, "name": "DUP1", "source": 0 }, - { "begin": 33, "end": 265, "name": "REVERT", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 70, "end": 87, "name": "MLOAD", "source": 0 }, - { "begin": 70, "end": 87, "name": "DUP1", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP2", "source": 0 }, - { "begin": 70, "end": 87, "name": "SUB", "source": 0 }, - { "begin": 70, "end": 87, "name": "SWAP1", "source": 0 }, - { "begin": 70, "end": 87, "name": "RETURN", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 159, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 159, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { "begin": 159, "end": 261, "name": "STOP", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 70, "end": 87, "name": "JUMPDEST", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 70, "end": 87, "name": "SLOAD", "source": 0 }, - { "begin": 70, "end": 87, "name": "DUP2", "source": 0 }, - { - "begin": 70, - "end": 87, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 159, - "end": 261, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 159, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, - { - "begin": 205, - "end": 209, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 198, "end": 253, "name": "ISZERO", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 198, "end": 253, "name": "JUMPI", "source": 0 }, - { - "begin": 239, - "end": 240, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 233, - "end": 238, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 233, "end": 238, "name": "SLOAD", "source": 0 }, - { - "begin": 233, - "end": 240, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 233, "end": 240, "name": "SWAP2", "source": 0 }, - { "begin": 233, "end": 240, "name": "SWAP1", "source": 0 }, - { - "begin": 233, - "end": 240, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 233, - "end": 240, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 233, - "end": 240, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 233, "end": 240, "name": "JUMPDEST", "source": 0 }, - { - "begin": 227, - "end": 232, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 227, "end": 240, "name": "DUP2", "source": 0 }, - { "begin": 227, "end": 240, "name": "SWAP1", "source": 0 }, - { "begin": 227, "end": 240, "name": "SSTORE", "source": 0 }, - { "begin": 227, "end": 240, "name": "POP", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 198, "end": 253, "name": "JUMP", "source": 0 }, - { - "begin": 198, - "end": 253, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 198, "end": 253, "name": "JUMPDEST", "source": 0 }, - { - "begin": 159, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x51a8c959c8212265da566e81fc6e172fe096fdb362e5247b5f4962e6f7fe5e5c\",\"urls\":[\"bzz-raw://38d00129ce5053e6ed7fa4655a83f8acb315c1e6754b5d20f8072f1da8498b5c\",\"dweb:/ipfs/QmPuwgoHiXtDjqBxKxijxaqY88FpQd6PyfM76LC6691C9W\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:InfiniteContractVar", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }" -} +{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinite","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":110:165 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":153:154 0 */\n 0x00\n /* \"main.sol\":145:150 count */\n dup1\n /* \"main.sol\":145:154 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":78:95 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":78:95 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_10:\n /* \"main.sol\":220:279 while (true) {... */\n tag_12:\n /* \"main.sol\":227:231 true */\n 0x01\n /* \"main.sol\":220:279 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":263:264 1 */\n 0x01\n /* \"main.sol\":257:262 count */\n sload(0x00)\n /* \"main.sol\":257:264 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":251:256 count */\n 0x00\n /* \"main.sol\":251:264 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":220:279 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":179:289 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:256:0:-:0;;;110:55;;;;;;;;;;153:1;145:5;:9;;;;39:256;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;179:110;;;:::i;:::-;;78:17;;;;:::o;179:110::-;220:59;227:4;220:59;;;263:1;257:5;;:7;;;;:::i;:::-;251:5;:13;;;;220:59;;;179:110::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"76000","executionCost":"5137","totalCost":"81137"},"external":{"count()":"1107","infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":295,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":295,"name":"MSTORE","source":0},{"begin":110,"end":165,"name":"CALLVALUE","source":0},{"begin":110,"end":165,"name":"DUP1","source":0},{"begin":110,"end":165,"name":"ISZERO","source":0},{"begin":110,"end":165,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":110,"end":165,"name":"JUMPI","source":0},{"begin":110,"end":165,"name":"PUSH","source":0,"value":"0"},{"begin":110,"end":165,"name":"DUP1","source":0},{"begin":110,"end":165,"name":"REVERT","source":0},{"begin":110,"end":165,"name":"tag","source":0,"value":"1"},{"begin":110,"end":165,"name":"JUMPDEST","source":0},{"begin":110,"end":165,"name":"POP","source":0},{"begin":153,"end":154,"name":"PUSH","source":0,"value":"0"},{"begin":145,"end":150,"name":"DUP1","source":0},{"begin":145,"end":154,"name":"DUP2","source":0},{"begin":145,"end":154,"name":"SWAP1","source":0},{"begin":145,"end":154,"name":"SSTORE","source":0},{"begin":145,"end":154,"name":"POP","source":0},{"begin":39,"end":295,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"CODECOPY","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033",".code":[{"begin":39,"end":295,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":295,"name":"MSTORE","source":0},{"begin":39,"end":295,"name":"CALLVALUE","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"ISZERO","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"REVERT","source":0},{"begin":39,"end":295,"name":"tag","source":0,"value":"1"},{"begin":39,"end":295,"name":"JUMPDEST","source":0},{"begin":39,"end":295,"name":"POP","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":295,"name":"CALLDATASIZE","source":0},{"begin":39,"end":295,"name":"LT","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"CALLDATALOAD","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":295,"name":"SHR","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":295,"name":"EQ","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":295,"name":"EQ","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"tag","source":0,"value":"2"},{"begin":39,"end":295,"name":"JUMPDEST","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"REVERT","source":0},{"begin":78,"end":95,"name":"tag","source":0,"value":"3"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[in]"},{"begin":78,"end":95,"name":"tag","source":0,"value":"5"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"40"},{"begin":78,"end":95,"name":"MLOAD","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":78,"end":95,"name":"SWAP2","source":0},{"begin":78,"end":95,"name":"SWAP1","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[in]"},{"begin":78,"end":95,"name":"tag","source":0,"value":"7"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"40"},{"begin":78,"end":95,"name":"MLOAD","source":0},{"begin":78,"end":95,"name":"DUP1","source":0},{"begin":78,"end":95,"name":"SWAP2","source":0},{"begin":78,"end":95,"name":"SUB","source":0},{"begin":78,"end":95,"name":"SWAP1","source":0},{"begin":78,"end":95,"name":"RETURN","source":0},{"begin":179,"end":289,"name":"tag","source":0,"value":"4"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":179,"end":289,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":179,"end":289,"name":"JUMP","source":0,"value":"[in]"},{"begin":179,"end":289,"name":"tag","source":0,"value":"9"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"STOP","source":0},{"begin":78,"end":95,"name":"tag","source":0,"value":"6"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"0"},{"begin":78,"end":95,"name":"SLOAD","source":0},{"begin":78,"end":95,"name":"DUP2","source":0},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[out]"},{"begin":179,"end":289,"name":"tag","source":0,"value":"10"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":220,"end":279,"name":"tag","source":0,"value":"12"},{"begin":220,"end":279,"name":"JUMPDEST","source":0},{"begin":227,"end":231,"name":"PUSH","source":0,"value":"1"},{"begin":220,"end":279,"name":"ISZERO","source":0},{"begin":220,"end":279,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":220,"end":279,"name":"JUMPI","source":0},{"begin":263,"end":264,"name":"PUSH","source":0,"value":"1"},{"begin":257,"end":262,"name":"PUSH","source":0,"value":"0"},{"begin":257,"end":262,"name":"SLOAD","source":0},{"begin":257,"end":264,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":257,"end":264,"name":"SWAP2","source":0},{"begin":257,"end":264,"name":"SWAP1","source":0},{"begin":257,"end":264,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":257,"end":264,"name":"JUMP","source":0,"value":"[in]"},{"begin":257,"end":264,"name":"tag","source":0,"value":"14"},{"begin":257,"end":264,"name":"JUMPDEST","source":0},{"begin":251,"end":256,"name":"PUSH","source":0,"value":"0"},{"begin":251,"end":264,"name":"DUP2","source":0},{"begin":251,"end":264,"name":"SWAP1","source":0},{"begin":251,"end":264,"name":"SSTORE","source":0},{"begin":251,"end":264,"name":"POP","source":0},{"begin":220,"end":279,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":220,"end":279,"name":"JUMP","source":0},{"begin":220,"end":279,"name":"tag","source":0,"value":"13"},{"begin":220,"end":279,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"17"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"19"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"22"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"15"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"24"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"25"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"27"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"20"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"28"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xcbf39d64fe7bd82974aa5a9bfb42586c61e5bb9108ce181d9ed5e1de9391de09\",\"urls\":[\"bzz-raw://b923edaafc3bd169c716485816211c8e1beabd855c34d9e1ca3702adae418b82\",\"dweb:/ipfs/QmQeXeFbuCmnqG1aSBxwmn5j5M4zPkmUWmbZcXytvYURwC\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:InfiniteContractVar","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/ModularCheck.json b/tests/contracts/compiled/ModularCheck.json new file mode 100644 index 00000000000..686a335abb1 --- /dev/null +++ b/tests/contracts/compiled/ModularCheck.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_b","type":"uint256"},{"internalType":"uint256","name":"_e","type":"uint256"},{"internalType":"uint256","name":"_m","type":"uint256"}],"name":"modExp","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":118:230 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":173:174 5 */\n 0x05\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n tag_4\n /* \"main.sol\":161:162 3 */\n 0x03\n /* \"main.sol\":164:165 5 */\n 0x05\n /* \"main.sol\":167:168 7 */\n 0x07\n /* \"main.sol\":154:160 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n 0x20\n shr\n jump\t// in\ntag_4:\n /* \"main.sol\":154:174 modExp(3, 5, 7) == 5 */\n eq\n /* \"main.sol\":146:175 require(modExp(3, 5, 7) == 5) */\n tag_6\n jumpi\n 0x00\n dup1\n revert\ntag_6:\n /* \"main.sol\":217:218 3 */\n 0x03\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n tag_7\n /* \"main.sol\":204:205 5 */\n 0x05\n /* \"main.sol\":207:208 7 */\n 0x07\n /* \"main.sol\":210:212 11 */\n 0x0b\n /* \"main.sol\":197:203 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n 0x20\n shr\n jump\t// in\ntag_7:\n /* \"main.sol\":197:218 modExp(5, 7, 11) == 3 */\n eq\n /* \"main.sol\":189:219 require(modExp(5, 7, 11) == 3) */\n tag_8\n jumpi\n 0x00\n dup1\n revert\ntag_8:\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n jump(tag_9)\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\ntag_5:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\ntag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":34:1334 contract ModularCheck {... */\ntag_9:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3148f14f\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\n tag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_13:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_15\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_16\n jump\t// in\n tag_15:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:704 */\n tag_6:\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":294:296 */\n 0x60\n /* \"#utility.yul\":282:291 */\n dup5\n /* \"#utility.yul\":273:280 */\n dup7\n /* \"#utility.yul\":269:292 */\n sub\n /* \"#utility.yul\":265:297 */\n slt\n /* \"#utility.yul\":262:264 */\n iszero\n tag_18\n jumpi\n /* \"#utility.yul\":310:311 */\n 0x00\n /* \"#utility.yul\":307:308 */\n dup1\n /* \"#utility.yul\":300:312 */\n revert\n /* \"#utility.yul\":262:264 */\n tag_18:\n /* \"#utility.yul\":353:354 */\n 0x00\n /* \"#utility.yul\":378:431 */\n tag_19\n /* \"#utility.yul\":423:430 */\n dup7\n /* \"#utility.yul\":414:420 */\n dup3\n /* \"#utility.yul\":403:412 */\n dup8\n /* \"#utility.yul\":399:421 */\n add\n /* \"#utility.yul\":378:431 */\n tag_13\n jump\t// in\n tag_19:\n /* \"#utility.yul\":368:431 */\n swap4\n pop\n /* \"#utility.yul\":324:441 */\n pop\n /* \"#utility.yul\":480:482 */\n 0x20\n /* \"#utility.yul\":506:559 */\n tag_20\n /* \"#utility.yul\":551:558 */\n dup7\n /* \"#utility.yul\":542:548 */\n dup3\n /* \"#utility.yul\":531:540 */\n dup8\n /* \"#utility.yul\":527:549 */\n add\n /* \"#utility.yul\":506:559 */\n tag_13\n jump\t// in\n tag_20:\n /* \"#utility.yul\":496:559 */\n swap3\n pop\n /* \"#utility.yul\":451:569 */\n pop\n /* \"#utility.yul\":608:610 */\n 0x40\n /* \"#utility.yul\":634:687 */\n tag_21\n /* \"#utility.yul\":679:686 */\n dup7\n /* \"#utility.yul\":670:676 */\n dup3\n /* \"#utility.yul\":659:668 */\n dup8\n /* \"#utility.yul\":655:677 */\n add\n /* \"#utility.yul\":634:687 */\n tag_13\n jump\t// in\n tag_21:\n /* \"#utility.yul\":624:687 */\n swap2\n pop\n /* \"#utility.yul\":579:697 */\n pop\n /* \"#utility.yul\":252:704 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":710:828 */\n tag_22:\n /* \"#utility.yul\":797:821 */\n tag_24\n /* \"#utility.yul\":815:820 */\n dup2\n /* \"#utility.yul\":797:821 */\n tag_25\n jump\t// in\n tag_24:\n /* \"#utility.yul\":792:795 */\n dup3\n /* \"#utility.yul\":785:822 */\n mstore\n /* \"#utility.yul\":775:828 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":834:1056 */\n tag_9:\n 0x00\n /* \"#utility.yul\":965:967 */\n 0x20\n /* \"#utility.yul\":954:963 */\n dup3\n /* \"#utility.yul\":950:968 */\n add\n /* \"#utility.yul\":942:968 */\n swap1\n pop\n /* \"#utility.yul\":978:1049 */\n tag_27\n /* \"#utility.yul\":1046:1047 */\n 0x00\n /* \"#utility.yul\":1035:1044 */\n dup4\n /* \"#utility.yul\":1031:1048 */\n add\n /* \"#utility.yul\":1022:1028 */\n dup5\n /* \"#utility.yul\":978:1049 */\n tag_22\n jump\t// in\n tag_27:\n /* \"#utility.yul\":932:1056 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1062:1139 */\n tag_25:\n 0x00\n /* \"#utility.yul\":1128:1133 */\n dup2\n /* \"#utility.yul\":1117:1133 */\n swap1\n pop\n /* \"#utility.yul\":1107:1139 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1145:1267 */\n tag_16:\n /* \"#utility.yul\":1218:1242 */\n tag_30\n /* \"#utility.yul\":1236:1241 */\n dup2\n /* \"#utility.yul\":1218:1242 */\n tag_25\n jump\t// in\n tag_30:\n /* \"#utility.yul\":1211:1216 */\n dup2\n /* \"#utility.yul\":1208:1243 */\n eq\n /* \"#utility.yul\":1198:1200 */\n tag_31\n jumpi\n /* \"#utility.yul\":1257:1258 */\n 0x00\n /* \"#utility.yul\":1254:1255 */\n dup1\n /* \"#utility.yul\":1247:1259 */\n revert\n /* \"#utility.yul\":1198:1200 */\n tag_31:\n /* \"#utility.yul\":1188:1267 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 PUSH2 0x27 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x47 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x194 DUP1 PUSH2 0xB4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ","sourceMap":"34:1300:0:-:0;;;118:112;;;;;;;;;;173:1;154:15;161:1;164;167;154:6;;;:15;;:::i;:::-;:20;146:29;;;;;;217:1;197:16;204:1;207;210:2;197:6;;;:16;;:::i;:::-;:21;189:30;;;;;;34:1300;;364:964;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;34:1300::-;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1270:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"252:452:1","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:1"},"nodeType":"YulFunctionCall","src":"300:12:1"},"nodeType":"YulExpressionStatement","src":"300:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:1"},"nodeType":"YulFunctionCall","src":"269:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:1","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:1"},"nodeType":"YulFunctionCall","src":"265:32:1"},"nodeType":"YulIf","src":"262:2:1"},{"nodeType":"YulBlock","src":"324:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"339:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"353:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"343:6:1","type":""}]},{"nodeType":"YulAssignment","src":"368:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"403:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"414:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:1"},"nodeType":"YulFunctionCall","src":"399:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"423:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"378:20:1"},"nodeType":"YulFunctionCall","src":"378:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"368:6:1"}]}]},{"nodeType":"YulBlock","src":"451:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"466:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"480:2:1","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"470:6:1","type":""}]},{"nodeType":"YulAssignment","src":"496:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"531:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"542:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"527:3:1"},"nodeType":"YulFunctionCall","src":"527:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"551:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"506:20:1"},"nodeType":"YulFunctionCall","src":"506:53:1"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"496:6:1"}]}]},{"nodeType":"YulBlock","src":"579:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"594:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"608:2:1","type":"","value":"64"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"598:6:1","type":""}]},{"nodeType":"YulAssignment","src":"624:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"659:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"670:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"655:3:1"},"nodeType":"YulFunctionCall","src":"655:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"679:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"634:20:1"},"nodeType":"YulFunctionCall","src":"634:53:1"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"624:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"206:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"217:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"229:6:1","type":""},{"name":"value1","nodeType":"YulTypedName","src":"237:6:1","type":""},{"name":"value2","nodeType":"YulTypedName","src":"245:6:1","type":""}],"src":"152:552:1"},{"body":{"nodeType":"YulBlock","src":"775:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"792:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"815:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"797:17:1"},"nodeType":"YulFunctionCall","src":"797:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"785:6:1"},"nodeType":"YulFunctionCall","src":"785:37:1"},"nodeType":"YulExpressionStatement","src":"785:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"763:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"770:3:1","type":""}],"src":"710:118:1"},{"body":{"nodeType":"YulBlock","src":"932:124:1","statements":[{"nodeType":"YulAssignment","src":"942:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"954:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"965:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"950:3:1"},"nodeType":"YulFunctionCall","src":"950:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"942:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1022:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1035:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1046:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1031:3:1"},"nodeType":"YulFunctionCall","src":"1031:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"978:43:1"},"nodeType":"YulFunctionCall","src":"978:71:1"},"nodeType":"YulExpressionStatement","src":"978:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"904:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"916:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"927:4:1","type":""}],"src":"834:222:1"},{"body":{"nodeType":"YulBlock","src":"1107:32:1","statements":[{"nodeType":"YulAssignment","src":"1117:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1128:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1117:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1089:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1099:7:1","type":""}],"src":"1062:77:1"},{"body":{"nodeType":"YulBlock","src":"1188:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1245:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:12:1"},"nodeType":"YulExpressionStatement","src":"1247:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1211:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1236:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1218:17:1"},"nodeType":"YulFunctionCall","src":"1218:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1208:2:1"},"nodeType":"YulFunctionCall","src":"1208:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1201:6:1"},"nodeType":"YulFunctionCall","src":"1201:43:1"},"nodeType":"YulIf","src":"1198:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1181:5:1","type":""}],"src":"1145:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ","sourceMap":"34:1300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:964;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:552::-;;;;294:2;282:9;273:7;269:23;265:32;262:2;;;310:1;307;300:12;262:2;353:1;378:53;423:7;414:6;403:9;399:22;378:53;:::i;:::-;368:63;;324:117;480:2;506:53;551:7;542:6;531:9;527:22;506:53;:::i;:::-;496:63;;451:118;608:2;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;579:118;252:452;;;;;:::o;710:118::-;797:24;815:5;797:24;:::i;:::-;792:3;785:37;775:53;;:::o;834:222::-;;965:2;954:9;950:18;942:26;;978:71;1046:1;1035:9;1031:17;1022:6;978:71;:::i;:::-;932:124;;;;:::o;1062:77::-;;1128:5;1117:16;;1107:32;;;:::o;1145:122::-;1218:24;1236:5;1218:24;:::i;:::-;1211:5;1208:35;1198:2;;1257:1;1254;1247:12;1198:2;1188:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"80800","executionCost":"infinite","totalCost":"infinite"},"external":{"modExp(uint256,uint256,uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1334,"name":"MSTORE","source":0},{"begin":118,"end":230,"name":"CALLVALUE","source":0},{"begin":118,"end":230,"name":"DUP1","source":0},{"begin":118,"end":230,"name":"ISZERO","source":0},{"begin":118,"end":230,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":118,"end":230,"name":"JUMPI","source":0},{"begin":118,"end":230,"name":"PUSH","source":0,"value":"0"},{"begin":118,"end":230,"name":"DUP1","source":0},{"begin":118,"end":230,"name":"REVERT","source":0},{"begin":118,"end":230,"name":"tag","source":0,"value":"1"},{"begin":118,"end":230,"name":"JUMPDEST","source":0},{"begin":118,"end":230,"name":"POP","source":0},{"begin":173,"end":174,"name":"PUSH","source":0,"value":"5"},{"begin":154,"end":169,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":161,"end":162,"name":"PUSH","source":0,"value":"3"},{"begin":164,"end":165,"name":"PUSH","source":0,"value":"5"},{"begin":167,"end":168,"name":"PUSH","source":0,"value":"7"},{"begin":154,"end":160,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":154,"end":160,"name":"PUSH","source":0,"value":"20"},{"begin":154,"end":160,"name":"SHL","source":0},{"begin":154,"end":169,"name":"PUSH","source":0,"value":"20"},{"begin":154,"end":169,"name":"SHR","source":0},{"begin":154,"end":169,"name":"JUMP","source":0,"value":"[in]"},{"begin":154,"end":169,"name":"tag","source":0,"value":"4"},{"begin":154,"end":169,"name":"JUMPDEST","source":0},{"begin":154,"end":174,"name":"EQ","source":0},{"begin":146,"end":175,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":146,"end":175,"name":"JUMPI","source":0},{"begin":146,"end":175,"name":"PUSH","source":0,"value":"0"},{"begin":146,"end":175,"name":"DUP1","source":0},{"begin":146,"end":175,"name":"REVERT","source":0},{"begin":146,"end":175,"name":"tag","source":0,"value":"6"},{"begin":146,"end":175,"name":"JUMPDEST","source":0},{"begin":217,"end":218,"name":"PUSH","source":0,"value":"3"},{"begin":197,"end":213,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":204,"end":205,"name":"PUSH","source":0,"value":"5"},{"begin":207,"end":208,"name":"PUSH","source":0,"value":"7"},{"begin":210,"end":212,"name":"PUSH","source":0,"value":"B"},{"begin":197,"end":203,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":197,"end":203,"name":"PUSH","source":0,"value":"20"},{"begin":197,"end":203,"name":"SHL","source":0},{"begin":197,"end":213,"name":"PUSH","source":0,"value":"20"},{"begin":197,"end":213,"name":"SHR","source":0},{"begin":197,"end":213,"name":"JUMP","source":0,"value":"[in]"},{"begin":197,"end":213,"name":"tag","source":0,"value":"7"},{"begin":197,"end":213,"name":"JUMPDEST","source":0},{"begin":197,"end":218,"name":"EQ","source":0},{"begin":189,"end":219,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":189,"end":219,"name":"JUMPI","source":0},{"begin":189,"end":219,"name":"PUSH","source":0,"value":"0"},{"begin":189,"end":219,"name":"DUP1","source":0},{"begin":189,"end":219,"name":"REVERT","source":0},{"begin":189,"end":219,"name":"tag","source":0,"value":"8"},{"begin":189,"end":219,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":34,"end":1334,"name":"JUMP","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"5"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":432,"end":446,"name":"PUSH","source":0,"value":"0"},{"begin":549,"end":553,"name":"PUSH","source":0,"value":"40"},{"begin":543,"end":554,"name":"MLOAD","source":0},{"begin":672,"end":676,"name":"PUSH","source":0,"value":"20"},{"begin":663,"end":670,"name":"DUP2","source":0},{"begin":656,"end":677,"name":"MSTORE","source":0},{"begin":721,"end":725,"name":"PUSH","source":0,"value":"20"},{"begin":714,"end":718,"name":"DUP1","source":0},{"begin":705,"end":712,"name":"DUP3","source":0},{"begin":701,"end":719,"name":"ADD","source":0},{"begin":694,"end":726,"name":"MSTORE","source":0},{"begin":770,"end":774,"name":"PUSH","source":0,"value":"20"},{"begin":763,"end":767,"name":"PUSH","source":0,"value":"40"},{"begin":754,"end":761,"name":"DUP3","source":0},{"begin":750,"end":768,"name":"ADD","source":0},{"begin":743,"end":775,"name":"MSTORE","source":0},{"begin":886,"end":888,"name":"DUP5","source":0},{"begin":879,"end":883,"name":"PUSH","source":0,"value":"60"},{"begin":870,"end":877,"name":"DUP3","source":0},{"begin":866,"end":884,"name":"ADD","source":0},{"begin":859,"end":889,"name":"MSTORE","source":0},{"begin":933,"end":935,"name":"DUP4","source":0},{"begin":926,"end":930,"name":"PUSH","source":0,"value":"80"},{"begin":917,"end":924,"name":"DUP3","source":0},{"begin":913,"end":931,"name":"ADD","source":0},{"begin":906,"end":936,"name":"MSTORE","source":0},{"begin":981,"end":983,"name":"DUP3","source":0},{"begin":974,"end":978,"name":"PUSH","source":0,"value":"A0"},{"begin":965,"end":972,"name":"DUP3","source":0},{"begin":961,"end":979,"name":"ADD","source":0},{"begin":954,"end":984,"name":"MSTORE","source":0},{"begin":1056,"end":1060,"name":"PUSH","source":0,"value":"C0"},{"begin":1050,"end":1061,"name":"MLOAD","source":0},{"begin":1202,"end":1206,"name":"PUSH","source":0,"value":"20"},{"begin":1195,"end":1200,"name":"DUP2","source":0},{"begin":1189,"end":1193,"name":"PUSH","source":0,"value":"C0"},{"begin":1180,"end":1187,"name":"DUP5","source":0},{"begin":1177,"end":1178,"name":"PUSH","source":0,"value":"0"},{"begin":1171,"end":1175,"name":"PUSH","source":0,"value":"5"},{"begin":1167,"end":1168,"name":"PUSH","source":0,"value":"0"},{"begin":1163,"end":1169,"name":"NOT","source":0},{"begin":1158,"end":1207,"name":"CALL","source":0},{"begin":1148,"end":1150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPI","source":0},{"begin":1241,"end":1242,"name":"PUSH","source":0,"value":"0"},{"begin":1238,"end":1239,"name":"DUP1","source":0},{"begin":1231,"end":1243,"name":"REVERT","source":0},{"begin":1148,"end":1150,"name":"tag","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPDEST","source":0},{"begin":1298,"end":1303,"name":"DUP1","source":0},{"begin":1292,"end":1304,"name":"MLOAD","source":0},{"begin":1282,"end":1304,"name":"SWAP3","source":0},{"begin":1282,"end":1304,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"SWAP4","source":0},{"begin":471,"end":1318,"name":"SWAP3","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"JUMP","source":0,"value":"[out]"},{"begin":34,"end":1334,"name":"tag","source":0,"value":"9"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"CODECOPY","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033",".code":[{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1334,"name":"MSTORE","source":0},{"begin":34,"end":1334,"name":"CALLVALUE","source":0},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"ISZERO","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"REVERT","source":0},{"begin":34,"end":1334,"name":"tag","source":0,"value":"1"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"POP","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"4"},{"begin":34,"end":1334,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1334,"name":"LT","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"CALLDATALOAD","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"E0"},{"begin":34,"end":1334,"name":"SHR","source":0},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"3148F14F"},{"begin":34,"end":1334,"name":"EQ","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"tag","source":0,"value":"2"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"REVERT","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"3"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"4"},{"begin":364,"end":1328,"name":"DUP1","source":0},{"begin":364,"end":1328,"name":"CALLDATASIZE","source":0},{"begin":364,"end":1328,"name":"SUB","source":0},{"begin":364,"end":1328,"name":"DUP2","source":0},{"begin":364,"end":1328,"name":"ADD","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"5"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"4"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"40"},{"begin":364,"end":1328,"name":"MLOAD","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"8"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"40"},{"begin":364,"end":1328,"name":"MLOAD","source":0},{"begin":364,"end":1328,"name":"DUP1","source":0},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SUB","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"RETURN","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"7"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":432,"end":446,"name":"PUSH","source":0,"value":"0"},{"begin":549,"end":553,"name":"PUSH","source":0,"value":"40"},{"begin":543,"end":554,"name":"MLOAD","source":0},{"begin":672,"end":676,"name":"PUSH","source":0,"value":"20"},{"begin":663,"end":670,"name":"DUP2","source":0},{"begin":656,"end":677,"name":"MSTORE","source":0},{"begin":721,"end":725,"name":"PUSH","source":0,"value":"20"},{"begin":714,"end":718,"name":"DUP1","source":0},{"begin":705,"end":712,"name":"DUP3","source":0},{"begin":701,"end":719,"name":"ADD","source":0},{"begin":694,"end":726,"name":"MSTORE","source":0},{"begin":770,"end":774,"name":"PUSH","source":0,"value":"20"},{"begin":763,"end":767,"name":"PUSH","source":0,"value":"40"},{"begin":754,"end":761,"name":"DUP3","source":0},{"begin":750,"end":768,"name":"ADD","source":0},{"begin":743,"end":775,"name":"MSTORE","source":0},{"begin":886,"end":888,"name":"DUP5","source":0},{"begin":879,"end":883,"name":"PUSH","source":0,"value":"60"},{"begin":870,"end":877,"name":"DUP3","source":0},{"begin":866,"end":884,"name":"ADD","source":0},{"begin":859,"end":889,"name":"MSTORE","source":0},{"begin":933,"end":935,"name":"DUP4","source":0},{"begin":926,"end":930,"name":"PUSH","source":0,"value":"80"},{"begin":917,"end":924,"name":"DUP3","source":0},{"begin":913,"end":931,"name":"ADD","source":0},{"begin":906,"end":936,"name":"MSTORE","source":0},{"begin":981,"end":983,"name":"DUP3","source":0},{"begin":974,"end":978,"name":"PUSH","source":0,"value":"A0"},{"begin":965,"end":972,"name":"DUP3","source":0},{"begin":961,"end":979,"name":"ADD","source":0},{"begin":954,"end":984,"name":"MSTORE","source":0},{"begin":1056,"end":1060,"name":"PUSH","source":0,"value":"C0"},{"begin":1050,"end":1061,"name":"MLOAD","source":0},{"begin":1202,"end":1206,"name":"PUSH","source":0,"value":"20"},{"begin":1195,"end":1200,"name":"DUP2","source":0},{"begin":1189,"end":1193,"name":"PUSH","source":0,"value":"C0"},{"begin":1180,"end":1187,"name":"DUP5","source":0},{"begin":1177,"end":1178,"name":"PUSH","source":0,"value":"0"},{"begin":1171,"end":1175,"name":"PUSH","source":0,"value":"5"},{"begin":1167,"end":1168,"name":"PUSH","source":0,"value":"0"},{"begin":1163,"end":1169,"name":"NOT","source":0},{"begin":1158,"end":1207,"name":"CALL","source":0},{"begin":1148,"end":1150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPI","source":0},{"begin":1241,"end":1242,"name":"PUSH","source":0,"value":"0"},{"begin":1238,"end":1239,"name":"DUP1","source":0},{"begin":1231,"end":1243,"name":"REVERT","source":0},{"begin":1148,"end":1150,"name":"tag","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPDEST","source":0},{"begin":1298,"end":1303,"name":"DUP1","source":0},{"begin":1292,"end":1304,"name":"MLOAD","source":0},{"begin":1282,"end":1304,"name":"SWAP3","source":0},{"begin":1282,"end":1304,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"SWAP4","source":0},{"begin":471,"end":1318,"name":"SWAP3","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"13"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"15"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":704,"name":"tag","source":1,"value":"6"},{"begin":152,"end":704,"name":"JUMPDEST","source":1},{"begin":152,"end":704,"name":"PUSH","source":1,"value":"0"},{"begin":152,"end":704,"name":"DUP1","source":1},{"begin":152,"end":704,"name":"PUSH","source":1,"value":"0"},{"begin":294,"end":296,"name":"PUSH","source":1,"value":"60"},{"begin":282,"end":291,"name":"DUP5","source":1},{"begin":273,"end":280,"name":"DUP7","source":1},{"begin":269,"end":292,"name":"SUB","source":1},{"begin":265,"end":297,"name":"SLT","source":1},{"begin":262,"end":264,"name":"ISZERO","source":1},{"begin":262,"end":264,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":262,"end":264,"name":"JUMPI","source":1},{"begin":310,"end":311,"name":"PUSH","source":1,"value":"0"},{"begin":307,"end":308,"name":"DUP1","source":1},{"begin":300,"end":312,"name":"REVERT","source":1},{"begin":262,"end":264,"name":"tag","source":1,"value":"18"},{"begin":262,"end":264,"name":"JUMPDEST","source":1},{"begin":353,"end":354,"name":"PUSH","source":1,"value":"0"},{"begin":378,"end":431,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":423,"end":430,"name":"DUP7","source":1},{"begin":414,"end":420,"name":"DUP3","source":1},{"begin":403,"end":412,"name":"DUP8","source":1},{"begin":399,"end":421,"name":"ADD","source":1},{"begin":378,"end":431,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":378,"end":431,"name":"JUMP","source":1,"value":"[in]"},{"begin":378,"end":431,"name":"tag","source":1,"value":"19"},{"begin":378,"end":431,"name":"JUMPDEST","source":1},{"begin":368,"end":431,"name":"SWAP4","source":1},{"begin":368,"end":431,"name":"POP","source":1},{"begin":324,"end":441,"name":"POP","source":1},{"begin":480,"end":482,"name":"PUSH","source":1,"value":"20"},{"begin":506,"end":559,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":551,"end":558,"name":"DUP7","source":1},{"begin":542,"end":548,"name":"DUP3","source":1},{"begin":531,"end":540,"name":"DUP8","source":1},{"begin":527,"end":549,"name":"ADD","source":1},{"begin":506,"end":559,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":506,"end":559,"name":"JUMP","source":1,"value":"[in]"},{"begin":506,"end":559,"name":"tag","source":1,"value":"20"},{"begin":506,"end":559,"name":"JUMPDEST","source":1},{"begin":496,"end":559,"name":"SWAP3","source":1},{"begin":496,"end":559,"name":"POP","source":1},{"begin":451,"end":569,"name":"POP","source":1},{"begin":608,"end":610,"name":"PUSH","source":1,"value":"40"},{"begin":634,"end":687,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":679,"end":686,"name":"DUP7","source":1},{"begin":670,"end":676,"name":"DUP3","source":1},{"begin":659,"end":668,"name":"DUP8","source":1},{"begin":655,"end":677,"name":"ADD","source":1},{"begin":634,"end":687,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":634,"end":687,"name":"JUMP","source":1,"value":"[in]"},{"begin":634,"end":687,"name":"tag","source":1,"value":"21"},{"begin":634,"end":687,"name":"JUMPDEST","source":1},{"begin":624,"end":687,"name":"SWAP2","source":1},{"begin":624,"end":687,"name":"POP","source":1},{"begin":579,"end":697,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"JUMP","source":1,"value":"[out]"},{"begin":710,"end":828,"name":"tag","source":1,"value":"22"},{"begin":710,"end":828,"name":"JUMPDEST","source":1},{"begin":797,"end":821,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":815,"end":820,"name":"DUP2","source":1},{"begin":797,"end":821,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":797,"end":821,"name":"JUMP","source":1,"value":"[in]"},{"begin":797,"end":821,"name":"tag","source":1,"value":"24"},{"begin":797,"end":821,"name":"JUMPDEST","source":1},{"begin":792,"end":795,"name":"DUP3","source":1},{"begin":785,"end":822,"name":"MSTORE","source":1},{"begin":775,"end":828,"name":"POP","source":1},{"begin":775,"end":828,"name":"POP","source":1},{"begin":775,"end":828,"name":"JUMP","source":1,"value":"[out]"},{"begin":834,"end":1056,"name":"tag","source":1,"value":"9"},{"begin":834,"end":1056,"name":"JUMPDEST","source":1},{"begin":834,"end":1056,"name":"PUSH","source":1,"value":"0"},{"begin":965,"end":967,"name":"PUSH","source":1,"value":"20"},{"begin":954,"end":963,"name":"DUP3","source":1},{"begin":950,"end":968,"name":"ADD","source":1},{"begin":942,"end":968,"name":"SWAP1","source":1},{"begin":942,"end":968,"name":"POP","source":1},{"begin":978,"end":1049,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1046,"end":1047,"name":"PUSH","source":1,"value":"0"},{"begin":1035,"end":1044,"name":"DUP4","source":1},{"begin":1031,"end":1048,"name":"ADD","source":1},{"begin":1022,"end":1028,"name":"DUP5","source":1},{"begin":978,"end":1049,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":978,"end":1049,"name":"JUMP","source":1,"value":"[in]"},{"begin":978,"end":1049,"name":"tag","source":1,"value":"27"},{"begin":978,"end":1049,"name":"JUMPDEST","source":1},{"begin":932,"end":1056,"name":"SWAP3","source":1},{"begin":932,"end":1056,"name":"SWAP2","source":1},{"begin":932,"end":1056,"name":"POP","source":1},{"begin":932,"end":1056,"name":"POP","source":1},{"begin":932,"end":1056,"name":"JUMP","source":1,"value":"[out]"},{"begin":1062,"end":1139,"name":"tag","source":1,"value":"25"},{"begin":1062,"end":1139,"name":"JUMPDEST","source":1},{"begin":1062,"end":1139,"name":"PUSH","source":1,"value":"0"},{"begin":1128,"end":1133,"name":"DUP2","source":1},{"begin":1117,"end":1133,"name":"SWAP1","source":1},{"begin":1117,"end":1133,"name":"POP","source":1},{"begin":1107,"end":1139,"name":"SWAP2","source":1},{"begin":1107,"end":1139,"name":"SWAP1","source":1},{"begin":1107,"end":1139,"name":"POP","source":1},{"begin":1107,"end":1139,"name":"JUMP","source":1,"value":"[out]"},{"begin":1145,"end":1267,"name":"tag","source":1,"value":"16"},{"begin":1145,"end":1267,"name":"JUMPDEST","source":1},{"begin":1218,"end":1242,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1236,"end":1241,"name":"DUP2","source":1},{"begin":1218,"end":1242,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":1218,"end":1242,"name":"JUMP","source":1,"value":"[in]"},{"begin":1218,"end":1242,"name":"tag","source":1,"value":"30"},{"begin":1218,"end":1242,"name":"JUMPDEST","source":1},{"begin":1211,"end":1216,"name":"DUP2","source":1},{"begin":1208,"end":1243,"name":"EQ","source":1},{"begin":1198,"end":1200,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1198,"end":1200,"name":"JUMPI","source":1},{"begin":1257,"end":1258,"name":"PUSH","source":1,"value":"0"},{"begin":1254,"end":1255,"name":"DUP1","source":1},{"begin":1247,"end":1259,"name":"REVERT","source":1},{"begin":1198,"end":1200,"name":"tag","source":1,"value":"31"},{"begin":1198,"end":1200,"name":"JUMPDEST","source":1},{"begin":1188,"end":1267,"name":"POP","source":1},{"begin":1188,"end":1267,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"modExp(uint256,uint256,uint256)":"3148f14f"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_e\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_m\",\"type\":\"uint256\"}],\"name\":\"modExp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ModularCheck\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x097512cf9987b49bfe8f0a182553ada97250dc01d384db9cdcaed8ad64079749\",\"urls\":[\"bzz-raw://58b5775c60ddc5d903527600fcd1730275d92f25d2cbe4155407d1dcf1409268\",\"dweb:/ipfs/QmYGYVSziwMp5tgyj6R6WxDScMUSdLTBNuzgjU1DwFHiN5\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract ModularCheck {\n // Verify simple modular exponentiation\n constructor() {\n require(modExp(3, 5, 7) == 5);\n require(modExp(5, 7, 11) == 3);\n }\n // Wrapper function to use the precompile.\n // Taken from https://ethereum.stackexchange.com/a/71590/9963\n function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {\n assembly {\n // Free memory pointer\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), _b)\n mstore(add(pointer, 0x80), _e)\n\n mstore(add(pointer, 0xa0), _m)\n // Store the result\n let value := mload(0xc0)\n // Call the precompiled contract 0x05 = bigModExp\n if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {\n revert(0, 0)\n }\n result := mload(value)\n }\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/SingleEventContract.json b/tests/contracts/compiled/SingleEventContract.json new file mode 100644 index 00000000000..01e6d253210 --- /dev/null +++ b/tests/contracts/compiled/SingleEventContract.json @@ -0,0 +1 @@ +{"byteCode":"0x6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"Constructed","type":"event"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":133:200 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":178:188 msg.sender */\n caller\n /* \"main.sol\":166:189 Constructed(msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3F DUP1 PUSH1 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:163:0:-:0;;;133:67;;;;;;;;;;178:10;166:23;;;;;;;;;;;;43:163;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:163:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"1226","totalCost":"13826"}},"legacyAssembly":{".code":[{"begin":43,"end":206,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":206,"name":"MSTORE","source":0},{"begin":133,"end":200,"name":"CALLVALUE","source":0},{"begin":133,"end":200,"name":"DUP1","source":0},{"begin":133,"end":200,"name":"ISZERO","source":0},{"begin":133,"end":200,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":133,"end":200,"name":"JUMPI","source":0},{"begin":133,"end":200,"name":"PUSH","source":0,"value":"0"},{"begin":133,"end":200,"name":"DUP1","source":0},{"begin":133,"end":200,"name":"REVERT","source":0},{"begin":133,"end":200,"name":"tag","source":0,"value":"1"},{"begin":133,"end":200,"name":"JUMPDEST","source":0},{"begin":133,"end":200,"name":"POP","source":0},{"begin":178,"end":188,"name":"CALLER","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":166,"end":189,"name":"AND","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D"},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40"},{"begin":166,"end":189,"name":"MLOAD","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40"},{"begin":166,"end":189,"name":"MLOAD","source":0},{"begin":166,"end":189,"name":"DUP1","source":0},{"begin":166,"end":189,"name":"SWAP2","source":0},{"begin":166,"end":189,"name":"SUB","source":0},{"begin":166,"end":189,"name":"SWAP1","source":0},{"begin":166,"end":189,"name":"LOG2","source":0},{"begin":43,"end":206,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":206,"name":"DUP1","source":0},{"begin":43,"end":206,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"CODECOPY","source":0},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033",".code":[{"begin":43,"end":206,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":206,"name":"MSTORE","source":0},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"DUP1","source":0},{"begin":43,"end":206,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Constructed\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"SingleEventContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5bdc4e014e35f9b07112af42347d90a14e9ea3cf8b609e48e93273606b5896b2\",\"urls\":[\"bzz-raw://20d9c0eb3ca1fceec867318c063ab277ffcf57928a325da537cb5f061ea713cf\",\"dweb:/ipfs/QmYHPwfoDdMa7p1oUG44unJ3vHQWSSqaBJ2xVj5dJEvoim\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract SingleEventContract {\n event Constructed(address indexed owner);\n\n constructor() {\n emit Constructed(msg.sender);\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/TestContract.json b/tests/contracts/compiled/TestContract.json index 8db89a0ee63..6eec83ae53e 100644 --- a/tests/contracts/compiled/TestContract.json +++ b/tests/contracts/compiled/TestContract.json @@ -1,1952 +1 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint256", "name": "a", "type": "uint256" } - ], - "name": "multiply", - "outputs": [ - { "internalType": "uint256", "name": "d", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:136 contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}} */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":112:118 uint d */\n 0x00\n /* \"main.sol\":132:133 7 */\n 0x07\n /* \"main.sol\":128:129 a */\n dup3\n /* \"main.sol\":128:133 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":121:133 return a * 7 */\n swap1\n pop\n /* \"main.sol\":66:135 function multiply(uint a) public pure returns(uint d) {return a * 7;} */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1520:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "218:196:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "260:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "231:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "231:32:1" - }, - "nodeType": "YulIf", - "src": "228:2:1" - }, - { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "319:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "485:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "502:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "525:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "507:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "507:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "495:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "480:3:1", - "type": "" - } - ], - "src": "420:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "652:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "664:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "675:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "660:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "652:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "732:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "741:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "741:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "688:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "688:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "688:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "614:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "626:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "637:4:1", - "type": "" - } - ], - "src": "544:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "820:300:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "830:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "853:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "835:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "835:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "830:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "864:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "887:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "869:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "869:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "864:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1062:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1064:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1064:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1064:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "974:1:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "967:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "967:9:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "960:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "960:17:1" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "982:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1057:1:1" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "985:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "985:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "979:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "979:81:1" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "956:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "956:105:1" - }, - "nodeType": "YulIf", - "src": "953:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "1094:20:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1109:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1112:1:1" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "1105:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1105:9:1" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "1094:7:1" - } - ] - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "803:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "806:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "812:7:1", - "type": "" - } - ], - "src": "772:348:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1171:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1181:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1192:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1181:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1153:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1163:7:1", - "type": "" - } - ], - "src": "1126:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1237:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1254:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1247:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1247:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1247:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1351:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1354:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1344:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1344:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1344:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1375:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1378:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1368:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1368:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1368:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1209:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1438:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1495:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1504:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1507:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1497:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1497:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1497:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1461:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1486:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1468:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1468:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1458:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1458:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1451:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1451:43:1" - }, - "nodeType": "YulIf", - "src": "1448:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1431:5:1", - "type": "" - } - ], - "src": "1395:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 DUP15 LT 0x21 0xB7 PUSH19 0x79E6FA68A88B71CA091BB5AA25D4D619327607 0xC4 0xE2 SMOD 0xC5 DUP8 CALL 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:93:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;112:6;132:1;128;:5;;;;:::i;:::-;121:12;;66:69;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "89200", - "executionCost": "135", - "totalCost": "89335" - }, - "external": { "multiply(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, - { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { "begin": 43, "end": 136, "name": "tag", "source": 0, "value": "1" }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { "begin": 43, "end": 136, "name": "POP", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "CODECOPY", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4e207c587f1e264736f6c63430008030033", - ".code": [ - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 136, "name": "MSTORE", "source": 0 }, - { "begin": 43, "end": 136, "name": "CALLVALUE", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "ISZERO", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { "begin": 43, "end": 136, "name": "POP", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 43, "end": 136, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 43, "end": 136, "name": "LT", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 43, "end": 136, "name": "SHR", "source": 0 }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "C6888FA1" - }, - { "begin": 43, "end": 136, "name": "EQ", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 43, "end": 136, "name": "JUMPI", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 43, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 43, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 136, "name": "REVERT", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 135, "name": "DUP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "ADD", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 135, "name": "MLOAD", "source": 0 }, - { "begin": 66, "end": 135, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "RETURN", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 66, "end": 135, "name": "JUMPDEST", "source": 0 }, - { - "begin": 112, - "end": 118, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 132, - "end": 133, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 128, "end": 129, "name": "DUP3", "source": 0 }, - { - "begin": 128, - "end": 133, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 128, "end": 133, "name": "SWAP2", "source": 0 }, - { "begin": 128, "end": 133, "name": "SWAP1", "source": 0 }, - { - "begin": 128, - "end": 133, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 128, - "end": 133, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 128, - "end": 133, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 128, "end": 133, "name": "JUMPDEST", "source": 0 }, - { "begin": 121, "end": 133, "name": "SWAP1", "source": 0 }, - { "begin": 121, "end": 133, "name": "POP", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 135, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 135, "name": "POP", "source": 0 }, - { - "begin": 66, - "end": 135, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "6" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1120, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 772, "end": 1120, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1120, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { "begin": 853, "end": 854, "name": "DUP3", "source": 1 }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 835, - "end": 855, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 835, - "end": 855, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 835, "end": 855, "name": "JUMPDEST", "source": 1 }, - { "begin": 830, "end": 855, "name": "SWAP2", "source": 1 }, - { "begin": 830, "end": 855, "name": "POP", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 887, "end": 888, "name": "DUP4", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 869, - "end": 889, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 869, - "end": 889, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 869, "end": 889, "name": "JUMPDEST", "source": 1 }, - { "begin": 864, "end": 889, "name": "SWAP3", "source": 1 }, - { "begin": 864, "end": 889, "name": "POP", "source": 1 }, - { "begin": 1057, "end": 1058, "name": "DUP2", "source": 1 }, - { - "begin": 989, - "end": 1055, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 985, "end": 1059, "name": "DIV", "source": 1 }, - { "begin": 982, "end": 983, "name": "DUP4", "source": 1 }, - { "begin": 979, "end": 1060, "name": "GT", "source": 1 }, - { "begin": 974, "end": 975, "name": "DUP3", "source": 1 }, - { "begin": 967, "end": 976, "name": "ISZERO", "source": 1 }, - { "begin": 960, "end": 977, "name": "ISZERO", "source": 1 }, - { "begin": 956, "end": 1061, "name": "AND", "source": 1 }, - { "begin": 953, "end": 955, "name": "ISZERO", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPI", "source": 1 }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1064, - "end": 1082, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1064, - "end": 1082, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1064, "end": 1082, "name": "JUMPDEST", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPDEST", "source": 1 }, - { "begin": 1112, "end": 1113, "name": "DUP3", "source": 1 }, - { "begin": 1109, "end": 1110, "name": "DUP3", "source": 1 }, - { "begin": 1105, "end": 1114, "name": "MUL", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "SWAP1", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP3", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP2", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { - "begin": 820, - "end": 1120, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1126, - "end": 1203, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1126, "end": 1203, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1126, - "end": 1203, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1192, "end": 1197, "name": "DUP2", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "SWAP1", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "POP", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP2", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP1", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "POP", "source": 1 }, - { - "begin": 1171, - "end": 1203, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1209, - "end": 1389, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1209, "end": 1389, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1257, - "end": 1334, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1254, - "end": 1255, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1247, "end": 1335, "name": "MSTORE", "source": 1 }, - { - "begin": 1354, - "end": 1358, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1351, - "end": 1352, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1344, "end": 1359, "name": "MSTORE", "source": 1 }, - { - "begin": 1378, - "end": 1382, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1375, - "end": 1376, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1368, "end": 1383, "name": "REVERT", "source": 1 }, - { - "begin": 1395, - "end": 1517, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 1395, "end": 1517, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 1486, "end": 1491, "name": "DUP2", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1468, - "end": 1492, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1468, - "end": 1492, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 1468, "end": 1492, "name": "JUMPDEST", "source": 1 }, - { "begin": 1461, "end": 1466, "name": "DUP2", "source": 1 }, - { "begin": 1458, "end": 1493, "name": "EQ", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPI", "source": 1 }, - { - "begin": 1507, - "end": 1508, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1504, "end": 1505, "name": "DUP1", "source": 1 }, - { "begin": 1497, "end": 1509, "name": "REVERT", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPDEST", "source": 1 }, - { "begin": 1438, "end": 1517, "name": "POP", "source": 1 }, - { - "begin": 1438, - "end": 1517, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x64093515f0aec3a3a0b7eac9c2f54014bc21af374f317107f57a1b1f9ee18903\",\"urls\":[\"bzz-raw://4ead303344848f88c9feaaf32ea8cffb05639878f5ec5260611c6775d43cff36\",\"dweb:/ipfs/QmRvLYD1pq872sHHn7hbFnz7ALyVRfN3SAbTyUMmPTrRQs\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}" -} +{"byteCode":"0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"multiply","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":117:123 uint d */\n 0x00\n /* \"main.sol\":149:150 7 */\n 0x07\n /* \"main.sol\":146:147 a */\n dup3\n /* \"main.sol\":146:150 a *7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":139:150 return a *7 */\n swap1\n pop\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:128:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1520:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"485:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"502:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"525:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"507:17:1"},"nodeType":"YulFunctionCall","src":"507:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"495:6:1"},"nodeType":"YulFunctionCall","src":"495:37:1"},"nodeType":"YulExpressionStatement","src":"495:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"473:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"480:3:1","type":""}],"src":"420:118:1"},{"body":{"nodeType":"YulBlock","src":"642:124:1","statements":[{"nodeType":"YulAssignment","src":"652:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"664:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"675:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"660:3:1"},"nodeType":"YulFunctionCall","src":"660:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"652:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"732:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"756:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"741:3:1"},"nodeType":"YulFunctionCall","src":"741:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"688:43:1"},"nodeType":"YulFunctionCall","src":"688:71:1"},"nodeType":"YulExpressionStatement","src":"688:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"614:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"637:4:1","type":""}],"src":"544:222:1"},{"body":{"nodeType":"YulBlock","src":"820:300:1","statements":[{"nodeType":"YulAssignment","src":"830:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"853:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"835:17:1"},"nodeType":"YulFunctionCall","src":"835:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"830:1:1"}]},{"nodeType":"YulAssignment","src":"864:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"887:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"869:17:1"},"nodeType":"YulFunctionCall","src":"869:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"864:1:1"}]},{"body":{"nodeType":"YulBlock","src":"1062:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"1064:16:1"},"nodeType":"YulFunctionCall","src":"1064:18:1"},"nodeType":"YulExpressionStatement","src":"1064:18:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"974:1:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:9:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"960:6:1"},"nodeType":"YulFunctionCall","src":"960:17:1"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"982:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"989:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"1057:1:1"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"985:3:1"},"nodeType":"YulFunctionCall","src":"985:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"979:2:1"},"nodeType":"YulFunctionCall","src":"979:81:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"956:3:1"},"nodeType":"YulFunctionCall","src":"956:105:1"},"nodeType":"YulIf","src":"953:2:1"},{"nodeType":"YulAssignment","src":"1094:20:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1109:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"1112:1:1"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1105:3:1"},"nodeType":"YulFunctionCall","src":"1105:9:1"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"1094:7:1"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"803:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"806:1:1","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"812:7:1","type":""}],"src":"772:348:1"},{"body":{"nodeType":"YulBlock","src":"1171:32:1","statements":[{"nodeType":"YulAssignment","src":"1181:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1192:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1181:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1153:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1163:7:1","type":""}],"src":"1126:77:1"},{"body":{"nodeType":"YulBlock","src":"1237:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:88:1"},"nodeType":"YulExpressionStatement","src":"1247:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1351:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1344:6:1"},"nodeType":"YulFunctionCall","src":"1344:15:1"},"nodeType":"YulExpressionStatement","src":"1344:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1375:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1378:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1368:6:1"},"nodeType":"YulFunctionCall","src":"1368:15:1"},"nodeType":"YulExpressionStatement","src":"1368:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1209:180:1"},{"body":{"nodeType":"YulBlock","src":"1438:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1495:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1504:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1507:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1497:6:1"},"nodeType":"YulFunctionCall","src":"1497:12:1"},"nodeType":"YulExpressionStatement","src":"1497:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1461:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1486:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1468:17:1"},"nodeType":"YulFunctionCall","src":"1468:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1458:2:1"},"nodeType":"YulFunctionCall","src":"1458:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1451:6:1"},"nodeType":"YulFunctionCall","src":"1451:43:1"},"nodeType":"YulIf","src":"1448:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1431:5:1","type":""}],"src":"1395:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;117:6;149:1;146;:4;;;;:::i;:::-;139:11;;71:90;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"89200","executionCost":"135","totalCost":"89335"},"external":{"multiply(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":167,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":167,"name":"MSTORE","source":0},{"begin":39,"end":167,"name":"CALLVALUE","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"ISZERO","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"POP","source":0},{"begin":39,"end":167,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"CODECOPY","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033",".code":[{"begin":39,"end":167,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":167,"name":"MSTORE","source":0},{"begin":39,"end":167,"name":"CALLVALUE","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"ISZERO","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"POP","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":167,"name":"CALLDATASIZE","source":0},{"begin":39,"end":167,"name":"LT","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"CALLDATALOAD","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":167,"name":"SHR","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"C6888FA1"},{"begin":39,"end":167,"name":"EQ","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"2"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":71,"end":161,"name":"tag","source":0,"value":"3"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"4"},{"begin":71,"end":161,"name":"DUP1","source":0},{"begin":71,"end":161,"name":"CALLDATASIZE","source":0},{"begin":71,"end":161,"name":"SUB","source":0},{"begin":71,"end":161,"name":"DUP2","source":0},{"begin":71,"end":161,"name":"ADD","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"5"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"4"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"40"},{"begin":71,"end":161,"name":"MLOAD","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"8"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"40"},{"begin":71,"end":161,"name":"MLOAD","source":0},{"begin":71,"end":161,"name":"DUP1","source":0},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SUB","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"RETURN","source":0},{"begin":71,"end":161,"name":"tag","source":0,"value":"7"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":117,"end":123,"name":"PUSH","source":0,"value":"0"},{"begin":149,"end":150,"name":"PUSH","source":0,"value":"7"},{"begin":146,"end":147,"name":"DUP3","source":0},{"begin":146,"end":150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":146,"end":150,"name":"SWAP2","source":0},{"begin":146,"end":150,"name":"SWAP1","source":0},{"begin":146,"end":150,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":146,"end":150,"name":"JUMP","source":0,"value":"[in]"},{"begin":146,"end":150,"name":"tag","source":0,"value":"11"},{"begin":146,"end":150,"name":"JUMPDEST","source":0},{"begin":139,"end":150,"name":"SWAP1","source":0},{"begin":139,"end":150,"name":"POP","source":0},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"POP","source":0},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"14"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"6"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"21"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"23"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"9"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"26"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1120,"name":"tag","source":1,"value":"12"},{"begin":772,"end":1120,"name":"JUMPDEST","source":1},{"begin":772,"end":1120,"name":"PUSH","source":1,"value":"0"},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":853,"end":854,"name":"DUP3","source":1},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":835,"end":855,"name":"JUMP","source":1,"value":"[in]"},{"begin":835,"end":855,"name":"tag","source":1,"value":"28"},{"begin":835,"end":855,"name":"JUMPDEST","source":1},{"begin":830,"end":855,"name":"SWAP2","source":1},{"begin":830,"end":855,"name":"POP","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":887,"end":888,"name":"DUP4","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":869,"end":889,"name":"JUMP","source":1,"value":"[in]"},{"begin":869,"end":889,"name":"tag","source":1,"value":"29"},{"begin":869,"end":889,"name":"JUMPDEST","source":1},{"begin":864,"end":889,"name":"SWAP3","source":1},{"begin":864,"end":889,"name":"POP","source":1},{"begin":1057,"end":1058,"name":"DUP2","source":1},{"begin":989,"end":1055,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":985,"end":1059,"name":"DIV","source":1},{"begin":982,"end":983,"name":"DUP4","source":1},{"begin":979,"end":1060,"name":"GT","source":1},{"begin":974,"end":975,"name":"DUP3","source":1},{"begin":967,"end":976,"name":"ISZERO","source":1},{"begin":960,"end":977,"name":"ISZERO","source":1},{"begin":956,"end":1061,"name":"AND","source":1},{"begin":953,"end":955,"name":"ISZERO","source":1},{"begin":953,"end":955,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPI","source":1},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1064,"end":1082,"name":"JUMP","source":1,"value":"[in]"},{"begin":1064,"end":1082,"name":"tag","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"JUMPDEST","source":1},{"begin":953,"end":955,"name":"tag","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPDEST","source":1},{"begin":1112,"end":1113,"name":"DUP3","source":1},{"begin":1109,"end":1110,"name":"DUP3","source":1},{"begin":1105,"end":1114,"name":"MUL","source":1},{"begin":1094,"end":1114,"name":"SWAP1","source":1},{"begin":1094,"end":1114,"name":"POP","source":1},{"begin":820,"end":1120,"name":"SWAP3","source":1},{"begin":820,"end":1120,"name":"SWAP2","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"JUMP","source":1,"value":"[out]"},{"begin":1126,"end":1203,"name":"tag","source":1,"value":"24"},{"begin":1126,"end":1203,"name":"JUMPDEST","source":1},{"begin":1126,"end":1203,"name":"PUSH","source":1,"value":"0"},{"begin":1192,"end":1197,"name":"DUP2","source":1},{"begin":1181,"end":1197,"name":"SWAP1","source":1},{"begin":1181,"end":1197,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"SWAP2","source":1},{"begin":1171,"end":1203,"name":"SWAP1","source":1},{"begin":1171,"end":1203,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"JUMP","source":1,"value":"[out]"},{"begin":1209,"end":1389,"name":"tag","source":1,"value":"32"},{"begin":1209,"end":1389,"name":"JUMPDEST","source":1},{"begin":1257,"end":1334,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1254,"end":1255,"name":"PUSH","source":1,"value":"0"},{"begin":1247,"end":1335,"name":"MSTORE","source":1},{"begin":1354,"end":1358,"name":"PUSH","source":1,"value":"11"},{"begin":1351,"end":1352,"name":"PUSH","source":1,"value":"4"},{"begin":1344,"end":1359,"name":"MSTORE","source":1},{"begin":1378,"end":1382,"name":"PUSH","source":1,"value":"24"},{"begin":1375,"end":1376,"name":"PUSH","source":1,"value":"0"},{"begin":1368,"end":1383,"name":"REVERT","source":1},{"begin":1395,"end":1517,"name":"tag","source":1,"value":"17"},{"begin":1395,"end":1517,"name":"JUMPDEST","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1486,"end":1491,"name":"DUP2","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1468,"end":1492,"name":"JUMP","source":1,"value":"[in]"},{"begin":1468,"end":1492,"name":"tag","source":1,"value":"36"},{"begin":1468,"end":1492,"name":"JUMPDEST","source":1},{"begin":1461,"end":1466,"name":"DUP2","source":1},{"begin":1458,"end":1493,"name":"EQ","source":1},{"begin":1448,"end":1450,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPI","source":1},{"begin":1507,"end":1508,"name":"PUSH","source":1,"value":"0"},{"begin":1504,"end":1505,"name":"DUP1","source":1},{"begin":1497,"end":1509,"name":"REVERT","source":1},{"begin":1448,"end":1450,"name":"tag","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPDEST","source":1},{"begin":1438,"end":1517,"name":"POP","source":1},{"begin":1438,"end":1517,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"multiply(uint256)":"c6888fa1"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5d29beacc41878230d7981905bb45b41180007e0dbc2d810ff03c7b630b4048a\",\"urls\":[\"bzz-raw://b1fbe1547a505b6904392fc22ab43c61ca28882c7687498a84d4d648b374dc0e\",\"dweb:/ipfs/QmRVHiSGD6nBrUfXf8NX18FVrkitbuoVHj2r1To5k2XK6q\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContract {\n function multiply(uint a) public pure returns(uint d) {\n return a *7;\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/TestContractIncr.json b/tests/contracts/compiled/TestContractIncr.json index d25453d7db1..d41f0b03c62 100644 --- a/tests/contracts/compiled/TestContractIncr.json +++ b/tests/contracts/compiled/TestContractIncr.json @@ -1,1389 +1 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":119:178 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":164:165 0 */\n 0x00\n /* \"main.sol\":156:161 count */\n dup1\n /* \"main.sol\":156:165 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:269 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":83:100 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":196:261 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":83:100 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":196:261 function incr() public {... */\n tag_10:\n /* \"main.sol\":247:248 1 */\n 0x01\n /* \"main.sol\":241:246 count */\n sload(0x00)\n /* \"main.sol\":241:248 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":235:240 count */\n 0x00\n /* \"main.sol\":235:248 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":196:261 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", - "sourceMap": "45:224:0:-:0;;;119:59;;;;;;;;;;164:1;156:5;:9;;;;45:224;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB5 PUSH18 0xDAC3D7FAC8E90C670050067FD72ABF3C3C59 STATICCALL 0xB4 0x4A EXTCODESIZE BALANCE 0x49 PUSH16 0xE3EB59D364736F6C6343000803003300 ", - "sourceMap": "45:224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:65;;;:::i;:::-;;83:17;;;;:::o;196:65::-;247:1;241:5;;:7;;;;:::i;:::-;235:5;:13;;;;196:65::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "73400", - "executionCost": "5137", - "totalCost": "78537" - }, - "external": { "count()": "1107", "incr()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, - { "begin": 119, "end": 178, "name": "CALLVALUE", "source": 0 }, - { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, - { "begin": 119, "end": 178, "name": "ISZERO", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 119, "end": 178, "name": "JUMPI", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 119, "end": 178, "name": "DUP1", "source": 0 }, - { "begin": 119, "end": 178, "name": "REVERT", "source": 0 }, - { - "begin": 119, - "end": 178, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 119, "end": 178, "name": "JUMPDEST", "source": 0 }, - { "begin": 119, "end": 178, "name": "POP", "source": 0 }, - { - "begin": 164, - "end": 165, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 156, "end": 161, "name": "DUP1", "source": 0 }, - { "begin": 156, "end": 165, "name": "DUP2", "source": 0 }, - { "begin": 156, "end": 165, "name": "SWAP1", "source": 0 }, - { "begin": 156, "end": 165, "name": "SSTORE", "source": 0 }, - { "begin": 156, "end": 165, "name": "POP", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "CODECOPY", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122085b571dac3d7fac8e90c670050067fd72abf3c3c59fab44a3b31496fe3eb59d364736f6c63430008030033", - ".code": [ - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 45, "end": 269, "name": "MSTORE", "source": 0 }, - { "begin": 45, "end": 269, "name": "CALLVALUE", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "ISZERO", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, - { "begin": 45, "end": 269, "name": "POP", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 45, "end": 269, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 45, "end": 269, "name": "LT", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 45, "end": 269, "name": "SHR", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "119FBBD4" - }, - { "begin": 45, "end": 269, "name": "EQ", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 45, "end": 269, "name": "JUMPI", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 45, "end": 269, "name": "JUMPDEST", "source": 0 }, - { - "begin": 45, - "end": 269, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 45, "end": 269, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 269, "name": "REVERT", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 83, "end": 100, "name": "MLOAD", "source": 0 }, - { "begin": 83, "end": 100, "name": "DUP1", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 83, "end": 100, "name": "SUB", "source": 0 }, - { "begin": 83, "end": 100, "name": "SWAP1", "source": 0 }, - { "begin": 83, "end": 100, "name": "RETURN", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 196, - "end": 261, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 196, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { "begin": 196, "end": 261, "name": "STOP", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 83, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 83, "end": 100, "name": "SLOAD", "source": 0 }, - { "begin": 83, "end": 100, "name": "DUP2", "source": 0 }, - { - "begin": 83, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 196, - "end": 261, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 196, "end": 261, "name": "JUMPDEST", "source": 0 }, - { - "begin": 247, - "end": 248, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 241, - "end": 246, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 241, "end": 246, "name": "SLOAD", "source": 0 }, - { - "begin": 241, - "end": 248, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 241, "end": 248, "name": "SWAP2", "source": 0 }, - { "begin": 241, "end": 248, "name": "SWAP1", "source": 0 }, - { - "begin": 241, - "end": 248, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 241, - "end": 248, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 241, - "end": 248, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 241, "end": 248, "name": "JUMPDEST", "source": 0 }, - { - "begin": 235, - "end": 240, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 235, "end": 248, "name": "DUP2", "source": 0 }, - { "begin": 235, "end": 248, "name": "SWAP1", "source": 0 }, - { "begin": 235, "end": 248, "name": "SSTORE", "source": 0 }, - { "begin": 235, "end": 248, "name": "POP", "source": 0 }, - { - "begin": 196, - "end": 261, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "incr()": "119fbbd4" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x161594fe2faed3800e9f57432fc82cb10aafdd837124bb96d783ca3b48de7edf\",\"urls\":[\"bzz-raw://4111db064f989ae4503ab09a7ffde6486119c3738c72a111b12aa017c86681e8\",\"dweb:/ipfs/QmTGeM7tpCF5ebm1YDzimQqaVm2F3JzkLLJZMXFL2Vf4KV\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:TestContractIncr", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }" -} +{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":107:162 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":150:151 0 */\n 0x00\n /* \"main.sol\":142:147 count */\n dup1\n /* \"main.sol\":142:151 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:92 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":176:237 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":75:92 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":176:237 function incr() public {... */\n tag_10:\n /* \"main.sol\":225:226 1 */\n 0x01\n /* \"main.sol\":219:224 count */\n sload(0x00)\n /* \"main.sol\":219:226 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":213:218 count */\n 0x00\n /* \"main.sol\":213:226 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":176:237 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:204:0:-:0;;;107:55;;;;;;;;;;150:1;142:5;:9;;;;39:204;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176:61;;;:::i;:::-;;75:17;;;;:::o;176:61::-;225:1;219:5;;:7;;;;:::i;:::-;213:5;:13;;;;176:61::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"73400","executionCost":"5137","totalCost":"78537"},"external":{"count()":"1107","incr()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":243,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":243,"name":"MSTORE","source":0},{"begin":107,"end":162,"name":"CALLVALUE","source":0},{"begin":107,"end":162,"name":"DUP1","source":0},{"begin":107,"end":162,"name":"ISZERO","source":0},{"begin":107,"end":162,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":107,"end":162,"name":"JUMPI","source":0},{"begin":107,"end":162,"name":"PUSH","source":0,"value":"0"},{"begin":107,"end":162,"name":"DUP1","source":0},{"begin":107,"end":162,"name":"REVERT","source":0},{"begin":107,"end":162,"name":"tag","source":0,"value":"1"},{"begin":107,"end":162,"name":"JUMPDEST","source":0},{"begin":107,"end":162,"name":"POP","source":0},{"begin":150,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":142,"end":147,"name":"DUP1","source":0},{"begin":142,"end":151,"name":"DUP2","source":0},{"begin":142,"end":151,"name":"SWAP1","source":0},{"begin":142,"end":151,"name":"SSTORE","source":0},{"begin":142,"end":151,"name":"POP","source":0},{"begin":39,"end":243,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"CODECOPY","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033",".code":[{"begin":39,"end":243,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":243,"name":"MSTORE","source":0},{"begin":39,"end":243,"name":"CALLVALUE","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"ISZERO","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"REVERT","source":0},{"begin":39,"end":243,"name":"tag","source":0,"value":"1"},{"begin":39,"end":243,"name":"JUMPDEST","source":0},{"begin":39,"end":243,"name":"POP","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":243,"name":"CALLDATASIZE","source":0},{"begin":39,"end":243,"name":"LT","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"CALLDATALOAD","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":243,"name":"SHR","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":243,"name":"EQ","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"119FBBD4"},{"begin":39,"end":243,"name":"EQ","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"tag","source":0,"value":"2"},{"begin":39,"end":243,"name":"JUMPDEST","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"REVERT","source":0},{"begin":75,"end":92,"name":"tag","source":0,"value":"3"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":92,"name":"tag","source":0,"value":"5"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":92,"name":"MLOAD","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":92,"name":"SWAP2","source":0},{"begin":75,"end":92,"name":"SWAP1","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":92,"name":"tag","source":0,"value":"7"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":92,"name":"MLOAD","source":0},{"begin":75,"end":92,"name":"DUP1","source":0},{"begin":75,"end":92,"name":"SWAP2","source":0},{"begin":75,"end":92,"name":"SUB","source":0},{"begin":75,"end":92,"name":"SWAP1","source":0},{"begin":75,"end":92,"name":"RETURN","source":0},{"begin":176,"end":237,"name":"tag","source":0,"value":"4"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":176,"end":237,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":176,"end":237,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":176,"end":237,"name":"JUMP","source":0,"value":"[in]"},{"begin":176,"end":237,"name":"tag","source":0,"value":"9"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":176,"end":237,"name":"STOP","source":0},{"begin":75,"end":92,"name":"tag","source":0,"value":"6"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"0"},{"begin":75,"end":92,"name":"SLOAD","source":0},{"begin":75,"end":92,"name":"DUP2","source":0},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[out]"},{"begin":176,"end":237,"name":"tag","source":0,"value":"10"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":225,"end":226,"name":"PUSH","source":0,"value":"1"},{"begin":219,"end":224,"name":"PUSH","source":0,"value":"0"},{"begin":219,"end":224,"name":"SLOAD","source":0},{"begin":219,"end":226,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":219,"end":226,"name":"SWAP2","source":0},{"begin":219,"end":226,"name":"SWAP1","source":0},{"begin":219,"end":226,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":219,"end":226,"name":"JUMP","source":0,"value":"[in]"},{"begin":219,"end":226,"name":"tag","source":0,"value":"12"},{"begin":219,"end":226,"name":"JUMPDEST","source":0},{"begin":213,"end":218,"name":"PUSH","source":0,"value":"0"},{"begin":213,"end":226,"name":"DUP2","source":0},{"begin":213,"end":226,"name":"SWAP1","source":0},{"begin":213,"end":226,"name":"SSTORE","source":0},{"begin":213,"end":226,"name":"POP","source":0},{"begin":176,"end":237,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"15"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"17"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"20"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"13"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"22"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"23"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"25"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"18"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"26"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","incr()":"119fbbd4"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x338162b85eaf39a85daac3fe2d3d8e94fad18f74dd7c238709d0500e96f14b71\",\"urls\":[\"bzz-raw://0229ffcdcdfa88d496ad29dc5532ca35e6ab895b46b64762d09e01bc31056af5\",\"dweb:/ipfs/QmeE5zDfodVZWTxxQ6iTJ6W8GKvdL1bKhAR2P1m21ejfzP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:TestContractIncr","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/compiled/TraceFilter.json b/tests/contracts/compiled/TraceFilter.json new file mode 100644 index 00000000000..d7b1e0df341 --- /dev/null +++ b/tests/contracts/compiled/TraceFilter.json @@ -0,0 +1 @@ +{"byteCode":"0x608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"bool","name":"should_revert","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"call_ok","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"call_revert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target0","type":"address"},{"internalType":"address","name":"target1","type":"address"}],"name":"subcalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target1","type":"address"}],"name":"subsubcalls","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":115:128 should_revert */\n dup1\n /* \"main.sol\":111:171 if (should_revert) {... */\n iszero\n tag_6\n jumpi\n /* \"main.sol\":148:156 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":111:171 if (should_revert) {... */\ntag_6:\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n pop\n /* \"main.sol\":34:705 contract TraceFilter {... */\n jump(tag_7)\n /* \"#utility.yul\":7:144 */\ntag_9:\n 0x00\n /* \"#utility.yul\":92:98 */\n dup2\n /* \"#utility.yul\":86:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":108:138 */\n tag_11\n /* \"#utility.yul\":132:137 */\n dup2\n /* \"#utility.yul\":108:138 */\n tag_12\n jump\t// in\ntag_11:\n /* \"#utility.yul\":67:144 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":150:428 */\ntag_3:\n 0x00\n /* \"#utility.yul\":266:268 */\n 0x20\n /* \"#utility.yul\":254:263 */\n dup3\n /* \"#utility.yul\":245:252 */\n dup5\n /* \"#utility.yul\":241:264 */\n sub\n /* \"#utility.yul\":237:269 */\n slt\n /* \"#utility.yul\":234:236 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":282:283 */\n 0x00\n /* \"#utility.yul\":279:280 */\n dup1\n /* \"#utility.yul\":272:284 */\n revert\n /* \"#utility.yul\":234:236 */\ntag_14:\n /* \"#utility.yul\":325:326 */\n 0x00\n /* \"#utility.yul\":350:411 */\n tag_15\n /* \"#utility.yul\":403:410 */\n dup5\n /* \"#utility.yul\":394:400 */\n dup3\n /* \"#utility.yul\":383:392 */\n dup6\n /* \"#utility.yul\":379:401 */\n add\n /* \"#utility.yul\":350:411 */\n tag_9\n jump\t// in\ntag_15:\n /* \"#utility.yul\":340:411 */\n swap2\n pop\n /* \"#utility.yul\":296:421 */\n pop\n /* \"#utility.yul\":224:428 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":434:524 */\ntag_16:\n 0x00\n /* \"#utility.yul\":511:516 */\n dup2\n /* \"#utility.yul\":504:517 */\n iszero\n /* \"#utility.yul\":497:518 */\n iszero\n /* \"#utility.yul\":486:518 */\n swap1\n pop\n /* \"#utility.yul\":476:524 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":530:646 */\ntag_12:\n /* \"#utility.yul\":600:621 */\n tag_19\n /* \"#utility.yul\":615:620 */\n dup2\n /* \"#utility.yul\":600:621 */\n tag_16\n jump\t// in\ntag_19:\n /* \"#utility.yul\":593:598 */\n dup2\n /* \"#utility.yul\":590:622 */\n eq\n /* \"#utility.yul\":580:582 */\n tag_20\n jumpi\n /* \"#utility.yul\":636:637 */\n 0x00\n /* \"#utility.yul\":633:634 */\n dup1\n /* \"#utility.yul\":626:638 */\n revert\n /* \"#utility.yul\":580:582 */\ntag_20:\n /* \"#utility.yul\":570:646 */\n pop\n jump\t// out\n /* \"main.sol\":34:705 contract TraceFilter {... */\ntag_7:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5eaf9bc1\n eq\n tag_3\n jumpi\n dup1\n 0xa885f4e3\n eq\n tag_4\n jumpi\n dup1\n 0xcb30e696\n eq\n tag_5\n jumpi\n dup1\n 0xf34f1610\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_3:\n tag_7\n tag_8\n jump\t// in\n tag_7:\n stop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_5:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_6:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_8:\n jump\t// out\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_12:\n /* \"main.sol\":622:629 target1 */\n dup1\n /* \"main.sol\":610:638 TraceFilter(target1).call_ok */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5eaf9bc1\n /* \"main.sol\":610:640 TraceFilter(target1).call_ok() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_21\n jumpi\n 0x00\n dup1\n revert\n tag_21:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_23\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_23:\n pop\n pop\n pop\n pop\n /* \"main.sol\":666:673 target1 */\n dup1\n /* \"main.sol\":654:686 TraceFilter(target1).call_revert */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb30e696\n /* \"main.sol\":654:688 TraceFilter(target1).call_revert() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_24\n jumpi\n 0x00\n dup1\n revert\n tag_24:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_26\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_26:\n pop\n pop\n pop\n pop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n pop\n jump\t// out\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_14:\n /* \"main.sol\":282:290 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_18:\n /* \"main.sol\":412:419 target0 */\n dup2\n /* \"main.sol\":400:432 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":433:440 target1 */\n dup3\n /* \"main.sol\":400:441 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_29\n swap2\n swap1\n tag_30\n jump\t// in\n tag_29:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_31\n jumpi\n 0x00\n dup1\n revert\n tag_31:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_32\n jumpi\n pop\n 0x01\n tag_32:\n /* \"main.sol\":396:455 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_33\n jumpi\n jump(tag_37)\n tag_33:\n tag_37:\n /* \"main.sol\":484:491 target0 */\n dup2\n /* \"main.sol\":472:504 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":505:512 target1 */\n dup3\n /* \"main.sol\":472:513 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_38\n swap2\n swap1\n tag_30\n jump\t// in\n tag_38:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_40\n jumpi\n pop\n 0x01\n tag_40:\n /* \"main.sol\":468:527 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_41\n jumpi\n jump(tag_45)\n tag_41:\n tag_45:\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_47:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_49\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_50\n jump\t// in\n tag_49:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_11:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_52\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_52:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_53\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_47\n jump\t// in\n tag_53:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:827 */\n tag_17:\n 0x00\n dup1\n /* \"#utility.yul\":545:547 */\n 0x40\n /* \"#utility.yul\":533:542 */\n dup4\n /* \"#utility.yul\":524:531 */\n dup6\n /* \"#utility.yul\":520:543 */\n sub\n /* \"#utility.yul\":516:548 */\n slt\n /* \"#utility.yul\":513:515 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":561:562 */\n 0x00\n /* \"#utility.yul\":558:559 */\n dup1\n /* \"#utility.yul\":551:563 */\n revert\n /* \"#utility.yul\":513:515 */\n tag_55:\n /* \"#utility.yul\":604:605 */\n 0x00\n /* \"#utility.yul\":629:682 */\n tag_56\n /* \"#utility.yul\":674:681 */\n dup6\n /* \"#utility.yul\":665:671 */\n dup3\n /* \"#utility.yul\":654:663 */\n dup7\n /* \"#utility.yul\":650:672 */\n add\n /* \"#utility.yul\":629:682 */\n tag_47\n jump\t// in\n tag_56:\n /* \"#utility.yul\":619:682 */\n swap3\n pop\n /* \"#utility.yul\":575:692 */\n pop\n /* \"#utility.yul\":731:733 */\n 0x20\n /* \"#utility.yul\":757:810 */\n tag_57\n /* \"#utility.yul\":802:809 */\n dup6\n /* \"#utility.yul\":793:799 */\n dup3\n /* \"#utility.yul\":782:791 */\n dup7\n /* \"#utility.yul\":778:800 */\n add\n /* \"#utility.yul\":757:810 */\n tag_47\n jump\t// in\n tag_57:\n /* \"#utility.yul\":747:810 */\n swap2\n pop\n /* \"#utility.yul\":702:820 */\n pop\n /* \"#utility.yul\":503:827 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":833:951 */\n tag_58:\n /* \"#utility.yul\":920:944 */\n tag_60\n /* \"#utility.yul\":938:943 */\n dup2\n /* \"#utility.yul\":920:944 */\n tag_61\n jump\t// in\n tag_60:\n /* \"#utility.yul\":915:918 */\n dup3\n /* \"#utility.yul\":908:945 */\n mstore\n /* \"#utility.yul\":898:951 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":957:1179 */\n tag_30:\n 0x00\n /* \"#utility.yul\":1088:1090 */\n 0x20\n /* \"#utility.yul\":1077:1086 */\n dup3\n /* \"#utility.yul\":1073:1091 */\n add\n /* \"#utility.yul\":1065:1091 */\n swap1\n pop\n /* \"#utility.yul\":1101:1172 */\n tag_63\n /* \"#utility.yul\":1169:1170 */\n 0x00\n /* \"#utility.yul\":1158:1167 */\n dup4\n /* \"#utility.yul\":1154:1171 */\n add\n /* \"#utility.yul\":1145:1151 */\n dup5\n /* \"#utility.yul\":1101:1172 */\n tag_58\n jump\t// in\n tag_63:\n /* \"#utility.yul\":1055:1179 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1185:1281 */\n tag_61:\n 0x00\n /* \"#utility.yul\":1251:1275 */\n tag_65\n /* \"#utility.yul\":1269:1274 */\n dup3\n /* \"#utility.yul\":1251:1275 */\n tag_66\n jump\t// in\n tag_65:\n /* \"#utility.yul\":1240:1275 */\n swap1\n pop\n /* \"#utility.yul\":1230:1281 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1287:1413 */\n tag_66:\n 0x00\n /* \"#utility.yul\":1364:1406 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1357:1362 */\n dup3\n /* \"#utility.yul\":1353:1407 */\n and\n /* \"#utility.yul\":1342:1407 */\n swap1\n pop\n /* \"#utility.yul\":1332:1413 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1419:1541 */\n tag_50:\n /* \"#utility.yul\":1492:1516 */\n tag_69\n /* \"#utility.yul\":1510:1515 */\n dup2\n /* \"#utility.yul\":1492:1516 */\n tag_61\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1485:1490 */\n dup2\n /* \"#utility.yul\":1482:1517 */\n eq\n /* \"#utility.yul\":1472:1474 */\n tag_70\n jumpi\n /* \"#utility.yul\":1531:1532 */\n 0x00\n /* \"#utility.yul\":1528:1529 */\n dup1\n /* \"#utility.yul\":1521:1533 */\n revert\n /* \"#utility.yul\":1472:1474 */\n tag_70:\n /* \"#utility.yul\":1462:1541 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:649:1","statements":[{"body":{"nodeType":"YulBlock","src":"67:77:1","statements":[{"nodeType":"YulAssignment","src":"77:22:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"92:6:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"86:5:1"},"nodeType":"YulFunctionCall","src":"86:13:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"77:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"132:5:1"}],"functionName":{"name":"validator_revert_t_bool","nodeType":"YulIdentifier","src":"108:23:1"},"nodeType":"YulFunctionCall","src":"108:30:1"},"nodeType":"YulExpressionStatement","src":"108:30:1"}]},"name":"abi_decode_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"45:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"53:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"61:5:1","type":""}],"src":"7:137:1"},{"body":{"nodeType":"YulBlock","src":"224:204:1","statements":[{"body":{"nodeType":"YulBlock","src":"270:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"279:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"282:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"272:6:1"},"nodeType":"YulFunctionCall","src":"272:12:1"},"nodeType":"YulExpressionStatement","src":"272:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"245:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"254:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"241:3:1"},"nodeType":"YulFunctionCall","src":"241:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"266:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"237:3:1"},"nodeType":"YulFunctionCall","src":"237:32:1"},"nodeType":"YulIf","src":"234:2:1"},{"nodeType":"YulBlock","src":"296:125:1","statements":[{"nodeType":"YulVariableDeclaration","src":"311:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"325:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"315:6:1","type":""}]},{"nodeType":"YulAssignment","src":"340:71:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"394:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"379:3:1"},"nodeType":"YulFunctionCall","src":"379:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"403:7:1"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nodeType":"YulIdentifier","src":"350:28:1"},"nodeType":"YulFunctionCall","src":"350:61:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"340:6:1"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"194:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"205:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"217:6:1","type":""}],"src":"150:278:1"},{"body":{"nodeType":"YulBlock","src":"476:48:1","statements":[{"nodeType":"YulAssignment","src":"486:32:1","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"511:5:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"504:6:1"},"nodeType":"YulFunctionCall","src":"504:13:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"497:6:1"},"nodeType":"YulFunctionCall","src":"497:21:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"486:7:1"}]}]},"name":"cleanup_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"458:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"468:7:1","type":""}],"src":"434:90:1"},{"body":{"nodeType":"YulBlock","src":"570:76:1","statements":[{"body":{"nodeType":"YulBlock","src":"624:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"633:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"636:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"626:6:1"},"nodeType":"YulFunctionCall","src":"626:12:1"},"nodeType":"YulExpressionStatement","src":"626:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"593:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"615:5:1"}],"functionName":{"name":"cleanup_t_bool","nodeType":"YulIdentifier","src":"600:14:1"},"nodeType":"YulFunctionCall","src":"600:21:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"590:2:1"},"nodeType":"YulFunctionCall","src":"590:32:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"583:6:1"},"nodeType":"YulFunctionCall","src":"583:40:1"},"nodeType":"YulIf","src":"580:2:1"}]},"name":"validator_revert_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"563:5:1","type":""}],"src":"530:116:1"}]},"contents":"{\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x41D CODESIZE SUB DUP1 PUSH2 0x41D DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x58 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x52 DUP2 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78 DUP5 DUP3 DUP6 ADD PUSH2 0x43 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x36A DUP1 PUSH2 0xB3 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ","sourceMap":"34:671:0:-:0;;;65:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;115:13;111:60;;;148:8;;;111:60;65:116;34:671;;7:137:1;;92:6;86:13;77:22;;108:30;132:5;108:30;:::i;:::-;67:77;;;;:::o;150:278::-;;266:2;254:9;245:7;241:23;237:32;234:2;;;282:1;279;272:12;234:2;325:1;350:61;403:7;394:6;383:9;379:22;350:61;:::i;:::-;340:71;;296:125;224:204;;;;:::o;434:90::-;;511:5;504:13;497:21;486:32;;476:48;;;:::o;530:116::-;600:21;615:5;600:21;:::i;:::-;593:5;590:32;580:2;;636:1;633;626:12;580:2;570:76;:::o;34:671:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1544:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_address","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"503:324:1","statements":[{"body":{"nodeType":"YulBlock","src":"549:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"558:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"561:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"551:6:1"},"nodeType":"YulFunctionCall","src":"551:12:1"},"nodeType":"YulExpressionStatement","src":"551:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"524:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"533:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"520:3:1"},"nodeType":"YulFunctionCall","src":"520:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:1","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"516:3:1"},"nodeType":"YulFunctionCall","src":"516:32:1"},"nodeType":"YulIf","src":"513:2:1"},{"nodeType":"YulBlock","src":"575:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"590:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"604:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"594:6:1","type":""}]},{"nodeType":"YulAssignment","src":"619:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"654:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"665:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"650:3:1"},"nodeType":"YulFunctionCall","src":"650:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"674:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"629:20:1"},"nodeType":"YulFunctionCall","src":"629:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"619:6:1"}]}]},{"nodeType":"YulBlock","src":"702:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"717:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"731:2:1","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"721:6:1","type":""}]},{"nodeType":"YulAssignment","src":"747:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"782:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"793:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"778:3:1"},"nodeType":"YulFunctionCall","src":"778:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"802:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"757:20:1"},"nodeType":"YulFunctionCall","src":"757:53:1"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"747:6:1"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"465:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"476:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"488:6:1","type":""},{"name":"value1","nodeType":"YulTypedName","src":"496:6:1","type":""}],"src":"420:407:1"},{"body":{"nodeType":"YulBlock","src":"898:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"915:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"938:5:1"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"920:17:1"},"nodeType":"YulFunctionCall","src":"920:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"908:6:1"},"nodeType":"YulFunctionCall","src":"908:37:1"},"nodeType":"YulExpressionStatement","src":"908:37:1"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"886:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"893:3:1","type":""}],"src":"833:118:1"},{"body":{"nodeType":"YulBlock","src":"1055:124:1","statements":[{"nodeType":"YulAssignment","src":"1065:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1077:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1088:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1073:3:1"},"nodeType":"YulFunctionCall","src":"1073:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1065:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1145:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1158:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1169:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1154:3:1"},"nodeType":"YulFunctionCall","src":"1154:17:1"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulIdentifier","src":"1101:43:1"},"nodeType":"YulFunctionCall","src":"1101:71:1"},"nodeType":"YulExpressionStatement","src":"1101:71:1"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1027:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1039:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1050:4:1","type":""}],"src":"957:222:1"},{"body":{"nodeType":"YulBlock","src":"1230:51:1","statements":[{"nodeType":"YulAssignment","src":"1240:35:1","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1269:5:1"}],"functionName":{"name":"cleanup_t_uint160","nodeType":"YulIdentifier","src":"1251:17:1"},"nodeType":"YulFunctionCall","src":"1251:24:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1240:7:1"}]}]},"name":"cleanup_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1212:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1222:7:1","type":""}],"src":"1185:96:1"},{"body":{"nodeType":"YulBlock","src":"1332:81:1","statements":[{"nodeType":"YulAssignment","src":"1342:65:1","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1357:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"1364:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1353:3:1"},"nodeType":"YulFunctionCall","src":"1353:54:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1342:7:1"}]}]},"name":"cleanup_t_uint160","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1314:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1324:7:1","type":""}],"src":"1287:126:1"},{"body":{"nodeType":"YulBlock","src":"1462:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1519:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1528:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1531:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1521:6:1"},"nodeType":"YulFunctionCall","src":"1521:12:1"},"nodeType":"YulExpressionStatement","src":"1521:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1485:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1510:5:1"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"1492:17:1"},"nodeType":"YulFunctionCall","src":"1492:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1482:2:1"},"nodeType":"YulFunctionCall","src":"1482:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1475:6:1"},"nodeType":"YulFunctionCall","src":"1475:43:1"},"nodeType":"YulIf","src":"1472:2:1"}]},"name":"validator_revert_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1455:5:1","type":""}],"src":"1419:122:1"}]},"contents":"{\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ","sourceMap":"34:671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;195:29;;;:::i;:::-;;551:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;238:71;;;:::i;:::-;;323:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;195:29;:::o;551:148::-;622:7;610:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:7;654:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:148;:::o;238:71::-;282:8;;;323:214;412:7;400:32;;;433:7;400:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;396:59;;;;;;484:7;472:32;;;505:7;472:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:59;;;;;;323:214;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:407::-;;;545:2;533:9;524:7;520:23;516:32;513:2;;;561:1;558;551:12;513:2;604:1;629:53;674:7;665:6;654:9;650:22;629:53;:::i;:::-;619:63;;575:117;731:2;757:53;802:7;793:6;782:9;778:22;757:53;:::i;:::-;747:63;;702:118;503:324;;;;;:::o;833:118::-;920:24;938:5;920:24;:::i;:::-;915:3;908:37;898:53;;:::o;957:222::-;;1088:2;1077:9;1073:18;1065:26;;1101:71;1169:1;1158:9;1154:17;1145:6;1101:71;:::i;:::-;1055:124;;;;:::o;1185:96::-;;1251:24;1269:5;1251:24;:::i;:::-;1240:35;;1230:51;;;:::o;1287:126::-;;1364:42;1357:5;1353:54;1342:65;;1332:81;;;:::o;1419:122::-;1492:24;1510:5;1492:24;:::i;:::-;1485:5;1482:35;1472:2;;1531:1;1528;1521:12;1472:2;1462:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"174800","executionCost":"infinite","totalCost":"infinite"},"external":{"call_ok()":"122","call_revert()":"163","subcalls(address,address)":"infinite","subsubcalls(address)":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":705,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":705,"name":"MSTORE","source":0},{"begin":65,"end":181,"name":"CALLVALUE","source":0},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"ISZERO","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":65,"end":181,"name":"JUMPI","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"0"},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"REVERT","source":0},{"begin":65,"end":181,"name":"tag","source":0,"value":"1"},{"begin":65,"end":181,"name":"JUMPDEST","source":0},{"begin":65,"end":181,"name":"POP","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"40"},{"begin":65,"end":181,"name":"MLOAD","source":0},{"begin":65,"end":181,"name":"PUSHSIZE","source":0},{"begin":65,"end":181,"name":"CODESIZE","source":0},{"begin":65,"end":181,"name":"SUB","source":0},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"PUSHSIZE","source":0},{"begin":65,"end":181,"name":"DUP4","source":0},{"begin":65,"end":181,"name":"CODECOPY","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"ADD","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"40"},{"begin":65,"end":181,"name":"MSTORE","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"ADD","source":0},{"begin":65,"end":181,"name":"SWAP1","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":65,"end":181,"name":"SWAP2","source":0},{"begin":65,"end":181,"name":"SWAP1","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":65,"end":181,"name":"JUMP","source":0,"value":"[in]"},{"begin":65,"end":181,"name":"tag","source":0,"value":"2"},{"begin":65,"end":181,"name":"JUMPDEST","source":0},{"begin":115,"end":128,"name":"DUP1","source":0},{"begin":111,"end":171,"name":"ISZERO","source":0},{"begin":111,"end":171,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":111,"end":171,"name":"JUMPI","source":0},{"begin":148,"end":156,"name":"PUSH","source":0,"value":"0"},{"begin":148,"end":156,"name":"DUP1","source":0},{"begin":148,"end":156,"name":"REVERT","source":0},{"begin":111,"end":171,"name":"tag","source":0,"value":"6"},{"begin":111,"end":171,"name":"JUMPDEST","source":0},{"begin":65,"end":181,"name":"POP","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":34,"end":705,"name":"JUMP","source":0},{"begin":7,"end":144,"name":"tag","source":1,"value":"9"},{"begin":7,"end":144,"name":"JUMPDEST","source":1},{"begin":7,"end":144,"name":"PUSH","source":1,"value":"0"},{"begin":92,"end":98,"name":"DUP2","source":1},{"begin":86,"end":99,"name":"MLOAD","source":1},{"begin":77,"end":99,"name":"SWAP1","source":1},{"begin":77,"end":99,"name":"POP","source":1},{"begin":108,"end":138,"name":"PUSH [tag]","source":1,"value":"11"},{"begin":132,"end":137,"name":"DUP2","source":1},{"begin":108,"end":138,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":108,"end":138,"name":"JUMP","source":1,"value":"[in]"},{"begin":108,"end":138,"name":"tag","source":1,"value":"11"},{"begin":108,"end":138,"name":"JUMPDEST","source":1},{"begin":67,"end":144,"name":"SWAP3","source":1},{"begin":67,"end":144,"name":"SWAP2","source":1},{"begin":67,"end":144,"name":"POP","source":1},{"begin":67,"end":144,"name":"POP","source":1},{"begin":67,"end":144,"name":"JUMP","source":1,"value":"[out]"},{"begin":150,"end":428,"name":"tag","source":1,"value":"3"},{"begin":150,"end":428,"name":"JUMPDEST","source":1},{"begin":150,"end":428,"name":"PUSH","source":1,"value":"0"},{"begin":266,"end":268,"name":"PUSH","source":1,"value":"20"},{"begin":254,"end":263,"name":"DUP3","source":1},{"begin":245,"end":252,"name":"DUP5","source":1},{"begin":241,"end":264,"name":"SUB","source":1},{"begin":237,"end":269,"name":"SLT","source":1},{"begin":234,"end":236,"name":"ISZERO","source":1},{"begin":234,"end":236,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":234,"end":236,"name":"JUMPI","source":1},{"begin":282,"end":283,"name":"PUSH","source":1,"value":"0"},{"begin":279,"end":280,"name":"DUP1","source":1},{"begin":272,"end":284,"name":"REVERT","source":1},{"begin":234,"end":236,"name":"tag","source":1,"value":"14"},{"begin":234,"end":236,"name":"JUMPDEST","source":1},{"begin":325,"end":326,"name":"PUSH","source":1,"value":"0"},{"begin":350,"end":411,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":403,"end":410,"name":"DUP5","source":1},{"begin":394,"end":400,"name":"DUP3","source":1},{"begin":383,"end":392,"name":"DUP6","source":1},{"begin":379,"end":401,"name":"ADD","source":1},{"begin":350,"end":411,"name":"PUSH [tag]","source":1,"value":"9"},{"begin":350,"end":411,"name":"JUMP","source":1,"value":"[in]"},{"begin":350,"end":411,"name":"tag","source":1,"value":"15"},{"begin":350,"end":411,"name":"JUMPDEST","source":1},{"begin":340,"end":411,"name":"SWAP2","source":1},{"begin":340,"end":411,"name":"POP","source":1},{"begin":296,"end":421,"name":"POP","source":1},{"begin":224,"end":428,"name":"SWAP3","source":1},{"begin":224,"end":428,"name":"SWAP2","source":1},{"begin":224,"end":428,"name":"POP","source":1},{"begin":224,"end":428,"name":"POP","source":1},{"begin":224,"end":428,"name":"JUMP","source":1,"value":"[out]"},{"begin":434,"end":524,"name":"tag","source":1,"value":"16"},{"begin":434,"end":524,"name":"JUMPDEST","source":1},{"begin":434,"end":524,"name":"PUSH","source":1,"value":"0"},{"begin":511,"end":516,"name":"DUP2","source":1},{"begin":504,"end":517,"name":"ISZERO","source":1},{"begin":497,"end":518,"name":"ISZERO","source":1},{"begin":486,"end":518,"name":"SWAP1","source":1},{"begin":486,"end":518,"name":"POP","source":1},{"begin":476,"end":524,"name":"SWAP2","source":1},{"begin":476,"end":524,"name":"SWAP1","source":1},{"begin":476,"end":524,"name":"POP","source":1},{"begin":476,"end":524,"name":"JUMP","source":1,"value":"[out]"},{"begin":530,"end":646,"name":"tag","source":1,"value":"12"},{"begin":530,"end":646,"name":"JUMPDEST","source":1},{"begin":600,"end":621,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":615,"end":620,"name":"DUP2","source":1},{"begin":600,"end":621,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":600,"end":621,"name":"JUMP","source":1,"value":"[in]"},{"begin":600,"end":621,"name":"tag","source":1,"value":"19"},{"begin":600,"end":621,"name":"JUMPDEST","source":1},{"begin":593,"end":598,"name":"DUP2","source":1},{"begin":590,"end":622,"name":"EQ","source":1},{"begin":580,"end":582,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":580,"end":582,"name":"JUMPI","source":1},{"begin":636,"end":637,"name":"PUSH","source":1,"value":"0"},{"begin":633,"end":634,"name":"DUP1","source":1},{"begin":626,"end":638,"name":"REVERT","source":1},{"begin":580,"end":582,"name":"tag","source":1,"value":"20"},{"begin":580,"end":582,"name":"JUMPDEST","source":1},{"begin":570,"end":646,"name":"POP","source":1},{"begin":570,"end":646,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":705,"name":"tag","source":0,"value":"7"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"CODECOPY","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033",".code":[{"begin":34,"end":705,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":705,"name":"MSTORE","source":0},{"begin":34,"end":705,"name":"CALLVALUE","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"ISZERO","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"REVERT","source":0},{"begin":34,"end":705,"name":"tag","source":0,"value":"1"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"POP","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"4"},{"begin":34,"end":705,"name":"CALLDATASIZE","source":0},{"begin":34,"end":705,"name":"LT","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"CALLDATALOAD","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"E0"},{"begin":34,"end":705,"name":"SHR","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"5EAF9BC1"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"CB30E696"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"F34F1610"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"tag","source":0,"value":"2"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"REVERT","source":0},{"begin":195,"end":224,"name":"tag","source":0,"value":"3"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":195,"end":224,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":195,"end":224,"name":"JUMP","source":0,"value":"[in]"},{"begin":195,"end":224,"name":"tag","source":0,"value":"7"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"STOP","source":0},{"begin":551,"end":699,"name":"tag","source":0,"value":"4"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":551,"end":699,"name":"PUSH","source":0,"value":"4"},{"begin":551,"end":699,"name":"DUP1","source":0},{"begin":551,"end":699,"name":"CALLDATASIZE","source":0},{"begin":551,"end":699,"name":"SUB","source":0},{"begin":551,"end":699,"name":"DUP2","source":0},{"begin":551,"end":699,"name":"ADD","source":0},{"begin":551,"end":699,"name":"SWAP1","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":551,"end":699,"name":"SWAP2","source":0},{"begin":551,"end":699,"name":"SWAP1","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[in]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"10"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[in]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"9"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"STOP","source":0},{"begin":238,"end":309,"name":"tag","source":0,"value":"5"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":238,"end":309,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":238,"end":309,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":238,"end":309,"name":"JUMP","source":0,"value":"[in]"},{"begin":238,"end":309,"name":"tag","source":0,"value":"13"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":238,"end":309,"name":"STOP","source":0},{"begin":323,"end":537,"name":"tag","source":0,"value":"6"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":323,"end":537,"name":"PUSH","source":0,"value":"4"},{"begin":323,"end":537,"name":"DUP1","source":0},{"begin":323,"end":537,"name":"CALLDATASIZE","source":0},{"begin":323,"end":537,"name":"SUB","source":0},{"begin":323,"end":537,"name":"DUP2","source":0},{"begin":323,"end":537,"name":"ADD","source":0},{"begin":323,"end":537,"name":"SWAP1","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":323,"end":537,"name":"SWAP2","source":0},{"begin":323,"end":537,"name":"SWAP1","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[in]"},{"begin":323,"end":537,"name":"tag","source":0,"value":"16"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[in]"},{"begin":323,"end":537,"name":"tag","source":0,"value":"15"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"STOP","source":0},{"begin":195,"end":224,"name":"tag","source":0,"value":"8"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"JUMP","source":0,"value":"[out]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"12"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":622,"end":629,"name":"DUP1","source":0},{"begin":610,"end":638,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":610,"end":638,"name":"AND","source":0},{"begin":610,"end":638,"name":"PUSH","source":0,"value":"5EAF9BC1"},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"40"},{"begin":610,"end":640,"name":"MLOAD","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":610,"end":640,"name":"AND","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"E0"},{"begin":610,"end":640,"name":"SHL","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"MSTORE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"4"},{"begin":610,"end":640,"name":"ADD","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"40"},{"begin":610,"end":640,"name":"MLOAD","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"DUP4","source":0},{"begin":610,"end":640,"name":"SUB","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP8","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"EXTCODESIZE","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"PUSH [tag]","source":0,"value":"21"},{"begin":610,"end":640,"name":"JUMPI","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"REVERT","source":0},{"begin":610,"end":640,"name":"tag","source":0,"value":"21"},{"begin":610,"end":640,"name":"JUMPDEST","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"GAS","source":0},{"begin":610,"end":640,"name":"CALL","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"PUSH [tag]","source":0,"value":"23"},{"begin":610,"end":640,"name":"JUMPI","source":0},{"begin":610,"end":640,"name":"RETURNDATASIZE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"RETURNDATACOPY","source":0},{"begin":610,"end":640,"name":"RETURNDATASIZE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"REVERT","source":0},{"begin":610,"end":640,"name":"tag","source":0,"value":"23"},{"begin":610,"end":640,"name":"JUMPDEST","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":666,"end":673,"name":"DUP1","source":0},{"begin":654,"end":686,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":654,"end":686,"name":"AND","source":0},{"begin":654,"end":686,"name":"PUSH","source":0,"value":"CB30E696"},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"40"},{"begin":654,"end":688,"name":"MLOAD","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":654,"end":688,"name":"AND","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"E0"},{"begin":654,"end":688,"name":"SHL","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"MSTORE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"4"},{"begin":654,"end":688,"name":"ADD","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"40"},{"begin":654,"end":688,"name":"MLOAD","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"DUP4","source":0},{"begin":654,"end":688,"name":"SUB","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP8","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"EXTCODESIZE","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"PUSH [tag]","source":0,"value":"24"},{"begin":654,"end":688,"name":"JUMPI","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"REVERT","source":0},{"begin":654,"end":688,"name":"tag","source":0,"value":"24"},{"begin":654,"end":688,"name":"JUMPDEST","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"GAS","source":0},{"begin":654,"end":688,"name":"CALL","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"PUSH [tag]","source":0,"value":"26"},{"begin":654,"end":688,"name":"JUMPI","source":0},{"begin":654,"end":688,"name":"RETURNDATASIZE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"RETURNDATACOPY","source":0},{"begin":654,"end":688,"name":"RETURNDATASIZE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"REVERT","source":0},{"begin":654,"end":688,"name":"tag","source":0,"value":"26"},{"begin":654,"end":688,"name":"JUMPDEST","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":551,"end":699,"name":"POP","source":0},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[out]"},{"begin":238,"end":309,"name":"tag","source":0,"value":"14"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":282,"end":290,"name":"PUSH","source":0,"value":"0"},{"begin":282,"end":290,"name":"DUP1","source":0},{"begin":282,"end":290,"name":"REVERT","source":0},{"begin":323,"end":537,"name":"tag","source":0,"value":"18"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":412,"end":419,"name":"DUP2","source":0},{"begin":400,"end":432,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":400,"end":432,"name":"AND","source":0},{"begin":400,"end":432,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":433,"end":440,"name":"DUP3","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"40"},{"begin":400,"end":441,"name":"MLOAD","source":0},{"begin":400,"end":441,"name":"DUP3","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":400,"end":441,"name":"AND","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"E0"},{"begin":400,"end":441,"name":"SHL","source":0},{"begin":400,"end":441,"name":"DUP2","source":0},{"begin":400,"end":441,"name":"MSTORE","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"4"},{"begin":400,"end":441,"name":"ADD","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"29"},{"begin":400,"end":441,"name":"SWAP2","source":0},{"begin":400,"end":441,"name":"SWAP1","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"30"},{"begin":400,"end":441,"name":"JUMP","source":0,"value":"[in]"},{"begin":400,"end":441,"name":"tag","source":0,"value":"29"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"40"},{"begin":400,"end":441,"name":"MLOAD","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"DUP4","source":0},{"begin":400,"end":441,"name":"SUB","source":0},{"begin":400,"end":441,"name":"DUP2","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"DUP8","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"EXTCODESIZE","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"31"},{"begin":400,"end":441,"name":"JUMPI","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"REVERT","source":0},{"begin":400,"end":441,"name":"tag","source":0,"value":"31"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"GAS","source":0},{"begin":400,"end":441,"name":"CALL","source":0},{"begin":400,"end":441,"name":"SWAP3","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"32"},{"begin":400,"end":441,"name":"JUMPI","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"1"},{"begin":400,"end":441,"name":"tag","source":0,"value":"32"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":396,"end":455,"name":"PUSH [tag]","source":0,"value":"33"},{"begin":396,"end":455,"name":"JUMPI","source":0},{"begin":396,"end":455,"name":"PUSH [tag]","source":0,"value":"37"},{"begin":396,"end":455,"name":"JUMP","source":0},{"begin":396,"end":455,"name":"tag","source":0,"value":"33"},{"begin":396,"end":455,"name":"JUMPDEST","source":0},{"begin":396,"end":455,"name":"tag","source":0,"value":"37"},{"begin":396,"end":455,"name":"JUMPDEST","source":0},{"begin":484,"end":491,"name":"DUP2","source":0},{"begin":472,"end":504,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":472,"end":504,"name":"AND","source":0},{"begin":472,"end":504,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":505,"end":512,"name":"DUP3","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"40"},{"begin":472,"end":513,"name":"MLOAD","source":0},{"begin":472,"end":513,"name":"DUP3","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":472,"end":513,"name":"AND","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"E0"},{"begin":472,"end":513,"name":"SHL","source":0},{"begin":472,"end":513,"name":"DUP2","source":0},{"begin":472,"end":513,"name":"MSTORE","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"4"},{"begin":472,"end":513,"name":"ADD","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"38"},{"begin":472,"end":513,"name":"SWAP2","source":0},{"begin":472,"end":513,"name":"SWAP1","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"30"},{"begin":472,"end":513,"name":"JUMP","source":0,"value":"[in]"},{"begin":472,"end":513,"name":"tag","source":0,"value":"38"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"40"},{"begin":472,"end":513,"name":"MLOAD","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"DUP4","source":0},{"begin":472,"end":513,"name":"SUB","source":0},{"begin":472,"end":513,"name":"DUP2","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"DUP8","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"EXTCODESIZE","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"39"},{"begin":472,"end":513,"name":"JUMPI","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"REVERT","source":0},{"begin":472,"end":513,"name":"tag","source":0,"value":"39"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"GAS","source":0},{"begin":472,"end":513,"name":"CALL","source":0},{"begin":472,"end":513,"name":"SWAP3","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"40"},{"begin":472,"end":513,"name":"JUMPI","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"1"},{"begin":472,"end":513,"name":"tag","source":0,"value":"40"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":468,"end":527,"name":"PUSH [tag]","source":0,"value":"41"},{"begin":468,"end":527,"name":"JUMPI","source":0},{"begin":468,"end":527,"name":"PUSH [tag]","source":0,"value":"45"},{"begin":468,"end":527,"name":"JUMP","source":0},{"begin":468,"end":527,"name":"tag","source":0,"value":"41"},{"begin":468,"end":527,"name":"JUMPDEST","source":0},{"begin":468,"end":527,"name":"tag","source":0,"value":"45"},{"begin":468,"end":527,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"POP","source":0},{"begin":323,"end":537,"name":"POP","source":0},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"47"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"49"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"50"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"49"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"52"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"52"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"53"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"53"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":827,"name":"tag","source":1,"value":"17"},{"begin":420,"end":827,"name":"JUMPDEST","source":1},{"begin":420,"end":827,"name":"PUSH","source":1,"value":"0"},{"begin":420,"end":827,"name":"DUP1","source":1},{"begin":545,"end":547,"name":"PUSH","source":1,"value":"40"},{"begin":533,"end":542,"name":"DUP4","source":1},{"begin":524,"end":531,"name":"DUP6","source":1},{"begin":520,"end":543,"name":"SUB","source":1},{"begin":516,"end":548,"name":"SLT","source":1},{"begin":513,"end":515,"name":"ISZERO","source":1},{"begin":513,"end":515,"name":"PUSH [tag]","source":1,"value":"55"},{"begin":513,"end":515,"name":"JUMPI","source":1},{"begin":561,"end":562,"name":"PUSH","source":1,"value":"0"},{"begin":558,"end":559,"name":"DUP1","source":1},{"begin":551,"end":563,"name":"REVERT","source":1},{"begin":513,"end":515,"name":"tag","source":1,"value":"55"},{"begin":513,"end":515,"name":"JUMPDEST","source":1},{"begin":604,"end":605,"name":"PUSH","source":1,"value":"0"},{"begin":629,"end":682,"name":"PUSH [tag]","source":1,"value":"56"},{"begin":674,"end":681,"name":"DUP6","source":1},{"begin":665,"end":671,"name":"DUP3","source":1},{"begin":654,"end":663,"name":"DUP7","source":1},{"begin":650,"end":672,"name":"ADD","source":1},{"begin":629,"end":682,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":629,"end":682,"name":"JUMP","source":1,"value":"[in]"},{"begin":629,"end":682,"name":"tag","source":1,"value":"56"},{"begin":629,"end":682,"name":"JUMPDEST","source":1},{"begin":619,"end":682,"name":"SWAP3","source":1},{"begin":619,"end":682,"name":"POP","source":1},{"begin":575,"end":692,"name":"POP","source":1},{"begin":731,"end":733,"name":"PUSH","source":1,"value":"20"},{"begin":757,"end":810,"name":"PUSH [tag]","source":1,"value":"57"},{"begin":802,"end":809,"name":"DUP6","source":1},{"begin":793,"end":799,"name":"DUP3","source":1},{"begin":782,"end":791,"name":"DUP7","source":1},{"begin":778,"end":800,"name":"ADD","source":1},{"begin":757,"end":810,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":757,"end":810,"name":"JUMP","source":1,"value":"[in]"},{"begin":757,"end":810,"name":"tag","source":1,"value":"57"},{"begin":757,"end":810,"name":"JUMPDEST","source":1},{"begin":747,"end":810,"name":"SWAP2","source":1},{"begin":747,"end":810,"name":"POP","source":1},{"begin":702,"end":820,"name":"POP","source":1},{"begin":503,"end":827,"name":"SWAP3","source":1},{"begin":503,"end":827,"name":"POP","source":1},{"begin":503,"end":827,"name":"SWAP3","source":1},{"begin":503,"end":827,"name":"SWAP1","source":1},{"begin":503,"end":827,"name":"POP","source":1},{"begin":503,"end":827,"name":"JUMP","source":1,"value":"[out]"},{"begin":833,"end":951,"name":"tag","source":1,"value":"58"},{"begin":833,"end":951,"name":"JUMPDEST","source":1},{"begin":920,"end":944,"name":"PUSH [tag]","source":1,"value":"60"},{"begin":938,"end":943,"name":"DUP2","source":1},{"begin":920,"end":944,"name":"PUSH [tag]","source":1,"value":"61"},{"begin":920,"end":944,"name":"JUMP","source":1,"value":"[in]"},{"begin":920,"end":944,"name":"tag","source":1,"value":"60"},{"begin":920,"end":944,"name":"JUMPDEST","source":1},{"begin":915,"end":918,"name":"DUP3","source":1},{"begin":908,"end":945,"name":"MSTORE","source":1},{"begin":898,"end":951,"name":"POP","source":1},{"begin":898,"end":951,"name":"POP","source":1},{"begin":898,"end":951,"name":"JUMP","source":1,"value":"[out]"},{"begin":957,"end":1179,"name":"tag","source":1,"value":"30"},{"begin":957,"end":1179,"name":"JUMPDEST","source":1},{"begin":957,"end":1179,"name":"PUSH","source":1,"value":"0"},{"begin":1088,"end":1090,"name":"PUSH","source":1,"value":"20"},{"begin":1077,"end":1086,"name":"DUP3","source":1},{"begin":1073,"end":1091,"name":"ADD","source":1},{"begin":1065,"end":1091,"name":"SWAP1","source":1},{"begin":1065,"end":1091,"name":"POP","source":1},{"begin":1101,"end":1172,"name":"PUSH [tag]","source":1,"value":"63"},{"begin":1169,"end":1170,"name":"PUSH","source":1,"value":"0"},{"begin":1158,"end":1167,"name":"DUP4","source":1},{"begin":1154,"end":1171,"name":"ADD","source":1},{"begin":1145,"end":1151,"name":"DUP5","source":1},{"begin":1101,"end":1172,"name":"PUSH [tag]","source":1,"value":"58"},{"begin":1101,"end":1172,"name":"JUMP","source":1,"value":"[in]"},{"begin":1101,"end":1172,"name":"tag","source":1,"value":"63"},{"begin":1101,"end":1172,"name":"JUMPDEST","source":1},{"begin":1055,"end":1179,"name":"SWAP3","source":1},{"begin":1055,"end":1179,"name":"SWAP2","source":1},{"begin":1055,"end":1179,"name":"POP","source":1},{"begin":1055,"end":1179,"name":"POP","source":1},{"begin":1055,"end":1179,"name":"JUMP","source":1,"value":"[out]"},{"begin":1185,"end":1281,"name":"tag","source":1,"value":"61"},{"begin":1185,"end":1281,"name":"JUMPDEST","source":1},{"begin":1185,"end":1281,"name":"PUSH","source":1,"value":"0"},{"begin":1251,"end":1275,"name":"PUSH [tag]","source":1,"value":"65"},{"begin":1269,"end":1274,"name":"DUP3","source":1},{"begin":1251,"end":1275,"name":"PUSH [tag]","source":1,"value":"66"},{"begin":1251,"end":1275,"name":"JUMP","source":1,"value":"[in]"},{"begin":1251,"end":1275,"name":"tag","source":1,"value":"65"},{"begin":1251,"end":1275,"name":"JUMPDEST","source":1},{"begin":1240,"end":1275,"name":"SWAP1","source":1},{"begin":1240,"end":1275,"name":"POP","source":1},{"begin":1230,"end":1281,"name":"SWAP2","source":1},{"begin":1230,"end":1281,"name":"SWAP1","source":1},{"begin":1230,"end":1281,"name":"POP","source":1},{"begin":1230,"end":1281,"name":"JUMP","source":1,"value":"[out]"},{"begin":1287,"end":1413,"name":"tag","source":1,"value":"66"},{"begin":1287,"end":1413,"name":"JUMPDEST","source":1},{"begin":1287,"end":1413,"name":"PUSH","source":1,"value":"0"},{"begin":1364,"end":1406,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":1357,"end":1362,"name":"DUP3","source":1},{"begin":1353,"end":1407,"name":"AND","source":1},{"begin":1342,"end":1407,"name":"SWAP1","source":1},{"begin":1342,"end":1407,"name":"POP","source":1},{"begin":1332,"end":1413,"name":"SWAP2","source":1},{"begin":1332,"end":1413,"name":"SWAP1","source":1},{"begin":1332,"end":1413,"name":"POP","source":1},{"begin":1332,"end":1413,"name":"JUMP","source":1,"value":"[out]"},{"begin":1419,"end":1541,"name":"tag","source":1,"value":"50"},{"begin":1419,"end":1541,"name":"JUMPDEST","source":1},{"begin":1492,"end":1516,"name":"PUSH [tag]","source":1,"value":"69"},{"begin":1510,"end":1515,"name":"DUP2","source":1},{"begin":1492,"end":1516,"name":"PUSH [tag]","source":1,"value":"61"},{"begin":1492,"end":1516,"name":"JUMP","source":1,"value":"[in]"},{"begin":1492,"end":1516,"name":"tag","source":1,"value":"69"},{"begin":1492,"end":1516,"name":"JUMPDEST","source":1},{"begin":1485,"end":1490,"name":"DUP2","source":1},{"begin":1482,"end":1517,"name":"EQ","source":1},{"begin":1472,"end":1474,"name":"PUSH [tag]","source":1,"value":"70"},{"begin":1472,"end":1474,"name":"JUMPI","source":1},{"begin":1531,"end":1532,"name":"PUSH","source":1,"value":"0"},{"begin":1528,"end":1529,"name":"DUP1","source":1},{"begin":1521,"end":1533,"name":"REVERT","source":1},{"begin":1472,"end":1474,"name":"tag","source":1,"value":"70"},{"begin":1472,"end":1474,"name":"JUMPDEST","source":1},{"begin":1462,"end":1541,"name":"POP","source":1},{"begin":1462,"end":1541,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"call_ok()":"5eaf9bc1","call_revert()":"cb30e696","subcalls(address,address)":"f34f1610","subsubcalls(address)":"a885f4e3"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"should_revert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"call_ok\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subsubcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceFilter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf153bb9ac8a40ad2b947921abebad02891a26a7b8d73dbe03472330a1a669e83\",\"urls\":[\"bzz-raw://9180f7c6665f2ee8bb90a0ac0330a1df854a37186bfdf68d982995ae884da57c\",\"dweb:/ipfs/QmPcFyzXLPmF99Zjz4ytwYqw5rkKqumEoSHbDxruCdb2Av\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n \n function call_ok() public { }\n \n function call_revert() public {\n revert(); \n }\n \n function subcalls(address target0, address target1) public {\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n }\n \n function subsubcalls(address target1) public {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n }"} \ No newline at end of file diff --git a/tests/contracts/sources.ts b/tests/contracts/sources.ts index 6ecc9d50a60..1bbb9259d8c 100644 --- a/tests/contracts/sources.ts +++ b/tests/contracts/sources.ts @@ -1,24 +1,35 @@ export const contractSources: { [key: string]: string } = { - // Solidity: contract test {function multiply(uint a) public pure returns(uint d) {return a * 7;}} TestContract: ` - pragma solidity >=0.8.0; + pragma solidity >=0.8.0; + + contract TestContract { + function multiply(uint a) public pure returns(uint d) { + return a *7; + } + }`, + FailContract: ` + pragma solidity >=0.8.0; - contract TestContract {function multiply(uint a) public pure returns(uint d) {return a * 7;}}`, + contract FailContract { + constructor() public { + require(false); + } + }`, // simple incremental count contract to test contract with state changes TestContractIncr: ` - pragma solidity >=0.8.0; - - contract TestContractIncr { - uint public count; - - constructor() public { - count = 0; - } - - function incr() public { - count=count+1; - } - }`, + pragma solidity >=0.8.0; + + contract TestContractIncr { + uint public count; + + constructor() public { + count = 0; + } + + function incr() public { + count=count+1; + } + }`, // infinite loop call InfiniteContract: ` pragma solidity >=0.8.0; @@ -28,21 +39,21 @@ export const contractSources: { [key: string]: string } = { }`, // infinite loop call with variable alocation InfiniteContractVar: ` - pragma solidity >=0.8.0; - - contract InfiniteContractVar { - uint public count; - - constructor() public { - count = 0; - } - - function infinite() public { - while (true) { - count=count+1; - } - } - }`, + pragma solidity >=0.8.0; + + contract InfiniteContractVar { + uint public count; + + constructor() public { + count = 0; + } + + function infinite() public { + while (true) { + count=count+1; + } + } + }`, // definite loop call with variable alocation FiniteLoopContract: ` pragma solidity >=0.8.0; @@ -62,4 +73,173 @@ export const contractSources: { [key: string]: string } = { } } }`, + SingleEventContract: ` + pragma solidity >=0.8.0; + + contract SingleEventContract { + event Constructed(address indexed owner); + + constructor() { + emit Constructed(msg.sender); + } + }`, + HashRipmd160: ` + pragma solidity >=0.8.0; + contract HashRipmd160 { + constructor() { + require(ripemd160(bytes ('Hello World!')) == + hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c'); + } + }`, + Bn128Addition: ` + pragma solidity >=0.8.0; + contract Bn128Addition{ + constructor() { + bool success; + uint256[4] memory input = [ + 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703, + 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915, + 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9, + 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 + ]; + uint256[2] memory result; + + assembly { + // 0x06 id of the bn256Add precompile + // 0 number of ether to transfer + // 128 size of call parameters, i.e. 128 bytes total + // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point + success := call(not(0), 0x06, 0, input, 128, result, 64) + } + require(success, "elliptic curve addition failed"); + require( + result[0] == + 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7, + "failed"); + require( + result[1] == + 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204, + "failed"); + } + }`, + Bn128Multiply: ` + pragma solidity >=0.8.0; + contract Bn128Multiply{ + constructor() { + bool success; + uint256[3] memory input = [ + 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, + 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6, + 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 + ]; + uint256[2] memory result; + + assembly { + // 0x07 id of the bn256Mul precompile + // 0 number of ether to transfer + // 96 size of call parameters, i.e. 128 bytes total + // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point + success := call(not(0), 0x07, 0, input, 96, result, 64) + } + require(success, "elliptic curve addition failed"); + require( + result[0] == + 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, + "failed"); + require( + result[1] == + 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451, + "failed"); + } + }`, + Bn128Pairing: ` + pragma solidity >=0.8.0; + contract Bn128Pairing { + constructor() { + uint256[12] memory input = [ + 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02, + 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84, + 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee, + 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f, + 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237, + 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f, + 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9, + 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1, + 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2, + 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed, + 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b, + 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa + ]; + uint256[1] memory result; + bool success; + assembly { + // 0x08 id of the bn256CheckPairing precompile + // 0 number of ether to transfer + // 0 since we have an array of fixed length, our input starts in 0 + // 384 size of call parameters, i.e. 12*256 bits == 384 bytes + // 32 size of result (one 32 byte boolean!) + success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) + } + require(success, "elliptic curve pairing failed"); + require(result[0] == 1, "failed"); + } + }`, + ModularCheck: ` + pragma solidity >=0.8.0; + contract ModularCheck { + // Verify simple modular exponentiation + constructor() { + require(modExp(3, 5, 7) == 5); + require(modExp(5, 7, 11) == 3); + } + // Wrapper function to use the precompile. + // Taken from https://ethereum.stackexchange.com/a/71590/9963 + function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) { + assembly { + // Free memory pointer + let pointer := mload(0x40) + // Define length of base, exponent and modulus. 0x20 == 32 bytes + mstore(pointer, 0x20) + mstore(add(pointer, 0x20), 0x20) + mstore(add(pointer, 0x40), 0x20) + // Define variables base, exponent and modulus + mstore(add(pointer, 0x60), _b) + mstore(add(pointer, 0x80), _e) + + mstore(add(pointer, 0xa0), _m) + // Store the result + let value := mload(0xc0) + // Call the precompiled contract 0x05 = bigModExp + if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) { + revert(0, 0) + } + result := mload(value) + } + } + }`, + TraceFilter: ` + pragma solidity >=0.8.0; + contract TraceFilter { + constructor(bool should_revert) { + if (should_revert) { + revert(); + } + } + + function call_ok() public { } + + function call_revert() public { + revert(); + } + + function subcalls(address target0, address target1) public { + try TraceFilter(target0).subsubcalls(target1) { } catch { } + try TraceFilter(target0).subsubcalls(target1) { } catch { } + } + + function subsubcalls(address target1) public { + TraceFilter(target1).call_ok(); + TraceFilter(target1).call_revert(); + } + }`, }; diff --git a/tests/pre-build-contracts.ts b/tests/pre-build-contracts.ts index 5613940794d..8f37ff78649 100644 --- a/tests/pre-build-contracts.ts +++ b/tests/pre-build-contracts.ts @@ -1,7 +1,7 @@ import solc from "solc"; import fs from "fs/promises"; import { contractSources } from "./contracts/sources"; -import { Compiled } from "./tests/util/contracts"; +import { Compiled } from "../tests/util/contracts"; function compileSolidity(contractContent: string, contractName: string = "Test"): Compiled { let result = JSON.parse( @@ -47,7 +47,10 @@ async function compile(name: string): Promise { } const main = async () => { - await Promise.all(Object.keys(contractSources).map(compile)); + for (let name of Object.keys(contractSources)) { + console.log(`Compiling ${name}`); + await compile(name); + } // Forcing exit to avoid solc maintaining the process process.exit(0); diff --git a/tests/tests/constants/IncrementerWithEvent.json b/tests/tests/constants/IncrementerWithEvent.json deleted file mode 100644 index 1ea4d7107e8..00000000000 --- a/tests/tests/constants/IncrementerWithEvent.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "contractName": "IncrementerWithEvent", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "count", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "increment", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "who", - "type": "address" - } - ], - "name": "Increment", - "type": "event" - } - ], - "linkReferences": {}, - "bytecode": "0x60806040526000805534801561001457600080fd5b5061013a806100246000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14610051578063d09de08a1461007c575b600080fd5b34801561005d57600080fd5b50610066610093565b6040518082815260200191505060405180910390f35b34801561008857600080fd5b50610091610099565b005b60005481565b7ffc3a67c9f0b5967ae4041ed898b05ec1fa49d2a3c22336247201d71be6f9712033604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600160008082825401925050819055505600a165627a7a723058205fd614b5aed0d535e239d8b2622852895ac8aa83d133da106fc82e602cf1568c0029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x6661ABD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xD09DE08A EQ PUSH2 0x7C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x66 PUSH2 0x93 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x99 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH32 0xFC3A67C9F0B5967AE4041ED898B05EC1FA49D2A3C22336247201D71BE6F97120 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x5f 0xd6 EQ 0xb5 0xae 0xd0 0xd5 CALLDATALOAD 0xe2 CODECOPY 0xd8 0xb2 PUSH3 0x285289 GAS 0xc8 0xaa DUP4 0xd1 CALLER 0xda LT PUSH16 0xC82E602CF1568C002900000000000000 ", - "sourceMap": "26:220:0:-;;;72:1;49:24;;26:220;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:220:0;;;;;;;" -} diff --git a/tests/tests/constants/TraceFilter.json b/tests/tests/constants/TraceFilter.json deleted file mode 100644 index a2df7d1ce2f..00000000000 --- a/tests/tests/constants/TraceFilter.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "contractName": "TraceFilter", - "abi": [ - { - "inputs": [ - { - "internalType": "bool", - "name": "should_revert", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "call_ok", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "call_revert", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target0", - "type": "address" - }, - { - "internalType": "address", - "name": "target1", - "type": "address" - } - ], - "name": "subcalls", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target1", - "type": "address" - } - ], - "name": "subsubcalls", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b506040516103783803806103788339818101604052602081101561003357600080fd5b8101908080519060200190929190505050801561004f57600080fd5b506103198061005f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e6961461009f578063f34f1610146100a9575b600080fd5b61005961010d565b005b61009d6004803603602081101561007157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061010f565b005b6100a76101d2565b005b61010b600480360360408110156100bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101d7565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561015757600080fd5b505af115801561016b573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156101b757600080fd5b505af11580156101cb573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561024057600080fd5b505af1925050508015610251575060015b61025a5761025b565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156102c457600080fd5b505af19250505080156102d5575060015b6102de576102df565b5b505056fea2646970667358221220ee197ab2a083888733b5308bb086dad0368108fe41328cd7752f955e7e67232464736f6c63430007060033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x378 CODESIZE SUB DUP1 PUSH2 0x378 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP1 ISZERO PUSH2 0x4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x319 DUP1 PUSH2 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0xA9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x10D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x10F JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA7 PUSH2 0x1D2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x10B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1D7 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x157 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x251 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x25A JUMPI PUSH2 0x25B JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2D5 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x2DE JUMPI PUSH2 0x2DF JUMP JUMPDEST JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE NOT PUSH27 0xB2A083888733B5308BB086DAD0368108FE41328CD7752F955E7E67 0x23 0x24 PUSH5 0x736F6C6343 STOP SMOD MOD STOP CALLER ", - "sourceMap": "25:583:0:-:0;;;52:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98:13;94:52;;;127:8;;;94:52;52:100;25:583;;;;;;" -} diff --git a/tests/tests/constants/TraceFilter.sol b/tests/tests/constants/TraceFilter.sol deleted file mode 100644 index ae955b574cd..00000000000 --- a/tests/tests/constants/TraceFilter.sol +++ /dev/null @@ -1,25 +0,0 @@ -pragma solidity ^0.7.0; - -contract TraceFilter { - constructor(bool should_revert) { - if (should_revert) { - revert(); - } - } - - function call_ok() public { } - - function call_revert() public { - revert(); - } - - function subcalls(address target0, address target1) public { - try TraceFilter(target0).subsubcalls(target1) { } catch { } - try TraceFilter(target0).subsubcalls(target1) { } catch { } - } - - function subsubcalls(address target1) public { - TraceFilter(target1).call_ok(); - TraceFilter(target1).call_revert(); - } -} \ No newline at end of file diff --git a/tests/tests/constants/constants.ts b/tests/tests/constants/constants.ts deleted file mode 100644 index 4639b6de775..00000000000 --- a/tests/tests/constants/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const SPECS_PATH = `./moonbeam-test-specs`; - -export const DISPLAY_LOG = process.env.MOONBEAM_LOG || false; -export const MOONBEAM_LOG = process.env.MOONBEAM_LOG || "info"; - -export const BINARY_PATH = process.env.BINARY_PATH || `../target/release/moonbeam`; -export const SPAWNING_TIME = 30000; - -// Test variables -export const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; -export const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; -export const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; -export const GLMR = 1_000_000_000_000_000_000n; -export const DEFAULT_GENESIS_BALANCE = 2n ** 80n; -export const DEFAULT_GENESIS_STAKING = 1_000n * GLMR; -export const GENESIS_ACCOUNT_BALANCE = DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_STAKING; diff --git a/tests/tests/constants/contractConstants.ts b/tests/tests/constants/contractConstants.ts deleted file mode 100644 index 7e3ee5ef4e1..00000000000 --- a/tests/tests/constants/contractConstants.ts +++ /dev/null @@ -1,193 +0,0 @@ -export const FIRST_CONTRACT_ADDRESS = "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a"; - -export const ERC20_BYTECODE = - "0x608060405234801561001057600080fd5b50610024336202616061002960201b60201c565b610274565b600073ff" + - "ffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100" + - "cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f206164647265737300" + - "81525060200191505060405180910390fd5b6100e5816002546101ec60201b610c7c1790919060201c565b60028190" + - "5550610140816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + - "ffffffffffff168152602001908152602001600020546101ec60201b610c7c1790919060201c565b6000808473ffff" + - "ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + - "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffff" + - "ffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360" + - "40518082815260200191505060405180910390a35050565b60008082840190508381101561026a576040517f08c379" + - "a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b81" + - "52602001807f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815250602001915050" + - "60405180910390fd5b8091505092915050565b610e3a806102836000396000f3fe6080604052348015610010576000" + - "80fd5b50600436106100885760003560e01c806370a082311161005b57806370a08231146101fd578063a457c2d714" + - "610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b8063095ea7b31461008d57806318160d" + - "dd146100f357806323b872dd146101115780633950935114610197575b600080fd5b6100d960048036036040811015" + - "6100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035" + - "9060200190929190505050610399565b604051808215151515815260200191505060405180910390f35b6100fb6103" + - "b7565b6040518082815260200191505060405180910390f35b61017d6004803603606081101561012757600080fd5b" + - "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffff" + - "ffffffffffffffffffffffff169060200190929190803590602001909291905050506103c1565b6040518082151515" + - "15815260200191505060405180910390f35b6101e3600480360360408110156101ad57600080fd5b81019080803573" + - "ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061049a565b" + - "604051808215151515815260200191505060405180910390f35b61023f6004803603602081101561021357600080fd" + - "5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040" + - "518082815260200191505060405180910390f35b6102a16004803603604081101561026b57600080fd5b8101908080" + - "3573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595" + - "565b604051808215151515815260200191505060405180910390f35b610307600480360360408110156102d1576000" + - "80fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092" + - "9190505050610662565b604051808215151515815260200191505060405180910390f35b6103836004803603604081" + - "101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190" + - "803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b60405180828152" + - "60200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092915050565b6000" + - "600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560405180606001604052" + - "8060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffff" + - "ffffffffffffffffffffffffffffffff1681526020019081526020016000206000610440610707565b73ffffffffff" + - "ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + - "200160002054610bbc9092919063ffffffff16565b61070f565b600190509392505050565b60006105436104a76107" + - "07565b8461053e85600160006104b8610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffff" + - "ffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffff" + - "ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461" + - "0c7c90919063ffffffff16565b61070f565b6001905092915050565b60008060008373ffffffffffffffffffffffff" + - "ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490" + - "50919050565b60006106586105a2610707565b8461065385604051806060016040528060258152602001610de16025" + - "9139600160006105cc610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + - "ffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffff" + - "ffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbc90929190" + - "63ffffffff16565b61070f565b6001905092915050565b600061067661066f610707565b8484610906565b60019050" + - "92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff" + - "ffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffff" + - "ff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b" + - "600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + - "ffffffffffffff161415610795576040517f08c379a000000000000000000000000000000000000000000000000000" + - "0000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180910390fd" + - "5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff" + - "16141561081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004" + - "01808060200182810382526022815260200180610d286022913960400191505060405180910390fd5b806001600085" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + - "200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + - "ffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffff" + - "ffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd03" + - "14c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffff" + - "ffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098c57" + - "6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182" + - "810382526025815260200180610d986025913960400191505060405180910390fd5b600073ffffffffffffffffffff" + - "ffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a12576040517f08c379" + - "a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381" + - "5260200180610d056023913960400191505060405180910390fd5b610a7d8160405180606001604052806026815260" + - "2001610d4a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff" + - "ffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffff" + - "ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + - "815260200160002081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffff" + - "ffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60" + - "00808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16" + - "8152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffff" + - "ffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df5" + - "23b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c69576040517f08" + - "c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283" + - "818151815260200191508051906020019080838360005b83811015610c2e578082015181840152602081019050610c" + - "13565b50505050905090810190601f168015610c5b5780820380516001836020036101000a03191681526020019150" + - "5b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561" + - "0cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060" + - "20018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + - "0081525060200191505060405180910390fd5b809150509291505056fe45524332303a207472616e7366657220746f" + - "20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464" + - "7265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433230" + - "3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e73" + - "6665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d207468" + - "65207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f7720" + - "7a65726fa265627a7a723158208bfd5c482ccbde97b679a417e6f0a1698bb5491e25bb256602f6c4271b11757b6473" + - "6f6c63430005110032"; - -export const TEST_SUBSCRIPTION_CONTRACT_BYTECODE = - "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffff" + - "ffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffff" + - "ffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000" + - "0000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152" + - "602001807f45524332303a206d696e7420746f20746865207a65726f2061646472657373008152506020019150" + - "5060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d81" + - "6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff" + - "ffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffff" + - "ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190" + - "8152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffff" + - "ffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523" + - "b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156102875760" + - "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + - "8281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f7700000000" + - "0081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080" + - "60405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0" + - "8231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b" + - "8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b" + - "600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffff" + - "ffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515" + - "815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390" + - "f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffff" + - "ffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092" + - "9190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f3" + - "5b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffff" + - "ffffffffff1690602001909291908035906020019092919050505061049a565b60405180821515151581526020" + - "0191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffff" + - "ffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191" + - "505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffff" + - "ffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051" + - "808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b" + - "81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291" + - "90505050610662565b604051808215151515815260200191505060405180910390f35b61038360048036036040" + - "81101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190" + - "929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040" + - "518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092" + - "915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a8560" + - "4051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffff" + - "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061" + - "0440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + - "ffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b60019050" + - "9392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffff" + - "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260" + - "200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff" + - "ffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b60019050" + - "92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" + - "ffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a261070756" + - "5b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ff" + - "ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + - "200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff" + - "ffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6107" + - "0f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000" + - "600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff" + - "ffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ff" + - "ffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000" + - "33905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffff" + - "ffffffffffffff161415610795576040517f08c379a00000000000000000000000000000000000000000000000" + - "00000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180" + - "910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffff" + - "ffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000" + - "000000008152600401808060200182810382526022815260200180610d28602291396040019150506040518091" + - "0390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + - "ffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffff" + - "ffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173" + - "ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f" + - "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051808281526020019150" + - "5060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffff" + - "ffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000" + - "000000000000000000000000008152600401808060200182810382526025815260200180610d98602591396040" + - "0191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffff" + - "ffffffffffffffffffffffffffff161415610a12576040517f08c379a000000000000000000000000000000000" + - "0000000000000000000000008152600401808060200182810382526023815260200180610d0560239139604001" + - "91505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a6026913960008087" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "5260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffff" + - "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000" + - "2081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff" + - "ffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b60008084" + - "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681" + - "52602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffff" + - "ffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f5" + - "5a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c6957" + - "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "01828103825283818151815260200191508051906020019080838360005b83811015610c2e5780820151818401" + - "52602081019050610c13565b50505050905090810190601f168015610c5b578082038051600183602003610100" + - "0a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b" + - "600080828401905083811015610cfa576040517f08c379a0000000000000000000000000000000000000000000" + - "00000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a2061646469" + - "74696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056" + - "fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206170" + - "70726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f75" + - "6e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e742065786365" + - "65647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164" + - "647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332" + - "303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ff" + - "abf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; diff --git a/tests/tests/constants/index.ts b/tests/tests/constants/index.ts deleted file mode 100644 index 733fde22556..00000000000 --- a/tests/tests/constants/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -export * from "./contractConstants"; -export * from "./constants"; -export * from "./transactionConfigs"; - -// TESTING NOTES -// -// BLOCK TESTING -// - block dont seem to have gas limit but it's usually around 1500 tx per block -// and the time it takes to construct the block increases until around 12s for 1500tx -// - after the first 1500tx block, following block have around 100-300 tx per block -// until all blocks are incuded. 10 blockds for 3000tx -// - between 7k and 10k, for some reason block creation doesnt work and we get -// one Pool(ImmediatelyDropped) error -// and Pool(TooLowPriority { old: 0, new: 0 })': 819 for the contract creation - -// 8192 is the number of tx that can be sent to the Pool before it throws an error and drops all tx -// from the pool (we can see in the logs that the ‘ready’ field goes from 8192 to zero) - -// It does say however, 8182/20480kB ready, 819/2048kB future and I’m not sure what that means -// -// INFINITE LOOP -// - infinite loop contract should throw out of gas error, but they don't and -// they are included in the block. -// - there are some rpc errors sometimes -// - the state remains unchanged tho (test with infinite incremental contract) -// -// FINITE LOOP -// - making a 1000 loop incr on a smart contract doesnt pass but doesnt throw -// error either (although it does include the tx in a block) -// => is there a problem with out of gas error -// =>probably because we don't have the concept of gas? -// - posting a tx that goes over the gas limit/tx does throw an out of gas error -// in the debug log but not in js - -//NB: https://github.com/paritytech/frontier/blob/master/frame/ethereum/src/lib.rs -// show that root=0 when error is thrown, -//which is something we can see when fethcing receipt -// also the current block limit is zero diff --git a/tests/tests/constants/transactionConfigs.ts b/tests/tests/constants/transactionConfigs.ts deleted file mode 100644 index f3f6c1e41c0..00000000000 --- a/tests/tests/constants/transactionConfigs.ts +++ /dev/null @@ -1,32 +0,0 @@ -// +++ TransactionConfig +++ - -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "./constants"; - -import { TransactionConfig } from "web3-core"; -import { getCompiled } from "../util/contracts"; - -export type CompleteTransactionConfig = - | TransactionConfig - | { - chainId?: string; - }; - -export const basicTransfertx: CompleteTransactionConfig = { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // =512 Must me higher than ExistentialDeposit (500) - gasPrice: "0x01", - gas: 21000, - chainId: "0x501", // Prevents web3 from requesting the chainId -}; - -export async function contractCreation(): Promise { - return { - from: GENESIS_ACCOUNT, - data: (await getCompiled("TestContract")).byteCode, - value: "0x00", - gasPrice: "0x01", - gas: 91019, - chainId: "0x501", // Prevents web3 from requesting the chainId - }; -} diff --git a/tests/tests/test-balance-extrinsics.ts b/tests/tests/test-balance-extrinsics.ts new file mode 100644 index 00000000000..23547ec318d --- /dev/null +++ b/tests/tests/test-balance-extrinsics.ts @@ -0,0 +1,56 @@ +import { expect } from "chai"; + +import { Event } from "@polkadot/types/interfaces"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; + +describeDevMoonbeam("Balance extrinsics", (context) => { + it("should appear after transfer", async function () { + const testAddress = "0x1111111111111111111111111111111111111111"; + await context.createBlock({ + transactions: [await createTransfer(context.web3, testAddress, 512)], + }); + + const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(1); + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(blockHash); + const allRecords = await context.polkadotApi.query.system.events.at( + signedBlock.block.header.hash + ); + + // map between the extrinsics and events + signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { + // filter the specific events based on the phase and then the + // index of our extrinsic in the block + const events: Event[] = allRecords + .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) + .map(({ event }) => event); + + switch (index) { + // First 3 events: + // timestamp.set:: system.ExtrinsicSuccess + // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess + // authorInherent.setAuthor:: system.ExtrinsicSuccess + case 0: + case 1: + case 2: + expect( + events.length === 1 && context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) + ).to.be.true; + break; + // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), + // ethereum.Executed, system.ExtrinsicSuccess + case 3: + expect(section === "ethereum" && method === "transact").to.be.true; + expect(events.length === 4); + expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; + // TODO: what event was inserted here? + expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; + break; + default: + throw new Error(`Unexpected extrinsic`); + } + }); + }); +}); diff --git a/tests/tests/test-balance-genesis.ts b/tests/tests/test-balance-genesis.ts new file mode 100644 index 00000000000..b59aadaafd5 --- /dev/null +++ b/tests/tests/test-balance-genesis.ts @@ -0,0 +1,18 @@ +import { expect } from "chai"; + +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_BALANCE } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("Balance genesis", (context) => { + it("should be accessible through web3", async function () { + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( + GENESIS_ACCOUNT_BALANCE.toString() + ); + }); + + it("should be accessible through polkadotJs", async function () { + const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); + const account = await context.polkadotApi.query.system.account.at(genesisHash, GENESIS_ACCOUNT); + expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); + }); +}); diff --git a/tests/tests/test-balance-transfer.ts b/tests/tests/test-balance-transfer.ts new file mode 100644 index 00000000000..da5afae3b26 --- /dev/null +++ b/tests/tests/test-balance-transfer.ts @@ -0,0 +1,48 @@ +import { expect } from "chai"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_BALANCE } from "../util/constants"; + +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; + +describeDevMoonbeam("Balance transfer cost", (context) => { + it("should cost 21000", async function () { + const testAccount = "0x1111111111111111111111111111111111111111"; + await context.createBlock({ + transactions: [await createTransfer(context.web3, testAccount, 0)], + }); + + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + (GENESIS_ACCOUNT_BALANCE - 21000n).toString() + ); + }); +}); + +describeDevMoonbeam("Balance transfer", (context) => { + const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; + before("Create block with transfer to test account of 512", async () => { + await context.createBlock({ + transactions: [await createTransfer(context.web3, TEST_ACCOUNT, 512)], + }); + }); + + it("should decrease from account", async function () { + // 21000 covers the cost of the transaction + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + (GENESIS_ACCOUNT_BALANCE - 512n - 21000n).toString() + ); + }); + + it("should increase to account", async function () { + expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 0)).to.equal("0"); + expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); + }); + + it("should reflect balance identically on polkadot/web3", async function () { + const block1Hash = await context.polkadotApi.rpc.chain.getBlockHash(1); + expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + ( + await context.polkadotApi.query.system.account.at(block1Hash, GENESIS_ACCOUNT) + ).data.free.toString() + ); + }); +}); diff --git a/tests/tests/test-balance.ts b/tests/tests/test-balance.ts deleted file mode 100644 index 2413b0cf1c9..00000000000 --- a/tests/tests/test-balance.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { expect } from "chai"; -import { Keyring } from "@polkadot/keyring"; - -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_BALANCE, - GENESIS_ACCOUNT_PRIVATE_KEY, - TEST_ACCOUNT, -} from "./constants"; -import { Event } from "@polkadot/types/interfaces"; -const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; - -describeWithMoonbeam("Moonbeam RPC (Balance)", `simple-specs.json`, (context) => { - before(async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (0) - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - - //Inserting polkadot transfer in the second block - const keyring = new Keyring({ type: "ethereum" }); - const testAccount = await keyring.createFromUri(GENESIS_ACCOUNT_PRIVATE_KEY); - await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT_2, 123).signAndSend(testAccount); - - await createAndFinalizeBlock(context.polkadotApi); - }); - - it("genesis balance is setup correctly (web3)", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() - ); - }); - - it("genesis balance is setup correctly (polkadotJs)", async function () { - const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - const account = await context.polkadotApi.query.system.account.at(genesisHash, GENESIS_ACCOUNT); - expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); - }); - it("balance to be updated after transfer", async function () { - const genesisBalance = BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - (genesisBalance - 0x200n - 21000n).toString() - ); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); - }); - - it("read ethereum.transact extrinsic events", async function () { - const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(1); - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(blockHash); - const allRecords = await context.polkadotApi.query.system.events.at( - signedBlock.block.header.hash - ); - - // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { - // filter the specific events based on the phase and then the - // index of our extrinsic in the block - const events: Event[] = allRecords - .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) - .map(({ event }) => event); - - switch (index) { - // First 3 events: - // timestamp.set:: system.ExtrinsicSuccess - // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess - // authorInherent.setAuthor:: system.ExtrinsicSuccess - case 0: - case 1: - case 2: - expect( - events.length === 1 && context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) - ).to.be.true; - break; - // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), - // ethereum.Executed, system.ExtrinsicSuccess - case 3: - expect(section === "ethereum" && method === "transact").to.be.true; - expect(events.length === 4); - expect(context.polkadotApi.events.system.NewAccount.is(events[0])).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[1])).to.be.true; - // TODO: what event was inserted here? - expect(context.polkadotApi.events.ethereum.Executed.is(events[3])).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4])).to.be.true; - break; - default: - throw new Error(`Unexpected extrinsic`); - } - }); - }); - - it("balance should be the same on polkadot/web3", async function () { - const block1Hash = await context.polkadotApi.rpc.chain.getBlockHash(1); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - ( - await context.polkadotApi.query.system.account.at(block1Hash, GENESIS_ACCOUNT) - ).data.free.toString() - ); - }); - - it("transfer from polkadotjs should appear in ethereum", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2, 2)).to.equal("123"); - }); -}); diff --git a/tests/tests/test-block-1.ts b/tests/tests/test-block-1.ts new file mode 100644 index 00000000000..82a7f016f7c --- /dev/null +++ b/tests/tests/test-block-1.ts @@ -0,0 +1,61 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("Block 1", (context) => { + before("Setup: Create empty block", async () => { + await context.createBlock(); + }); + + it("should be at block 1", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(1); + }); + + it("should have valid timestamp after block production", async function () { + // Originally ,this test required the timestamp be in the last finve minutes. + // This requirement doesn't make sense when we forge timestamps in manual seal. + const block = await context.web3.eth.getBlock("latest"); + const next5Minutes = Date.now() / 1000 + 300; + expect(block.timestamp).to.be.least(0); + expect(block.timestamp).to.be.below(next5Minutes); + }); + + it("should contain block information", async function () { + const block = await context.web3.eth.getBlock("latest"); + expect(block).to.include({ + author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + logsBloom: `0x${"0".repeat(512)}`, + miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", + number: 1, + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + }); + + expect(block.transactions).to.be.a("array").empty; + expect(block.uncles).to.be.a("array").empty; + expect((block as any).sealFields).to.eql([ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000", + ]); + expect(block.hash).to.be.a("string").lengthOf(66); + expect(block.parentHash).to.be.a("string").lengthOf(66); + expect(block.timestamp).to.be.a("number"); + }); + + it("should be accessible by hash", async function () { + const latestBlock = await context.web3.eth.getBlock("latest"); + const block = await context.web3.eth.getBlock(latestBlock.hash); + expect(block.hash).to.be.eq(latestBlock.hash); + }); + + it("should be accessible by number", async function () { + const latestBlock = await context.web3.eth.getBlock("latest"); + const block = await context.web3.eth.getBlock(1); + expect(block.hash).to.be.eq(latestBlock.hash); + }); +}); diff --git a/tests/tests/test-block-2.ts b/tests/tests/test-block-2.ts new file mode 100644 index 00000000000..26e1a936ea3 --- /dev/null +++ b/tests/tests/test-block-2.ts @@ -0,0 +1,20 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("Block 2", (context) => { + before("Setup: Create 2 empty blocks", async () => { + await context.createBlock(); + await context.createBlock(); + }); + + it("should be at block 2", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(2); + }); + + it("should include previous block hash as parent", async function () { + const block = await context.web3.eth.getBlock("latest"); + let previousBlock = await context.web3.eth.getBlock(1); + expect(block.hash).to.not.equal(previousBlock.hash); + expect(block.parentHash).to.equal(previousBlock.hash); + }); +}); diff --git a/tests/tests/test-block-gas.ts b/tests/tests/test-block-gas.ts new file mode 100644 index 00000000000..0fe3ea556ec --- /dev/null +++ b/tests/tests/test-block-gas.ts @@ -0,0 +1,34 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { EXTRINSIC_GAS_LIMIT } from "../util/constants"; +import { createContract } from "../util/transactions"; +import { customWeb3Request } from "../util/providers"; + +describeDevMoonbeam("Block Gas - Limit", (context) => { + it("should be allowed to the max block gas", async function () { + const { rawTx } = await createContract(context.web3, "TestContract", { + gas: EXTRINSIC_GAS_LIMIT, + }); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + expect(txResults[0].result).to.not.be.null; + const receipt = await context.web3.eth.getTransaction(txResults[0].result); + expect(receipt.blockHash).to.be.not.null; + }); +}); + +describeDevMoonbeam("Block Gas - Limit", (context) => { + it("should fail setting it over the max block gas", async function () { + const { rawTx } = await createContract(context.web3, "TestContract", { + gas: EXTRINSIC_GAS_LIMIT + 1, + }); + + expect( + ((await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).error as any) + .message + ).to.equal( + "submit transaction to pool failed: " + + "Pool(InvalidTransaction(InvalidTransaction::ExhaustsResources))" + ); + }); +}); diff --git a/tests/tests/test-block-genesis.ts b/tests/tests/test-block-genesis.ts new file mode 100644 index 00000000000..d7b78e55cac --- /dev/null +++ b/tests/tests/test-block-genesis.ts @@ -0,0 +1,55 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("Block genesis", (context) => { + it("should be at block 0", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(0); + }); + + it("should contain block details", async function () { + expect(await context.web3.eth.getBlockNumber()).to.equal(0); + const block = await context.web3.eth.getBlock(0); + expect(block).to.include({ + author: "0x0000000000000000000000000000000000000000", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + logsBloom: `0x${"0".repeat(512)}`, + number: 0, + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + }); + + expect(block.transactions).to.be.a("array").empty; + expect(block.uncles).to.be.a("array").empty; + expect((block as any).sealFields).to.eql([ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000", + ]); + expect(block.hash).to.be.a("string").lengthOf(66); + expect(block.parentHash).to.be.a("string").lengthOf(66); + expect(block.timestamp).to.be.a("number"); + }); + + it("should be accessible by hash", async function () { + //fetch block again using hash + const block = await context.web3.eth.getBlock(0); + const blockByHash = await context.web3.eth.getBlock(block.hash); + expect(blockByHash).to.include({ + author: "0x0000000000000000000000000000000000000000", + difficulty: "0", + extraData: "0x", + gasLimit: 15000000, + gasUsed: 0, + logsBloom: `0x${"0".repeat(512)}`, + number: 0, + receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + totalDifficulty: "0", + transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + }); + }); +}); diff --git a/tests/tests/test-block.ts b/tests/tests/test-block.ts deleted file mode 100644 index 49de86e4f0e..00000000000 --- a/tests/tests/test-block.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { expect } from "chai"; -import { contractCreation, GENESIS_ACCOUNT } from "./constants"; - -import { createAndFinalizeBlock, describeWithMoonbeam, fillBlockWithTx } from "./util"; - -describeWithMoonbeam("Moonbeam RPC (Block)", `simple-specs.json`, (context) => { - let previousBlock; - // Those tests are dependant of each other in the given order. - // The reason is to avoid having to restart the node each time - // Running them individually will result in failure - describe("Genesis Block", async () => { - it("should be at block 0 at genesis", async function () { - expect(await context.web3.eth.getBlockNumber()).to.equal(0); - }); - - it("should return genesis block", async function () { - expect(await context.web3.eth.getBlockNumber()).to.equal(0); - const block = await context.web3.eth.getBlock(0); - expect(block).to.include({ - author: "0x0000000000000000000000000000000000000000", - difficulty: "0", - extraData: "0x", - gasLimit: 15000000, - gasUsed: 0, - logsBloom: `0x${"0".repeat(512)}`, - number: 0, - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - }); - - expect(block.transactions).to.be.a("array").empty; - expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); - expect(block.hash).to.be.a("string").lengthOf(66); - expect(block.parentHash).to.be.a("string").lengthOf(66); - expect(block.timestamp).to.be.a("number"); - }); - - it("fetch genesis block by hash", async function () { - //fetch block again using hash - const block = await context.web3.eth.getBlock(0); - const blockByHash = await context.web3.eth.getBlock(block.hash); - expect(blockByHash).to.include({ - author: "0x0000000000000000000000000000000000000000", - difficulty: "0", - extraData: "0x", - gasLimit: 15000000, - gasUsed: 0, - logsBloom: `0x${"0".repeat(512)}`, - number: 0, - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - }); - }); - }); - describe("Post Genesis Block 1", async () => { - before(async () => { - await createAndFinalizeBlock( - context.polkadotApi, - await context.polkadotApi.rpc.chain.getBlockHash(0), - false - ); - }); - - it("should be at block 1 after block production", async function () { - expect(await context.web3.eth.getBlockNumber()).to.equal(1); - }); - - it("should have valid timestamp after block production", async function () { - // Originally ,this test required the timestamp be in the last finve minutes. - // This requirement doesn't make sense when we forge timestamps in manual seal. - const block = await context.web3.eth.getBlock("latest"); - const next5Minutes = Date.now() / 1000 + 300; - expect(block.timestamp).to.be.least(0); - expect(block.timestamp).to.be.below(next5Minutes); - }); - - it("retrieve block information", async function () { - const block = await context.web3.eth.getBlock("latest"); - expect(block).to.include({ - author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - difficulty: "0", - extraData: "0x", - gasLimit: 15000000, - gasUsed: 0, - //hash: "0x14fe6f7c93597f79b901f8b5d7a84277a90915b8d355959b587e18de34f1dc17", - logsBloom: `0x${"0".repeat(512)}`, - miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", - number: 1, - //parentHash: "0x04540257811b46d103d9896e7807040e7de5080e285841c5430d1a81588a0ce4", - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - totalDifficulty: "0", - //transactions: [], - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - //uncles: [] - }); - // previousBlock = block; - - expect(block.transactions).to.be.a("array").empty; - expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); - expect(block.hash).to.be.a("string").lengthOf(66); - expect(block.parentHash).to.be.a("string").lengthOf(66); - expect(block.timestamp).to.be.a("number"); - }); - - it("get block by hash", async function () { - const latestBlock = await context.web3.eth.getBlock("latest"); - const block = await context.web3.eth.getBlock(latestBlock.hash); - expect(block.hash).to.be.eq(latestBlock.hash); - }); - - it("get block by number", async function () { - const block = await context.web3.eth.getBlock(1); - expect(block).not.null; - }); - }); - - describe("Post Genesis Block 2 Finalization", async () => { - before(async () => { - await createAndFinalizeBlock( - context.polkadotApi, - await context.polkadotApi.rpc.chain.getBlockHash(0) - ); - await createAndFinalizeBlock( - context.polkadotApi, - await context.polkadotApi.rpc.chain.getBlockHash(1) - ); - }); - - it("should include previous block hash as parent (block 2)", async function () { - const block = await context.web3.eth.getBlock("latest"); - let previousBlock = await context.web3.eth.getBlock(1); - expect(block.hash).to.not.equal(previousBlock.hash); - expect(block.parentHash).to.equal(previousBlock.hash); - }); - - // tx/block tests - - it("genesis balance enough to make all the transfers", async function () { - expect(Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.gte(512 * 100000); - }); - - // the maximum number of tx/ blocks is not constant but is always around 1500 - - it("should be able to fill a block with a 1 tx", async function () { - let { txPassedFirstBlock } = await fillBlockWithTx(context, 1); - expect(txPassedFirstBlock).to.eq(1); - }); - - it.skip("should be able to fill a block with 260 tx", async function () { - // We have 6_000_000 Gas available for transactions per block. - // Each transaction needs 2_000 (extrinsic cost) + 21_000 (eth cost) - // 6_000_000 / 23_000 = ~260.86 - // The test will send 261 tx and verify the first block contains only 260. - let { txPassed, txPassedFirstBlock } = await fillBlockWithTx(context, 261); - expect(txPassedFirstBlock).to.eq(260); - expect(txPassed).to.eq(261); // including all blocks - }); - - it.skip("should be able to fill a block with 64 contract creations tx", async function () { - // We have 6_000_000 Gas available for transactions per block. - // Each transaction needs 2_000 (extrinsic cost) + 91019 (contract cost) - // 6_000_000 / 92_019 = ~64.50 - - // The test will send 65 contract tx and verify the first block contains only 64. - let { txPassedFirstBlock } = await fillBlockWithTx(context, 65, await contractCreation()); - expect(txPassedFirstBlock).to.eq(64); - }); - - // 8192 is the number of tx that can be sent to the Pool - // before it throws an error and drops all tx - - it.skip("should be able to send 8192 tx to the pool and have them all published\ - within the following blocks", async function () { - let { txPassed } = await fillBlockWithTx(context, 8192); - expect(txPassed).to.eq(8192); - }); - - it.skip("but shouldn't work for 8193", async function () { - let { txPassed } = await fillBlockWithTx(context, 8193); - expect(txPassed).to.eq(0); - }); - - it.skip("should be able to send 8192 tx to the pool and have them all published\ - within the following blocks - bigger tx", async function () { - let { txPassed } = await fillBlockWithTx(context, 8192, await contractCreation()); - expect(txPassed).to.eq(8192); - }); - - it.skip("but shouldn't work for 8193 - bigger tx", async function () { - let { txPassed } = await fillBlockWithTx(context, 8193, await contractCreation()); - expect(txPassed).to.eq(0); - }); - }); -}); diff --git a/tests/tests/test-contract-creation.ts b/tests/tests/test-contract-creation.ts new file mode 100644 index 00000000000..b93f4e8f93d --- /dev/null +++ b/tests/tests/test-contract-creation.ts @@ -0,0 +1,41 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Contract creation", (context) => { + it("should return the transaction hash", async () => { + const { rawTx } = await createContract(context.web3, "TestContract"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + + expect( + txResults[0].result, + "0x286fc7f456a452abb22bc37974fe281164e53ce6381583c8febaa89c92f31c0b" + ); + }); +}); + +describeDevMoonbeam("Contract creation", (context) => { + it("should not contain contract at genesis", async function () { + const { contract, rawTx } = await createContract(context.web3, "TestContract"); + expect(await context.web3.eth.getCode(contract.options.address)).to.deep.equal("0x"); + }); + + it("should store the code on chain", async function () { + const { contract, rawTx } = await createContract(context.web3, "TestContract"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + + expect(await context.web3.eth.getCode(contract.options.address)).to.deep.equal( + "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b" + + "600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b" + + "60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171" + + "565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092" + + "915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b929150" + + "50565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffff" + + "ffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092" + + "915050565b6000819050919050565b7f4e487b71000000000000000000000000000000000000000000000000" + + "00000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea26469" + + "70667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63" + + "430008030033" + ); + }); +}); diff --git a/tests/tests/test-contract-error.ts b/tests/tests/test-contract-error.ts new file mode 100644 index 00000000000..510ecbe9621 --- /dev/null +++ b/tests/tests/test-contract-error.ts @@ -0,0 +1,44 @@ +import { expect } from "chai"; + +import { TransactionReceipt } from "web3-core"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { createContract, createContractExecution } from "../util/transactions"; + +describeDevMoonbeam("Contract loop error", (context) => { + it("should return OutOfGas on inifinite loop call", async function () { + const { contract, rawTx } = await createContract(context.web3, "InfiniteContract"); + await context.createBlock({ transactions: [rawTx] }); + + await contract.methods + .infinite() + .call({ gas: 12_000_000 }) + .then(() => { + return Promise.reject({ message: "Execution succeeded but should have failed" }); + }) + .catch((err) => expect(err.message).to.equal(`Returned error: out of gas or fund`)); + }); +}); + +describeDevMoonbeam("Contract loop error", (context) => { + it("should fail with OutOfGas on infinite loop transaction", async function () { + const { contract, rawTx } = await createContract(context.web3, "InfiniteContract"); + const infiniteTx = await createContractExecution( + context.web3, + { + contract, + contractCall: contract.methods.infinite(), + }, + { nonce: 1 } + ); + + const { txResults } = await context.createBlock({ + transactions: [rawTx, infiniteTx], + }); + + const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt( + txResults[1].result + ); + expect(receipt.status).to.eq(false); + }); +}); diff --git a/tests/tests/test-contract-incr-loop.ts b/tests/tests/test-contract-incr-loop.ts new file mode 100644 index 00000000000..f4e21512b89 --- /dev/null +++ b/tests/tests/test-contract-incr-loop.ts @@ -0,0 +1,30 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../util/transactions"; + +describeDevMoonbeam("Contract loop creation", (context) => { + it("Should be initialized at 0", async () => { + const { contract, rawTx } = await createContract(context.web3, "TestContractIncr"); + await context.createBlock({ transactions: [rawTx] }); + + expect(await contract.methods.count().call()).to.eq("0"); + }); +}); + +describeDevMoonbeam("Contract loop increment", (context) => { + it("should increment contract state", async function () { + const { contract, rawTx } = await createContract(context.web3, "TestContractIncr"); + await context.createBlock({ transactions: [rawTx] }); + + await context.createBlock({ + transactions: [ + await createContractExecution(context.web3, { + contract, + contractCall: contract.methods.incr(), + }), + ], + }); + + expect(await contract.methods.count().call()).to.eq("1"); + }); +}); diff --git a/tests/tests/test-contract-loop-cost.ts b/tests/tests/test-contract-loop-cost.ts new file mode 100644 index 00000000000..ab59c35f41d --- /dev/null +++ b/tests/tests/test-contract-loop-cost.ts @@ -0,0 +1,38 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../util/transactions"; + +[ + { + loop: 1, + gas: 42889, + }, + { + loop: 500, + gas: 1064354, + }, + { + loop: 600, + gas: 1269054, + }, +].forEach(({ loop, gas }) => { + describeDevMoonbeam("Contract loop", (context) => { + it(`should consume ${gas} for ${loop} loop`, async function () { + const { contract, rawTx } = await createContract(context.web3, "FiniteLoopContract"); + await context.createBlock({ transactions: [rawTx] }); + await context.createBlock({ + transactions: [ + await createContractExecution(context.web3, { + contract, + contractCall: contract.methods.incr(loop), + }), + ], + }); + + expect(await contract.methods.count().call()).to.eq(loop.toString()); + + const block = await context.web3.eth.getBlock("latest"); + expect(block.gasUsed).to.eq(gas); + }); + }); +}); diff --git a/tests/tests/test-contract-loops.ts b/tests/tests/test-contract-loops.ts deleted file mode 100644 index efa3dc597b4..00000000000 --- a/tests/tests/test-contract-loops.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { expect } from "chai"; - -import { TransactionReceipt } from "web3-core"; - -import { callContractFunctionMS, describeWithMoonbeam } from "./util"; -import { deployContractByName } from "./util/contracts"; - -describeWithMoonbeam("Moonbeam RPC (Contract Loops)", `simple-specs.json`, (context) => { - it("should increment contract state - to check normal contract behavior", async function () { - // // instantiate contract - const contract = await deployContractByName( - context.polkadotApi, - context.web3, - "TestContractIncr" - ); - - // check variable initializaion - expect(await contract.methods.count().call()).to.eq("0"); - - // call incr function - let bytesCode: string = await contract.methods.incr().encodeABI(); - await callContractFunctionMS(context, contract.options.address, bytesCode); - - // check variable incrementation - expect(await contract.methods.count().call()).to.eq("1"); - }); - - it("inifinite loop call should return OutOfGas", async function () { - //deploy infinite contract - const contract = await deployContractByName( - context.polkadotApi, - context.web3, - "InfiniteContract" - ); - - // call infinite loop - await contract.methods - .infinite() - .call({ gas: "0x100000" }) - .catch((err) => expect(err.message).to.equal(`Returned error: out of gas or fund`)); - }); - - it("inifinite loop send with incr should return OutOfGas", async function () { - // deploy contract - const contract = await deployContractByName( - context.polkadotApi, - context.web3, - "InfiniteContractVar" - ); - - //make infinite loop function call - let bytesCode: string = await contract.methods.infinite().encodeABI(); - try { - await callContractFunctionMS(context, contract.options.address, bytesCode); - let block = await context.web3.eth.getBlock("latest"); - const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt( - block.transactions[0] - ); - expect(receipt.status).to.eq(false); - } catch (err) { - console.log("error caught", err); - throw new Error(err); - } - }); - - it("finite loop with incr: check gas usage, with normal gas limit,\ - should error before 700 loops", async function () { - // For a normal 1048576 gas limit, loop should revert out of gas between 500 and 600 loops - - //deploy finite loop contract - const contract = await deployContractByName( - context.polkadotApi, - context.web3, - "FiniteLoopContract" - ); - - //make finite loop function call - async function callLoopIncrContract(nb: number): Promise { - const startIncr: number = Number(await contract.methods.count().call()); - const bytesCode: string = await contract.methods.incr(nb).encodeABI(); - try { - await callContractFunctionMS(context, contract.options.address, bytesCode); - return Number(await contract.methods.count().call()) - startIncr; - } catch (err) { - console.log("error caught", err); - } - } - // 1 loop to make sure it works - expect(await callLoopIncrContract(1)).to.eq(1); - let block = await context.web3.eth.getBlock("latest"); - expect(block.gasUsed).to.eq(42889); //check that gas costs stay the same - - // // 500 loop - expect(await callLoopIncrContract(500)).to.eq(500); - block = await context.web3.eth.getBlock("latest"); - expect(block.gasUsed).to.eq(1045154); //check that gas costs stay the same - - // 600 loop should revert out of gas - expect(await callLoopIncrContract(600)).to.eq(0); - block = await context.web3.eth.getBlock("latest"); - expect(block.gasUsed).to.eq(1048576); //check that gas is the gas limit - const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt( - block.transactions[0] - ); - expect(receipt.status).to.eq(false); - }); - // TODO : add test when we have a block limit -}); diff --git a/tests/tests/test-contract-methods.ts b/tests/tests/test-contract-methods.ts index ef6847bac8a..44d05ee8d26 100644 --- a/tests/tests/test-contract-methods.ts +++ b/tests/tests/test-contract-methods.ts @@ -1,46 +1,47 @@ import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; +import { Contract } from "web3-eth-contract"; -import { describeWithMoonbeam } from "./util"; -import { FIRST_CONTRACT_ADDRESS, GENESIS_ACCOUNT } from "./constants"; -import { deployContractByName, getCompiled } from "./util/contracts"; +describeDevMoonbeam("Contract creation", (context) => { + let testContract: Contract; + let testContractTx: string; -describeWithMoonbeam("Moonbeam RPC (Contract Methods)", `simple-specs.json`, (context) => { - let TestContractABI; - before("create the contract", async function () { - TestContractABI = (await getCompiled("TestContract")).contract.abi; - await deployContractByName(context.polkadotApi, context.web3, "TestContract"); + before("Setup: Create the contract", async function () { + const { contract, rawTx } = await createContract(context.web3, "TestContract"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + testContract = contract; + testContractTx = txResults[0].result; }); - it("get transaction by hash", async () => { - const latestBlock = await context.web3.eth.getBlock("latest"); - expect(latestBlock.transactions.length).to.equal(1); - - const txHash = latestBlock.transactions[0]; - const tx = await context.web3.eth.getTransaction(txHash); - expect(tx.hash).to.equal(txHash); + it("should appear in the block transaction list", async () => { + const block = await context.web3.eth.getBlock(1); + const txHash = block.transactions[0]; + expect(txHash).to.equal(testContractTx); }); - it("should return contract method result", async function () { - const contract = new context.web3.eth.Contract(TestContractABI, FIRST_CONTRACT_ADDRESS, { - from: GENESIS_ACCOUNT, - gasPrice: "0x01", - }); + it("should be in the transaction list", async () => { + const tx = await context.web3.eth.getTransaction(testContractTx); + expect(tx.hash).to.equal(testContractTx); + }); - expect(await contract.methods.multiply(3).call()).to.equal("21"); + it("should provide callable methods", async function () { + expect(await testContract.methods.multiply(3).call()).to.equal("21"); }); - // Requires error handling - it("should fail for missing parameters", async function () { + + it("should fail for call method with missing parameters", async function () { + // Create a fake contract based on origin deployed contract. + // It make the multiply method supposed to have 0 arguments const contract = new context.web3.eth.Contract( - [{ ...TestContractABI[0], inputs: [] }], - FIRST_CONTRACT_ADDRESS, - { - from: GENESIS_ACCOUNT, - gasPrice: "0x01", - } + [{ ...testContract.options.jsonInterface[0], inputs: [] }], + testContract.options.address ); await contract.methods .multiply() .call() + .then(() => { + return Promise.reject({ message: "Execution succeeded but should have failed" }); + }) .catch((err) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` @@ -50,25 +51,27 @@ describeWithMoonbeam("Moonbeam RPC (Contract Methods)", `simple-specs.json`, (co // Requires error handling it("should fail for too many parameters", async function () { + // Create a fake contract based on origin deployed contract. + // It make the multiply method supposed to have 2 arguments const contract = new context.web3.eth.Contract( [ { - ...TestContractABI[0], + ...testContract.options.jsonInterface[0], inputs: [ { internalType: "uint256", name: "a", type: "uint256" }, { internalType: "uint256", name: "b", type: "uint256" }, ], }, ], - FIRST_CONTRACT_ADDRESS, - { - from: GENESIS_ACCOUNT, - gasPrice: "0x01", - } + testContract.options.address ); + await contract.methods .multiply(3, 4) .call() + .then(() => { + return Promise.reject({ message: "Execution succeeded but should have failed" }); + }) .catch((err) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` @@ -76,12 +79,13 @@ describeWithMoonbeam("Moonbeam RPC (Contract Methods)", `simple-specs.json`, (co ); }); - // Requires error handling it("should fail for invalid parameters", async function () { + // Create a fake contract based on origin deployed contract. + // It make the multiply method supposed to have a address type argument const contract = new context.web3.eth.Contract( [ { - ...TestContractABI[0], + ...testContract.options.jsonInterface[0], inputs: [ { internalType: "address", @@ -91,12 +95,14 @@ describeWithMoonbeam("Moonbeam RPC (Contract Methods)", `simple-specs.json`, (co ], }, ], - FIRST_CONTRACT_ADDRESS, - { from: GENESIS_ACCOUNT, gasPrice: "0x01" } + testContract.options.address ); await contract.methods .multiply("0x0123456789012345678901234567890123456789") .call() + .then(() => { + return Promise.reject({ message: "Execution succeeded but should have failed" }); + }) .catch((err) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` diff --git a/tests/tests/test-contract.ts b/tests/tests/test-contract.ts deleted file mode 100644 index 5492d003419..00000000000 --- a/tests/tests/test-contract.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { expect } from "chai"; -import { FIRST_CONTRACT_ADDRESS, GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; - -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; -import { getCompiled } from "./util/contracts"; - -describeWithMoonbeam("Moonbeam RPC (Contract)", `simple-specs.json`, (context) => { - // Those test are ordered. In general this should be avoided, but due to the time it takes - // to spin up a Moonbeam node, it saves a lot of time. - - it("contract creation should return transaction hash", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: (await getCompiled("TestContract")).byteCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - expect( - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) - ).to.deep.equal({ - id: 1, - jsonrpc: "2.0", - result: "0x286fc7f456a452abb22bc37974fe281164e53ce6381583c8febaa89c92f31c0b", - }); - - // Verify the contract is not yet stored - expect( - await customRequest(context.web3, "eth_getCode", [FIRST_CONTRACT_ADDRESS]) - ).to.deep.equal({ - id: 1, - jsonrpc: "2.0", - result: "0x", - }); - - // Verify the contract is stored after the block is produced - await createAndFinalizeBlock(context.polkadotApi); - expect( - await customRequest(context.web3, "eth_getCode", [FIRST_CONTRACT_ADDRESS]) - ).to.deep.equal({ - id: 1, - jsonrpc: "2.0", - result: - "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030" + - "575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100" + - "c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b600081359050610085" + - "81610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab8482850161007656" + - "5b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100" + - "b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffff" + - "ffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c61014256" + - "5b5b828202905092915050565b6000819050919050565b7f4e487b71000000000000000000000000000000" + - "00000000000000000000000000600052601160045260246000fd5b61017a81610138565b81146101855760" + - "0080fd5b5056fea2646970667358221220b88e1021b77279e6fa68a88b71ca091bb5aa25d4d619327607c4" + - "e207c587f1e264736f6c63430008030033", - }); - }); -}); diff --git a/tests/tests/test-deprecated.ts b/tests/tests/test-deprecated.ts index 7985f0233c0..8ca2d5f16bf 100644 --- a/tests/tests/test-deprecated.ts +++ b/tests/tests/test-deprecated.ts @@ -1,7 +1,8 @@ import { expect } from "chai"; -import { customRequest, describeWithMoonbeam } from "./util"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; -describeWithMoonbeam("Moonbeam RPC (Deprecated)", `simple-specs.json`, (context) => { +describeDevMoonbeam("Deprecated RPC", (context) => { // List of deprecated methods [ { method: "eth_getCompilers", params: [] }, @@ -12,8 +13,8 @@ describeWithMoonbeam("Moonbeam RPC (Deprecated)", `simple-specs.json`, (context) }, { method: "eth_compileSerpent", params: ["/* some serpent */"] }, ].forEach(({ method, params }) => { - it(`${method} should be deprecated`, async function () { - expect(await customRequest(context.web3, method, params)).to.deep.equal({ + it(`${method} should be mark as not found`, async function () { + expect(await customWeb3Request(context.web3, method, params)).to.deep.equal({ id: 1, jsonrpc: "2.0", error: { message: `Method not found`, code: -32601 }, diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers.ts index 56401913b33..d24fa1c09a2 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers.ts @@ -1,46 +1,66 @@ -import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; import { expect } from "chai"; import { ethers } from "ethers"; -import { GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import { getCompiled } from "./util/contracts"; +import { GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { getCompiled } from "../util/contracts"; -describeWithMoonbeam("Moonbeam RPC (Ethers.js)", `simple-specs.json`, (context) => { - it("get network ids", async function () { +describeDevMoonbeam("Ethers.js", (context) => { + it("should get correct network ids", async function () { expect((await context.ethers.getNetwork()).chainId).to.equal(1281); - const providerTestnet = new ethers.providers.JsonRpcProvider( - "https://rpc.testnet.moonbeam.network" - ); - expect((await providerTestnet.getNetwork()).chainId).to.equal(1287); }); +}); - it("deploy contract and interact with it", async function () { +describeDevMoonbeam("Ethers.js contract", (context) => { + it("should be deployable", async function () { let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); - - // deploy contract - const factory = new ethers.ContractFactory( - (await getCompiled("TestContract")).contract.abi as ethers.ContractInterface, - (await getCompiled("TestContract")).byteCode, + const contractData = await getCompiled("TestContract"); + const contractFactory = new ethers.ContractFactory( + contractData.contract.abi as ethers.ContractInterface, + contractData.byteCode, signer ); + + // Must create the block and then wait, because etherjs will wait until + // the contract is mined to return; let contract = await new Promise(async (resolve) => { - const contract = factory.deploy(); - await createAndFinalizeBlock(context.polkadotApi); - resolve(await contract); + const contractPromise = contractFactory.deploy(); + await context.createBlock(); + resolve(await contractPromise); }); + expect(contract.address); + expect(await context.web3.eth.getCode(contract.address)).to.be.string; + }); +}); + +describeDevMoonbeam("Ethers.js contract", (context) => { + it("should be callable", async function () { + let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); + const contractData = await getCompiled("TestContract"); + const contractFactory = new ethers.ContractFactory( + contractData.contract.abi as ethers.ContractInterface, + contractData.byteCode, + signer + ); + let contract = await new Promise(async (resolve) => { + const contractPromise = contractFactory.deploy(); + await context.createBlock(); + resolve(await contractPromise); + }); - // call method - let res = await new Promise(async (resolve) => { - const re = contract.multiply(3); - await createAndFinalizeBlock(context.polkadotApi); - resolve(await re); + // Must create the block and then wait, because etherjs will wait until + // the contract is mined to return; + let result = await new Promise(async (resolve) => { + const callPromise = contract.multiply(3); + await context.createBlock(); + resolve(await callPromise); }); - expect(res.toString()).to.equal("21"); + expect(result.toString()).to.equal("21"); // Instantiate contract from address const contractFromAddress = new ethers.Contract( contract.address, - (await getCompiled("TestContract")).contract.abi as ethers.ContractInterface, + contractData.contract.abi as ethers.ContractInterface, signer ); expect((await contractFromAddress.multiply(3)).toString()).to.equal("21"); diff --git a/tests/tests/test-event.ts b/tests/tests/test-event.ts new file mode 100644 index 00000000000..74a38461c38 --- /dev/null +++ b/tests/tests/test-event.ts @@ -0,0 +1,20 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; +import { GENESIS_ACCOUNT } from "../util/constants"; + +describeDevMoonbeam("Event - Contract", (context) => { + it("should contain event", async function () { + const { rawTx } = await createContract(context.web3, "SingleEventContract", { + from: GENESIS_ACCOUNT, + }); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + + expect(receipt.logs.length).to.be.eq(1); + console.log(receipt.logs); + expect( + "0x" + receipt.logs[0].topics[1].substring(26, receipt.logs[0].topics[1].length + 1) + ).to.be.eq(GENESIS_ACCOUNT); + }); +}); diff --git a/tests/tests/test-existential-deposit.ts b/tests/tests/test-existential-deposit.ts index 0f88f5808d9..60e44ddc988 100644 --- a/tests/tests/test-existential-deposit.ts +++ b/tests/tests/test-existential-deposit.ts @@ -1,23 +1,23 @@ import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_BALANCE } from "../util/constants"; -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; - -describeWithMoonbeam("Moonbeam RPC (Existential Deposit)", `simple-specs.json`, (context) => { - it("Account is not reaped on zero balance", async function () { - const balance = await context.web3.eth.getBalance(GENESIS_ACCOUNT); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: balance, - gasPrice: "0x00", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); +describeDevMoonbeam("Existential Deposit", (context) => { + it("should be disabled (no reaped account on 0 balance)", async function () { + await context.createBlock({ + transactions: [ + await createTransfer( + context.web3, + "0x1111111111111111111111111111111111111111", + GENESIS_ACCOUNT_BALANCE - 21000n, + { + from: GENESIS_ACCOUNT, + gas: 21000, + } + ), + ], + }); expect(parseInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.eq(0); expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(1); }); diff --git a/tests/tests/test-filter-api-creation.ts b/tests/tests/test-filter-api-creation.ts new file mode 100644 index 00000000000..9f9c5474f8e --- /dev/null +++ b/tests/tests/test-filter-api-creation.ts @@ -0,0 +1,58 @@ +import { expect } from "chai"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Filter API", (context) => { + it("should be able to create a Log filter", async function () { + const { contract, rawTx } = await createContract(context.web3, "SingleEventContract"); + await context.createBlock({ transactions: [rawTx] }); + + const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ + { + fromBlock: "0x0", + toBlock: "latest", + address: [ + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + ], + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }, + ]); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); + }); +}); + +describeDevMoonbeam("Filter API - Creating", (context) => { + it("should increment filter id", async function () { + const { contract, rawTx } = await createContract(context.web3, "SingleEventContract"); + await context.createBlock({ transactions: [rawTx] }); + + const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }, + ]); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); + + const createFilter2 = await customWeb3Request(context.web3, "eth_newFilter", [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], + }, + ]); + expect(createFilter2.result).to.be.eq(context.web3.utils.numberToHex(2)); + }); +}); + +describeDevMoonbeam("Filter Block API - Creating", (context) => { + it("should be able to create a Block Log filter", async function () { + const createFilter = await customWeb3Request(context.web3, "eth_newBlockFilter", []); + expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); + }); +}); diff --git a/tests/tests/test-filter-api-pending.ts b/tests/tests/test-filter-api-pending.ts new file mode 100644 index 00000000000..c9c37695f8c --- /dev/null +++ b/tests/tests/test-filter-api-pending.ts @@ -0,0 +1,12 @@ +import { expect } from "chai"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("Filter Pending Transaction API", (context) => { + it("should not be supported", async function () { + const result = await customWeb3Request(context.web3, "eth_newPendingTransactionFilter", []); + expect(result.error).to.include({ + message: "Method not available.", + }); + }); +}); diff --git a/tests/tests/test-filter-api-polling.ts b/tests/tests/test-filter-api-polling.ts new file mode 100644 index 00000000000..b165b4ff4bc --- /dev/null +++ b/tests/tests/test-filter-api-polling.ts @@ -0,0 +1,83 @@ +import { expect } from "chai"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Filter Block API - Polling", (context) => { + it("should return block information", async function () { + const createFilter = await customWeb3Request(context.web3, "eth_newBlockFilter", []); + const block = await context.web3.eth.getBlock("latest"); + + const poll = await customWeb3Request(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(createFilter.result), + ]); + expect(poll.result.length).to.be.eq(1); + expect(poll.result[0]).to.be.eq(block.hash); + }); +}); + +describeDevMoonbeam("Filter Block API - Polling", (context) => { + it("should not retrieve previously polled", async function () { + const createFilter = await customWeb3Request(context.web3, "eth_newBlockFilter", []); + + await context.createBlock(); + await customWeb3Request(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(createFilter.result), + ]); + + await context.createBlock(); + await context.createBlock(); + + const poll = await customWeb3Request(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(createFilter.result), + ]); + + const block2 = await context.web3.eth.getBlock(2); + const block3 = await context.web3.eth.getBlock(3); + + expect(poll.result.length).to.be.eq(2); + expect(poll.result[0]).to.be.eq(block2.hash); + expect(poll.result[1]).to.be.eq(block3.hash); + }); +}); + +describeDevMoonbeam("Filter Block API - Polling", (context) => { + it("should be empty after already polling", async function () { + const createFilter = await customWeb3Request(context.web3, "eth_newBlockFilter", []); + + await context.createBlock(); + await customWeb3Request(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(createFilter.result), + ]); + const poll = await customWeb3Request(context.web3, "eth_getFilterChanges", [ + context.web3.utils.numberToHex(createFilter.result), + ]); + + expect(poll.result.length).to.be.eq(0); + }); +}); + +describeDevMoonbeam("Filter Block API - Polling", (context) => { + it("should support filtering created contract", async function () { + const { contract, rawTx } = await createContract(context.web3, "SingleEventContract"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + + const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + + const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ + { + fromBlock: "0x0", + toBlock: "latest", + address: receipt.contractAddress, + topics: receipt.logs[0].topics, + }, + ]); + const poll = await customWeb3Request(context.web3, "eth_getFilterChanges", [ + createFilter.result, + ]); + + expect(poll.result.length).to.be.eq(1); + expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); + expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); + }); +}); diff --git a/tests/tests/test-filter-api.ts b/tests/tests/test-filter-api.ts deleted file mode 100644 index 632562dad86..00000000000 --- a/tests/tests/test-filter-api.ts +++ /dev/null @@ -1,332 +0,0 @@ -import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; - -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; - -describeWithMoonbeam("Moonbeam RPC (EthFilterApi)", `simple-specs.json`, (context) => { - // This reflects the measured gas cost of the transaction at this current point in time. - // It has been known to fluctuate from release to release, so it may need adjustment. - const EXPECTED_TRANSACTION_GAS_COST = 891328; - - const TestContractByteCode = - "0x608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffff" + - "ffffffffffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffff" + - "ffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415" + - "6100e9576040517f08c379a000000000000000000000000000000000000000000000000000000000" + - "815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f2074" + - "6865207a65726f20616464726573730081525060200191505060405180910390fd5b610102816002" + - "5461020960201b610c7c1790919060201c565b60028190555061015d816000808573ffffffffffff" + - "ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260" + - "20019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffffff" + - "ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152" + - "602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1660" + - "0073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa" + - "952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050" + - "565b600080828401905083811015610287576040517f08c379a00000000000000000000000000000" + - "0000000000000000000000000000815260040180806020018281038252601b8152602001807f5361" + - "66654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060" + - "405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe6080604052348015" + - "61001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a082" + - "31146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e146103215761" + - "0088565b8063095ea7b31461008d57806318160ddd146100f357806323b872dd1461011157806339" + - "50935114610197575b600080fd5b6100d9600480360360408110156100a357600080fd5b81019080" + - "803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092" + - "9190505050610399565b604051808215151515815260200191505060405180910390f35b6100fb61" + - "03b7565b6040518082815260200191505060405180910390f35b61017d6004803603606081101561" + - "012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001" + - "90929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060" + - "2001909291905050506103c1565b604051808215151515815260200191505060405180910390f35b" + - "6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffff" + - "ffffffffffffffffff1690602001909291908035906020019092919050505061049a565b60405180" + - "8215151515815260200191505060405180910390f35b61023f600480360360208110156102135760" + - "0080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190" + - "50505061054d565b6040518082815260200191505060405180910390f35b6102a160048036036040" + - "81101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16" + - "906020019092919080359060200190929190505050610595565b6040518082151515158152602001" + - "91505060405180910390f35b610307600480360360408110156102d157600080fd5b810190808035" + - "73ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190" + - "505050610662565b604051808215151515815260200191505060405180910390f35b610383600480" + - "3603604081101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffff" + - "ffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001" + - "90929190505050610680565b6040518082815260200191505060405180910390f35b60006103ad61" + - "03a6610707565b848461070f565b6001905092915050565b6000600254905090565b60006103ce84" + - "8484610906565b61048f846103da610707565b61048a856040518060600160405280602881526020" + - "01610d7060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffff" + - "ffffffffffffffffffffffffffffffff168152602001908152602001600020600061044061070756" + - "5b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff" + - "ffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b" + - "600190509392505050565b60006105436104a7610707565b8461053e85600160006104b861070756" + - "5b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff" + - "ffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffff" + - "ffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020" + - "54610c7c90919063ffffffff16565b61070f565b6001905092915050565b60008060008373ffffff" + - "ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16" + - "8152602001908152602001600020549050919050565b60006106586105a2610707565b8461065385" + - "604051806060016040528060258152602001610de160259139600160006105cc610707565b73ffff" + - "ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff" + - "16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff16" + - "73ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbc" + - "9092919063ffffffff16565b61070f565b6001905092915050565b600061067661066f610707565b" + - "8484610906565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffff" + - "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160" + - "002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" + - "ffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b" + - "600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffff" + - "ffffffffffff161415610795576040517f08c379a000000000000000000000000000000000000000" + - "0000000000000000008152600401808060200182810382526024815260200180610dbd6024913960" + - "400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273" + - "ffffffffffffffffffffffffffffffffffffffff16141561081b576040517f08c379a00000000000" + - "00000000000000000000000000000000000000000000008152600401808060200182810382526022" + - "815260200180610d286022913960400191505060405180910390fd5b80600160008573ffffffffff" + - "ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152" + - "60200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffff" + - "ffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ff" + - "ffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffff" + - "ffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051" + - "8082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffff" + - "ffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098c576040517f" + - "08c379a0000000000000000000000000000000000000000000000000000000008152600401808060" + - "200182810382526025815260200180610d986025913960400191505060405180910390fd5b600073" + - "ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffff" + - "ffffff161415610a12576040517f08c379a000000000000000000000000000000000000000000000" + - "0000000000008152600401808060200182810382526023815260200180610d056023913960400191" + - "505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a60269139" + - "6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff" + - "ffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6000" + - "808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + - "ffffffffff16815260200190815260200160002081905550610b10816000808573ffffffffffffff" + - "ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020" + - "0190815260200160002054610c7c90919063ffffffff16565b6000808473ffffffffffffffffffff" + - "ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081" + - "52602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffff" + - "ffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4" + - "a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083" + - "8311158290610c69576040517f08c379a00000000000000000000000000000000000000000000000" + - "00000000008152600401808060200182810382528381815181526020019150805190602001908083" + - "8360005b83811015610c2e578082015181840152602081019050610c13565b505050509050908101" + - "90601f168015610c5b5780820380516001836020036101000a031916815260200191505b50925050" + - "5060405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110" + - "15610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000" + - "00815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974" + - "696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092" + - "91505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373" + - "45524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a" + - "207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a2074" + - "72616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2074" + - "72616e736665722066726f6d20746865207a65726f206164647265737345524332303a2061707072" + - "6f76652066726f6d20746865207a65726f206164647265737345524332303a206465637265617365" + - "6420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ffabf642bda147" + - "00b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032"; - - const BLOCK_LIFESPAN_THRESHOLD = 100; - const MAX_FILTER_POOL = 500; - - async function sendTransaction(context) { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TestContractByteCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - return tx; - } - - async function clean_filters(context) { - let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filterId = createFilter.result; - // If filter is NAN filter pool is full - if (isNaN(filterId)) { - filterId = MAX_FILTER_POOL; - } - // Lets have a clean environment by uninstalling all tests - for (let i = 0; i <= filterId; i++) { - await customRequest(context.web3, "eth_uninstallFilter", [i]); - } - } - - it("should create a Log filter and return the ID", async function () { - await clean_filters(context); - let createFilter = await customRequest(context.web3, "eth_newFilter", [ - { - fromBlock: "0x0", - toBlock: "latest", - address: [ - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - ], - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }, - ]); - expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); - }); - - it("should increment filter ID", async function () { - await clean_filters(context); - let createFilter = await customRequest(context.web3, "eth_newFilter", [ - { - fromBlock: "0x1", - toBlock: "0x2", - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }, - ]); - expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); - }); - - it("should create a Block filter and return the ID", async function () { - await clean_filters(context); - let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(createFilter.result).to.be.eq(context.web3.utils.numberToHex(1)); - }); - - it("should return unsupported error for Pending Transaction filter creation", async function () { - await clean_filters(context); - let result = await customRequest(context.web3, "eth_newPendingTransactionFilter", []); - expect(result.error).to.include({ - message: "Method not available.", - }); - }); - - it("should return responses for Block filter polling.", async function () { - await clean_filters(context); - let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); - let block = await context.web3.eth.getBlock("latest"); - let poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(createFilter.result), - ]); - expect(poll.result.length).to.be.eq(1); - expect(poll.result[0]).to.be.eq(block.hash); - - await createAndFinalizeBlock(context.polkadotApi); - - block = await context.web3.eth.getBlock("latest"); - poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(createFilter.result), - ]); - - expect(poll.result.length).to.be.eq(1); - expect(poll.result[0]).to.be.eq(block.hash); - - await createAndFinalizeBlock(context.polkadotApi); - await createAndFinalizeBlock(context.polkadotApi); - - let currentHeight = await context.web3.eth.getBlockNumber(); - block = await context.web3.eth.getBlock(currentHeight - 1); - let blockB = await context.web3.eth.getBlock(currentHeight); - poll = await customRequest(context.web3, "eth_getFilterChanges", [ - context.web3.utils.numberToHex(createFilter.result), - ]); - - expect(poll.result.length).to.be.eq(2); - expect(poll.result[0]).to.be.eq(block.hash); - expect(poll.result[1]).to.be.eq(blockB.hash); - }); - - it("should return responses for Log filter polling.", async function () { - await clean_filters(context); - // Create contract. - let tx = await sendTransaction(context); - await createAndFinalizeBlock(context.polkadotApi); - let receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); - - expect(receipt.logs.length).to.be.eq(1); - - // Create a filter for the created contract. - let createFilter = await customRequest(context.web3, "eth_newFilter", [ - { - fromBlock: "0x0", - toBlock: "latest", - address: receipt.contractAddress, - topics: receipt.logs[0].topics, - }, - ]); - let poll = await customRequest(context.web3, "eth_getFilterChanges", [createFilter.result]); - - expect(poll.result.length).to.be.eq(1); - expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); - expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); - - // A subsequent request must be empty. - poll = await customRequest(context.web3, "eth_getFilterChanges", [createFilter.result]); - expect(poll.result.length).to.be.eq(0); - }); - - it("should return response for raw Log filter request.", async function () { - await clean_filters(context); - // Create contract. - let tx = await sendTransaction(context); - await createAndFinalizeBlock(context.polkadotApi); - let receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); - - expect(receipt.logs.length).to.be.eq(1); - - // Create a filter for the created contract. - let createFilter = await customRequest(context.web3, "eth_newFilter", [ - { - fromBlock: "0x0", - toBlock: "latest", - address: receipt.contractAddress, - topics: receipt.logs[0].topics, - }, - ]); - let poll = await customRequest(context.web3, "eth_getFilterLogs", [createFilter.result]); - expect(poll.result.length).to.be.eq(1); - expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); - expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); - - // A subsequent request must return the same response. - poll = await customRequest(context.web3, "eth_getFilterLogs", [createFilter.result]); - - expect(poll.result.length).to.be.eq(1); - expect(poll.result[0].address.toLowerCase()).to.be.eq(receipt.contractAddress.toLowerCase()); - expect(poll.result[0].topics).to.be.deep.eq(receipt.logs[0].topics); - }); - - it("should uninstall created filters.", async function () { - let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filterId = createFilter.result; - // Should return true when removed from the filter pool. - let uninstall = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); - expect(uninstall.result).to.be.eq(true); - - // Should return error if does not exist. - let result = await customRequest(context.web3, "eth_uninstallFilter", [filterId]); - expect(result.error).to.include({ - message: "Filter id " + parseInt(filterId, 16) + " does not exist.", - }); - }); - - it("should drain the filter pool.", async function () { - await clean_filters(context); - - let createFilter = await customRequest(context.web3, "eth_newBlockFilter", []); - let filterId = createFilter.result; - - for (let i = 0; i <= BLOCK_LIFESPAN_THRESHOLD; i++) { - await createAndFinalizeBlock(context.polkadotApi); - } - - let result = await customRequest(context.web3, "eth_getFilterChanges", [filterId]); - expect(result.error).to.include({ - message: "Filter id " + parseInt(filterId, 16) + " does not exist.", - }); - }); - - it("should have a filter pool max size of 500.", async function () { - await clean_filters(context); - for (let i = 0; i < MAX_FILTER_POOL; i++) { - await customRequest(context.web3, "eth_newBlockFilter", []); - } - - let result = await customRequest(context.web3, "eth_newBlockFilter", []); - expect(result.error).to.include({ - message: "Filter pool is full (limit 500).", - }); - }); -}); diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-fork-chain.ts index fc4374ae4a2..2f8876011f2 100644 --- a/tests/tests/test-fork-chain.ts +++ b/tests/tests/test-fork-chain.ts @@ -1,38 +1,15 @@ import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; +import { TEST_ACCOUNT } from "../util/constants"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; +describeDevMoonbeam("Fork", (context) => { + it("should change best chain to the longest chain", async function () { + // Creation of the best chain so far, with blocks 0-1-2 + await context.createBlock({ finalize: false }); + await context.createBlock({ finalize: false }); -describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { - let insertedTx; - before(async function () { - // Creation of the best chain so far, with blocks 0-1-2 and a transfer in block 2 - await createAndFinalizeBlock( - context.polkadotApi, - await context.polkadotApi.rpc.chain.getBlockHash(0), - false - ); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (currently 0) - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - let send = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - insertedTx = send.result; - await createAndFinalizeBlock( - context.polkadotApi, - await context.polkadotApi.rpc.chain.getBlockHash(1), - false - ); - }); - it("Should create another best chain, finalize it and do sanity checks", async function () { // Lets grab the ethereum block hashes so far let ethHash1 = (await context.web3.eth.getBlock(1)).hash; let ethHash2 = (await context.web3.eth.getBlock(2)).hash; @@ -41,17 +18,35 @@ describeWithMoonbeam("Frontier RPC (fork)", `simple-specs.json`, (context) => { let currentHeight = await context.web3.eth.getBlockNumber(); // We start parenting to the genesis let parentHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - for (let i = 0; i <= currentHeight; i++) { - parentHash = (await createAndFinalizeBlock(context.polkadotApi, parentHash, false))[1]; + parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; } // We created at 1 block more than the previous best chain. We should be in the best chain now // Ethereum blocks should have changed - // The previous inserted transaction should dissapear expect(await context.web3.eth.getBlockNumber()).to.equal(currentHeight + 1); expect((await context.web3.eth.getBlock(1)).hash).to.not.equal(ethHash1); expect((await context.web3.eth.getBlock(2)).hash).to.not.equal(ethHash2); + }); +}); + +describeDevMoonbeam("Fork", (context) => { + it("should discard lost transaction on fork", async function () { + // Creation of the best chain so far, with blocks 0-1-2 and a transfer in block 2 + await context.createBlock({ finalize: false }); + const { txResults } = await context.createBlock({ + finalize: false, + transactions: [await createTransfer(context.web3, TEST_ACCOUNT, 512)], + }); + const insertedTx = txResults[0].result; + expect(await context.web3.eth.getTransaction(insertedTx)).to.not.be.null; + + // Fork + let parentHash = await context.polkadotApi.rpc.chain.getBlockHash(0); + parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; + parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; + parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; + expect(await context.web3.eth.getTransaction(insertedTx)).to.be.null; }); }); diff --git a/tests/tests/test-gas-contract-creation.ts b/tests/tests/test-gas-contract-creation.ts new file mode 100644 index 00000000000..b473db8559d --- /dev/null +++ b/tests/tests/test-gas-contract-creation.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { GENESIS_ACCOUNT } from "../util/constants"; +import { getCompiled } from "../util/contracts"; + +describeDevMoonbeam("Estimate Gas - Contract creation", (context) => { + it("should return contract creation gas cost", async function () { + const contract = await getCompiled("TestContract"); + expect( + await context.web3.eth.estimateGas({ + from: GENESIS_ACCOUNT, + data: contract.byteCode, + }) + ).to.equal(149143); + }); +}); diff --git a/tests/tests/test-gas-estimation.ts b/tests/tests/test-gas-estimation.ts new file mode 100644 index 00000000000..7e26070cbe4 --- /dev/null +++ b/tests/tests/test-gas-estimation.ts @@ -0,0 +1,55 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { createContract } from "../util/transactions"; +import { Contract } from "web3-eth-contract"; + +describeDevMoonbeam("Estimate Gas - Multiply", (context) => { + let multContract: Contract; + + before("Setup: Create simple context", async function () { + const { contract, rawTx } = await createContract(context.web3, "TestContract"); + await context.createBlock({ transactions: [rawTx] }); + multContract = contract; + }); + + it("should return correct gas estimation", async function () { + expect(await multContract.methods.multiply(3).estimateGas()).to.equal(21994); + }); + + it("should work without gas limit", async function () { + expect( + await multContract.methods.multiply(3).estimateGas({ + gas: null, + }) + ).to.equal(21994); + }); + + it("should work with gas limit", async function () { + expect( + await multContract.methods.multiply(3).estimateGas({ + gas: 21994, + }) + ).to.equal(21994); + }); + + it("should ignore from balance (?)", async function () { + expect( + await multContract.methods.multiply(3).estimateGas({ + gas: 21994, + }) + ).to.equal(21994); + }); + + it("should fail with a lower gas limit", async function () { + await multContract.methods + .multiply(3) + .estimateGas({ + gas: 21993, + }) + .then(() => { + return Promise.reject({ message: "Execution succeeded but should have failed" }); + }) + .catch((err) => expect(err.message).to.equal(`Returned error: out of gas or fund`)); + }); +}); diff --git a/tests/tests/test-gas.ts b/tests/tests/test-gas.ts deleted file mode 100644 index 828d2e9b589..00000000000 --- a/tests/tests/test-gas.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { expect } from "chai"; - -import { describeWithMoonbeam, customRequest } from "./util"; -import { FIRST_CONTRACT_ADDRESS, GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import { getCompiled } from "./util/contracts"; - -describeWithMoonbeam("Moonbeam RPC (Gas)", `simple-specs.json`, async (context) => { - // Those test are ordered. In general this should be avoided, but due to the time it takes - // to spin up a Moonbeam node, it saves a lot of time. - let TestContractByteCode: string; - let TestContractABI; - - before("get constants", async function () { - TestContractByteCode = (await getCompiled("TestContract")).byteCode; - TestContractABI = (await getCompiled("TestContract")).contract.abi; - }); - - it("eth_estimateGas for contract creation", async function () { - expect( - await context.web3.eth.estimateGas({ - from: GENESIS_ACCOUNT, - data: TestContractByteCode, - }) - ).to.equal(149143); - }); - - it("eth_estimateGas for contract call", async function () { - const contract = new context.web3.eth.Contract(TestContractABI, FIRST_CONTRACT_ADDRESS, { - from: GENESIS_ACCOUNT, - gasPrice: "0x01", - }); - - expect(await contract.methods.multiply(3).estimateGas()).to.equal(21204); - }); - - it("eth_estimateGas without gas_limit should pass", async function () { - const contract = new context.web3.eth.Contract(TestContractABI, FIRST_CONTRACT_ADDRESS, { - from: GENESIS_ACCOUNT, - }); - - expect(await contract.methods.multiply(3).estimateGas()).to.equal(21204); - }); - - // Current gas per second - const GAS_PER_SECOND = 40_000_000; - // The real computation is 1_000_000_000_000 / 40_000_000, but we simplify to avoid bigint. - const GAS_PER_WEIGHT = 1_000_000 / 40; - - // Our weight limit is 500ms. - const BLOCK_TX_LIMIT = GAS_PER_SECOND * 0.5; - - // Current implementation is limiting block transactions to 75% of the block gas limit - const BLOCK_TX_GAS_LIMIT = BLOCK_TX_LIMIT * 0.75; - const EXTRINSIC_BASE_COST = 125_000_000 / GAS_PER_WEIGHT; // 125_000_000 Weight per extrinsics - - // Maximum extrinsic weight is taken from the max allowed transaction weight per block, - // minus the block initialization (10%) and minus the extrinsic base cost. - const EXTRINSIC_GAS_LIMIT = BLOCK_TX_GAS_LIMIT - BLOCK_TX_LIMIT * 0.1 - EXTRINSIC_BASE_COST; - - it("gas limit should be fine up to the weight limit", async function () { - const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - const goodTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TestContractByteCode, - value: "0x00", - gasPrice: "0x01", - gas: EXTRINSIC_GAS_LIMIT, // Todo: fix (remove eth base cost) - nonce, - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - let resp = await customRequest(context.web3, "eth_sendRawTransaction", [goodTx.rawTransaction]); - expect(resp.result).to.be.length(66); - }); - - it("gas limit should be limited by weight", async function () { - const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - const badTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TestContractByteCode, - value: "0x00", - gasPrice: "0x01", - gas: EXTRINSIC_GAS_LIMIT + 1, - nonce: nonce, - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - expect( - ((await customRequest(context.web3, "eth_sendRawTransaction", [badTx.rawTransaction])) - .error as any).message - ).to.equal( - "submit transaction to pool failed: " + - "Pool(InvalidTransaction(InvalidTransaction::ExhaustsResources))" - ); - }); -}); diff --git a/tests/tests/test-nonce.ts b/tests/tests/test-nonce.ts index aec0f53777d..68e47bb9d58 100644 --- a/tests/tests/test-nonce.ts +++ b/tests/tests/test-nonce.ts @@ -1,71 +1,79 @@ import { expect } from "chai"; -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; -import { Keyring } from "@polkadot/keyring"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; +import { GENESIS_ACCOUNT } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; +import { customWeb3Request } from "../util/providers"; -describeWithMoonbeam("Moonbeam RPC (Nonce)", `simple-specs.json`, (context) => { - before(async () => { - // For some reason fees are not well estimated otherwise - await createAndFinalizeBlock(context.polkadotApi); +describeDevMoonbeam("Nonce - Initial", (context) => { + // before("Setup: Create block with transfer", async () => { + // // For some reason fees are not well estimated otherwise + // await createAndFinalizeBlock(context.polkadotApi); + // }); + it("should be at 0 before using it", async function () { + expect( + await context.web3.eth.getTransactionCount("0x1111111111111111111111111111111111111111") + ).to.eq(0); }); - it("get nonce", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "earliest")).to.eq(0); - - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); + it("should be at 0 for genesis account", async function () { + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); + }); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "latest")).to.eq(0); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "pending")).to.eq(1); + it("should stay at 0 before block is created", async function () { + await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createTransfer(context.web3, GENESIS_ACCOUNT, 512), + ]); + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); + }); +}); - await createAndFinalizeBlock(context.polkadotApi); +describeDevMoonbeam("Nonce - Previous block", (context) => { + before("Setup: Create block with transfer", async () => { + await context.createBlock({ + transactions: [ + await createTransfer(context.web3, "0x1111111111111111111111111111111111111111", 512), + ], + }); + }); + it("should be at 0 after transferring", async function () { + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, 0)).to.eq(0); + }); +}); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "latest")).to.eq(1); +describeDevMoonbeam("Nonce - Pending transaction", (context) => { + before("Setup: Create block with transfer", async () => { + await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createTransfer(context.web3, "0x1111111111111111111111111111111111111111", 512), + ]); + }); + it("should not increase transaction count", async function () { + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); + }); + it("should not increase transaction count in latest block", async function () { + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "latest")).to.eq(0); + }); + it("should increase transaction count in pending block", async function () { expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "pending")).to.eq(1); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "earliest")).to.eq(0); }); +}); - it("nonce should not be reset to 0 when emptying dust accounts", async function () { - const testAccountPrivateKey1 = context.web3.utils.randomHex(32); - const testAccountPrivateKey2 = context.web3.utils.randomHex(32); - const keyring = new Keyring({ type: "ethereum" }); - const testAccount1 = await keyring.addFromUri(testAccountPrivateKey1, null, "ethereum"); - const testAccount2 = await keyring.addFromUri(testAccountPrivateKey2, null, "ethereum"); - const genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - - const info = await context.polkadotApi.tx.balances - .transfer(testAccount1.address, 1) - .paymentInfo(genesisAccount); - - // We should estimate the fee to ensure we are transferring enough funds - const fee = info.partialFee.toNumber(); - - await context.polkadotApi.tx.balances - .transfer(testAccount1.address, fee + 1) - .signAndSend(genesisAccount); - await createAndFinalizeBlock(context.polkadotApi); - - await context.polkadotApi.tx.balances - .transfer(testAccount2.address, 1) - .signAndSend(testAccount1); - - await createAndFinalizeBlock(context.polkadotApi); +describeDevMoonbeam("Nonce - Transferring", (context) => { + it("Setup: Sending token", async function () { + await context.createBlock({ + transactions: [ + await createTransfer(context.web3, "0x1111111111111111111111111111111111111111", 512), + ], + }); + }); - const { nonce, data: balance } = await context.polkadotApi.query.system.account( - testAccount1.address - ); + it("should increase the sender nonce", async function () { + expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(1); + }); - expect(nonce.toNumber()).to.equal(1); - expect(balance.free.toNumber()).to.equal(0); + it("should not increase the receiver nonce", async function () { + expect( + await context.web3.eth.getTransactionCount("0x1111111111111111111111111111111111111111") + ).to.eq(0); }); }); diff --git a/tests/tests/test-pending-pool.ts b/tests/tests/test-pending-pool.ts index 9d2c16b3005..188434b1c6a 100644 --- a/tests/tests/test-pending-pool.ts +++ b/tests/tests/test-pending-pool.ts @@ -1,28 +1,18 @@ import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; -import { getCompiled } from "./util/contracts"; - -describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (context) => { - it("should return a pending transaction", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: (await getCompiled("TestContract")).byteCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - const txHash = ( - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) - ).result; +describeDevMoonbeam("Pending Pool - Adding", (context) => { + let txHash; + before("Setup: Sending a transaction", async function () { + const { rawTx } = await createContract(context.web3, "TestContract"); + txHash = (await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).result; + }); + it("should return pending transaction by hash", async function () { const pendingTransaction = ( - await customRequest(context.web3, "eth_getTransactionByHash", [txHash]) + await customWeb3Request(context.web3, "eth_getTransactionByHash", [txHash]) ).result; // pending transactions do not know yet to which block they belong to expect(pendingTransaction).to.include({ @@ -31,15 +21,24 @@ describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (contex publicKey: "0x624f720eae676a04111631c9ca338c11d0f5a80ee42210c6be72983ceb620fbf645a96f951529f" + "a2d70750432d11b7caba5270c4d677255be90b3871c8c58069", - r: "0xeab0158195d611eb22d4f5a5788409a153b86a4c09661d469a6453b1272704ff", - s: "0x17f220c16a8c11b07d3f1284abf483e330217807632fa93fecf92b48e817875a", - v: "0xa26", + r: "0x64142adbcc090fb188be10d5ce008791f4fb8850b1d364360bd9f8ec2e2f06b8", + s: "0x141d31f93724fdc78da17fbc47bca20770e558afda2fb75d9de4e4f111c8aeeb", + v: "0xa25", }); + }); +}); - await createAndFinalizeBlock(context.polkadotApi); +describeDevMoonbeam("Pending Pool - Creating block", (context) => { + let txHash; + before("Setup: Sending a transaction in a block", async function () { + const { rawTx } = await createContract(context.web3, "TestContract"); + txHash = (await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).result; + await context.createBlock(); + }); + it("should provide pending transactions with block", async function () { const processedTransaction = ( - await customRequest(context.web3, "eth_getTransactionByHash", [txHash]) + await customWeb3Request(context.web3, "eth_getTransactionByHash", [txHash]) ).result; expect(processedTransaction).to.include({ blockNumber: "0x1", @@ -47,9 +46,9 @@ describeWithMoonbeam("Frontier RPC (Pending Pool)", `simple-specs.json`, (contex publicKey: "0x624f720eae676a04111631c9ca338c11d0f5a80ee42210c6be72983ceb620fbf645a96f951529f" + "a2d70750432d11b7caba5270c4d677255be90b3871c8c58069", - r: "0xeab0158195d611eb22d4f5a5788409a153b86a4c09661d469a6453b1272704ff", - s: "0x17f220c16a8c11b07d3f1284abf483e330217807632fa93fecf92b48e817875a", - v: "0xa26", + r: "0x64142adbcc090fb188be10d5ce008791f4fb8850b1d364360bd9f8ec2e2f06b8", + s: "0x141d31f93724fdc78da17fbc47bca20770e558afda2fb75d9de4e4f111c8aeeb", + v: "0xa25", }); }); }); diff --git a/tests/tests/test-polkadot-api.ts b/tests/tests/test-polkadot-api.ts index 84f46aac708..1801d1d98e5 100644 --- a/tests/tests/test-polkadot-api.ts +++ b/tests/tests/test-polkadot-api.ts @@ -1,43 +1,49 @@ import { expect } from "chai"; -import { Keyring } from "@polkadot/keyring"; -import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; import { AnyTuple, IEvent } from "@polkadot/types/types"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { GENESIS_ACCOUNT } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import Keyring from "@polkadot/keyring"; +import { GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => { - before(async function () { - const keyring = new Keyring({ type: "ethereum" }); - const testAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - try { - let hash = await context.polkadotApi.tx.balances - .transfer(TEST_ACCOUNT_2, 123) - .signAndSend(testAccount); - } catch (e) { - expect(false, "error during polkadot api transfer" + e); - } - // TODO: do some testing with the hash - await createAndFinalizeBlock(context.polkadotApi); - }); - it("api can retrieve last header", async function () { +describeDevMoonbeam("Polkadot API - Header", (context) => { + it("should return genesis block", async function () { const lastHeader = await context.polkadotApi.rpc.chain.getHeader(); expect(Number(lastHeader.number) >= 0).to.be.true; }); +}); + +describeDevMoonbeam("Polkadot API", (context) => { + before("Setup: Create empty block", async () => { + await context.createBlock(); + }); + + it("should return latest header number", async function () { + const lastHeader = await context.polkadotApi.rpc.chain.getHeader(); + expect(Number(lastHeader.number)).to.be.at.least(0); + }); - it("api can retrieve last block", async function () { + it("should return latest block number", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); expect(signedBlock.block.header.number.toNumber() >= 0).to.be.true; }); +}); - const TEST_ACCOUNT_2 = "0x1111111111111111111111111111111111111112"; +describeDevMoonbeam("Polkadot API - Transfers", (context) => { + const testAccount = "0x1111111111111111111111111111111111111111"; + before("Setup: Create empty block with balance.transfer", async () => { + const keyring = new Keyring({ type: "ethereum" }); + const genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); + await context.polkadotApi.tx.balances.transfer(testAccount, 123).signAndSend(genesisAccount); + await context.createBlock(); + }); - it("transfer from polkadotjs should appear in ethereum", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT_2)).to.equal("123"); + it("should be stored on chain", async function () { + expect(await context.web3.eth.getBalance(testAccount)).to.equal("123"); }); - it("read extrinsic information", async function () { + it("should appear in extrinsics", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - expect(signedBlock.block.header.number.toNumber() >= 0).to.be.true; // Expecting 4 extrinsics so far: // timestamp, author, the parachain validation data and the balances transfer. @@ -45,7 +51,6 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => signedBlock.block.extrinsics.forEach((ex, index) => { const { - isSigned, method: { args, method, section }, } = ex; const message = `${section}.${method}(${args.map((a) => a.toString()).join(", ")})`; @@ -62,10 +67,10 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => ); break; case 3: - expect(ex.signer.toString().toLocaleLowerCase()).to.eq(GENESIS_ACCOUNT); expect(message).to.eq( - `balances.transfer(0x1111111111111111111111111111111111111112, 123)` + `balances.transfer(0x1111111111111111111111111111111111111111, 123)` ); + expect(ex.signer.toString().toLocaleLowerCase()).to.eq(GENESIS_ACCOUNT); break; default: throw new Error(`Unexpected extrinsic: ${message}`); @@ -73,7 +78,7 @@ describeWithMoonbeam("Moonbeam Polkadot API", `simple-specs.json`, (context) => }); }); - it("read extrinsic events", async function () { + it("should appear in events", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); const allRecords = await context.polkadotApi.query.system.events.at( signedBlock.block.header.hash diff --git a/tests/tests/test-precompile-bn128add.ts b/tests/tests/test-precompile-bn128add.ts new file mode 100644 index 00000000000..bf070d60b90 --- /dev/null +++ b/tests/tests/test-precompile-bn128add.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128add", (context) => { + it("should be accessible from a smart contract", async function () { + const { rawTx } = await createContract(context.web3, "Bn128Addition"); + await context.createBlock({ transactions: [rawTx] }); + + // Because the call to bn128add is in the constructor of HashRipmd160, verifying the code + // is enough. + expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( + "0x6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf5" + + "3e954372785d2b34c64298c5275b4d5264736f6c63430008030033" + ); + }); +}); diff --git a/tests/tests/test-precompile-bn128mul.ts b/tests/tests/test-precompile-bn128mul.ts new file mode 100644 index 00000000000..6c34cfc5abf --- /dev/null +++ b/tests/tests/test-precompile-bn128mul.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128mul", (context) => { + it("should be accessible from a smart contract", async function () { + const { rawTx } = await createContract(context.web3, "Bn128Multiply"); + await context.createBlock({ transactions: [rawTx] }); + + // Because the call to bn128mul is in the constructor of HashRipmd160, verifying the code + // is enough. + expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( + "0x6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963" + + "abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033" + ); + }); +}); diff --git a/tests/tests/test-precompile-bn128pairing.ts b/tests/tests/test-precompile-bn128pairing.ts new file mode 100644 index 00000000000..ecd071899dd --- /dev/null +++ b/tests/tests/test-precompile-bn128pairing.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128Pairing", (context) => { + it("should be accessible from a smart contract", async function () { + const { rawTx } = await createContract(context.web3, "Bn128Pairing"); + await context.createBlock({ transactions: [rawTx] }); + + // Because the call to bn128mul is in the constructor of HashRipmd160, verifying the code + // is enough. + expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( + "0x6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab" + + "722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033" + ); + }); +}); diff --git a/tests/tests/test-precompile-modexp.ts b/tests/tests/test-precompile-modexp.ts new file mode 100644 index 00000000000..42743bb8806 --- /dev/null +++ b/tests/tests/test-precompile-modexp.ts @@ -0,0 +1,16 @@ +import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Precompiles - ModExp", (context) => { + it("should be accessible from a smart contract", async function () { + // See also the ModExp unit tests at + // github.com/paritytech/frontier/blob/378221a4/frame/evm/precompile/modexp/src/lib.rs#L101 + const { contract, rawTx } = await createContract(context.web3, "ModularCheck"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + + // The contract should deploy successfully and the receipt should show success. + const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + expect(receipt.status).to.be.true; + }); +}); diff --git a/tests/tests/test-precompile-ripemd160.ts b/tests/tests/test-precompile-ripemd160.ts new file mode 100644 index 00000000000..d00caff54e5 --- /dev/null +++ b/tests/tests/test-precompile-ripemd160.ts @@ -0,0 +1,38 @@ +import { expect } from "chai"; +import { GENESIS_ACCOUNT } from "../util/constants"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Precompiles - ripemd160 ", (context) => { + it("should be valid", async function () { + const txCall = await customWeb3Request(context.web3, "eth_call", [ + { + from: GENESIS_ACCOUNT, + value: "0x0", + gas: "0x10000", + gasPrice: "0x01", + to: "0x0000000000000000000000000000000000000003", + data: `0x${Buffer.from("Hello world!").toString("hex")}`, + }, + ]); + + expect(txCall.result).equals( + "0x0000000000000000000000007f772647d88750add82d8e1a7a3e5c0902a346a3" + ); + }); +}); + +describeDevMoonbeam("Precompiles - ripemd160 ", (context) => { + it("should be accessible from a smart contract", async function () { + const { contract, rawTx } = await createContract(context.web3, "HashRipmd160"); + await context.createBlock({ transactions: [rawTx] }); + + // Because the call to ripemd160 is in the constructor of HashRipmd160, verifying the code + // is enough + expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( + "0x6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e" + + "3b23f5a55166c1372b7f4119b64736f6c63430008030033" + ); + }); +}); diff --git a/tests/tests/test-precompiles.ts b/tests/tests/test-precompiles.ts deleted file mode 100644 index 0f09628f37f..00000000000 --- a/tests/tests/test-precompiles.ts +++ /dev/null @@ -1,356 +0,0 @@ -import { expect } from "chai"; -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; - -// All test for the RPC - -describeWithMoonbeam("Moonbeam (Precompiles)", `simple-specs.json`, (context) => { - /* - * pragma solidity ^0.7.0; - * contract HashRipmd160{ - * constructor() { - * require(ripemd160(bytes ('Hello World!')) == - * hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c'); - * } - * } - */ - const RIPEMD160_CONTRACT_BYTECODE = - "608060405234801561001057600080fd5b507f8476ee4631b9b30ac275" + - "4b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c" + - "6c6f20576f726c642100000000000000000000000000000000000000008152506040518082805190602001908083" + - "835b6020831061009d578051825260208201915060208101905060208303925061007a565b600183602003610100" + - "0a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156100df" + - "573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff19161461010257600080fd5b" + - "603f806101106000396000f3fe6080604052600080fdfea26469706673582212202febccafbee65a134279d3397f" + - "ecfc56a3d2125987802a91add0260c7efa94d264736f6c634300060c0033"; - - /* pragma solidity ^0.7.0; - * contract Bn128Addition{ - * constructor() { - * bool success; - * uint256[4] memory input = [ - * 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703, - * 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915, - * 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9, - * 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 - * ]; - * uint256[2] memory result; - * - * assembly { - * // 0x06 id of the bn256Add precompile - * // 0 number of ether to transfer - * // 128 size of call parameters, i.e. 128 bytes total - * // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point - * success := call(not(0), 0x06, 0, input, 128, result, 64) - * } - * require(success, "elliptic curve addition failed"); - * require( - * result[0] == - * 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7, - * "failed"); - * require( - * result[1] == - * 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204, - * "failed"); - * } - *} - */ - - const BN128ADD_CONTRACT_BYTECODE = - "608060405234801561001057600080fd5b5060008060405180608001604" + - "052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d3" + - "3be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5" + - "411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755" + - "796819658d32efc0d288198f3726681525090506100bf610296565b60408160808460006006600019f19250826" + - "10142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018" + - "0806020018281038252601e8152602001807f656c6c6970746963206375727665206164646974696f6e2066616" + - "96c6564000081525060200191505060405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7a" + - "e5648e61d02268b1a0a9fb78160006002811061017057fe5b6020020151146101e8576040517f08c379a000000" + - "000000000000000000000000000000000000000000000000000815260040180806020018281038252600681526" + - "02001807f6661696c6564000000000000000000000000000000000000000000000000000081525060200191505" + - "060405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb20481600" + - "16002811061021657fe5b60200201511461028e576040517f08c379a0000000000000000000000000000000000" + - "0000000000000000000000081526004018080602001828103825260068152602001807f6661696c65640000000" + - "00000000000000000000000000000000000000000000081525060200191505060405180910390fd5b505050610" + - "2b8565b6040518060400160405280600290602082028036833780820191505090505090565b603f806102c6600" + - "0396000f3fe6080604052600080fdfea264697066735822122075fa7407f63bde9752715fbe31095ab6ad9273e" + - "2d758ca548cdb9d581cc4fcd264736f6c63430007060033"; - - /*pragma solidity ^0.7.0; - * contract Bn128Addition{ - * constructor() { - * bool success; - * uint256[3] memory input = [ - * 0x070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c, - * 0x031b8ce914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc, - * 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46 - * ]; - * uint256[2] memory result; - * - * assembly { - * // 0x07 id of the bn256Mul precompile - * // 0 number of ether to transfer - * // 96 size of call parameters, i.e. 96 bytes total - * // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point - * success := call(not(0), 0x07, 0, input, 96, result, 64) - * } - * require(success, "elliptic curve multiplication failed"); - * require( - * result[0] == - * 0x025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb, - * "failed"); - * require( - * result[1] == - * 0x2eff3f31dea215f1eb86023a133a996eb6300b44da664d64251d05381bb8a02e, - * "failed"); - * } - * } - */ - - const BN128_MUL_CONTRACT_BYTECODE = - "608060405234801561001057600080fd5b506000806040518060600160" + - "4052807f070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c81526020017f031b8c" + - "e914eba3a9ffb989f9cdd5b0f01943074bf4f0f315690ec3cec6981afc81526020017f30644e72e131a029b850" + - "45b68181585d97816a916871ca8d3c208c16d87cfd468152509050610099610253565b60408160608460006007" + - "600019f19250826100ff576040517f08c379a00000000000000000000000000000000000000000000000000000" + - "000081526004018080602001828103825260248152602001806102c26024913960400191505060405180910390" + - "fd5b7f025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb8160006002811061012d" + - "57fe5b6020020151146101a5576040517f08c379a0000000000000000000000000000000000000000000000000" + - "0000000081526004018080602001828103825260068152602001807f6661696c65640000000000000000000000" + - "00000000000000000000000000000081525060200191505060405180910390fd5b7f2eff3f31dea215f1eb8602" + - "3a133a996eb6300b44da664d64251d05381bb8a02e816001600281106101d357fe5b60200201511461024b5760" + - "40517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001" + - "828103825260068152602001807f6661696c656400000000000000000000000000000000000000000000000000" + - "0081525060200191505060405180910390fd5b505050610275565b604051806040016040528060029060208202" + - "8036833780820191505090505090565b603f806102836000396000f3fe6080604052600080fdfea26469706673" + - "5822122075cd0f518b5eecae53e271cd43201f7af10ba181ece35fe769e037d2ce152f9864736f6c6343000706" + - "0033656c6c6970746963206375727665206d756c7469706c69636174696f6e206661696c6564"; - - /* - * pragma solidity ^0.7.0; - * contract Bn128Pairing{ - * constructor() { - * uint256[12] memory input = [ - * 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02, - * 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84, - * 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee, - * 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f, - * 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237, - * 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f, - * 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9, - * 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1, - * 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2, - * 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed, - * 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b, - * 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - * ]; - * uint256[1] memory result; - * bool success; - * assembly { - * // 0x08 id of the bn256CheckPairing precompile - * // 0 number of ether to transfer - * // 0 since we have an array of fixed length, our input starts in 0 - * // 384 size of call parameters, i.e. 12*256 bits == 384 bytes - * // 32 size of result (one 32 byte boolean!) - * success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) - * } - * require(success, "elliptic curve pairing failed"); - * require(result[0] == 1, "failed"); - * } - * } - */ - - const BN128_PAIRING_CONTRACT_BYTECODE = - "608060405234801561001057600080fd5b50600060405180610180" + - "01604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03" + - "d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137" + - "fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75f" + - "c42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e" + - "21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b65" + - "52ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020" + - "017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e939392" + - "0d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a0066" + - "5e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b31" + - "3370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6" + - "cc0166fa7daa81525090506101ef610306565b600060208261018085600060086107d05a03f190508061027757" + - "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "018281038252601d8152602001807f656c6c69707469632063757276652070616972696e67206661696c656400" + - "000081525060200191505060405180910390fd5b60018260006001811061028657fe5b6020020151146102fe57" + - "6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020" + - "01828103825260068152602001807f6661696c6564000000000000000000000000000000000000000000000000" + - "000081525060200191505060405180910390fd5b505050610328565b6040518060200160405280600190602082" + - "028036833780820191505090505090565b603f806103366000396000f3fe6080604052600080fdfea264697066" + - "73582212202c2287769364a973256a3d99b3689d357bf3f403e981a27be30121349505bb5c64736f6c63430007" + - "060033"; - /* - * pragma solidity ^0.7.0; - * - * contract ModularCheck { - * - * // Verify simple modular exponentiation - * constructor() { - * require(modExp(3, 5, 7) == 5); - * require(modExp(5, 7, 11) == 3); - * } - * - * // Wrapper function to use the precompile. - * // Taken from https://ethereum.stackexchange.com/a/71590/9963 - * function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) { - * assembly { - * // Free memory pointer - * let pointer := mload(0x40) - * - * // Define length of base, exponent and modulus. 0x20 == 32 bytes - * mstore(pointer, 0x20) - * mstore(add(pointer, 0x20), 0x20) - * mstore(add(pointer, 0x40), 0x20) - * - * // Define variables base, exponent and modulus - * mstore(add(pointer, 0x60), _b) - * mstore(add(pointer, 0x80), _e) - - * mstore(add(pointer, 0xa0), _m) - * // Store the result - * let value := mload(0xc0) - * - * // Call the precompiled contract 0x05 = bigModExp - * if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) { - * revert(0, 0) - * } - * - * result := mload(value) - * } - * } - * } - */ - const MODEXP_CONTRACT_BYTECODE = - "608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b146100315760" + - "0080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b6000604051" + - "60208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c0846000" + - "6005600019f161009857600080fd5b8051925050509392505050565b610104806100b46000396000f3fe60806040" + - "52348015600f57600080fd5b506004361060285760003560e01c80633148f14f14602d575b600080fd5b606a6004" + - "8036036060811015604157600080fd5b810190808035906020019092919080359060200190929190803590602001" + - "909291905050506080565b6040518082815260200191505060405180910390f35b60006040516020815260208082" + - "0152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f160c1" + - "57600080fd5b805192505050939250505056fea26469706673582212204d7e7dcd400a3b0d5772d63f43f37a9855" + - "d556cdcdf0f7991cb39169ce7871ce64736f6c63430007000033"; - const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; - const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - - it("ripemd160 should be valid", async function () { - const txCall = await customRequest(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: "0x01", - to: "0x0000000000000000000000000000000000000003", - data: `0x${Buffer.from("Hello world!").toString("hex")}`, - }, - ]); - - expect(txCall.result).equals( - "0x0000000000000000000000007f772647d88750add82d8e1a7a3e5c0902a346a3" - ); - }); - - it("ripemd160 is valid inside a contract", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: RIPEMD160_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( - "0x6080604052600080fdfea26469706673582212202febccafbee65a134279d3397fecfc56a3d21259" + - "87802a91add0260c7efa94d264736f6c634300060c0033" - ); - }); - - it("ModExp is valid inside a contract", async function () { - // See also the ModExp unit tests at - // github.com/paritytech/frontier/blob/378221a4/frame/evm/precompile/modexp/src/lib.rs#L101 - const { rawTransaction, transactionHash } = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: MODEXP_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - - // The contract should deploy successfully and the receipt should show success. - let receipt = await customRequest(context.web3, "eth_getTransactionReceipt", [transactionHash]); - expect(receipt.result.status).equals("0x1"); - }); - - it("bn128add is valid inside a contract", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: BN128ADD_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); - expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( - "0x6080604052600080fdfea264697066735822122075fa7407f63bde9752715fbe31095ab6ad9273e2" + - "d758ca548cdb9d581cc4fcd264736f6c63430007060033" - ); - }); - - it("bn128mul is valid inside a contract", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: BN128_MUL_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); - expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( - "0x6080604052600080fdfea264697066735822122075cd0f518b5eecae53e271cd43201f7af10ba181" + - "ece35fe769e037d2ce152f9864736f6c63430007060033" - ); - }); - - it("bn128Pairing is valid inside a contract", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: BN128_PAIRING_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(tx.transactionHash); - expect(await context.web3.eth.getCode(receipt.contractAddress)).equals( - "0x6080604052600080fdfea26469706673582212202c2287769364a973256a3d99b3689d357bf3f403e9" + - "81a27be30121349505bb5c64736f6c63430007060033" - ); - }); -}); diff --git a/tests/tests/test-receipt-revert.ts b/tests/tests/test-receipt-revert.ts new file mode 100644 index 00000000000..3bb38807edb --- /dev/null +++ b/tests/tests/test-receipt-revert.ts @@ -0,0 +1,24 @@ +import { expect } from "chai"; + +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Receipt - Revert", (context) => { + it("should generate a receipt", async function () { + const { rawTx } = await createContract(context.web3, "FailContract"); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + + expect(receipt.status).to.be.false; + expect(receipt).to.include({ + blockNumber: 1, + contractAddress: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + cumulativeGasUsed: 54600, + from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + gasUsed: 54600, + to: null, + transactionHash: txResults[0].result, + transactionIndex: 0, + }); + }); +}); diff --git a/tests/tests/test-receipt.ts b/tests/tests/test-receipt.ts index 402538ce545..1895b8d6575 100644 --- a/tests/tests/test-receipt.ts +++ b/tests/tests/test-receipt.ts @@ -1,55 +1,29 @@ import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; +import { GENESIS_ACCOUNT } from "../util/constants"; -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; - -const INCREMENTER = require("./constants/IncrementerWithEvent.json"); - -describeWithMoonbeam("Moonbeam RPC (Receipt)", `simple-specs.json`, (context) => { - it("Receipt and events logs should contain valid values", async function () { - const createTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: INCREMENTER.bytecode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - let send = await customRequest(context.web3, "eth_sendRawTransaction", [ - createTx.rawTransaction, - ]); - await createAndFinalizeBlock(context.polkadotApi); - let receipt = await context.web3.eth.getTransactionReceipt(send.result); - const contractAddress = receipt.contractAddress; - const contract = new context.web3.eth.Contract(INCREMENTER.abi, contractAddress); - - const callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: contractAddress, - gas: "0x100000", - value: "0x00", - data: contract.methods.increment().encodeABI(), - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); +describeDevMoonbeam("Receipt - Contract", (context) => { + let txHash; + let eventContract; + before("Setup: Create block with contract", async () => { + const { contract, rawTx } = await createContract(context.web3, "SingleEventContract", { + from: GENESIS_ACCOUNT, + }); + const { txResults } = await context.createBlock({ transactions: [rawTx] }); + txHash = txResults[0].result; + eventContract = contract; + }); - send = await customRequest(context.web3, "eth_sendRawTransaction", [callTx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - const block = await context.web3.eth.getBlock(2); - receipt = await context.web3.eth.getTransactionReceipt(send.result); + it("Should generate receipt", async function () { + const block = await context.web3.eth.getBlock(1); + const receipt = await context.web3.eth.getTransactionReceipt(txHash); expect(receipt.blockHash).to.be.eq(block.hash); expect(receipt.blockNumber).to.be.eq(block.number); expect(receipt.from).to.be.eq(GENESIS_ACCOUNT); expect(receipt.logs.length).to.be.eq(1); - expect(receipt.logs[0].address).to.be.eq(contractAddress); + expect(receipt.logs[0].address).to.be.eq(eventContract.options.address); expect(receipt.logs[0].blockHash).to.be.eq(block.hash); - expect("0x" + receipt.logs[0].data.substring(26, receipt.logs[0].data.length + 1)).to.be.eq( - GENESIS_ACCOUNT - ); - expect(receipt.logs[0].transactionHash).to.be.eq(send.result); }); }); diff --git a/tests/tests/test-revert-receipt.ts b/tests/tests/test-revert-receipt.ts deleted file mode 100644 index d517ab15f63..00000000000 --- a/tests/tests/test-revert-receipt.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { expect } from "chai"; - -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "./constants"; -import { Keyring } from "@polkadot/keyring"; - -describeWithMoonbeam("Frontier RPC (Constructor Revert)", `simple-specs.json`, (context) => { - const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; - const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; - const TEST_ACCOUNT_PRIVATE_KEY = - "0x1111111111111111111111111111111111111111111111111111111111111111"; - // ``` - // pragma solidity >=0.4.22 <0.7.0; - // - // contract WillFail { - // constructor() public { - // require(false); - // } - // } - // ``` - const FAIL_BYTECODE = - "6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe60806040526000" + - "80fdfea26469706673582212209f2bb2a4cf155a0e7b26bd34bb01e9b645a92c82e55c5dbdb4b37f8c326edbee64" + - "736f6c63430006060033"; - const GOOD_BYTECODE = - "6080604052348015600f57600080fd5b506001601a57600080fd5b603f8060276000396000f3fe60806040526000" + - "80fdfea2646970667358221220c70bc8b03cdfdf57b5f6c4131b836f9c2c4df01b8202f530555333f2a00e4b8364" + - "736f6c63430006060033"; - - before(async function () { - // We send some money to TEST_ACCOUNT in order to have deterministic nonces - const testAccount1 = context.web3.eth.accounts.privateKeyToAccount(TEST_ACCOUNT_PRIVATE_KEY); - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: testAccount1.address, - value: "0x200000", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - }); - - it("should provide a tx receipt after successful deployment", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: GOOD_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - const goodTxHash = context.web3.utils.keccak256(tx.rawTransaction); - - expect( - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) - ).to.deep.equal({ - id: 1, - jsonrpc: "2.0", - result: tx.transactionHash, - }); - - // Verify the receipt exists after the block is created - await createAndFinalizeBlock(context.polkadotApi); - let currentHeight = await context.web3.eth.getBlockNumber(); - - const receipt = await context.web3.eth.getTransactionReceipt(goodTxHash); - expect(receipt).to.include({ - blockNumber: currentHeight, - contractAddress: "0x5c4242beB94dE30b922f57241f1D02f36e906915", - cumulativeGasUsed: 67231, - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - gasUsed: 67231, - to: null, - transactionHash: goodTxHash, - transactionIndex: 0, - status: true, - }); - }); - - it("should provide a tx receipt after failed deployment", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: FAIL_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - TEST_ACCOUNT_PRIVATE_KEY - ); - - const failTxHash = context.web3.utils.keccak256(tx.rawTransaction); - - expect( - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]) - ).to.deep.equal({ - id: 1, - jsonrpc: "2.0", - result: tx.transactionHash, - }); - - await createAndFinalizeBlock(context.polkadotApi); - let current_height = await context.web3.eth.getBlockNumber(); - - const receipt = await context.web3.eth.getTransactionReceipt(failTxHash); - expect(receipt).to.include({ - blockNumber: current_height, - contractAddress: "0xAE519FC2Ba8e6fFE6473195c092bF1BAe986ff90", - cumulativeGasUsed: 54600, - from: "0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a", - gasUsed: 54600, - to: null, - transactionHash: failTxHash, - transactionIndex: 0, - status: false, - }); - }); -}); diff --git a/tests/tests/test-rpc-constants.ts b/tests/tests/test-rpc-constants.ts index 485d1c3bfbd..db457b32e27 100644 --- a/tests/tests/test-rpc-constants.ts +++ b/tests/tests/test-rpc-constants.ts @@ -1,9 +1,7 @@ import { expect } from "chai"; -import { describeWithMoonbeam } from "./util"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; -// All test for the RPC - -describeWithMoonbeam("Moonbeam RPC (Constant)", `simple-specs.json`, (context) => { +describeDevMoonbeam("RPC Constants", (context) => { it("should have 0 hashrate", async function () { expect(await context.web3.eth.getHashrate()).to.equal(0); }); diff --git a/tests/tests/test-stake.ts b/tests/tests/test-stake.ts index 27d000097f3..fbaa6dc3709 100644 --- a/tests/tests/test-stake.ts +++ b/tests/tests/test-stake.ts @@ -1,25 +1,20 @@ import { expect } from "chai"; -import { createAndFinalizeBlock, describeWithMoonbeam } from "./util"; -import { DEFAULT_GENESIS_STAKING, GENESIS_ACCOUNT } from "./constants"; +import { DEFAULT_GENESIS_STAKING, GENESIS_ACCOUNT } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; -describeWithMoonbeam("Moonbeam RPC (Stake)", `simple-specs.json`, (context) => { - before(async () => { - // For some reason balances are not well queried otherwise - await createAndFinalizeBlock(context.polkadotApi); - }); - - it("collator bond reserved in genesis", async function () { +describeDevMoonbeam("Staking - Genesis", (context) => { + it("should match collator reserved bond reserved", async function () { const account = await context.polkadotApi.query.system.account(GENESIS_ACCOUNT); expect(account.data.reserved.toString()).to.equal(DEFAULT_GENESIS_STAKING.toString()); }); - it("collator set in genesis", async function () { + it("should include collator from the specs", async function () { const collators = await context.polkadotApi.query.parachainStaking.selectedCandidates(); expect((collators[0] as Buffer).toString("hex").toLowerCase()).equal(GENESIS_ACCOUNT); }); - it("candidates set in genesis", async function () { + it("should have collator state as defined in the specs", async function () { const candidates = await context.polkadotApi.query.parachainStaking.collatorState( GENESIS_ACCOUNT ); @@ -27,7 +22,7 @@ describeWithMoonbeam("Moonbeam RPC (Stake)", `simple-specs.json`, (context) => { expect(candidates.toHuman()["state"]).equal("Active"); }); - it("inflation set in genesis", async function () { + it("should have inflation matching specs", async function () { const inflationInfo = await context.polkadotApi.query.parachainStaking.inflationConfig(); // { // expect: { diff --git a/tests/tests/test-subscription-logs.ts b/tests/tests/test-subscription-logs.ts new file mode 100644 index 00000000000..94193568a06 --- /dev/null +++ b/tests/tests/test-subscription-logs.ts @@ -0,0 +1,224 @@ +import { expect } from "chai"; +import { web3Subscribe } from "../util/providers"; + +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; + +describeDevMoonbeam("Subscription - Logs", (context) => { + let web3Ws; + before("Setup: Create empty block", async () => { + web3Ws = await context.createWeb3("ws"); + }); + + it("should send a notification on new transaction", async function () { + const subscription = web3Subscribe(web3Ws, "logs", {}); + + await new Promise((resolve) => { + subscription.once("connected", resolve); + }); + + const dataPromise = new Promise((resolve) => { + subscription.once("data", resolve); + }); + + const { rawTx } = await createContract(context.web3, "SingleEventContract"); + await context.createBlock({ + transactions: [rawTx], + }); + + const data = await dataPromise; + subscription.unsubscribe(); + + const block = await context.web3.eth.getBlock("latest"); + expect(data).to.include({ + blockHash: block.hash, + blockNumber: block.number, + data: "0x", + logIndex: 0, + removed: false, + transactionHash: block.transactions[0], + transactionIndex: 0, + transactionLogIndex: "0x0", + }); + }); +}); + +describeDevMoonbeam("Subscription - Logs", (context) => { + let web3Ws; + + let subSingleAddPromise; + let subMultiAddPromise; + let subTopicPromise; + let subTopicWildcardPromise; + let subTopicListPromise; + let subTopicCondPromise; + let subTopicMultiCondPromise; + let subTopicWildAndCondPromise; + + before("Setup: Create all subs and a block with transfer", async () => { + web3Ws = await context.createWeb3("ws"); + + const subSingleAdd = web3Subscribe(web3Ws, "logs", { + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + }); + + const subMultiAdd = web3Subscribe(web3Ws, "logs", { + address: [ + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); + + const subTopic = web3Subscribe(web3Ws, "logs", { + topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], + }); + + const subTopicWildcard = web3Subscribe(web3Ws, "logs", { + topics: [null, "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + }); + + const subTopicList = web3Subscribe(web3Ws, "logs", { + topics: [ + ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], + ["0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + ], + }); + + const subTopicCond = web3Subscribe(web3Ws, "logs", { + topics: [ + "0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d", + ["0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + ], + }); + + const subTopicMultiCond = web3Subscribe(web3Ws, "logs", { + topics: [ + "0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d", + [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", + ], + ], + }); + + const subTopicWildAndCond = web3Subscribe(web3Ws, "logs", { + topics: [ + null, + [ + "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", + "0x0000000000000000000000000000000000000000000000000000000000000000", + ], + null, + ], + }); + + await Promise.all( + [ + subSingleAdd, + subMultiAdd, + subTopic, + subTopicWildcard, + subTopicList, + subTopicCond, + subTopicMultiCond, + subTopicWildAndCond, + ].map((sub, index) => { + new Promise((resolve) => { + sub.once("connected", resolve); + }); + }) + ); + + const subData = (sub) => { + return new Promise((resolve) => { + sub.once("data", resolve); + }); + }; + + subSingleAddPromise = subData(subSingleAdd); + subMultiAddPromise = subData(subMultiAdd); + subTopicPromise = subData(subTopic); + subTopicWildcardPromise = subData(subTopicWildcard); + subTopicListPromise = subData(subTopicList); + subTopicCondPromise = subData(subTopicCond); + subTopicMultiCondPromise = subData(subTopicMultiCond); + subTopicWildAndCondPromise = subData(subTopicWildAndCond); + + const { rawTx } = await createContract(context.web3, "SingleEventContract"); + await context.createBlock({ + transactions: [rawTx], + }); + }); + + it("should be able to filter by address", async function () { + const data = await subSingleAddPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should be able to filter by multiple addresses", async function () { + const data = await subMultiAddPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should be able to filter by topic", async function () { + const data = await subTopicPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should be able to filter by topic wildcards", async function () { + const data = await subTopicWildcardPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should be able to filter by topic list", async function () { + const data = await subTopicListPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should be able to filter by topic conditional parameters", async function () { + const data = await subTopicCondPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should support multiple topic conditional parameters", async function () { + const data = await subTopicMultiCondPromise; + expect(data).to.include({ blockNumber: 1 }); + }); + + it("should combine topic wildcards and conditional parameters", async function () { + const data = await subTopicWildAndCondPromise; + expect(data).to.include({ blockNumber: 1 }); + }); +}); + +describeDevMoonbeam("Subscription - Reverted transaction", (context) => { + // TODO: Telmo to verify if this statement is true + it.skip("should not send logs", async function () { + const web3Ws = await context.createWeb3("ws"); + const subscription = web3Subscribe(web3Ws, "logs", {}); + await new Promise((resolve) => { + subscription.once("connected", resolve); + }); + + // Expected to fail because of not enough fund to pay the deployment + const { rawTx } = await createContract(context.web3, "SingleEventContract", { + from: "0x1111111111111111111111111111111111111111", + }); + await context.createBlock({ + transactions: [rawTx], + }); + + const data = await new Promise((resolve) => { + let result = null; + subscription.once("data", (d) => (result = d)); + setTimeout(() => resolve(result), 1000); + // wait for 1 second to make sure a notification would have time to arrive. + // (This one is not supposed to arrive because the transaction ran out of gas.) + }); + + subscription.unsubscribe(); + expect(data).to.be.null; + }); +}); diff --git a/tests/tests/test-subscription-past-events.ts b/tests/tests/test-subscription-past-events.ts index 36fcd678136..fc9386acfce 100644 --- a/tests/tests/test-subscription-past-events.ts +++ b/tests/tests/test-subscription-past-events.ts @@ -1,139 +1,109 @@ import { expect } from "chai"; -import { Subscription as Web3Subscription } from "web3-core-subscriptions"; -import { BlockHeader } from "web3-eth"; -import { Log } from "web3-core"; -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - TEST_SUBSCRIPTION_CONTRACT_BYTECODE, -} from "./constants"; - -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; - -// Extra type because web3 is not well typed -interface Subscription extends Web3Subscription { - once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; -} - -// This reflects the measured gas cost of the transaction at this current point in time. -// It has been known to fluctuate from release to release, so it may need adjustment. -const EXPECTED_TRANSACTION_GAS_COST = 891328; - -async function sendTransaction(context, extraData = {}) { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TEST_SUBSCRIPTION_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), - ...extraData, - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - return tx; -} - -describeWithMoonbeam( - "Frontier RPC past events (Subscription)", - `simple-specs.json`, - (context) => { - // Little helper to hack web3 that are not complete. - function web3Subscribe(type: "pendingTransactions"): Subscription; - function web3Subscribe(type: "logs", params: {}): Subscription; - function web3Subscribe(type: "newBlockHeaders" | "pendingTransactions" | "logs", params?: any) { - return (context.web3.eth as any).subscribe(...arguments); - } - - before(async function () { - // Sending 4 transactions. Those will be tested - await sendTransaction(context, { nonce: 0 }); - await sendTransaction(context, { nonce: 1 }); - await sendTransaction(context, { nonce: 2 }); - await sendTransaction(context, { nonce: 3 }); - await createAndFinalizeBlock(context.polkadotApi); - }); +import { createContract } from "../util/transactions"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { web3Subscribe } from "../util/providers"; - it("should get past events #1: by topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }); +describeDevMoonbeam("Subscription - Past Events", (context) => { + let web3Ws; - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 4) resolve(data); - }); - }); - subscription.unsubscribe(); + before("Setup: Create 4 blocks with transfer", async () => { + web3Ws = await context.createWeb3("ws"); - expect(data).to.not.be.empty; + const { rawTx: rawTx1 } = await createContract(context.web3, "SingleEventContract", { + nonce: 0, + }); + const { rawTx: rawTx2 } = await createContract(context.web3, "SingleEventContract", { + nonce: 1, + }); + const { rawTx: rawTx3 } = await createContract(context.web3, "SingleEventContract", { + nonce: 2, + }); + const { rawTx: rawTx4 } = await createContract(context.web3, "SingleEventContract", { + nonce: 3, }); - it("should get past events #2: by address", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - }); + await context.createBlock({ + transactions: [rawTx1, rawTx2, rawTx3, rawTx4], + }); + }); + + it("should be retrieved by topic", async function () { + const subscription = web3Subscribe(web3Ws, "logs", { + fromBlock: "0x0", + topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], + }); - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); }); - subscription.unsubscribe(); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); - expect(data).to.not.be.empty; + it("should be retrieved by address", async function () { + const subscription = web3Subscribe(web3Ws, "logs", { + fromBlock: "0x0", + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", }); - it("should get past events #3: by address + topic", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); }); + }); + subscription.unsubscribe(); - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 1) resolve(data); - }); - }); - subscription.unsubscribe(); + expect(data).to.not.be.empty; + }); - expect(data).to.not.be.empty; + it("should be retrieved by address + topic", async function () { + const subscription = web3Subscribe(web3Ws, "logs", { + fromBlock: "0x0", + topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], + address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", }); - it("should get past events #3: multiple addresses", async function () { - const subscription = web3Subscribe("logs", { - fromBlock: "0x0", - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - address: [ - "0xe573BCA813c741229ffB2488F7856C6cAa841041", - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - ], + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 1) resolve(data); }); + }); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); + + it("should be retrieved by multiple addresses", async function () { + const subscription = web3Subscribe(web3Ws, "logs", { + fromBlock: "0x0", + topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], + address: [ + "0xe573BCA813c741229ffB2488F7856C6cAa841041", + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ], + }); - const data = await new Promise((resolve) => { - const data = []; - subscription.on("data", function (d: any) { - data.push(d); - if (data.length == 4) resolve(data); - }); + const data = await new Promise((resolve) => { + const data = []; + subscription.on("data", function (d: any) { + data.push(d); + if (data.length == 4) resolve(data); }); - subscription.unsubscribe(); - - expect(data).to.not.be.empty; }); - }, - "ws" -); + subscription.unsubscribe(); + + expect(data).to.not.be.empty; + }); +}); diff --git a/tests/tests/test-subscription.ts b/tests/tests/test-subscription.ts index e1003a7040f..2c4726a03e4 100644 --- a/tests/tests/test-subscription.ts +++ b/tests/tests/test-subscription.ts @@ -1,339 +1,90 @@ import { expect } from "chai"; -import { Subscription as Web3Subscription } from "web3-core-subscriptions"; +import { customWeb3Request, web3Subscribe } from "../util/providers"; import { BlockHeader } from "web3-eth"; -import { Log } from "web3-core"; -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - TEST_SUBSCRIPTION_CONTRACT_BYTECODE, -} from "./constants"; - -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; - -// Extra type because web3 is not well typed -interface Subscription extends Web3Subscription { - once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; -} - -// This reflects the measured gas cost of the transaction at this current point in time. -// It has been known to fluctuate from release to release, so it may need adjustment. -const EXPECTED_TRANSACTION_GAS_COST = 891328; - -async function sendTransaction(context, extraData = {}) { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: TEST_SUBSCRIPTION_CONTRACT_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x" + EXPECTED_TRANSACTION_GAS_COST.toString(16), - ...extraData, - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - return tx; -} - -describeWithMoonbeam( - "Frontier RPC (Subscription)", - `simple-specs.json`, - (context) => { - // Little helper to hack web3 that are not complete. - function web3Subscribe(type: "newBlockHeaders"): Subscription; - function web3Subscribe(type: "pendingTransactions"): Subscription; - function web3Subscribe(type: "logs", params: {}): Subscription; - function web3Subscribe(type: "newBlockHeaders" | "pendingTransactions" | "logs", params?: any) { - return (context.web3.eth as any).subscribe(...arguments); - } - - before(async () => { - await createAndFinalizeBlock(context.polkadotApi); - }); - - it("should connect", async function () { - // @ts-ignore - expect(context.web3.currentProvider.connected).to.equal(true); - }); - - it("should subscribe", async function () { - const subscription = web3Subscribe("newBlockHeaders"); - const subscriptionId = await new Promise((resolve) => - subscription.once("connected", resolve) - ); - - subscription.unsubscribe(); - expect(subscriptionId).to.have.lengthOf(34); - }); - - it("should get newHeads stream", async function () { - const subscription = web3Subscribe("newBlockHeaders"); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.include({ - author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - difficulty: "0", - extraData: "0x", - logsBloom: `0x${"0".repeat(512)}`, - miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", - receiptsRoot: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - }); - expect((data as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; + +describeDevMoonbeam("Subscription", (context) => { + let web3Ws; + before("Setup: Create empty block", async () => { + web3Ws = await context.createWeb3("ws"); + }); + + it("should return a valid subscriptionId", async function () { + const subscription = web3Subscribe(web3Ws, "newBlockHeaders"); + const subscriptionId = await new Promise((resolve) => subscription.once("connected", resolve)); + + subscription.unsubscribe(); + expect(subscriptionId).to.have.lengthOf(34); + }); +}); + +describeDevMoonbeam("Subscription - Block headers", (context) => { + let web3Ws; + before("Setup: Create empty block", async () => { + web3Ws = await context.createWeb3("ws"); + }); + + it("should send notification on new block", async function () { + const subscription = web3Subscribe(web3Ws, "newBlockHeaders"); + await new Promise((resolve) => subscription.once("connected", resolve)); + + await context.createBlock({ + transactions: [ + await createTransfer(context.web3, "0x1111111111111111111111111111111111111111", 0), + ], }); - it("should get newPendingTransactions stream", async function () { - const subscription = web3Subscribe("pendingTransactions"); - await new Promise((resolve) => subscription.once("connected", resolve)); - - const tx = await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.be.not.null; - expect(tx["transactionHash"]).to.be.eq(data); + const data = await new Promise((resolve) => { + subscription.once("data", resolve); }); - - it("should subscribe to all logs", async function () { - const subscription = web3Subscribe("logs", {}); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - const block = await context.web3.eth.getBlock("latest"); - expect(data).to.include({ - blockHash: block.hash, - blockNumber: block.number, - data: "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - logIndex: 0, - removed: false, - transactionHash: block.transactions[0], - transactionIndex: 0, - transactionLogIndex: "0x0", - }); + subscription.unsubscribe(); + + expect(data).to.include({ + author: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + difficulty: "0", + extraData: "0x", + logsBloom: `0x${"0".repeat(512)}`, + miner: "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b", + receiptsRoot: "0x3f9d4f18305cd0de20569ab8f7efb114f6374c65d0f02fbc80fd275317b1d375", + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + transactionsRoot: "0xfe6c195567b1b64b0e1e48b79e75ee25fa56a23540b207f94d83c4dbb1835631", }); - - it("should subscribe to logs by address", async function () { - const subscription = web3Subscribe("logs", { - address: "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; + expect((data as any).sealFields).to.eql([ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000", + ]); + }); +}); + +describeDevMoonbeam("Subscription - Pending transactions", (context) => { + let web3Ws; + before("Setup: Create empty block", async () => { + web3Ws = await context.createWeb3("ws"); + }); + + // TODO: Inspect why it requires to produce a block to receive the notification + it.skip("should send notification on new transaction", async function () { + const subscription = web3Subscribe(web3Ws, "pendingTransactions"); + await new Promise((resolve) => subscription.once("connected", resolve)); + + const dataP = new Promise((resolve) => { + subscription.once("data", resolve); }); - it("should subscribe to logs by multiple addresses", async function () { - const subscription = web3Subscribe("logs", { - address: [ - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - ], - }); + const { result } = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createTransfer(context.web3, "0x1111111111111111111111111111111111111111", 0), + ]); - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); + // This test passes if you produce the block + // await context.createBlock(); - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - expect(data).to.not.be.null; - }); + const data = await dataP; - it("should subscribe to logs by topic", async function () { - const subscription = web3Subscribe("logs", { - topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - }); + subscription.unsubscribe(); - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - - it("should support topic wildcards", async function () { - const subscription = web3Subscribe("logs", { - topics: [null, "0x0000000000000000000000000000000000000000000000000000000000000000"], - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - it("should support single values wrapped around a sequence", async function () { - const subscription = web3Subscribe("logs", { - topics: [ - ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], - ["0x0000000000000000000000000000000000000000000000000000000000000000"], - ], - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - const tx = await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - it("should support topic conditional parameters", async function () { - const subscription = web3Subscribe("logs", { - topics: [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - [ - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", - "0x0000000000000000000000000000000000000000000000000000000000000000", - ], - ], - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - const tx = await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - - it("should support multiple topic conditional parameters", async function () { - const subscription = web3Subscribe("logs", { - topics: [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", - ], - [ - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", - "0x0000000000000000000000000000000000000000000000000000000000000000", - ], - ], - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - const tx = await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - - it("should combine topic wildcards and conditional parameters", async function () { - const subscription = web3Subscribe("logs", { - topics: [ - null, - [ - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", - "0x0000000000000000000000000000000000000000000000000000000000000000", - ], - null, - ], - }); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - subscription.once("data", resolve); - }); - subscription.unsubscribe(); - - expect(data).to.not.be.null; - }); - - it("should not receive log when contract fails", async function () { - const subscription = web3Subscribe("logs", {}); - - await new Promise((resolve) => { - subscription.once("connected", resolve); - }); - - await sendTransaction(context, { - gas: "0x" + (EXPECTED_TRANSACTION_GAS_COST - 1).toString(16), // lower than expected by 1 - }); - const data = await new Promise((resolve) => { - createAndFinalizeBlock(context.polkadotApi); - let result = null; - subscription.once("data", (d) => (result = d)); - setTimeout(() => resolve(result), 1000); - // wait for 1 second to make sure a notification would have time to arrive. - // (This one is not supposed to arrive because the transaction ran out of gas.) - }); - subscription.unsubscribe(); - expect(data).to.be.null; - }); - }, - "ws" -); + expect(data).to.be.not.null; + expect(result).to.be.eq(data); + }); +}); diff --git a/tests/tests/test-trace-filter.ts b/tests/tests/test-trace-filter.ts index 057fcb3491a..2fae75cc799 100644 --- a/tests/tests/test-trace-filter.ts +++ b/tests/tests/test-trace-filter.ts @@ -1,98 +1,44 @@ import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; - -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; - -const CONTRACT = require("./constants/TraceFilter.json"); - -const address0 = "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a"; -const address1 = "0x42e2ee7ba8975c473157634ac2af4098190fc741"; -const address2 = "0xf8cef78e923919054037a1d03662bbd884ff4edf"; - -describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (context) => { - before(async function () { - // Deploy contract - const contract = new context.web3.eth.Contract(CONTRACT.abi); - const contractDeploy = contract.deploy({ - data: CONTRACT.bytecode, - arguments: [false], // don't revert - }); - - let tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: contractDeploy.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x500000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - - const secondContractDeploy = contract.deploy({ - data: CONTRACT.bytecode, - arguments: [true], // revert +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../util/transactions"; +import { GENESIS_ACCOUNT } from "../util/constants"; + +const GENESIS_CONTRACT_ADDRESSES = [ + "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a", + "0x42e2ee7ba8975c473157634ac2af4098190fc741", + "0xf8cef78e923919054037a1d03662bbd884ff4edf", +]; + +describeDevMoonbeam("Trace filter - Contract creation ", (context) => { + before("Setup: Create 4 blocks with TraceFilter contracts", async function () { + const { contract, rawTx } = await createContract(context.web3, "TraceFilter", {}, [false]); + await context.createBlock({ transactions: [rawTx] }); + + const { rawTx: rawTx2 } = await createContract(context.web3, "TraceFilter", {}, [true]); + await context.createBlock({ transactions: [rawTx2] }); + + const { rawTx: rawTx3 } = await createContract(context.web3, "TraceFilter", {}, [false]); + const { rawTx: rawTx4 } = await createContract(context.web3, "TraceFilter", { nonce: 3 }, [ + false, + ]); + await context.createBlock({ transactions: [rawTx3, rawTx4] }); + + await context.createBlock({ + transactions: [ + await createContractExecution(context.web3, { + contract, + contractCall: contract.methods.subcalls( + GENESIS_CONTRACT_ADDRESSES[1], + GENESIS_CONTRACT_ADDRESSES[2] + ), + }), + ], }); - - tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: secondContractDeploy.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x500000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); - // Deploy 2 more contracts - for (let i = 0; i < 2; i++) { - const secondContractDeploy = contract.deploy({ - data: CONTRACT.bytecode, - arguments: [false], // don't revert - }); - - const tx = await context.web3.eth.accounts.signTransaction( - { - nonce: 2 + i, - from: GENESIS_ACCOUNT, - data: secondContractDeploy.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - } - await createAndFinalizeBlock(context.polkadotApi); - - const contractCall = contract.methods.subcalls(address1, address2); - - tx = await context.web3.eth.accounts.signTransaction( - { - to: address0, - from: GENESIS_ACCOUNT, - data: contractCall.encodeABI(), - value: "0x00", - gasPrice: "0x01", - gas: "0x500000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - await createAndFinalizeBlock(context.polkadotApi); }); - it("Replay succeeding CREATE", async function () { - // Perform RPC call. - let response = await customRequest(context.web3, "trace_filter", [ + + it("should be able to replay deployed contract", async function () { + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x01", toBlock: "0x01", @@ -100,31 +46,29 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex ]); expect(response.result.length).to.equal(1); - expect(response.result[0].action.createMethod).to.equal("create"); - expect(response.result[0].action.from).to.equal("0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"); - expect(response.result[0].action.gas).to.equal("0x4ffead"); - expect(response.result[0].action.input).to.be.a("string"); - expect(response.result[0].action.value).to.equal("0x0"); - expect(response.result[0].blockHash).to.be.a("string"); - expect(response.result[0].blockNumber).to.equal(1); - expect(response.result[0].result.address).to.equal( - "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a" - ); - expect(response.result[0].result.code).to.be.a("string"); - expect(response.result[0].result.gasUsed).to.equal("0x153"); - expect(response.result[0].error).to.equal(undefined); - expect(response.result[0].subtraces).to.equal(0); - expect(response.result[0].traceAddress.length).to.equal(0); - expect(response.result[0].transactionHash).to.equal( - "0x282fdd0b08fd385bbc233cffd5679ee703fc6b4c5b54d6096ae47fa92372790e" - ); - expect(response.result[0].transactionPosition).to.equal(0); - expect(response.result[0].type).to.equal("create"); + expect(response.result[0].action).to.include({ + createMethod: "create", + from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + gas: "0xb718d7", + value: "0x0", + }); + expect(response.result[0].result).to.include({ + address: "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a", + gasUsed: "0x229", + }); + + expect(response.result[0]).to.include({ + blockNumber: 1, + subtraces: 0, + transactionHash: "0x5301ed3a9a1be6001cf261f4197169fd6bc24804270be3c7de19fffdb63ad198", + transactionPosition: 0, + type: "create", + }); }); - it("Replay reverting CREATE", async function () { + it("should be able to replay reverted contract", async function () { // Perform RPC call. - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x02", toBlock: "0x02", @@ -134,7 +78,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result.length).to.equal(1); expect(response.result[0].action.createMethod).to.equal("create"); expect(response.result[0].action.from).to.equal("0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"); - expect(response.result[0].action.gas).to.equal("0x4fff44"); + expect(response.result[0].action.gas).to.equal("0xb7198c"); expect(response.result[0].action.input).to.be.a("string"); expect(response.result[0].action.value).to.equal("0x0"); expect(response.result[0].blockHash).to.be.a("string"); @@ -144,7 +88,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex expect(response.result[0].subtraces).to.equal(0); expect(response.result[0].traceAddress.length).to.equal(0); expect(response.result[0].transactionHash).to.equal( - "0x214cf6578d15751c7d5e68ad7167f2b7bcbb0023be155cd55cd1fb059e238c89" + "0x0ddcb527475b0d5e6a45ba6d9bb367c18a7142b5919247f5dd521c744fcd22a3" ); expect(response.result[0].transactionPosition).to.equal(0); expect(response.result[0].type).to.equal("create"); @@ -152,7 +96,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex it("Multiple transactions in the same block + trace over multiple blocks", async function () { // Perform RPC call. - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x02", toBlock: "0x03", @@ -170,7 +114,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex it("Call with subcalls, some reverting", async function () { // Perform RPC call. - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x04", toBlock: "0x04", @@ -195,7 +139,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Request range of blocks", async function () { - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x03", toBlock: "0x04", @@ -224,7 +168,7 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Filter fromAddress", async function () { - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x03", toBlock: "0x04", @@ -236,11 +180,11 @@ describeWithMoonbeam("Moonbeam RPC (trace_filter)", `simple-specs.json`, (contex }); it("Filter toAddress", async function () { - let response = await customRequest(context.web3, "trace_filter", [ + let response = await customWeb3Request(context.web3, "trace_filter", [ { fromBlock: "0x03", toBlock: "0x04", - toAddress: [address2], + toAddress: [GENESIS_CONTRACT_ADDRESSES[2]], }, ]); diff --git a/tests/tests/test-trace.ts b/tests/tests/test-trace.ts index 1933017ead9..c6bae1f5d7c 100644 --- a/tests/tests/test-trace.ts +++ b/tests/tests/test-trace.ts @@ -1,12 +1,12 @@ import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { createAndFinalizeBlock, describeWithMoonbeam, customRequest } from "./util"; - -const INCREMENTER = require("./constants/Incrementer.json"); -const CALLEE = require("./constants/Callee.json"); -const CALLER = require("./constants/Caller.json"); -const BS_TRACER = require("./constants/blockscout_tracer.min.json"); +const INCREMENTER = require("../contracts/abis/Incrementer.json"); +const CALLEE = require("../contracts/abis/Callee.json"); +const CALLER = require("../contracts/abis/Caller.json"); +const BS_TRACER = require("../contracts/abis/blockscout_tracer.min.json"); async function nested(context) { // Create Callee contract. @@ -20,8 +20,10 @@ async function nested(context) { }, GENESIS_ACCOUNT_PRIVATE_KEY ); - let send = await customRequest(context.web3, "eth_sendRawTransaction", [calleeTx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); + let send = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + calleeTx.rawTransaction, + ]); + await context.createBlock(); let receipt = await context.web3.eth.getTransactionReceipt(send.result); const calleeAddr = receipt.contractAddress; // Create Caller contract. @@ -35,8 +37,8 @@ async function nested(context) { }, GENESIS_ACCOUNT_PRIVATE_KEY ); - send = await customRequest(context.web3, "eth_sendRawTransaction", [callerTx.rawTransaction]); - await createAndFinalizeBlock(context.polkadotApi); + send = await customWeb3Request(context.web3, "eth_sendRawTransaction", [callerTx.rawTransaction]); + await context.createBlock(); receipt = await context.web3.eth.getTransactionReceipt(send.result); const callerAddr = receipt.contractAddress; const caller = new context.web3.eth.Contract(CALLER.abi, callerAddr); @@ -51,11 +53,11 @@ async function nested(context) { }, GENESIS_ACCOUNT_PRIVATE_KEY ); - return await customRequest(context.web3, "eth_sendRawTransaction", [callTx.rawTransaction]); + return await customWeb3Request(context.web3, "eth_sendRawTransaction", [callTx.rawTransaction]); } -describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { - it("[Raw] should replay over an intermediate state", async function () { +describeDevMoonbeam("Trace", (context) => { + it("should replay over an intermediate state", async function () { const createTx = await context.web3.eth.accounts.signTransaction( { from: GENESIS_ACCOUNT, @@ -66,11 +68,10 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { }, GENESIS_ACCOUNT_PRIVATE_KEY ); - let send = await customRequest(context.web3, "eth_sendRawTransaction", [ - createTx.rawTransaction, - ]); - await createAndFinalizeBlock(context.polkadotApi); - let receipt = await context.web3.eth.getTransactionReceipt(send.result); + const { txResults } = await context.createBlock({ + transactions: [createTx.rawTransaction], + }); + let receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); // This contract's `sum` method receives a number as an argument, increments the storage and // returns the current value. let contract = new context.web3.eth.Contract(INCREMENTER.abi, receipt.contractAddress); @@ -99,17 +100,19 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { GENESIS_ACCOUNT_PRIVATE_KEY ); - send = await customRequest(context.web3, "eth_sendRawTransaction", [callTx.rawTransaction]); - txs.push(send.result); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + txs.push(data.result); } - await createAndFinalizeBlock(context.polkadotApi); + await context.createBlock(); // Trace 5 target transactions on it. for (let target of targets) { let index = target - 1; await context.web3.eth.getTransactionReceipt(txs[index]); - let intermediateTx = await customRequest(context.web3, "debug_traceTransaction", [ + let intermediateTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ txs[index], ]); @@ -120,10 +123,10 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { } }); - it("[Raw] should trace nested contract calls", async function () { + it("should trace nested contract calls", async function () { const send = await nested(context); - await createAndFinalizeBlock(context.polkadotApi); - let traceTx = await customRequest(context.web3, "debug_traceTransaction", [send.result]); + await context.createBlock(); + let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [send.result]); let logs = []; for (let log of traceTx.result.stepLogs) { if (logs.length == 1) { @@ -138,10 +141,10 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { expect(logs[1].depth).to.be.equal(1); }); - it("[Raw] should use optional disable parameters", async function () { + it("should use optional disable parameters", async function () { const send = await nested(context); - await createAndFinalizeBlock(context.polkadotApi); - let traceTx = await customRequest(context.web3, "debug_traceTransaction", [ + await context.createBlock(); + let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ send.result, { disableMemory: true, disableStack: true, disableStorage: true }, ]); @@ -158,10 +161,10 @@ describeWithMoonbeam("Moonbeam RPC (Trace)", `simple-specs.json`, (context) => { expect(logs.length).to.be.equal(0); }); - it("[Blockscout] should trace nested contract calls", async function () { + it("should format as request (Blockscout)", async function () { const send = await nested(context); - await createAndFinalizeBlock(context.polkadotApi); - let traceTx = await customRequest(context.web3, "debug_traceTransaction", [ + await context.createBlock(); + let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ send.result, { tracer: BS_TRACER.body }, ]); diff --git a/tests/tests/test-txpool-limits.ts b/tests/tests/test-txpool-limits.ts new file mode 100644 index 00000000000..619a46f30c8 --- /dev/null +++ b/tests/tests/test-txpool-limits.ts @@ -0,0 +1,19 @@ +import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +describeDevMoonbeam("TxPool - Limits", (context) => { + it.skip("should be able to fill a block with 260 tx", async function () {}); + + it.skip("should be able to fill a block with 64 contract creations tx", async function () {}); + + // 8192 is the number of tx that can be sent to the Pool + // before it throws an error and drops all tx + it.skip("should be able to send 8192 tx to the pool and have them all published\ + within the following blocks", async function () {}); + + it.skip("shouldn't work for 8193", async function () {}); + + it.skip("should be able to send 8192 tx to the pool and have them all published\ + within the following blocks - bigger tx", async function () {}); + + it.skip("shouldn't work for 8193 - bigger tx", async function () {}); +}); diff --git a/tests/tests/test-txpool-pending.ts b/tests/tests/test-txpool-pending.ts new file mode 100644 index 00000000000..fa0af10d3f9 --- /dev/null +++ b/tests/tests/test-txpool-pending.ts @@ -0,0 +1,86 @@ +import { expect } from "chai"; +import { Contract } from "web3-eth-contract"; + +import { GENESIS_ACCOUNT } from "../util/constants"; +import { createContract, createContractExecution } from "../util/transactions"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { customWeb3Request } from "../util/providers"; + +describeDevMoonbeam("TxPool - Pending transaction", (context) => { + before("Setup: Create transaction", async () => { + const { rawTx } = await createContract(context.web3, "TestContract", { + gas: 1048576, + }); + await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx]); + }); + + it("should appear in the txpool inspection", async function () { + let inspect = await customWeb3Request(context.web3, "txpool_inspect", []); + let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(0)]; + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" + ); + }); + + it("should appear in the txpool content", async function () { + let content = await customWeb3Request(context.web3, "txpool_content", []); + + const data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(0)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), + gas: "0x100000", + gasPrice: "0x1", + nonce: context.web3.utils.toHex(0), + to: "0x0000000000000000000000000000000000000000", + value: "0x0", + }); + }); +}); + +describeDevMoonbeam("TxPool - Contract Call", (context) => { + let testContract: Contract; + + before("Setup: Create contract block and add call transaction", async () => { + const { contract, rawTx } = await createContract(context.web3, "TestContract", { + gas: 1048576, + }); + testContract = contract; + await context.createBlock({ transactions: [rawTx] }); + + await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createContractExecution(context.web3, { + contract, + contractCall: contract.methods.multiply(5), + }), + ]); + }); + + it("should appear in the txpool inspection", async function () { + const contractAddress = testContract.options.address; + const inspect = await customWeb3Request(context.web3, "txpool_inspect", []); + const data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(1)]; + + expect(data).to.not.be.undefined; + expect(data).to.be.equal( + contractAddress.toString().toLowerCase() + ": 0 wei + 12000000 gas x 1 wei" + ); + }); + + it("should appear in the txpool content", async function () { + const content = await customWeb3Request(context.web3, "txpool_content", []); + const data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(1)]; + expect(data).to.include({ + blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + blockNumber: null, + from: GENESIS_ACCOUNT.toString(), + gas: "0xb71b00", + gasPrice: "0x1", + nonce: context.web3.utils.toHex(1), + to: testContract.options.address.toString().toLowerCase(), + value: "0x0", + }); + }); +}); diff --git a/tests/tests/test-txpool-reset.ts b/tests/tests/test-txpool-reset.ts new file mode 100644 index 00000000000..cf99e8a6880 --- /dev/null +++ b/tests/tests/test-txpool-reset.ts @@ -0,0 +1,31 @@ +import { expect } from "chai"; + +import { createContract } from "../util/transactions"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { customWeb3Request } from "../util/providers"; + +describeDevMoonbeam("TxPool - Genesis", (context) => { + it("should be empty", async function () { + let inspect = await customWeb3Request(context.web3, "txpool_inspect", []); + expect(inspect.result.pending).to.be.empty; + let content = await customWeb3Request(context.web3, "txpool_content", []); + expect(content.result.pending).to.be.empty; + }); +}); + +describeDevMoonbeam("TxPool - New block", (context) => { + before("Setup: Create transaction and empty block", async () => { + const { rawTx } = await createContract(context.web3, "TestContract", { + gas: 1048576, + }); + await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(); + }); + + it("should reset the txpool", async function () { + let inspect = await customWeb3Request(context.web3, "txpool_inspect", []); + expect(inspect.result.pending).to.be.empty; + let content = await customWeb3Request(context.web3, "txpool_content", []); + expect(content.result.pending).to.be.empty; + }); +}); diff --git a/tests/tests/test-txpool.ts b/tests/tests/test-txpool.ts deleted file mode 100644 index cd3b5f39b9d..00000000000 --- a/tests/tests/test-txpool.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { expect } from "chai"; - -import { createAndFinalizeBlock, customRequest, describeWithMoonbeam } from "./util"; -import { ERC20_BYTECODE } from "./constants/contractConstants"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; - -async function insert_to_mempool(context) { - // Insert a transaction - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - let tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - data: ERC20_BYTECODE, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - let txContract = await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - return [txContract, tx, nonce]; -} - -describeWithMoonbeam("Moonbeam RPC (TxPool RPC module)", `simple-specs.json`, (context) => { - it("should get pending pool information on Create", async function () { - // Clean state - await createAndFinalizeBlock(context.polkadotApi); - // Insert mempool - let [, tx, nonce] = await insert_to_mempool(context); - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1 wei" - ); - - let content = await customRequest(context.web3, "txpool_content", []); - - data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: GENESIS_ACCOUNT.toString(), - gas: "0x100000", - gasPrice: "0x1", - hash: tx.messageHash.toString(), - nonce: context.web3.utils.toHex(nonce), - to: "0x0000000000000000000000000000000000000000", - value: "0x0", - }); - }); - - it("pool should be empty after producing a block", async function () { - // Clean state - await createAndFinalizeBlock(context.polkadotApi); - await insert_to_mempool(context); - await createAndFinalizeBlock(context.polkadotApi); - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; - - let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT]; - expect(data).to.be.undefined; - }); - - it("should get pending pool information on Call", async function () { - // Clean state - await createAndFinalizeBlock(context.polkadotApi); - // Insert mempool - let [txContract, ,] = await insert_to_mempool(context); - await createAndFinalizeBlock(context.polkadotApi); - const receipt = await context.web3.eth.getTransactionReceipt(txContract.result); - - let contractAddress = receipt.contractAddress; - const transferFnCode = `a9059cbb000000000000000000000000`; - const tokensToTransfer = `00000000000000000000000000000000000000000000000000000000000000dd`; - const inputCode = `0x${transferFnCode}${GENESIS_ACCOUNT.substring(2)}${tokensToTransfer}`; - const nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - const tx = await context.web3.eth.accounts.signTransaction( - { - to: contractAddress, - data: inputCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - - let inspect = await customRequest(context.web3, "txpool_inspect", []); - let data = inspect.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - - expect(data).to.not.be.undefined; - expect(data).to.be.equal( - contractAddress.toString().toLowerCase() + ": 0 wei + 1048576 gas x 1 wei" - ); - - let content = await customRequest(context.web3, "txpool_content", []); - data = content.result.pending[GENESIS_ACCOUNT][context.web3.utils.toHex(nonce)]; - expect(data).to.include({ - blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", - blockNumber: null, - from: GENESIS_ACCOUNT.toString(), - gas: "0x100000", - gasPrice: "0x1", - hash: tx.messageHash.toString(), - nonce: context.web3.utils.toHex(nonce), - to: contractAddress.toString().toLowerCase(), - value: "0x0", - }); - }); -}); diff --git a/tests/tests/test-version.ts b/tests/tests/test-version.ts index 15f05914aee..3600675ec94 100644 --- a/tests/tests/test-version.ts +++ b/tests/tests/test-version.ts @@ -1,12 +1,11 @@ import { expect } from "chai"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { describeWithMoonbeam } from "./util"; - -describeWithMoonbeam("Moonbeam RPC (Version)", `simple-specs.json`, (context) => { - it("eth_chainId should match", async function () { +describeDevMoonbeam("Version RPC", (context) => { + it("should return 1281 for eth_chainId", async function () { expect(await context.web3.eth.getChainId()).to.equal(1281); }); - it("net_version should match", async function () { + it("should return 1281 for net_version", async function () { expect(await context.web3.eth.net.getId()).to.equal(1281); }); }); diff --git a/tests/tests/test-web3api.ts b/tests/tests/test-web3api.ts index 3a8f1049bc4..e5552edaa58 100644 --- a/tests/tests/test-web3api.ts +++ b/tests/tests/test-web3api.ts @@ -1,8 +1,9 @@ import { expect } from "chai"; -import { describeWithMoonbeam, customRequest } from "./util"; +import { customWeb3Request } from "../util/providers"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; -describeWithMoonbeam("Moonbeam RPC (Web3Api)", `simple-specs.json`, (context) => { - it("should get client version", async function () { +describeDevMoonbeam("Web3Api Information", (context) => { + it("should include client version", async function () { const version = await context.web3.eth.getNodeInfo(); let specName: string = await context.polkadotApi.runtimeVersion.specName.toString(); let specVersion: string = await context.polkadotApi.runtimeVersion.specVersion.toString(); @@ -11,9 +12,9 @@ describeWithMoonbeam("Moonbeam RPC (Web3Api)", `simple-specs.json`, (context) => expect(version).to.be.match(regex); }); - it("should remote sha3", async function () { + it("should provide sha3 hashing", async function () { const data = context.web3.utils.stringToHex("hello"); - const hash = await customRequest(context.web3, "web3_sha3", [data]); + const hash = await customWeb3Request(context.web3, "web3_sha3", [data]); const localhash = context.web3.utils.sha3("hello"); expect(hash.result).to.be.equal(localhash); }); @@ -24,7 +25,7 @@ describeWithMoonbeam("Moonbeam RPC (Web3Api)", `simple-specs.json`, (context) => // related: frontier commits 677548c and 78fb3bc - const result = await customRequest(context.web3, "net_peerCount", []); + const result = await customWeb3Request(context.web3, "net_peerCount", []); // TODO: this is really just testing that the result comes back as a string, not that it's // expressed in hex (as opposed to decimal) diff --git a/tests/tests/util/fillBlockWithTx.ts b/tests/tests/util/fillBlockWithTx.ts deleted file mode 100644 index b4f5f6259d2..00000000000 --- a/tests/tests/util/fillBlockWithTx.ts +++ /dev/null @@ -1,190 +0,0 @@ -import Web3 from "web3"; - -import { JsonRpcResponse } from "web3-core-helpers"; -import { SignedTransaction, TransactionConfig } from "web3-core"; -import { - basicTransfertx, - CompleteTransactionConfig, - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, -} from "../constants"; -import { wrappedCustomRequest } from "./web3Requests"; -import { createAndFinalizeBlock } from "."; -import { Context, log } from "./testWithMoonbeam"; - -function isSignedTransaction(tx: Error | SignedTransaction): tx is SignedTransaction { - return (tx as SignedTransaction).rawTransaction !== undefined; -} -function isJsonRpcResponse(res: Error | JsonRpcResponse): res is JsonRpcResponse { - return (res as JsonRpcResponse).jsonrpc !== undefined; -} - -// sign tx with error catching -async function wrappedSignTx( - web3: Web3, - txConfig: TransactionConfig, - privateKey: string -): Promise { - try { - let tx = await web3.eth.accounts.signTransaction(txConfig, privateKey); - return tx; - } catch (e) { - return new Error(e.toString()); - } -} - -// Sign tx sequentially -async function serialSignTx( - web3: Web3, - n: number, - startingNonce: number, - customTxConfig: TransactionConfig -): Promise<(Error | SignedTransaction)[]> { - const resArray = []; - for (let index = 0; index < n; index++) { - resArray.push( - await wrappedSignTx( - web3, - { ...customTxConfig, nonce: startingNonce + index }, - GENESIS_ACCOUNT_PRIVATE_KEY - ) - ); - } - return resArray; -} - -// Send tx to the pool sequentially -async function serialSendTx( - web3: Web3, - n: number, - _txList: (Error | SignedTransaction)[] -): Promise<(Error | JsonRpcResponse)[]> { - const resArray = []; - for (let index = 0; index < n; index++) { - if (isSignedTransaction(_txList[index])) { - resArray.push( - await wrappedCustomRequest(web3, "eth_sendRawTransaction", [ - (_txList[index] as SignedTransaction).rawTransaction, - ]) - ); - } else { - resArray.push(_txList[index] as Error); - } - } - return resArray; -} - -interface FillBlockReport { - txPassed: number; - txPassedFirstBlock: number; - numberOfBlocks: number; - signingTime: number; - sendingTime: number; -} - -export interface ErrorReport { - [key: string]: { - [key: string]: number; - }; -} - -// This function sends a batch of signed transactions to the pool and records both -// how many tx were included in the first block and the total number of tx that were -// included in a block -// By default, the tx is a simple transfer, but a TransactionConfig can be specified as an option -export async function fillBlockWithTx( - context: Context, - numberOfTx: number, - customTxConfig: CompleteTransactionConfig = basicTransfertx -): Promise { - let nonce: number = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - - let errorReport: ErrorReport = { - signing: {}, - customreq: {}, - }; - - function reportError(e, domain: string) { - let message: string = e.error ? e.error.message : e.message ? e.message : JSON.stringify(e); - if (errorReport[domain][message]) { - errorReport[domain][message] += 1; - } else { - errorReport[domain][message] = 1; - } - } - - const startSigningTime: number = Date.now(); - - // First sign all transactions - - let txList: (Error | SignedTransaction)[] = await serialSignTx( - context.web3, - numberOfTx, - nonce, - customTxConfig as any // needed as the web3 types don't support chainId but the code does. - ); - - const signingTime: number = Date.now() - startSigningTime; - - log("Time it took to sign " + txList.length + " tx is " + signingTime / 1000 + " seconds"); - - const startSendingTime: number = Date.now(); - - //Then, send them to the pool - - let respList: (Error | JsonRpcResponse)[] = await serialSendTx(context.web3, numberOfTx, txList); - - respList.forEach((res) => { - if (isJsonRpcResponse(res) && res.error) { - reportError(res.error, "customreq"); - } else if (!isJsonRpcResponse(res)) { - reportError(res, "signing"); - } - }); - - const sendingTime: number = Date.now() - startSendingTime; - - log("Time it took to send " + respList.length + " tx is " + sendingTime / 1000 + " seconds"); - - log("Error Report : ", errorReport); - - log( - "created block in ", - (await createAndFinalizeBlock(context.polkadotApi))[0] / 1000, - " seconds" - ); - - let numberOfBlocks = 0; - let block = await context.web3.eth.getBlock("latest"); - let txPassed: number = block.transactions.length; - const txPassedFirstBlock: number = txPassed; - log( - "block.gasUsed", - block.gasUsed, - "block.number", - block.number, - "block.transactions.length", - block.transactions.length - ); - - let i: number = 2; - - while (block.transactions.length !== 0) { - await createAndFinalizeBlock(context.polkadotApi); - - block = await context.web3.eth.getBlock("latest"); - log( - "following block, block" + i + ".gasUsed", - block.gasUsed, - "block" + i + ".number", - block.number, - "block" + i + ".transactions.length", - block.transactions.length - ); - txPassed += block.transactions.length; - numberOfTx += 1; - i += 1; - } - - return { txPassed, txPassedFirstBlock, sendingTime, signingTime, numberOfBlocks }; -} diff --git a/tests/tests/util/findAvailablePorts.ts b/tests/tests/util/findAvailablePorts.ts deleted file mode 100644 index 2675b8e8cae..00000000000 --- a/tests/tests/util/findAvailablePorts.ts +++ /dev/null @@ -1,28 +0,0 @@ -import tcpPortUsed from "tcp-port-used"; - -export async function findAvailablePorts() { - const availablePorts = await Promise.all( - [null, null, null].map(async (_, index) => { - let selectedPort = 0; - let port = 1024 + index * 20000 + (process.pid % 20000); - let endingPort = 65535; - while (!selectedPort && port < endingPort) { - const inUse = await tcpPortUsed.check(port, "127.0.0.1"); - if (!inUse) { - selectedPort = port; - } - port++; - } - if (!selectedPort) { - throw new Error(`No available port`); - } - return selectedPort; - }) - ); - - return { - p2pPort: availablePorts[0], - rpcPort: availablePorts[1], - wsPort: availablePorts[2], - }; -} diff --git a/tests/tests/util/index.ts b/tests/tests/util/index.ts deleted file mode 100644 index 8f6992bfb0d..00000000000 --- a/tests/tests/util/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { startMoonbeamNode, describeWithMoonbeam } from "./testWithMoonbeam"; -export { fillBlockWithTx } from "./fillBlockWithTx"; -export { customRequest, wrappedCustomRequest } from "./web3Requests"; -export { createAndFinalizeBlock } from "./polkadotApiRequests"; -export { deployContractManualSeal, callContractFunctionMS } from "./contracts"; diff --git a/tests/tests/util/polkadotApiRequests.ts b/tests/tests/util/polkadotApiRequests.ts deleted file mode 100644 index 9ad54fea8b3..00000000000 --- a/tests/tests/util/polkadotApiRequests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ApiPromise } from "@polkadot/api"; -import { BlockHash } from "@polkadot/types/interfaces/chain"; - -// Create a block and finalize it. -// It will include all previously executed transactions since the last finalized block. -export async function createAndFinalizeBlock( - api: ApiPromise, - parentHash?: BlockHash, - finalize: boolean = true -): Promise<[number, BlockHash]> { - const startTime: number = Date.now(); - let block_hash = undefined; - try { - if (parentHash == undefined) { - block_hash = (await api.rpc.engine.createBlock(true, finalize)).toJSON()["hash"]; - } else { - block_hash = (await api.rpc.engine.createBlock(true, finalize, parentHash)).toJSON()["hash"]; - } - } catch (e) { - console.log("ERROR DURING BLOCK FINALIZATION", e); - } - - return [Date.now() - startTime, block_hash]; -} diff --git a/tests/tests/util/testWithFrontier.ts b/tests/tests/util/testWithFrontier.ts deleted file mode 100644 index 57683d48487..00000000000 --- a/tests/tests/util/testWithFrontier.ts +++ /dev/null @@ -1,126 +0,0 @@ -import Web3 from "web3"; - -import { spawn, ChildProcess } from "child_process"; -import { DISPLAY_LOG, SPAWNING_TIME } from "../constants"; -import { customRequest } from "./web3Requests"; -import { findAvailablePorts } from "./findAvailablePorts"; - -const SPECS_PATH = `./moonbeam-test-specs`; - -const FRONTIER_LOG = process.env.FRONTIER_LOG || "info"; - -const BINARY_PATH = `../../frontier/target/debug/frontier-template-node`; - -// Build with `cargo build --no-default-features --features=manual-seal` -export async function startFrontierNode( - specFilename: string, - provider?: string -): Promise<{ web3: Web3; binary: ChildProcess }> { - const ports = await findAvailablePorts(); - - var web3; - if (!provider || provider == "http") { - web3 = new Web3(`http://localhost:${ports.rpcPort}`); - } - - const cmd = BINARY_PATH; - const args = [ - `--chain=${SPECS_PATH}/${specFilename}`, - `--validator`, // Required by manual sealing to author the blocks - `--execution=Native`, // Faster execution using native - `--no-telemetry`, - `--no-prometheus`, - `--sealing=Manual`, - `--no-grandpa`, - `--force-authoring`, - `-l${FRONTIER_LOG}`, - `--port=${ports.p2pPort}`, - `--rpc-port=${ports.rpcPort}`, - `--ws-port=${ports.wsPort}`, - `--tmp`, - ]; - const binary = spawn(cmd, args); - - binary.on("error", (err) => { - if ((err as any).errno == "ENOENT") { - console.error(`\x1b[31mMissing Frontier binary (${BINARY_PATH})`); - } else { - console.error(err); - } - process.exit(1); - }); - - const binaryLogs = []; - await new Promise((resolve) => { - const timer = setTimeout(() => { - console.error(`\x1b[31m Failed to start Frontier Template Node.\x1b[0m`); - console.error(`Command: ${cmd} ${args.join(" ")}`); - console.error(`Logs:`); - console.error(binaryLogs.map((chunk) => chunk.toString()).join("\n")); - process.exit(1); - }, SPAWNING_TIME - 2000); - - const onData = async (chunk) => { - if (DISPLAY_LOG) { - console.log(chunk.toString()); - } - binaryLogs.push(chunk); - if (chunk.toString().match(/Manual Seal Ready/)) { - if (!provider || provider == "http") { - // This is needed as the EVM runtime needs to warmup with a first call - await web3.eth.getChainId(); - } - - clearTimeout(timer); - if (!DISPLAY_LOG) { - binary.stderr.off("data", onData); - binary.stdout.off("data", onData); - } - // console.log(`\x1b[31m Starting RPC\x1b[0m`); - resolve(); - } - }; - binary.stderr.on("data", onData); - binary.stdout.on("data", onData); - }); - - if (provider == "ws") { - web3 = new Web3(`ws://localhost:${ports.wsPort}`); - } - - return { web3, binary }; -} -export function describeWithFrontier( - title: string, - specFilename: string, - cb: (context: { web3: Web3 }) => void, - provider?: string -) { - describe(title, () => { - let context: { web3: Web3 } = { web3: null }; - let binary: ChildProcess; - // Making sure the Frontier node has started - before("Starting Frontier Test Node", async function () { - this.timeout(SPAWNING_TIME); - const init = await startFrontierNode(specFilename, provider); - context.web3 = init.web3; - binary = init.binary; - }); - - after(async function () { - //console.log(`\x1b[31m Killing RPC\x1b[0m`); - binary ? binary.kill() : null; - }); - - cb(context); - }); -} - -// Create a block and finalize it. -// It will include all previously executed transactions since the last finalized block. -export async function createAndFinalizeBlockWithFrontier(web3: Web3) { - const response = await customRequest(web3, "engine_createBlock", [true, true, null]); - if (!response.result) { - throw new Error(`Unexpected result: ${JSON.stringify(response)}`); - } -} diff --git a/tests/tests/util/testWithMoonbeam.ts b/tests/tests/util/testWithMoonbeam.ts deleted file mode 100644 index ff0f4b983f5..00000000000 --- a/tests/tests/util/testWithMoonbeam.ts +++ /dev/null @@ -1,173 +0,0 @@ -import Web3 from "web3"; -import { ApiPromise, WsProvider } from "@polkadot/api"; -import { typesBundle } from "../../../moonbeam-types-bundle"; -import { HttpProvider } from "web3-core"; -import { ethers } from "ethers"; - -import { spawn, ChildProcess, ChildProcessWithoutNullStreams } from "child_process"; -import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "../constants"; -import { ErrorReport } from "./fillBlockWithTx"; -import { findAvailablePorts } from "./findAvailablePorts"; - -import { contractSources } from "../../contracts/sources"; -import { getCompiled } from "./contracts"; -export async function mochaGlobalSetup() { - // First compile all contracts - console.log("Making sure all contracts are compiled..."); - await Promise.all( - Object.keys(contractSources).map(async (contractName) => { - return getCompiled(contractName); - }) - ); -} - -export function log(...msg: (string | number | ErrorReport)[]) { - if (process.argv && process.argv[2] && process.argv[2] === "--printlogs") { - console.log(...msg); - } -} - -export interface Context { - web3: Web3; - ethers: ethers.providers.JsonRpcProvider; - - // WsProvider for the PolkadotJs API - wsProvider: WsProvider; - polkadotApi: ApiPromise; -} - -let runningNode: ChildProcessWithoutNullStreams; - -export async function startMoonbeamNode( - //TODO Make this parameter optional and just default to development. - // For now I'm just ignoring the param and hardcoding development below. - specFilename: string, - provider?: string -): Promise<{ context: Context; runningNode: ChildProcess }> { - const { p2pPort, rpcPort, wsPort } = await findAvailablePorts(); - - const cmd = BINARY_PATH; - const args = [ - `--execution=Native`, // Faster execution using native - `--no-telemetry`, - `--no-prometheus`, - `--dev`, - `--ethapi=txpool,debug,trace`, - `--sealing=manual`, - `-l${MOONBEAM_LOG}`, - `--port=${p2pPort}`, - `--rpc-port=${rpcPort}`, - `--ws-port=${wsPort}`, - `--tmp`, - ]; - runningNode = spawn(cmd, args); - runningNode.on("error", (err) => { - if ((err as any).errno == "ENOENT") { - console.error( - `\x1b[31mMissing Moonbeam binary ` + - `(${BINARY_PATH}).\nPlease compile the Moonbeam project\x1b[0m` - ); - } else { - console.error(err); - } - process.exit(1); - }); - - const binaryLogs = []; - await new Promise((resolve) => { - const timer = setTimeout(() => { - console.error(`\x1b[31m Failed to start Moonbeam Test Node.\x1b[0m`); - console.error(`Command: ${cmd} ${args.join(" ")}`); - console.error(`Logs:`); - console.error(binaryLogs.map((chunk) => chunk.toString()).join("\n")); - process.exit(1); - }, SPAWNING_TIME - 2000); - - const onData = async (chunk) => { - if (DISPLAY_LOG) { - console.log(chunk.toString()); - } - binaryLogs.push(chunk); - if (chunk.toString().match(/Development Service Ready/)) { - clearTimeout(timer); - if (!DISPLAY_LOG) { - runningNode.stderr.off("data", onData); - runningNode.stdout.off("data", onData); - } - resolve(); - } - }; - runningNode.stderr.on("data", onData); - runningNode.stdout.on("data", onData); - }); - - const wsProvider = new WsProvider(`ws://localhost:${wsPort}`); - const polkadotApi = await ApiPromise.create({ - provider: wsProvider, - typesBundle: typesBundle as any, - }); - - let web3 = - provider == "ws" - ? new Web3(`ws://localhost:${wsPort}`) - : new Web3(`http://localhost:${rpcPort}`); - - const ethersApi = new ethers.providers.JsonRpcProvider( - (web3.currentProvider as HttpProvider).host - ); - - // This is needed as the EVM runtime needs to warmup with a first call - await web3.eth.getChainId(); - - // This is needed as it takes a bit more time than when the log is printed to have all the modules - // initialized in the node. (getBalance would fail otherwise) - await polkadotApi.rpc.chain.getBlock(); - - return { context: { ethers: ethersApi, web3, polkadotApi, wsProvider }, runningNode }; -} - -process.once("exit", function () { - runningNode && runningNode.kill(); -}); - -// Handle ctrl+c to trigger `exit`. -process.once("SIGINT", function () { - process.exit(2); -}); - -export function describeWithMoonbeam( - title: string, - specFilename: string, - cb: (context: Context) => void, - provider?: string -) { - describe(title, function () { - // Set timeout to 5000 for all tests. - this.timeout(5000); - - let context: Context = { ethers: null, web3: null, wsProvider: null, polkadotApi: null }; - let binary: ChildProcess; - - // Making sure the Moonbeam node has started - before("Starting Moonbeam Test Node", async function () { - this.timeout(SPAWNING_TIME); - const init = await startMoonbeamNode(specFilename, provider); - // Context is given prior to this assignement, so doing - // context = init.context will fail because it replace the variable; - context.web3 = init.context.web3; - context.ethers = init.context.ethers; - context.wsProvider = init.context.wsProvider; - context.polkadotApi = init.context.polkadotApi; - binary = init.runningNode; - }); - - after(async function () { - // console.log(`\x1b[31m Killing RPC\x1b[0m`); - context.wsProvider.disconnect(); - binary.kill(); - binary = null; - }); - - cb(context); - }); -} diff --git a/tests/tests/util/web3Requests.ts b/tests/tests/util/web3Requests.ts deleted file mode 100644 index de4073d6397..00000000000 --- a/tests/tests/util/web3Requests.ts +++ /dev/null @@ -1,44 +0,0 @@ -import Web3 from "web3"; -import { JsonRpcResponse } from "web3-core-helpers"; - -// make a web3 request, adapted to manual seal testing -export async function customRequest(web3: Web3, method: string, params: any[]) { - return new Promise((resolve, reject) => { - (web3.currentProvider as any).send( - { - jsonrpc: "2.0", - id: 1, - method, - params, - }, - (error: Error | null, result?: JsonRpcResponse) => { - if (error) { - reject( - `Failed to send custom request (${method} (${params.join(",")})): ${ - error.message || error.toString() - }` - ); - } - resolve(result); - } - ); - }); -} - -// wrap the above function to catch errors and return them into a JsonRpc format -export async function wrappedCustomRequest( - web3: Web3, - method: string, - params: any[] -): Promise { - try { - let resp = await customRequest(web3, method, params); - return resp; - } catch (e) { - return { - jsonrpc: "req error", - id: 0, - error: typeof e === "string" ? e.toString() : JSON.stringify(e), - }; - } -} diff --git a/tests/util/block.ts b/tests/util/block.ts new file mode 100644 index 00000000000..17dff487bf3 --- /dev/null +++ b/tests/util/block.ts @@ -0,0 +1,28 @@ +import { ApiPromise } from "@polkadot/api"; +import { BlockHash } from "@polkadot/types/interfaces/chain"; + +export async function createAndFinalizeBlock( + api: ApiPromise, + parentHash?: BlockHash, + finalize: boolean = true +): Promise<{ + duration: number; + hash: BlockHash; +}> { + const startTime: number = Date.now(); + let hash = undefined; + try { + if (parentHash == undefined) { + hash = (await api.rpc.engine.createBlock(true, finalize)).toJSON()["hash"]; + } else { + hash = (await api.rpc.engine.createBlock(true, finalize, parentHash)).toJSON()["hash"]; + } + } catch (e) { + console.log("ERROR DURING BLOCK FINALIZATION", e); + } + + return { + duration: Date.now() - startTime, + hash, + }; +} diff --git a/tests/util/constants.ts b/tests/util/constants.ts new file mode 100644 index 00000000000..a7b17aa402a --- /dev/null +++ b/tests/util/constants.ts @@ -0,0 +1,33 @@ +export const SPECS_PATH = `./moonbeam-test-specs`; + +export const DISPLAY_LOG = process.env.MOONBEAM_LOG || false; +export const MOONBEAM_LOG = process.env.MOONBEAM_LOG || "info"; + +export const BINARY_PATH = process.env.BINARY_PATH || `../target/release/moonbeam`; +export const SPAWNING_TIME = 30000; + +// Test variables +export const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; +export const GENESIS_ACCOUNT_PRIVATE_KEY = + "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; +export const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; +export const GLMR = 1_000_000_000_000_000_000n; +export const DEFAULT_GENESIS_BALANCE = 2n ** 80n; +export const DEFAULT_GENESIS_STAKING = 1_000n * GLMR; +export const GENESIS_ACCOUNT_BALANCE = DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_STAKING; + +// Current gas per second +export const GAS_PER_SECOND = 40_000_000; +// The real computation is 1_000_000_000_000 / 40_000_000, but we simplify to avoid bigint. +export const GAS_PER_WEIGHT = 1_000_000 / 40; + +// Our weight limit is 500ms. +export const BLOCK_TX_LIMIT = GAS_PER_SECOND * 0.5; + +// Current implementation is limiting block transactions to 75% of the block gas limit +export const BLOCK_TX_GAS_LIMIT = BLOCK_TX_LIMIT * 0.75; +export const EXTRINSIC_BASE_COST = 125_000_000 / GAS_PER_WEIGHT; // 125_000_000 Weight per extrinsics + +// Maximum extrinsic weight is taken from the max allowed transaction weight per block, +// minus the block initialization (10%) and minus the extrinsic base cost. +export const EXTRINSIC_GAS_LIMIT = BLOCK_TX_GAS_LIMIT - BLOCK_TX_LIMIT * 0.1 - EXTRINSIC_BASE_COST; diff --git a/tests/tests/util/contracts.ts b/tests/util/contracts.ts similarity index 52% rename from tests/tests/util/contracts.ts rename to tests/util/contracts.ts index 84bece50a5c..73474379fe5 100644 --- a/tests/tests/util/contracts.ts +++ b/tests/util/contracts.ts @@ -1,127 +1,75 @@ -import { ApiPromise } from "@polkadot/api"; -import { TransactionReceipt } from "web3-core"; -import { AbiItem } from "web3-utils"; -import { Contract } from "web3-eth-contract"; -import { createAndFinalizeBlock } from "./polkadotApiRequests"; -import { Context } from "./testWithMoonbeam"; -import Web3 from "web3"; - -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../constants"; -import { customRequest } from "."; -import { contractSources } from "../../contracts/sources"; - -export interface Compiled { - byteCode: string; - contract: any; - sourceCode: string; -} - -const contracts: { [name: string]: Compiled } = {}; -const contractObs: { [name: string]: ((Compiled) => void)[] } = {}; -export async function getCompiled(name: string): Promise { - if (!contractSources[name]) { - throw new Error(`Contract name (${name}) doesn't exist in test suite`); - } - if (contracts[name]) { - return contracts[name]; - } - const promise = new Promise((resolve) => { - const shouldLoad = !contractObs[name]; - if (!contractObs[name]) { - contractObs[name] = []; - } - contractObs[name].push(resolve); - if (shouldLoad) { - // Will load the contract async and callback all the promise waiting for this contract. - setImmediate(() => { - try { - console.log(`Loading ${name}.json`); - contracts[name] = require(`../../contracts/compiled/${name}.json`); - } catch (e) { - throw new Error( - `Contract name ${name} is not compiled. (should be done in mochaGlobalSetup)` - ); - } - - // Call back all the pending promises and clear the list. - contractObs[name].forEach((resolvePending) => { - resolvePending(contracts[name]); - }); - delete contractObs[name]; - }); - } - }); - return promise; -} - -export async function deployContractByName( - api: ApiPromise, - web3: Web3, - name: string -): Promise { - const contractCompiled = await getCompiled(name); - return deployContractManualSeal( - api, - web3, - contractCompiled.byteCode, - contractCompiled.contract.abi - ); -} - -// Deploy and instantiate a contract with manuel seal -export async function deployContractManualSeal( - api: ApiPromise, - web3: Web3, - contractByteCode: string, - contractABI: AbiItem[], - account: string = GENESIS_ACCOUNT, - privateKey: string = GENESIS_ACCOUNT_PRIVATE_KEY -): Promise { - const tx = await web3.eth.accounts.signTransaction( - { - from: account, - data: contractByteCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - privateKey - ); - await customRequest(web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlock(api); - let rcpt: TransactionReceipt = await web3.eth.getTransactionReceipt(tx.transactionHash); - return new web3.eth.Contract(contractABI, rcpt.contractAddress); -} - -interface FnCallOptions { - account?: string; - privateKey?: string; - gas?: string; -} - -// Call a function from a contract instance using manual seal -export async function callContractFunctionMS( - context: Context, - contractAddress: string, - bytesCode: string, - options?: FnCallOptions -) { - try { - const contractCall = { - from: options && options.account ? options.account : GENESIS_ACCOUNT, - to: contractAddress, - data: bytesCode, - gasPrice: "0x01", - gas: options && options.gas ? options.gas : "0x100000", - }; - const txCall = await context.web3.eth.accounts.signTransaction( - contractCall, - options && options.privateKey ? options.privateKey : GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [txCall.rawTransaction]); - return await createAndFinalizeBlock(context.polkadotApi); - } catch (e) { - console.log("error caught during callContractFunctionMS", e); - throw new Error(e); - } -} +import { customWeb3Request } from "./providers"; +import { TransactionReceipt } from "web3-core"; +import { AbiItem } from "web3-utils"; +import { Contract } from "web3-eth-contract"; +import Web3 from "web3"; +import fs from "fs"; + +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { contractSources } from "../contracts/sources"; + +export interface Compiled { + byteCode: string; + contract: any; + sourceCode: string; +} + +const contracts: { [name: string]: Compiled } = {}; +const contractObs: { [name: string]: ((Compiled) => void)[] } = {}; +export async function getCompiled(name: string): Promise { + if (!contractSources[name]) { + throw new Error(`Contract name (${name}) doesn't exist in test suite`); + } + if (contracts[name]) { + return contracts[name]; + } + const promise = new Promise((resolve) => { + const shouldLoad = !contractObs[name]; + if (!contractObs[name]) { + contractObs[name] = []; + } + contractObs[name].push(resolve); + if (shouldLoad) { + // Will load the contract async and callback all the promise waiting for this contract. + setImmediate(() => { + try { + contracts[name] = require(`../contracts/compiled/${name}.json`); + } catch (e) { + throw new Error( + `Contract name ${name} is not compiled. (should be done in mochaGlobalSetup)` + ); + } + + // Call back all the pending promises and clear the list. + contractObs[name].forEach((resolvePending) => { + resolvePending(contracts[name]); + }); + delete contractObs[name]; + }); + } + }); + return promise; +} + +// Deploy and instantiate a contract with manuel seal +export async function deployContractManualSeal( + web3: Web3, + contractByteCode: string, + contractABI: AbiItem[], + account: string = GENESIS_ACCOUNT, + privateKey: string = GENESIS_ACCOUNT_PRIVATE_KEY +): Promise { + const tx = await web3.eth.accounts.signTransaction( + { + from: account, + data: contractByteCode, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + privateKey + ); + await customWeb3Request(web3, "eth_sendRawTransaction", [tx.rawTransaction]); + let rcpt: TransactionReceipt = await web3.eth.getTransactionReceipt(tx.transactionHash); + return new web3.eth.Contract(contractABI, rcpt.contractAddress); +} diff --git a/tests/util/dev-node.ts b/tests/util/dev-node.ts new file mode 100644 index 00000000000..591172a8dda --- /dev/null +++ b/tests/util/dev-node.ts @@ -0,0 +1,125 @@ +import tcpPortUsed from "tcp-port-used"; +import { spawn, ChildProcess } from "child_process"; +import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "./constants"; + +export async function findAvailablePorts() { + const availablePorts = await Promise.all( + [null, null, null].map(async (_, index) => { + let selectedPort = 0; + let port = 1024 + index * 20000 + (process.pid % 20000); + let endingPort = 65535; + while (!selectedPort && port < endingPort) { + const inUse = await tcpPortUsed.check(port, "127.0.0.1"); + if (!inUse) { + selectedPort = port; + } + port++; + } + if (!selectedPort) { + throw new Error(`No available port`); + } + return selectedPort; + }) + ); + + return { + p2pPort: availablePorts[0], + rpcPort: availablePorts[1], + wsPort: availablePorts[2], + }; +} + +// Stores if the node has already started. +// It is used when a test file contains multiple describeDevMoonbeam. Those are +// executed within the same PID and so would generate a race condition if started +// at the same time. +let nodeStarted = false; + +// This will start a moonbeam dev node, only 1 at a time (check every 100ms). +// This will prevent race condition on the findAvailablePorts which uses the PID of the process +export async function startMoonbeamDevNode(): Promise<{ + p2pPort: number; + rpcPort: number; + wsPort: number; + runningNode: ChildProcess; +}> { + while (nodeStarted) { + // Wait 100ms to see if the node is free + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); + } + nodeStarted = true; + const { p2pPort, rpcPort, wsPort } = await findAvailablePorts(); + + // console.log("Using ports", { p2pPort, rpcPort, wsPort }); + const cmd = BINARY_PATH; + const args = [ + `--execution=Native`, // Faster execution using native + `--no-telemetry`, + `--no-prometheus`, + `--dev`, + `--ethapi=txpool,debug,trace`, + `--sealing=manual`, + `-l${MOONBEAM_LOG}`, + `--port=${p2pPort}`, + `--rpc-port=${rpcPort}`, + `--ws-port=${wsPort}`, + `--tmp`, + ]; + + let runningNode: ChildProcess = null; + process.once("exit", function () { + runningNode && runningNode.kill(); + }); + process.once("SIGINT", function () { + process.exit(2); + }); + runningNode = spawn(cmd, args); + + runningNode.once("exit", () => { + nodeStarted = false; + }); + + runningNode.on("error", (err) => { + if ((err as any).errno == "ENOENT") { + console.error( + `\x1b[31mMissing Moonbeam binary ` + + `(${BINARY_PATH}).\nPlease compile the Moonbeam project\x1b[0m` + ); + } else { + console.error(err); + } + process.exit(1); + }); + + const binaryLogs = []; + await new Promise((resolve) => { + const timer = setTimeout(() => { + console.error(`\x1b[31m Failed to start Moonbeam Test Node.\x1b[0m`); + console.error(`Command: ${cmd} ${args.join(" ")}`); + console.error(`Logs:`); + console.error(binaryLogs.map((chunk) => chunk.toString()).join("\n")); + process.exit(1); + }, SPAWNING_TIME - 2000); + + const onData = async (chunk) => { + if (DISPLAY_LOG) { + console.log(chunk.toString()); + } + binaryLogs.push(chunk); + if (chunk.toString().match(/Development Service Ready/)) { + clearTimeout(timer); + if (!DISPLAY_LOG) { + runningNode.stderr.off("data", onData); + runningNode.stdout.off("data", onData); + } + resolve(); + } + }; + runningNode.stderr.on("data", onData); + runningNode.stdout.on("data", onData); + }); + + return { p2pPort, rpcPort, wsPort, runningNode }; +} diff --git a/tests/util/logging.ts b/tests/util/logging.ts new file mode 100644 index 00000000000..20f532ee73d --- /dev/null +++ b/tests/util/logging.ts @@ -0,0 +1,5 @@ +export function log(...msg: any[]) { + if (process.argv && process.argv[2] && process.argv[2] === "--printlogs") { + console.log(...msg); + } +} diff --git a/tests/util/providers.ts b/tests/util/providers.ts new file mode 100644 index 00000000000..ce4e91c0bc0 --- /dev/null +++ b/tests/util/providers.ts @@ -0,0 +1,84 @@ +import Web3 from "web3"; +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { typesBundle } from "../../moonbeam-types-bundle"; +import { JsonRpcResponse } from "web3-core-helpers"; +import { ethers } from "ethers"; +import { GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { Subscription as Web3Subscription } from "web3-core-subscriptions"; +import { BlockHeader } from "web3-eth"; +import { Log } from "web3-core"; + +export async function customWeb3Request(web3: Web3, method: string, params: any[]) { + return new Promise((resolve, reject) => { + (web3.currentProvider as any).send( + { + jsonrpc: "2.0", + id: 1, + method, + params, + }, + (error: Error | null, result?: JsonRpcResponse) => { + if (error) { + reject( + `Failed to send custom request (${method} (${params.join(",")})): ${ + error.message || error.toString() + }` + ); + } + resolve(result); + } + ); + }); +} + +// Extra type because web3 is not well typed +export interface Subscription extends Web3Subscription { + once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; +} + +// Little helper to hack web3 that are not complete. +export function web3Subscribe(web3: Web3, type: "newBlockHeaders"): Subscription; +export function web3Subscribe(web3: Web3, type: "pendingTransactions"): Subscription; +export function web3Subscribe(web3: Web3, type: "logs", params: {}): Subscription; +export function web3Subscribe( + web3: Web3, + type: "newBlockHeaders" | "pendingTransactions" | "logs", + params?: any +) { + return (web3.eth as any).subscribe(...[].slice.call(arguments, 1)); +} + +export type EnhancedWeb3 = Web3 & { + customRequest: (method: string, params: any[]) => Promise; +}; + +export const provideWeb3Api = async (port: number, protocol: "ws" | "http" = "http") => { + const web3 = + protocol == "ws" + ? new Web3(`ws://localhost:${port}`) // TODO: restore support for + : new Web3(`http://localhost:${port}`); + + // Adding genesis account for convenience + web3.eth.accounts.wallet.add(GENESIS_ACCOUNT_PRIVATE_KEY); + + // Hack to add customRequest method. + (web3 as any).customRequest = (method: string, params: any[]) => + customWeb3Request(web3, method, params); + + return web3 as EnhancedWeb3; +}; + +export const providePolkadotApi = async (port: number) => { + const provider = new WsProvider(`ws://localhost:${port}`); + return { + provider, + apiPromise: await ApiPromise.create({ + provider: provider, + typesBundle: typesBundle as any, + }), + }; +}; + +export const provideEthersApi = async (port: number) => { + return new ethers.providers.JsonRpcProvider(`http://localhost:${port}`); +}; diff --git a/tests/util/setup-dev-tests.ts b/tests/util/setup-dev-tests.ts new file mode 100644 index 00000000000..e82da4365d0 --- /dev/null +++ b/tests/util/setup-dev-tests.ts @@ -0,0 +1,114 @@ +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { JsonRpcResponse } from "web3-core-helpers"; +import { BlockHash } from "@polkadot/types/interfaces/chain"; +import { ethers } from "ethers"; +import { startMoonbeamDevNode } from "./dev-node"; +import { + provideWeb3Api, + provideEthersApi, + providePolkadotApi, + EnhancedWeb3, + customWeb3Request, +} from "./providers"; +import { ChildProcess } from "child_process"; +import { createAndFinalizeBlock } from "./block"; +import { SPAWNING_TIME } from "./constants"; + +export interface BlockCreation { + parentHash?: BlockHash; + finalize?: boolean; + transactions?: string[]; +} + +export interface DevTestContext { + createWeb3: (protocol?: "ws" | "http") => Promise; + createEthers: () => Promise; + createPolkadotApi: () => Promise; + + createBlock: ( + options?: BlockCreation + ) => Promise<{ + txResults: JsonRpcResponse[]; + block: { + duration: number; + hash: BlockHash; + }; + }>; + + // We also provided singleton providers for simplicity + web3: EnhancedWeb3; + ethers: ethers.providers.JsonRpcProvider; + polkadotApi: ApiPromise; + + moonbeamProcess: ChildProcess; +} + +interface InternalDevTestContext extends DevTestContext { + polkadotWsProviders: WsProvider[]; + + // Internal member to keep track of web3 singleton + _polkadotApi: EnhancedWeb3; +} + +export function describeDevMoonbeam(title: string, cb: (context: DevTestContext) => void) { + describe(title, function () { + // Set timeout to 5000 for all tests. + this.timeout(5000); + + // The context is initialized empty to allow passing a reference + // and to be filled once the node information is retrieved + let context: InternalDevTestContext = {} as InternalDevTestContext; + + // Making sure the Moonbeam node has started + before("Starting Moonbeam Test Node", async function () { + this.timeout(SPAWNING_TIME); + const init = await startMoonbeamDevNode(); + // Context is given prior to this assignement, so doing + // context = init.context will fail because it replace the variable; + + context.polkadotWsProviders = []; + context.moonbeamProcess = init.runningNode; + + context.createWeb3 = async (protocol: "ws" | "http" = "http") => + protocol == "ws" ? provideWeb3Api(init.wsPort, "ws") : provideWeb3Api(init.rpcPort, "http"); + context.createEthers = async () => provideEthersApi(init.rpcPort); + context.createPolkadotApi = async () => { + const { provider, apiPromise } = await providePolkadotApi(init.wsPort); + // We keep track of the polkadotWsProvider to close them at the end of the test + if (!context.polkadotWsProviders) { + context.polkadotWsProviders = []; + } + context.polkadotWsProviders.push(provider); + return apiPromise; + }; + + context.web3 = await context.createWeb3(); + context.ethers = await context.createEthers(); + context.polkadotApi = await context.createPolkadotApi(); + + context.createBlock = async (options: BlockCreation = {}) => { + let { parentHash, finalize, transactions = [] } = options; + + let txResults = await Promise.all( + transactions.map((t) => customWeb3Request(context.web3, "eth_sendRawTransaction", [t])) + ); + const block = await createAndFinalizeBlock(context.polkadotApi, parentHash, finalize); + return { + txResults, + block, + }; + }; + }); + + after(async function () { + // console.log(`\x1b[31m Killing RPC\x1b[0m`); + if (context.polkadotWsProviders) { + context.polkadotWsProviders.forEach((p) => p.disconnect()); + } + context.moonbeamProcess.kill(); + context.moonbeamProcess = null; + }); + + cb(context); + }); +} diff --git a/tests/util/transactions.ts b/tests/util/transactions.ts new file mode 100644 index 00000000000..7e87bc1e96f --- /dev/null +++ b/tests/util/transactions.ts @@ -0,0 +1,122 @@ +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import Web3 from "web3"; +import * as RLP from "rlp"; +import { getCompiled } from "./contracts"; +import { Contract } from "web3-eth-contract"; +const debug = require("debug")("test:transaction"); + +export interface TransactionOptions { + from?: string; + to?: string; + privateKey?: string; + nonce?: number; + gas?: string | number; + gasPrice?: string | number; + value?: string | number | BigInt; + data?: string; +} + +const GENESIS_TRANSACTION: TransactionOptions = { + from: GENESIS_ACCOUNT, + privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, + nonce: null, + gas: 12_000_000, + gasPrice: 1, + value: "0x00", +}; + +export const createTransaction = async ( + web3: Web3, + options: TransactionOptions +): Promise => { + const gas = options.gas || 12_000_000; + const gasPrice = options.gasPrice !== undefined ? options.gasPrice : 1; + const value = options.value !== undefined ? options.value : "0x00"; + const from = options.from || GENESIS_ACCOUNT; + const privateKey = + options.privateKey !== undefined ? options.privateKey : GENESIS_ACCOUNT_PRIVATE_KEY; + + const data = { + from, + to: options.to, + value: value && value.toString(), + gasPrice, + gas, + nonce: options.nonce, + data: options.data, + }; + debug("Sending transaction", { + ...data, + data: !data.data + ? "" + : data.data.length < 80 + ? data.data + : data.data.substr(0, 7) + "..." + data.data.substr(data.data.length - 5), + }); + const tx = await web3.eth.accounts.signTransaction(data, privateKey); + return tx.rawTransaction; +}; + +export const createTransfer = async ( + web3: Web3, + to: string, + value: number | string | BigInt, + options: TransactionOptions = GENESIS_TRANSACTION +): Promise => { + return await createTransaction(web3, { ...options, value, to }); +}; + +// Will create the transaction to deploy a contract. +// This requires to compute the nonce. It can't be used multiple times in the same block from the +// same from +export async function createContract( + web3: Web3, + contractName: string, + options: TransactionOptions = GENESIS_TRANSACTION, + contractArguments: any[] = [] +): Promise<{ rawTx: string; contract: Contract }> { + const contractCompiled = await getCompiled(contractName); + const from = options.from !== undefined ? options.from : GENESIS_ACCOUNT; + const nonce = options.nonce || (await web3.eth.getTransactionCount(from)); + const contractAddress = + "0x" + + web3.utils + .sha3(RLP.encode([from, nonce]) as any) + .slice(12) + .substring(14); + + const contract = new web3.eth.Contract(contractCompiled.contract.abi, contractAddress); + const data = contract + .deploy({ + data: contractCompiled.byteCode, + arguments: contractArguments, + }) + .encodeABI(); + + const rawTx = await createTransaction(web3, { ...options, from, nonce, data }); + + return { + rawTx, + contract, + }; +} + +// Will create the transaction to execute a contract function. +// This requires to compute the nonce. It can't be used multiple times in the same block from the +// same from +export async function createContractExecution( + web3: Web3, + execution: { + contract: Contract; + contractCall: any; + }, + options: TransactionOptions = GENESIS_TRANSACTION +) { + const tx = await createTransaction(web3, { + ...options, + to: execution.contract.options.address, + data: execution.contractCall.encodeABI(), + }); + + return tx; +} From 339bbf6d5f447f31067977ce454c7b3718503fd2 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 19 Apr 2021 05:05:25 +0000 Subject: [PATCH 47/49] Fix formatting --- tests/contracts/compiled/Bn128Addition.json | 2077 ++++++++- tests/contracts/compiled/Bn128Multiply.json | 2060 ++++++++- tests/contracts/compiled/Bn128Pairing.json | 2040 ++++++++- tests/contracts/compiled/FailContract.json | 177 +- .../compiled/FiniteLoopContract.json | 2129 +++++++++- tests/contracts/compiled/HashRipmd160.json | 1351 +++++- .../contracts/compiled/InfiniteContract.json | 773 +++- .../compiled/InfiniteContractVar.json | 1430 ++++++- tests/contracts/compiled/ModularCheck.json | 2207 +++++++++- .../compiled/SingleEventContract.json | 201 +- tests/contracts/compiled/TestContract.json | 1953 ++++++++- .../contracts/compiled/TestContractIncr.json | 1390 +++++- tests/contracts/compiled/TraceFilter.json | 3711 ++++++++++++++++- tests/util/constants.ts | 67 +- tests/util/contracts.ts | 149 +- tests/util/dev-node.ts | 250 +- tests/util/providers.ts | 168 +- tests/util/setup-dev-tests.ts | 228 +- 18 files changed, 21917 insertions(+), 444 deletions(-) diff --git a/tests/contracts/compiled/Bn128Addition.json b/tests/contracts/compiled/Bn128Addition.json index 6952bfc6b6b..9f13f5f80c6 100644 --- a/tests/contracts/compiled/Bn128Addition.json +++ b/tests/contracts/compiled/Bn128Addition.json @@ -1 +1,2076 @@ -{"byteCode":"0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1320 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[4] memory input */\n dup1\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":164:230 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703 */\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":248:314 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915 */\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":332:398 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9 */\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":416:482 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 */\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":510:534 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":915:917 64 */\n 0x40\n /* \"main.sol\":907:913 result */\n dup2\n /* \"main.sol\":902:905 128 */\n 0x80\n /* \"main.sol\":895:900 input */\n dup5\n /* \"main.sol\":892:893 0 */\n 0x00\n /* \"main.sol\":886:890 0x06 */\n 0x06\n /* \"main.sol\":882:883 0 */\n 0x00\n /* \"main.sol\":878:884 not(0) */\n not\n /* \"main.sol\":873:918 call(not(0), 0x06, 0, input, 128, result, 64) */\n call\n /* \"main.sol\":862:918 success := call(not(0), 0x06, 0, input, 128, result, 64) */\n swap3\n pop\n /* \"main.sol\":953:960 success */\n dup3\n /* \"main.sol\":945:995 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1063:1129 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7 */\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7\n /* \"main.sol\":1034:1040 result */\n dup2\n /* \"main.sol\":1041:1042 0 */\n 0x00\n /* \"main.sol\":1034:1043 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1034:1129 result[0] ==... */\n eq\n /* \"main.sol\":1009:1152 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1220:1286 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204 */\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204\n /* \"main.sol\":1191:1197 result */\n dup2\n /* \"main.sol\":1198:1199 1 */\n 0x01\n /* \"main.sol\":1191:1200 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1191:1286 result[1] ==... */\n eq\n /* \"main.sol\":1166:1309 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1320 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2120:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:220:1","statements":[{"nodeType":"YulAssignment","src":"163:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:2:1","type":"","value":"30"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"335:3:1"}],"functionName":{"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulIdentifier","src":"246:88:1"},"nodeType":"YulFunctionCall","src":"246:93:1"},"nodeType":"YulExpressionStatement","src":"246:93:1"},{"nodeType":"YulAssignment","src":"348:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"359:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"355:3:1"},"nodeType":"YulFunctionCall","src":"355:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"348:3:1"}]}]},"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:366:1"},{"body":{"nodeType":"YulBlock","src":"525:219:1","statements":[{"nodeType":"YulAssignment","src":"535:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"601:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"606:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"542:58:1"},"nodeType":"YulFunctionCall","src":"542:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"535:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"513:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"521:3:1","type":""}],"src":"379:365:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:74:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:32:1","type":"","value":"elliptic curve addition failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:56:1"},"nodeType":"YulExpressionStatement","src":"1892:56:1"}]},"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:180:1"},{"body":{"nodeType":"YulBlock","src":"2067:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2089:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2097:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:1"},"nodeType":"YulFunctionCall","src":"2085:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2101:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2078:6:1"},"nodeType":"YulFunctionCall","src":"2078:32:1"},"nodeType":"YulExpressionStatement","src":"2078:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2059:6:1","type":""}],"src":"1961:156:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0xBF PUSH2 0x257 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x10F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x106 SWAP1 PUSH2 0x2BF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x16A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x1AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A6 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x20A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x246 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x286 PUSH1 0x1E DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x291 DUP3 PUSH2 0x310 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A9 PUSH1 0x6 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x2B4 DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D8 DUP2 PUSH2 0x279 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2F8 DUP2 PUSH2 0x29C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x370 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1292:0:-:0;;;66:1254;;;;;;;;;;94:12;120:23;:376;;;;;;;;164:66;120:376;;;;248:66;120:376;;;;332:66;120:376;;;;416:66;120:376;;;;;510:24;;:::i;:::-;915:2;907:6;902:3;895:5;892:1;886:4;882:1;878:6;873:45;862:56;;953:7;945:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1063:66;1034:6;1041:1;1034:9;;;;;;;;;;;;;;;;;;;:95;1009:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1220:66;1191:6;1198:1;1191:9;;;;;;;;;;;;;;;;;;;:95;1166:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1254;;;34:1292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1292:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1292:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":66,"end":1320,"name":"CALLVALUE","source":0},{"begin":66,"end":1320,"name":"DUP1","source":0},{"begin":66,"end":1320,"name":"ISZERO","source":0},{"begin":66,"end":1320,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1320,"name":"JUMPI","source":0},{"begin":66,"end":1320,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1320,"name":"DUP1","source":0},{"begin":66,"end":1320,"name":"REVERT","source":0},{"begin":66,"end":1320,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1320,"name":"JUMPDEST","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":94,"end":106,"name":"PUSH","source":0,"value":"0"},{"begin":120,"end":143,"name":"DUP1","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":496,"name":"MLOAD","source":0},{"begin":120,"end":496,"name":"DUP1","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"80"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"DUP1","source":0},{"begin":164,"end":230,"name":"PUSH","source":0,"value":"2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":248,"end":314,"name":"PUSH","source":0,"value":"301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":332,"end":398,"name":"PUSH","source":0,"value":"18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":496,"name":"ADD","source":0},{"begin":416,"end":482,"name":"PUSH","source":0,"value":"63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266"},{"begin":120,"end":496,"name":"DUP2","source":0},{"begin":120,"end":496,"name":"MSTORE","source":0},{"begin":120,"end":496,"name":"POP","source":0},{"begin":120,"end":496,"name":"SWAP1","source":0},{"begin":120,"end":496,"name":"POP","source":0},{"begin":510,"end":534,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":510,"end":534,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":510,"end":534,"name":"JUMP","source":0,"value":"[in]"},{"begin":510,"end":534,"name":"tag","source":0,"value":"4"},{"begin":510,"end":534,"name":"JUMPDEST","source":0},{"begin":915,"end":917,"name":"PUSH","source":0,"value":"40"},{"begin":907,"end":913,"name":"DUP2","source":0},{"begin":902,"end":905,"name":"PUSH","source":0,"value":"80"},{"begin":895,"end":900,"name":"DUP5","source":0},{"begin":892,"end":893,"name":"PUSH","source":0,"value":"0"},{"begin":886,"end":890,"name":"PUSH","source":0,"value":"6"},{"begin":882,"end":883,"name":"PUSH","source":0,"value":"0"},{"begin":878,"end":884,"name":"NOT","source":0},{"begin":873,"end":918,"name":"CALL","source":0},{"begin":862,"end":918,"name":"SWAP3","source":0},{"begin":862,"end":918,"name":"POP","source":0},{"begin":953,"end":960,"name":"DUP3","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":945,"end":995,"name":"JUMPI","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"40"},{"begin":945,"end":995,"name":"MLOAD","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":945,"end":995,"name":"DUP2","source":0},{"begin":945,"end":995,"name":"MSTORE","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"4"},{"begin":945,"end":995,"name":"ADD","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":945,"end":995,"name":"SWAP1","source":0},{"begin":945,"end":995,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":945,"end":995,"name":"JUMP","source":0,"value":"[in]"},{"begin":945,"end":995,"name":"tag","source":0,"value":"7"},{"begin":945,"end":995,"name":"JUMPDEST","source":0},{"begin":945,"end":995,"name":"PUSH","source":0,"value":"40"},{"begin":945,"end":995,"name":"MLOAD","source":0},{"begin":945,"end":995,"name":"DUP1","source":0},{"begin":945,"end":995,"name":"SWAP2","source":0},{"begin":945,"end":995,"name":"SUB","source":0},{"begin":945,"end":995,"name":"SWAP1","source":0},{"begin":945,"end":995,"name":"REVERT","source":0},{"begin":945,"end":995,"name":"tag","source":0,"value":"6"},{"begin":945,"end":995,"name":"JUMPDEST","source":0},{"begin":1063,"end":1129,"name":"PUSH","source":0,"value":"2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7"},{"begin":1034,"end":1040,"name":"DUP2","source":0},{"begin":1041,"end":1042,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"2"},{"begin":1034,"end":1043,"name":"DUP2","source":0},{"begin":1034,"end":1043,"name":"LT","source":0},{"begin":1034,"end":1043,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":1034,"end":1043,"name":"JUMPI","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"MSTORE","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"32"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"4"},{"begin":1034,"end":1043,"name":"MSTORE","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"24"},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"0"},{"begin":1034,"end":1043,"name":"REVERT","source":0},{"begin":1034,"end":1043,"name":"tag","source":0,"value":"9"},{"begin":1034,"end":1043,"name":"JUMPDEST","source":0},{"begin":1034,"end":1043,"name":"PUSH","source":0,"value":"20"},{"begin":1034,"end":1043,"name":"MUL","source":0},{"begin":1034,"end":1043,"name":"ADD","source":0},{"begin":1034,"end":1043,"name":"MLOAD","source":0},{"begin":1034,"end":1129,"name":"EQ","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":1009,"end":1152,"name":"JUMPI","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"40"},{"begin":1009,"end":1152,"name":"MLOAD","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1009,"end":1152,"name":"DUP2","source":0},{"begin":1009,"end":1152,"name":"MSTORE","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"4"},{"begin":1009,"end":1152,"name":"ADD","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1009,"end":1152,"name":"SWAP1","source":0},{"begin":1009,"end":1152,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1009,"end":1152,"name":"JUMP","source":0,"value":"[in]"},{"begin":1009,"end":1152,"name":"tag","source":0,"value":"11"},{"begin":1009,"end":1152,"name":"JUMPDEST","source":0},{"begin":1009,"end":1152,"name":"PUSH","source":0,"value":"40"},{"begin":1009,"end":1152,"name":"MLOAD","source":0},{"begin":1009,"end":1152,"name":"DUP1","source":0},{"begin":1009,"end":1152,"name":"SWAP2","source":0},{"begin":1009,"end":1152,"name":"SUB","source":0},{"begin":1009,"end":1152,"name":"SWAP1","source":0},{"begin":1009,"end":1152,"name":"REVERT","source":0},{"begin":1009,"end":1152,"name":"tag","source":0,"value":"10"},{"begin":1009,"end":1152,"name":"JUMPDEST","source":0},{"begin":1220,"end":1286,"name":"PUSH","source":0,"value":"21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204"},{"begin":1191,"end":1197,"name":"DUP2","source":0},{"begin":1198,"end":1199,"name":"PUSH","source":0,"value":"1"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"2"},{"begin":1191,"end":1200,"name":"DUP2","source":0},{"begin":1191,"end":1200,"name":"LT","source":0},{"begin":1191,"end":1200,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":1191,"end":1200,"name":"JUMPI","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"0"},{"begin":1191,"end":1200,"name":"MSTORE","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"32"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"4"},{"begin":1191,"end":1200,"name":"MSTORE","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"24"},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"0"},{"begin":1191,"end":1200,"name":"REVERT","source":0},{"begin":1191,"end":1200,"name":"tag","source":0,"value":"13"},{"begin":1191,"end":1200,"name":"JUMPDEST","source":0},{"begin":1191,"end":1200,"name":"PUSH","source":0,"value":"20"},{"begin":1191,"end":1200,"name":"MUL","source":0},{"begin":1191,"end":1200,"name":"ADD","source":0},{"begin":1191,"end":1200,"name":"MLOAD","source":0},{"begin":1191,"end":1286,"name":"EQ","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":1166,"end":1309,"name":"JUMPI","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"40"},{"begin":1166,"end":1309,"name":"MLOAD","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1166,"end":1309,"name":"DUP2","source":0},{"begin":1166,"end":1309,"name":"MSTORE","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"4"},{"begin":1166,"end":1309,"name":"ADD","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":1166,"end":1309,"name":"SWAP1","source":0},{"begin":1166,"end":1309,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1166,"end":1309,"name":"JUMP","source":0,"value":"[in]"},{"begin":1166,"end":1309,"name":"tag","source":0,"value":"15"},{"begin":1166,"end":1309,"name":"JUMPDEST","source":0},{"begin":1166,"end":1309,"name":"PUSH","source":0,"value":"40"},{"begin":1166,"end":1309,"name":"MLOAD","source":0},{"begin":1166,"end":1309,"name":"DUP1","source":0},{"begin":1166,"end":1309,"name":"SWAP2","source":0},{"begin":1166,"end":1309,"name":"SUB","source":0},{"begin":1166,"end":1309,"name":"SWAP1","source":0},{"begin":1166,"end":1309,"name":"REVERT","source":0},{"begin":1166,"end":1309,"name":"tag","source":0,"value":"14"},{"begin":1166,"end":1309,"name":"JUMPDEST","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":66,"end":1320,"name":"POP","source":0},{"begin":34,"end":1326,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":34,"end":1326,"name":"JUMP","source":0},{"begin":34,"end":1326,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1326,"name":"JUMPDEST","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MLOAD","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"ADD","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"2"},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1326,"name":"DUP3","source":0},{"begin":34,"end":1326,"name":"MUL","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1326,"name":"DUP4","source":0},{"begin":34,"end":1326,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"DUP3","source":0},{"begin":34,"end":1326,"name":"ADD","source":0},{"begin":34,"end":1326,"name":"SWAP2","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"POP","source":0},{"begin":34,"end":1326,"name":"SWAP1","source":0},{"begin":34,"end":1326,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":373,"name":"tag","source":1,"value":"18"},{"begin":7,"end":373,"name":"JUMPDEST","source":1},{"begin":7,"end":373,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":234,"end":236,"name":"PUSH","source":1,"value":"1E"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":170,"end":237,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":237,"name":"tag","source":1,"value":"20"},{"begin":170,"end":237,"name":"JUMPDEST","source":1},{"begin":163,"end":237,"name":"SWAP2","source":1},{"begin":163,"end":237,"name":"POP","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":335,"end":338,"name":"DUP3","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":246,"end":339,"name":"JUMP","source":1,"value":"[in]"},{"begin":246,"end":339,"name":"tag","source":1,"value":"22"},{"begin":246,"end":339,"name":"JUMPDEST","source":1},{"begin":364,"end":366,"name":"PUSH","source":1,"value":"20"},{"begin":359,"end":362,"name":"DUP3","source":1},{"begin":355,"end":367,"name":"ADD","source":1},{"begin":348,"end":367,"name":"SWAP1","source":1},{"begin":348,"end":367,"name":"POP","source":1},{"begin":153,"end":373,"name":"SWAP2","source":1},{"begin":153,"end":373,"name":"SWAP1","source":1},{"begin":153,"end":373,"name":"POP","source":1},{"begin":153,"end":373,"name":"JUMP","source":1,"value":"[out]"},{"begin":379,"end":744,"name":"tag","source":1,"value":"24"},{"begin":379,"end":744,"name":"JUMPDEST","source":1},{"begin":379,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":606,"end":607,"name":"PUSH","source":1,"value":"6"},{"begin":601,"end":604,"name":"DUP4","source":1},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":542,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":542,"end":608,"name":"tag","source":1,"value":"26"},{"begin":542,"end":608,"name":"JUMPDEST","source":1},{"begin":535,"end":608,"name":"SWAP2","source":1},{"begin":535,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"27"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":525,"end":744,"name":"SWAP2","source":1},{"begin":525,"end":744,"name":"SWAP1","source":1},{"begin":525,"end":744,"name":"POP","source":1},{"begin":525,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"8"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"30"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"12"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"32"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"21"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1955,"name":"tag","source":1,"value":"23"},{"begin":1775,"end":1955,"name":"JUMPDEST","source":1},{"begin":1915,"end":1947,"name":"PUSH","source":1,"value":"656C6C6970746963206375727665206164646974696F6E206661696C65640000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1948,"name":"MSTORE","source":1},{"begin":1881,"end":1955,"name":"POP","source":1},{"begin":1881,"end":1955,"name":"JUMP","source":1,"value":"[out]"},{"begin":1961,"end":2117,"name":"tag","source":1,"value":"28"},{"begin":1961,"end":2117,"name":"JUMPDEST","source":1},{"begin":2101,"end":2109,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":2097,"end":2098,"name":"PUSH","source":1,"value":"0"},{"begin":2089,"end":2095,"name":"DUP3","source":1},{"begin":2085,"end":2099,"name":"ADD","source":1},{"begin":2078,"end":2110,"name":"MSTORE","source":1},{"begin":2067,"end":2117,"name":"POP","source":1},{"begin":2067,"end":2117,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1326,"name":"tag","source":0,"value":"16"},{"begin":34,"end":1326,"name":"JUMPDEST","source":0},{"begin":34,"end":1326,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"CODECOPY","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033",".code":[{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1326,"name":"MSTORE","source":0},{"begin":34,"end":1326,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1326,"name":"DUP1","source":0},{"begin":34,"end":1326,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Addition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa69c6a43cafc5dee64bc54ce2a53939c8a8e4f352073e190d2d966c2776ce646\",\"urls\":[\"bzz-raw://5349651b4604d8e14aefaefb5c3dd7cc9f18250cc2e405afb196f1d932cfc602\",\"dweb:/ipfs/QmRqKv4ehqib45LwVT7EQZfm6vn7zjk8AwJiSDNL1ubhtb\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Addition{\n constructor() {\n bool success;\n uint256[4] memory input = [\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x06 id of the bn256Add precompile\n // 0 number of ether to transfer\n // 128 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x06, 0, input, 128, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,\n \"failed\");\n require(\n result[1] ==\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,\n \"failed\");\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1320 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[4] memory input */\n dup1\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":164:230 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703 */\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":248:314 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915 */\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":332:398 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9 */\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":416:482 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 */\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":510:534 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":915:917 64 */\n 0x40\n /* \"main.sol\":907:913 result */\n dup2\n /* \"main.sol\":902:905 128 */\n 0x80\n /* \"main.sol\":895:900 input */\n dup5\n /* \"main.sol\":892:893 0 */\n 0x00\n /* \"main.sol\":886:890 0x06 */\n 0x06\n /* \"main.sol\":882:883 0 */\n 0x00\n /* \"main.sol\":878:884 not(0) */\n not\n /* \"main.sol\":873:918 call(not(0), 0x06, 0, input, 128, result, 64) */\n call\n /* \"main.sol\":862:918 success := call(not(0), 0x06, 0, input, 128, result, 64) */\n swap3\n pop\n /* \"main.sol\":953:960 success */\n dup3\n /* \"main.sol\":945:995 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1063:1129 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7 */\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7\n /* \"main.sol\":1034:1040 result */\n dup2\n /* \"main.sol\":1041:1042 0 */\n 0x00\n /* \"main.sol\":1034:1043 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1034:1129 result[0] ==... */\n eq\n /* \"main.sol\":1009:1152 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1220:1286 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204 */\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204\n /* \"main.sol\":1191:1197 result */\n dup2\n /* \"main.sol\":1198:1199 1 */\n 0x01\n /* \"main.sol\":1191:1200 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1191:1286 result[1] ==... */\n eq\n /* \"main.sol\":1166:1309 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1320 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2120:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "153:220:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "163:74:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "229:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "234:2:1", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "170:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "170:67:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "163:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "335:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulIdentifier", + "src": "246:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "246:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "246:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "348:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "359:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "364:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "355:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "355:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "348:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "141:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "149:3:1", + "type": "" + } + ], + "src": "7:366:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "525:219:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "535:73:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "601:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "606:1:1", + "type": "", + "value": "6" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "542:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "542:66:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "535:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "706:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulIdentifier", + "src": "617:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "617:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "617:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "719:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "730:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "735:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "726:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "726:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "719:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "513:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "521:3:1", + "type": "" + } + ], + "src": "379:365:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "921:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "931:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "943:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "954:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "939:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "939:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "931:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "978:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "989:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "974:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "974:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "997:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1003:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "993:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "993:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "967:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "967:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "967:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1023:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1157:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1031:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1031:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1023:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "901:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "916:4:1", + "type": "" + } + ], + "src": "750:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1346:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1356:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1368:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1379:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1364:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1364:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1356:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1403:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1414:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1399:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1399:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1422:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1428:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1418:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1418:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1392:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1392:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1392:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1448:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1582:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1456:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1456:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1448:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1326:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1341:4:1", + "type": "" + } + ], + "src": "1175:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1696:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1713:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1718:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1706:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1706:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1706:19:1" + }, + { + "nodeType": "YulAssignment", + "src": "1734:29:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1753:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1758:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1749:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1749:14:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "1734:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1668:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "1673:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "1684:11:1", + "type": "" + } + ], + "src": "1600:169:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1881:74:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1903:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1911:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1899:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1899:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "1915:32:1", + "type": "", + "value": "elliptic curve addition failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1892:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1892:56:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1892:56:1" + } + ] + }, + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1873:6:1", + "type": "" + } + ], + "src": "1775:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2067:50:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2089:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2097:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2085:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2085:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "2101:8:1", + "type": "", + "value": "failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2078:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2078:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2078:32:1" + } + ] + }, + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2059:6:1", + "type": "" + } + ], + "src": "1961:156:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0xBF PUSH2 0x257 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x10F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x106 SWAP1 PUSH2 0x2BF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x16A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x1AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A6 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x20A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x246 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x286 PUSH1 0x1E DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x291 DUP3 PUSH2 0x310 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A9 PUSH1 0x6 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x2B4 DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D8 DUP2 PUSH2 0x279 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2F8 DUP2 PUSH2 0x29C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x370 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1292:0:-:0;;;66:1254;;;;;;;;;;94:12;120:23;:376;;;;;;;;164:66;120:376;;;;248:66;120:376;;;;332:66;120:376;;;;416:66;120:376;;;;;510:24;;:::i;:::-;915:2;907:6;902:3;895:5;892:1;886:4;882:1;878:6;873:45;862:56;;953:7;945:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1063:66;1034:6;1041:1;1034:9;;;;;;;;;;;;;;;;;;;:95;1009:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1220:66;1191:6;1198:1;1191:9;;;;;;;;;;;;;;;;;;;:95;1166:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1254;;;34:1292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1292:0:-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1292:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "infinite", + "totalCost": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, + { "begin": 66, "end": 1320, "name": "CALLVALUE", "source": 0 }, + { "begin": 66, "end": 1320, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1320, "name": "ISZERO", "source": 0 }, + { + "begin": 66, + "end": 1320, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1320, "name": "JUMPI", "source": 0 }, + { + "begin": 66, + "end": 1320, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 66, "end": 1320, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1320, "name": "REVERT", "source": 0 }, + { + "begin": 66, + "end": 1320, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1320, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 106, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 120, "end": 143, "name": "DUP1", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 120, "end": 496, "name": "MLOAD", "source": 0 }, + { "begin": 120, "end": 496, "name": "DUP1", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, + { "begin": 120, "end": 496, "name": "DUP1", "source": 0 }, + { + "begin": 164, + "end": 230, + "name": "PUSH", + "source": 0, + "value": "2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703" + }, + { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, + { + "begin": 248, + "end": 314, + "name": "PUSH", + "source": 0, + "value": "301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915" + }, + { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, + { + "begin": 332, + "end": 398, + "name": "PUSH", + "source": 0, + "value": "18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9" + }, + { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, + { + "begin": 120, + "end": 496, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, + { + "begin": 416, + "end": 482, + "name": "PUSH", + "source": 0, + "value": "63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266" + }, + { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, + { "begin": 120, "end": 496, "name": "POP", "source": 0 }, + { "begin": 120, "end": 496, "name": "SWAP1", "source": 0 }, + { "begin": 120, "end": 496, "name": "POP", "source": 0 }, + { + "begin": 510, + "end": 534, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 510, + "end": 534, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 510, + "end": 534, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 510, + "end": 534, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 510, "end": 534, "name": "JUMPDEST", "source": 0 }, + { + "begin": 915, + "end": 917, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 907, "end": 913, "name": "DUP2", "source": 0 }, + { + "begin": 902, + "end": 905, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 895, "end": 900, "name": "DUP5", "source": 0 }, + { + "begin": 892, + "end": 893, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 886, + "end": 890, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { + "begin": 882, + "end": 883, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 878, "end": 884, "name": "NOT", "source": 0 }, + { "begin": 873, "end": 918, "name": "CALL", "source": 0 }, + { "begin": 862, "end": 918, "name": "SWAP3", "source": 0 }, + { "begin": 862, "end": 918, "name": "POP", "source": 0 }, + { "begin": 953, "end": 960, "name": "DUP3", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 945, "end": 995, "name": "JUMPI", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 945, "end": 995, "name": "MLOAD", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 945, "end": 995, "name": "DUP2", "source": 0 }, + { "begin": 945, "end": 995, "name": "MSTORE", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 945, "end": 995, "name": "ADD", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 945, "end": 995, "name": "SWAP1", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 945, + "end": 995, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 945, + "end": 995, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 945, "end": 995, "name": "JUMPDEST", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 945, "end": 995, "name": "MLOAD", "source": 0 }, + { "begin": 945, "end": 995, "name": "DUP1", "source": 0 }, + { "begin": 945, "end": 995, "name": "SWAP2", "source": 0 }, + { "begin": 945, "end": 995, "name": "SUB", "source": 0 }, + { "begin": 945, "end": 995, "name": "SWAP1", "source": 0 }, + { "begin": 945, "end": 995, "name": "REVERT", "source": 0 }, + { + "begin": 945, + "end": 995, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 945, "end": 995, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1063, + "end": 1129, + "name": "PUSH", + "source": 0, + "value": "2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7" + }, + { "begin": 1034, "end": 1040, "name": "DUP2", "source": 0 }, + { + "begin": 1041, + "end": 1042, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1034, "end": 1043, "name": "DUP2", "source": 0 }, + { "begin": 1034, "end": 1043, "name": "LT", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 1034, "end": 1043, "name": "JUMPI", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1034, "end": 1043, "name": "MSTORE", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "32" + }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1034, "end": 1043, "name": "MSTORE", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "24" + }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1034, "end": 1043, "name": "REVERT", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1034, "end": 1043, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1034, + "end": 1043, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1034, "end": 1043, "name": "MUL", "source": 0 }, + { "begin": 1034, "end": 1043, "name": "ADD", "source": 0 }, + { "begin": 1034, "end": 1043, "name": "MLOAD", "source": 0 }, + { "begin": 1034, "end": 1129, "name": "EQ", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 1009, "end": 1152, "name": "JUMPI", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1009, "end": 1152, "name": "MLOAD", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1009, "end": 1152, "name": "DUP2", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "MSTORE", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1009, "end": 1152, "name": "ADD", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1009, "end": 1152, "name": "SWAP1", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1009, + "end": 1152, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1009, + "end": 1152, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1009, "end": 1152, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1009, "end": 1152, "name": "MLOAD", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "DUP1", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "SWAP2", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "SUB", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "SWAP1", "source": 0 }, + { "begin": 1009, "end": 1152, "name": "REVERT", "source": 0 }, + { + "begin": 1009, + "end": 1152, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 1009, "end": 1152, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1220, + "end": 1286, + "name": "PUSH", + "source": 0, + "value": "21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204" + }, + { "begin": 1191, "end": 1197, "name": "DUP2", "source": 0 }, + { + "begin": 1198, + "end": 1199, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1191, "end": 1200, "name": "DUP2", "source": 0 }, + { "begin": 1191, "end": 1200, "name": "LT", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 1191, "end": 1200, "name": "JUMPI", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1191, "end": 1200, "name": "MSTORE", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "32" + }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1191, "end": 1200, "name": "MSTORE", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "24" + }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1191, "end": 1200, "name": "REVERT", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 1191, "end": 1200, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1191, + "end": 1200, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1191, "end": 1200, "name": "MUL", "source": 0 }, + { "begin": 1191, "end": 1200, "name": "ADD", "source": 0 }, + { "begin": 1191, "end": 1200, "name": "MLOAD", "source": 0 }, + { "begin": 1191, "end": 1286, "name": "EQ", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 1166, "end": 1309, "name": "JUMPI", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1166, "end": 1309, "name": "MLOAD", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1166, "end": 1309, "name": "DUP2", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "MSTORE", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1166, "end": 1309, "name": "ADD", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 1166, "end": 1309, "name": "SWAP1", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1166, + "end": 1309, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1166, + "end": 1309, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 1166, "end": 1309, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1166, "end": 1309, "name": "MLOAD", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "DUP1", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "SWAP2", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "SUB", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "SWAP1", "source": 0 }, + { "begin": 1166, "end": 1309, "name": "REVERT", "source": 0 }, + { + "begin": 1166, + "end": 1309, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 1166, "end": 1309, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 34, "end": 1326, "name": "JUMP", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 34, "end": 1326, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1326, "name": "MLOAD", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1326, "name": "ADD", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 34, "end": 1326, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1326, "name": "MUL", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1326, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP4", "source": 0 }, + { "begin": 34, "end": 1326, "name": "CALLDATACOPY", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1326, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1326, "name": "ADD", "source": 0 }, + { "begin": 34, "end": 1326, "name": "SWAP2", "source": 0 }, + { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, + { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { "begin": 7, "end": 373, "name": "tag", "source": 1, "value": "18" }, + { "begin": 7, "end": 373, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 373, "name": "PUSH", "source": 1, "value": "0" }, + { + "begin": 170, + "end": 237, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 234, + "end": 236, + "name": "PUSH", + "source": 1, + "value": "1E" + }, + { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, + { + "begin": 170, + "end": 237, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 170, + "end": 237, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 170, + "end": 237, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 170, "end": 237, "name": "JUMPDEST", "source": 1 }, + { "begin": 163, "end": 237, "name": "SWAP2", "source": 1 }, + { "begin": 163, "end": 237, "name": "POP", "source": 1 }, + { + "begin": 246, + "end": 339, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 335, "end": 338, "name": "DUP3", "source": 1 }, + { + "begin": 246, + "end": 339, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 246, + "end": 339, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 246, + "end": 339, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 246, "end": 339, "name": "JUMPDEST", "source": 1 }, + { + "begin": 364, + "end": 366, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 359, "end": 362, "name": "DUP3", "source": 1 }, + { "begin": 355, "end": 367, "name": "ADD", "source": 1 }, + { "begin": 348, "end": 367, "name": "SWAP1", "source": 1 }, + { "begin": 348, "end": 367, "name": "POP", "source": 1 }, + { "begin": 153, "end": 373, "name": "SWAP2", "source": 1 }, + { "begin": 153, "end": 373, "name": "SWAP1", "source": 1 }, + { "begin": 153, "end": 373, "name": "POP", "source": 1 }, + { + "begin": 153, + "end": 373, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 379, + "end": 744, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 379, "end": 744, "name": "JUMPDEST", "source": 1 }, + { + "begin": 379, + "end": 744, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 542, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 606, + "end": 607, + "name": "PUSH", + "source": 1, + "value": "6" + }, + { "begin": 601, "end": 604, "name": "DUP4", "source": 1 }, + { + "begin": 542, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 542, + "end": 608, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 542, + "end": 608, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 542, "end": 608, "name": "JUMPDEST", "source": 1 }, + { "begin": 535, "end": 608, "name": "SWAP2", "source": 1 }, + { "begin": 535, "end": 608, "name": "POP", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 617, + "end": 710, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 617, + "end": 710, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, + { + "begin": 735, + "end": 737, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, + { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, + { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, + { "begin": 719, "end": 738, "name": "POP", "source": 1 }, + { "begin": 525, "end": 744, "name": "SWAP2", "source": 1 }, + { "begin": 525, "end": 744, "name": "SWAP1", "source": 1 }, + { "begin": 525, "end": 744, "name": "POP", "source": 1 }, + { + "begin": 525, + "end": 744, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 750, + "end": 1169, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, + { + "begin": 750, + "end": 1169, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 954, + "end": 956, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, + { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, + { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, + { "begin": 931, "end": 957, "name": "POP", "source": 1 }, + { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, + { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, + { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, + { + "begin": 989, + "end": 990, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, + { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, + { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 1031, + "end": 1162, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1031, + "end": 1162, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, + { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, + { + "begin": 921, + "end": 1169, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1175, + "end": 1594, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1175, + "end": 1594, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1379, + "end": 1381, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, + { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, + { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, + { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, + { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, + { + "begin": 1414, + "end": 1415, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, + { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, + { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 1456, + "end": 1587, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1456, + "end": 1587, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, + { + "begin": 1346, + "end": 1594, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1600, + "end": 1769, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1600, + "end": 1769, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, + { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, + { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, + { + "begin": 1758, + "end": 1762, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, + { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { + "begin": 1696, + "end": 1769, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1775, + "end": 1955, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 1775, "end": 1955, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1915, + "end": 1947, + "name": "PUSH", + "source": 1, + "value": "656C6C6970746963206375727665206164646974696F6E206661696C65640000" + }, + { + "begin": 1911, + "end": 1912, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, + { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, + { "begin": 1892, "end": 1948, "name": "MSTORE", "source": 1 }, + { "begin": 1881, "end": 1955, "name": "POP", "source": 1 }, + { + "begin": 1881, + "end": 1955, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1961, + "end": 2117, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 1961, "end": 2117, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2101, + "end": 2109, + "name": "PUSH", + "source": 1, + "value": "6661696C65640000000000000000000000000000000000000000000000000000" + }, + { + "begin": 2097, + "end": 2098, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2089, "end": 2095, "name": "DUP3", "source": 1 }, + { "begin": 2085, "end": 2099, "name": "ADD", "source": 1 }, + { "begin": 2078, "end": 2110, "name": "MSTORE", "source": 1 }, + { "begin": 2067, "end": 2117, "name": "POP", "source": 1 }, + { + "begin": 2067, + "end": 2117, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 34, + "end": 1326, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 34, "end": 1326, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1326, "name": "CODECOPY", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1326, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", + ".code": [ + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, + { + "begin": 34, + "end": 1326, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1326, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Addition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa69c6a43cafc5dee64bc54ce2a53939c8a8e4f352073e190d2d966c2776ce646\",\"urls\":[\"bzz-raw://5349651b4604d8e14aefaefb5c3dd7cc9f18250cc2e405afb196f1d932cfc602\",\"dweb:/ipfs/QmRqKv4ehqib45LwVT7EQZfm6vn7zjk8AwJiSDNL1ubhtb\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Addition{\n constructor() {\n bool success;\n uint256[4] memory input = [\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x06 id of the bn256Add precompile\n // 0 number of ether to transfer\n // 128 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x06, 0, input, 128, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,\n \"failed\");\n require(\n result[1] ==\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,\n \"failed\");\n }\n }" +} diff --git a/tests/contracts/compiled/Bn128Multiply.json b/tests/contracts/compiled/Bn128Multiply.json index f3ff57863ae..23cee13b640 100644 --- a/tests/contracts/compiled/Bn128Multiply.json +++ b/tests/contracts/compiled/Bn128Multiply.json @@ -1 +1,2059 @@ -{"byteCode":"0x608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1223 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[3] memory input */\n dup1\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n mload(0x40)\n dup1\n 0x60\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":160:226 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":240:306 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6 */\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":320:386 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 */\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":414:438 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":818:820 64 */\n 0x40\n /* \"main.sol\":810:816 result */\n dup2\n /* \"main.sol\":806:808 96 */\n 0x60\n /* \"main.sol\":799:804 input */\n dup5\n /* \"main.sol\":796:797 0 */\n 0x00\n /* \"main.sol\":790:794 0x07 */\n 0x07\n /* \"main.sol\":786:787 0 */\n 0x00\n /* \"main.sol\":782:788 not(0) */\n not\n /* \"main.sol\":777:821 call(not(0), 0x07, 0, input, 96, result, 64) */\n call\n /* \"main.sol\":766:821 success := call(not(0), 0x07, 0, input, 96, result, 64) */\n swap3\n pop\n /* \"main.sol\":856:863 success */\n dup3\n /* \"main.sol\":848:898 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":966:1032 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":937:943 result */\n dup2\n /* \"main.sol\":944:945 0 */\n 0x00\n /* \"main.sol\":937:946 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":937:1032 result[0] ==... */\n eq\n /* \"main.sol\":912:1055 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1123:1189 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451 */\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451\n /* \"main.sol\":1094:1100 result */\n dup2\n /* \"main.sol\":1101:1102 1 */\n 0x01\n /* \"main.sol\":1094:1103 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1094:1189 result[1] ==... */\n eq\n /* \"main.sol\":1069:1212 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1223 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2120:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:220:1","statements":[{"nodeType":"YulAssignment","src":"163:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:2:1","type":"","value":"30"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"335:3:1"}],"functionName":{"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulIdentifier","src":"246:88:1"},"nodeType":"YulFunctionCall","src":"246:93:1"},"nodeType":"YulExpressionStatement","src":"246:93:1"},{"nodeType":"YulAssignment","src":"348:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"359:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"355:3:1"},"nodeType":"YulFunctionCall","src":"355:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"348:3:1"}]}]},"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:366:1"},{"body":{"nodeType":"YulBlock","src":"525:219:1","statements":[{"nodeType":"YulAssignment","src":"535:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"601:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"606:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"542:58:1"},"nodeType":"YulFunctionCall","src":"542:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"535:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"513:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"521:3:1","type":""}],"src":"379:365:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:74:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:32:1","type":"","value":"elliptic curve addition failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:56:1"},"nodeType":"YulExpressionStatement","src":"1892:56:1"}]},"name":"store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:180:1"},{"body":{"nodeType":"YulBlock","src":"2067:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2089:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2097:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:1"},"nodeType":"YulFunctionCall","src":"2085:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2101:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2078:6:1"},"nodeType":"YulFunctionCall","src":"2078:32:1"},"nodeType":"YulExpressionStatement","src":"2078:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2059:6:1","type":""}],"src":"1961:156:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0x99 PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE0 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x144 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x180 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x229 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x220 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x260 PUSH1 0x1E DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x26B DUP3 PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x283 PUSH1 0x6 DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x28E DUP3 PUSH2 0x313 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2B2 DUP2 PUSH2 0x253 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D2 DUP2 PUSH2 0x276 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x34A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1195:0:-:0;;;66:1157;;;;;;;;;;94:12;120:23;:280;;;;;;;;160:66;120:280;;;;240:66;120:280;;;;320:66;120:280;;;;;414:24;;:::i;:::-;818:2;810:6;806:2;799:5;796:1;790:4;786:1;782:6;777:44;766:55;;856:7;848:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;966:66;937:6;944:1;937:9;;;;;;;;;;;;;;;;;;;:95;912:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:66;1094:6;1101:1;1094:9;;;;;;;;;;;;;;;;;;;:95;1069:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1157;;;34:1195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1195:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"34:1195:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":66,"end":1223,"name":"CALLVALUE","source":0},{"begin":66,"end":1223,"name":"DUP1","source":0},{"begin":66,"end":1223,"name":"ISZERO","source":0},{"begin":66,"end":1223,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1223,"name":"JUMPI","source":0},{"begin":66,"end":1223,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1223,"name":"DUP1","source":0},{"begin":66,"end":1223,"name":"REVERT","source":0},{"begin":66,"end":1223,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1223,"name":"JUMPDEST","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":94,"end":106,"name":"PUSH","source":0,"value":"0"},{"begin":120,"end":143,"name":"DUP1","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":400,"name":"MLOAD","source":0},{"begin":120,"end":400,"name":"DUP1","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"60"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"40"},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"DUP1","source":0},{"begin":160,"end":226,"name":"PUSH","source":0,"value":"1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":240,"end":306,"name":"PUSH","source":0,"value":"1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"PUSH","source":0,"value":"20"},{"begin":120,"end":400,"name":"ADD","source":0},{"begin":320,"end":386,"name":"PUSH","source":0,"value":"30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000"},{"begin":120,"end":400,"name":"DUP2","source":0},{"begin":120,"end":400,"name":"MSTORE","source":0},{"begin":120,"end":400,"name":"POP","source":0},{"begin":120,"end":400,"name":"SWAP1","source":0},{"begin":120,"end":400,"name":"POP","source":0},{"begin":414,"end":438,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":414,"end":438,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":414,"end":438,"name":"JUMP","source":0,"value":"[in]"},{"begin":414,"end":438,"name":"tag","source":0,"value":"4"},{"begin":414,"end":438,"name":"JUMPDEST","source":0},{"begin":818,"end":820,"name":"PUSH","source":0,"value":"40"},{"begin":810,"end":816,"name":"DUP2","source":0},{"begin":806,"end":808,"name":"PUSH","source":0,"value":"60"},{"begin":799,"end":804,"name":"DUP5","source":0},{"begin":796,"end":797,"name":"PUSH","source":0,"value":"0"},{"begin":790,"end":794,"name":"PUSH","source":0,"value":"7"},{"begin":786,"end":787,"name":"PUSH","source":0,"value":"0"},{"begin":782,"end":788,"name":"NOT","source":0},{"begin":777,"end":821,"name":"CALL","source":0},{"begin":766,"end":821,"name":"SWAP3","source":0},{"begin":766,"end":821,"name":"POP","source":0},{"begin":856,"end":863,"name":"DUP3","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":848,"end":898,"name":"JUMPI","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"40"},{"begin":848,"end":898,"name":"MLOAD","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":848,"end":898,"name":"DUP2","source":0},{"begin":848,"end":898,"name":"MSTORE","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"4"},{"begin":848,"end":898,"name":"ADD","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":848,"end":898,"name":"SWAP1","source":0},{"begin":848,"end":898,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":848,"end":898,"name":"JUMP","source":0,"value":"[in]"},{"begin":848,"end":898,"name":"tag","source":0,"value":"7"},{"begin":848,"end":898,"name":"JUMPDEST","source":0},{"begin":848,"end":898,"name":"PUSH","source":0,"value":"40"},{"begin":848,"end":898,"name":"MLOAD","source":0},{"begin":848,"end":898,"name":"DUP1","source":0},{"begin":848,"end":898,"name":"SWAP2","source":0},{"begin":848,"end":898,"name":"SUB","source":0},{"begin":848,"end":898,"name":"SWAP1","source":0},{"begin":848,"end":898,"name":"REVERT","source":0},{"begin":848,"end":898,"name":"tag","source":0,"value":"6"},{"begin":848,"end":898,"name":"JUMPDEST","source":0},{"begin":966,"end":1032,"name":"PUSH","source":0,"value":"1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3"},{"begin":937,"end":943,"name":"DUP2","source":0},{"begin":944,"end":945,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"2"},{"begin":937,"end":946,"name":"DUP2","source":0},{"begin":937,"end":946,"name":"LT","source":0},{"begin":937,"end":946,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":937,"end":946,"name":"JUMPI","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"MSTORE","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"32"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"4"},{"begin":937,"end":946,"name":"MSTORE","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"24"},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"0"},{"begin":937,"end":946,"name":"REVERT","source":0},{"begin":937,"end":946,"name":"tag","source":0,"value":"9"},{"begin":937,"end":946,"name":"JUMPDEST","source":0},{"begin":937,"end":946,"name":"PUSH","source":0,"value":"20"},{"begin":937,"end":946,"name":"MUL","source":0},{"begin":937,"end":946,"name":"ADD","source":0},{"begin":937,"end":946,"name":"MLOAD","source":0},{"begin":937,"end":1032,"name":"EQ","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":912,"end":1055,"name":"JUMPI","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"40"},{"begin":912,"end":1055,"name":"MLOAD","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":912,"end":1055,"name":"DUP2","source":0},{"begin":912,"end":1055,"name":"MSTORE","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"4"},{"begin":912,"end":1055,"name":"ADD","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":912,"end":1055,"name":"SWAP1","source":0},{"begin":912,"end":1055,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":912,"end":1055,"name":"JUMP","source":0,"value":"[in]"},{"begin":912,"end":1055,"name":"tag","source":0,"value":"11"},{"begin":912,"end":1055,"name":"JUMPDEST","source":0},{"begin":912,"end":1055,"name":"PUSH","source":0,"value":"40"},{"begin":912,"end":1055,"name":"MLOAD","source":0},{"begin":912,"end":1055,"name":"DUP1","source":0},{"begin":912,"end":1055,"name":"SWAP2","source":0},{"begin":912,"end":1055,"name":"SUB","source":0},{"begin":912,"end":1055,"name":"SWAP1","source":0},{"begin":912,"end":1055,"name":"REVERT","source":0},{"begin":912,"end":1055,"name":"tag","source":0,"value":"10"},{"begin":912,"end":1055,"name":"JUMPDEST","source":0},{"begin":1123,"end":1189,"name":"PUSH","source":0,"value":"163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451"},{"begin":1094,"end":1100,"name":"DUP2","source":0},{"begin":1101,"end":1102,"name":"PUSH","source":0,"value":"1"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"2"},{"begin":1094,"end":1103,"name":"DUP2","source":0},{"begin":1094,"end":1103,"name":"LT","source":0},{"begin":1094,"end":1103,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":1094,"end":1103,"name":"JUMPI","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"0"},{"begin":1094,"end":1103,"name":"MSTORE","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"32"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"4"},{"begin":1094,"end":1103,"name":"MSTORE","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"24"},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"0"},{"begin":1094,"end":1103,"name":"REVERT","source":0},{"begin":1094,"end":1103,"name":"tag","source":0,"value":"13"},{"begin":1094,"end":1103,"name":"JUMPDEST","source":0},{"begin":1094,"end":1103,"name":"PUSH","source":0,"value":"20"},{"begin":1094,"end":1103,"name":"MUL","source":0},{"begin":1094,"end":1103,"name":"ADD","source":0},{"begin":1094,"end":1103,"name":"MLOAD","source":0},{"begin":1094,"end":1189,"name":"EQ","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":1069,"end":1212,"name":"JUMPI","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"40"},{"begin":1069,"end":1212,"name":"MLOAD","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1069,"end":1212,"name":"DUP2","source":0},{"begin":1069,"end":1212,"name":"MSTORE","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"4"},{"begin":1069,"end":1212,"name":"ADD","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":1069,"end":1212,"name":"SWAP1","source":0},{"begin":1069,"end":1212,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1069,"end":1212,"name":"JUMP","source":0,"value":"[in]"},{"begin":1069,"end":1212,"name":"tag","source":0,"value":"15"},{"begin":1069,"end":1212,"name":"JUMPDEST","source":0},{"begin":1069,"end":1212,"name":"PUSH","source":0,"value":"40"},{"begin":1069,"end":1212,"name":"MLOAD","source":0},{"begin":1069,"end":1212,"name":"DUP1","source":0},{"begin":1069,"end":1212,"name":"SWAP2","source":0},{"begin":1069,"end":1212,"name":"SUB","source":0},{"begin":1069,"end":1212,"name":"SWAP1","source":0},{"begin":1069,"end":1212,"name":"REVERT","source":0},{"begin":1069,"end":1212,"name":"tag","source":0,"value":"14"},{"begin":1069,"end":1212,"name":"JUMPDEST","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":66,"end":1223,"name":"POP","source":0},{"begin":34,"end":1229,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":34,"end":1229,"name":"JUMP","source":0},{"begin":34,"end":1229,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1229,"name":"JUMPDEST","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MLOAD","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"ADD","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"2"},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1229,"name":"DUP3","source":0},{"begin":34,"end":1229,"name":"MUL","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1229,"name":"DUP4","source":0},{"begin":34,"end":1229,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"DUP3","source":0},{"begin":34,"end":1229,"name":"ADD","source":0},{"begin":34,"end":1229,"name":"SWAP2","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"POP","source":0},{"begin":34,"end":1229,"name":"SWAP1","source":0},{"begin":34,"end":1229,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":373,"name":"tag","source":1,"value":"18"},{"begin":7,"end":373,"name":"JUMPDEST","source":1},{"begin":7,"end":373,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":234,"end":236,"name":"PUSH","source":1,"value":"1E"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":237,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":170,"end":237,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":237,"name":"tag","source":1,"value":"20"},{"begin":170,"end":237,"name":"JUMPDEST","source":1},{"begin":163,"end":237,"name":"SWAP2","source":1},{"begin":163,"end":237,"name":"POP","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":335,"end":338,"name":"DUP3","source":1},{"begin":246,"end":339,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":246,"end":339,"name":"JUMP","source":1,"value":"[in]"},{"begin":246,"end":339,"name":"tag","source":1,"value":"22"},{"begin":246,"end":339,"name":"JUMPDEST","source":1},{"begin":364,"end":366,"name":"PUSH","source":1,"value":"20"},{"begin":359,"end":362,"name":"DUP3","source":1},{"begin":355,"end":367,"name":"ADD","source":1},{"begin":348,"end":367,"name":"SWAP1","source":1},{"begin":348,"end":367,"name":"POP","source":1},{"begin":153,"end":373,"name":"SWAP2","source":1},{"begin":153,"end":373,"name":"SWAP1","source":1},{"begin":153,"end":373,"name":"POP","source":1},{"begin":153,"end":373,"name":"JUMP","source":1,"value":"[out]"},{"begin":379,"end":744,"name":"tag","source":1,"value":"24"},{"begin":379,"end":744,"name":"JUMPDEST","source":1},{"begin":379,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":606,"end":607,"name":"PUSH","source":1,"value":"6"},{"begin":601,"end":604,"name":"DUP4","source":1},{"begin":542,"end":608,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":542,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":542,"end":608,"name":"tag","source":1,"value":"26"},{"begin":542,"end":608,"name":"JUMPDEST","source":1},{"begin":535,"end":608,"name":"SWAP2","source":1},{"begin":535,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"27"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":525,"end":744,"name":"SWAP2","source":1},{"begin":525,"end":744,"name":"SWAP1","source":1},{"begin":525,"end":744,"name":"POP","source":1},{"begin":525,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"8"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"30"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"12"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"32"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"21"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1955,"name":"tag","source":1,"value":"23"},{"begin":1775,"end":1955,"name":"JUMPDEST","source":1},{"begin":1915,"end":1947,"name":"PUSH","source":1,"value":"656C6C6970746963206375727665206164646974696F6E206661696C65640000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1948,"name":"MSTORE","source":1},{"begin":1881,"end":1955,"name":"POP","source":1},{"begin":1881,"end":1955,"name":"JUMP","source":1,"value":"[out]"},{"begin":1961,"end":2117,"name":"tag","source":1,"value":"28"},{"begin":1961,"end":2117,"name":"JUMPDEST","source":1},{"begin":2101,"end":2109,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":2097,"end":2098,"name":"PUSH","source":1,"value":"0"},{"begin":2089,"end":2095,"name":"DUP3","source":1},{"begin":2085,"end":2099,"name":"ADD","source":1},{"begin":2078,"end":2110,"name":"MSTORE","source":1},{"begin":2067,"end":2117,"name":"POP","source":1},{"begin":2067,"end":2117,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1229,"name":"tag","source":0,"value":"16"},{"begin":34,"end":1229,"name":"JUMPDEST","source":0},{"begin":34,"end":1229,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"CODECOPY","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033",".code":[{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1229,"name":"MSTORE","source":0},{"begin":34,"end":1229,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1229,"name":"DUP1","source":0},{"begin":34,"end":1229,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Multiply\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x0866695f85e6c1a4e1a8cb93dfeef35e2b9269877a1562fbd3e145c2e75e3395\",\"urls\":[\"bzz-raw://84a275684a19c387b2ffd04d1b4df333ff4c72127508ea5a3604b35ccd21492e\",\"dweb:/ipfs/QmQmBMj75rX9QqPYae9GiDacPuGieUfXsYjZavjPvkrRH2\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Multiply{\n constructor() {\n bool success;\n uint256[3] memory input = [\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x07 id of the bn256Mul precompile\n // 0 number of ether to transfer\n // 96 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x07, 0, input, 96, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n \"failed\");\n require(\n result[1] ==\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,\n \"failed\");\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1223 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[3] memory input */\n dup1\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n mload(0x40)\n dup1\n 0x60\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":160:226 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":240:306 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6 */\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":320:386 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 */\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":414:438 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":818:820 64 */\n 0x40\n /* \"main.sol\":810:816 result */\n dup2\n /* \"main.sol\":806:808 96 */\n 0x60\n /* \"main.sol\":799:804 input */\n dup5\n /* \"main.sol\":796:797 0 */\n 0x00\n /* \"main.sol\":790:794 0x07 */\n 0x07\n /* \"main.sol\":786:787 0 */\n 0x00\n /* \"main.sol\":782:788 not(0) */\n not\n /* \"main.sol\":777:821 call(not(0), 0x07, 0, input, 96, result, 64) */\n call\n /* \"main.sol\":766:821 success := call(not(0), 0x07, 0, input, 96, result, 64) */\n swap3\n pop\n /* \"main.sol\":856:863 success */\n dup3\n /* \"main.sol\":848:898 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":966:1032 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":937:943 result */\n dup2\n /* \"main.sol\":944:945 0 */\n 0x00\n /* \"main.sol\":937:946 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":937:1032 result[0] ==... */\n eq\n /* \"main.sol\":912:1055 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1123:1189 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451 */\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451\n /* \"main.sol\":1094:1100 result */\n dup2\n /* \"main.sol\":1101:1102 1 */\n 0x01\n /* \"main.sol\":1094:1103 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1094:1189 result[1] ==... */\n eq\n /* \"main.sol\":1069:1212 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1223 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2120:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "153:220:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "163:74:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "229:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "234:2:1", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "170:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "170:67:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "163:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "335:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulIdentifier", + "src": "246:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "246:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "246:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "348:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "359:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "364:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "355:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "355:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "348:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "141:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "149:3:1", + "type": "" + } + ], + "src": "7:366:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "525:219:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "535:73:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "601:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "606:1:1", + "type": "", + "value": "6" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "542:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "542:66:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "535:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "706:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulIdentifier", + "src": "617:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "617:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "617:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "719:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "730:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "735:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "726:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "726:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "719:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "513:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "521:3:1", + "type": "" + } + ], + "src": "379:365:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "921:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "931:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "943:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "954:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "939:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "939:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "931:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "978:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "989:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "974:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "974:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "997:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1003:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "993:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "993:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "967:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "967:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "967:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1023:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1157:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1031:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1031:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1023:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "901:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "916:4:1", + "type": "" + } + ], + "src": "750:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1346:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1356:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1368:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1379:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1364:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1364:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1356:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1403:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1414:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1399:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1399:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1422:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1428:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1418:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1418:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1392:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1392:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1392:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1448:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1582:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1456:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1456:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1448:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1326:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1341:4:1", + "type": "" + } + ], + "src": "1175:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1696:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1713:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1718:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1706:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1706:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1706:19:1" + }, + { + "nodeType": "YulAssignment", + "src": "1734:29:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1753:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1758:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1749:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1749:14:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "1734:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1668:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "1673:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "1684:11:1", + "type": "" + } + ], + "src": "1600:169:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1881:74:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1903:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1911:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1899:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1899:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "1915:32:1", + "type": "", + "value": "elliptic curve addition failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1892:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1892:56:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1892:56:1" + } + ] + }, + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1873:6:1", + "type": "" + } + ], + "src": "1775:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2067:50:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2089:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2097:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2085:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2085:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "2101:8:1", + "type": "", + "value": "failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2078:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2078:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2078:32:1" + } + ] + }, + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2059:6:1", + "type": "" + } + ], + "src": "1961:156:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0x99 PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE0 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x144 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x180 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x229 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x220 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x260 PUSH1 0x1E DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x26B DUP3 PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x283 PUSH1 0x6 DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x28E DUP3 PUSH2 0x313 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2B2 DUP2 PUSH2 0x253 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D2 DUP2 PUSH2 0x276 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x34A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1195:0:-:0;;;66:1157;;;;;;;;;;94:12;120:23;:280;;;;;;;;160:66;120:280;;;;240:66;120:280;;;;320:66;120:280;;;;;414:24;;:::i;:::-;818:2;810:6;806:2;799:5;796:1;790:4;786:1;782:6;777:44;766:55;;856:7;848:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;966:66;937:6;944:1;937:9;;;;;;;;;;;;;;;;;;;:95;912:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:66;1094:6;1101:1;1094:9;;;;;;;;;;;;;;;;;;;:95;1069:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1157;;;34:1195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1195:0:-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1195:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "infinite", + "totalCost": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, + { "begin": 66, "end": 1223, "name": "CALLVALUE", "source": 0 }, + { "begin": 66, "end": 1223, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1223, "name": "ISZERO", "source": 0 }, + { + "begin": 66, + "end": 1223, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1223, "name": "JUMPI", "source": 0 }, + { + "begin": 66, + "end": 1223, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 66, "end": 1223, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1223, "name": "REVERT", "source": 0 }, + { + "begin": 66, + "end": 1223, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1223, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 106, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 120, "end": 143, "name": "DUP1", "source": 0 }, + { + "begin": 120, + "end": 400, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 120, "end": 400, "name": "MLOAD", "source": 0 }, + { "begin": 120, "end": 400, "name": "DUP1", "source": 0 }, + { + "begin": 120, + "end": 400, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, + { + "begin": 120, + "end": 400, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, + { "begin": 120, "end": 400, "name": "DUP1", "source": 0 }, + { + "begin": 160, + "end": 226, + "name": "PUSH", + "source": 0, + "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" + }, + { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, + { + "begin": 120, + "end": 400, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, + { + "begin": 240, + "end": 306, + "name": "PUSH", + "source": 0, + "value": "1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6" + }, + { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, + { + "begin": 120, + "end": 400, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, + { + "begin": 320, + "end": 386, + "name": "PUSH", + "source": 0, + "value": "30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000" + }, + { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, + { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, + { "begin": 120, "end": 400, "name": "POP", "source": 0 }, + { "begin": 120, "end": 400, "name": "SWAP1", "source": 0 }, + { "begin": 120, "end": 400, "name": "POP", "source": 0 }, + { + "begin": 414, + "end": 438, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 414, + "end": 438, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 414, + "end": 438, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 414, + "end": 438, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 414, "end": 438, "name": "JUMPDEST", "source": 0 }, + { + "begin": 818, + "end": 820, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 810, "end": 816, "name": "DUP2", "source": 0 }, + { + "begin": 806, + "end": 808, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 799, "end": 804, "name": "DUP5", "source": 0 }, + { + "begin": 796, + "end": 797, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 790, + "end": 794, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 786, + "end": 787, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 782, "end": 788, "name": "NOT", "source": 0 }, + { "begin": 777, "end": 821, "name": "CALL", "source": 0 }, + { "begin": 766, "end": 821, "name": "SWAP3", "source": 0 }, + { "begin": 766, "end": 821, "name": "POP", "source": 0 }, + { "begin": 856, "end": 863, "name": "DUP3", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 848, "end": 898, "name": "JUMPI", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 848, "end": 898, "name": "MLOAD", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 848, "end": 898, "name": "DUP2", "source": 0 }, + { "begin": 848, "end": 898, "name": "MSTORE", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 848, "end": 898, "name": "ADD", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 848, "end": 898, "name": "SWAP1", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 848, + "end": 898, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 848, + "end": 898, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 848, "end": 898, "name": "JUMPDEST", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 848, "end": 898, "name": "MLOAD", "source": 0 }, + { "begin": 848, "end": 898, "name": "DUP1", "source": 0 }, + { "begin": 848, "end": 898, "name": "SWAP2", "source": 0 }, + { "begin": 848, "end": 898, "name": "SUB", "source": 0 }, + { "begin": 848, "end": 898, "name": "SWAP1", "source": 0 }, + { "begin": 848, "end": 898, "name": "REVERT", "source": 0 }, + { + "begin": 848, + "end": 898, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 848, "end": 898, "name": "JUMPDEST", "source": 0 }, + { + "begin": 966, + "end": 1032, + "name": "PUSH", + "source": 0, + "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" + }, + { "begin": 937, "end": 943, "name": "DUP2", "source": 0 }, + { + "begin": 944, + "end": 945, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 937, "end": 946, "name": "DUP2", "source": 0 }, + { "begin": 937, "end": 946, "name": "LT", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 937, "end": 946, "name": "JUMPI", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 937, "end": 946, "name": "MSTORE", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "32" + }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 937, "end": 946, "name": "MSTORE", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "24" + }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 937, "end": 946, "name": "REVERT", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 937, "end": 946, "name": "JUMPDEST", "source": 0 }, + { + "begin": 937, + "end": 946, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 937, "end": 946, "name": "MUL", "source": 0 }, + { "begin": 937, "end": 946, "name": "ADD", "source": 0 }, + { "begin": 937, "end": 946, "name": "MLOAD", "source": 0 }, + { "begin": 937, "end": 1032, "name": "EQ", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 912, "end": 1055, "name": "JUMPI", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 912, "end": 1055, "name": "MLOAD", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 912, "end": 1055, "name": "DUP2", "source": 0 }, + { "begin": 912, "end": 1055, "name": "MSTORE", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 912, "end": 1055, "name": "ADD", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 912, "end": 1055, "name": "SWAP1", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 912, + "end": 1055, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 912, + "end": 1055, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 912, "end": 1055, "name": "JUMPDEST", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 912, "end": 1055, "name": "MLOAD", "source": 0 }, + { "begin": 912, "end": 1055, "name": "DUP1", "source": 0 }, + { "begin": 912, "end": 1055, "name": "SWAP2", "source": 0 }, + { "begin": 912, "end": 1055, "name": "SUB", "source": 0 }, + { "begin": 912, "end": 1055, "name": "SWAP1", "source": 0 }, + { "begin": 912, "end": 1055, "name": "REVERT", "source": 0 }, + { + "begin": 912, + "end": 1055, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 912, "end": 1055, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1123, + "end": 1189, + "name": "PUSH", + "source": 0, + "value": "163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451" + }, + { "begin": 1094, "end": 1100, "name": "DUP2", "source": 0 }, + { + "begin": 1101, + "end": 1102, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1094, "end": 1103, "name": "DUP2", "source": 0 }, + { "begin": 1094, "end": 1103, "name": "LT", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 1094, "end": 1103, "name": "JUMPI", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1094, "end": 1103, "name": "MSTORE", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "32" + }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1094, "end": 1103, "name": "MSTORE", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "24" + }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1094, "end": 1103, "name": "REVERT", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 1094, "end": 1103, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1094, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1094, "end": 1103, "name": "MUL", "source": 0 }, + { "begin": 1094, "end": 1103, "name": "ADD", "source": 0 }, + { "begin": 1094, "end": 1103, "name": "MLOAD", "source": 0 }, + { "begin": 1094, "end": 1189, "name": "EQ", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 1069, "end": 1212, "name": "JUMPI", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1069, "end": 1212, "name": "MLOAD", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1069, "end": 1212, "name": "DUP2", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "MSTORE", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1069, "end": 1212, "name": "ADD", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 1069, "end": 1212, "name": "SWAP1", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1069, + "end": 1212, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1069, + "end": 1212, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 1069, "end": 1212, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1069, "end": 1212, "name": "MLOAD", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "DUP1", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "SWAP2", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "SUB", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "SWAP1", "source": 0 }, + { "begin": 1069, "end": 1212, "name": "REVERT", "source": 0 }, + { + "begin": 1069, + "end": 1212, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 1069, "end": 1212, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 34, "end": 1229, "name": "JUMP", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 34, "end": 1229, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1229, "name": "MLOAD", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1229, "name": "ADD", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 34, "end": 1229, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1229, "name": "MUL", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1229, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP4", "source": 0 }, + { "begin": 34, "end": 1229, "name": "CALLDATACOPY", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1229, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1229, "name": "ADD", "source": 0 }, + { "begin": 34, "end": 1229, "name": "SWAP2", "source": 0 }, + { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, + { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { "begin": 7, "end": 373, "name": "tag", "source": 1, "value": "18" }, + { "begin": 7, "end": 373, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 373, "name": "PUSH", "source": 1, "value": "0" }, + { + "begin": 170, + "end": 237, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 234, + "end": 236, + "name": "PUSH", + "source": 1, + "value": "1E" + }, + { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, + { + "begin": 170, + "end": 237, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 170, + "end": 237, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 170, + "end": 237, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 170, "end": 237, "name": "JUMPDEST", "source": 1 }, + { "begin": 163, "end": 237, "name": "SWAP2", "source": 1 }, + { "begin": 163, "end": 237, "name": "POP", "source": 1 }, + { + "begin": 246, + "end": 339, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 335, "end": 338, "name": "DUP3", "source": 1 }, + { + "begin": 246, + "end": 339, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 246, + "end": 339, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 246, + "end": 339, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 246, "end": 339, "name": "JUMPDEST", "source": 1 }, + { + "begin": 364, + "end": 366, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 359, "end": 362, "name": "DUP3", "source": 1 }, + { "begin": 355, "end": 367, "name": "ADD", "source": 1 }, + { "begin": 348, "end": 367, "name": "SWAP1", "source": 1 }, + { "begin": 348, "end": 367, "name": "POP", "source": 1 }, + { "begin": 153, "end": 373, "name": "SWAP2", "source": 1 }, + { "begin": 153, "end": 373, "name": "SWAP1", "source": 1 }, + { "begin": 153, "end": 373, "name": "POP", "source": 1 }, + { + "begin": 153, + "end": 373, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 379, + "end": 744, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 379, "end": 744, "name": "JUMPDEST", "source": 1 }, + { + "begin": 379, + "end": 744, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 542, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 606, + "end": 607, + "name": "PUSH", + "source": 1, + "value": "6" + }, + { "begin": 601, "end": 604, "name": "DUP4", "source": 1 }, + { + "begin": 542, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 542, + "end": 608, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 542, + "end": 608, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 542, "end": 608, "name": "JUMPDEST", "source": 1 }, + { "begin": 535, "end": 608, "name": "SWAP2", "source": 1 }, + { "begin": 535, "end": 608, "name": "POP", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 617, + "end": 710, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 617, + "end": 710, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, + { + "begin": 735, + "end": 737, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, + { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, + { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, + { "begin": 719, "end": 738, "name": "POP", "source": 1 }, + { "begin": 525, "end": 744, "name": "SWAP2", "source": 1 }, + { "begin": 525, "end": 744, "name": "SWAP1", "source": 1 }, + { "begin": 525, "end": 744, "name": "POP", "source": 1 }, + { + "begin": 525, + "end": 744, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 750, + "end": 1169, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, + { + "begin": 750, + "end": 1169, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 954, + "end": 956, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, + { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, + { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, + { "begin": 931, "end": 957, "name": "POP", "source": 1 }, + { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, + { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, + { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, + { + "begin": 989, + "end": 990, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, + { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, + { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 1031, + "end": 1162, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1031, + "end": 1162, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, + { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, + { + "begin": 921, + "end": 1169, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1175, + "end": 1594, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1175, + "end": 1594, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1379, + "end": 1381, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, + { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, + { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, + { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, + { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, + { + "begin": 1414, + "end": 1415, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, + { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, + { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 1456, + "end": 1587, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1456, + "end": 1587, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, + { + "begin": 1346, + "end": 1594, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1600, + "end": 1769, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1600, + "end": 1769, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, + { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, + { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, + { + "begin": 1758, + "end": 1762, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, + { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { + "begin": 1696, + "end": 1769, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1775, + "end": 1955, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 1775, "end": 1955, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1915, + "end": 1947, + "name": "PUSH", + "source": 1, + "value": "656C6C6970746963206375727665206164646974696F6E206661696C65640000" + }, + { + "begin": 1911, + "end": 1912, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, + { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, + { "begin": 1892, "end": 1948, "name": "MSTORE", "source": 1 }, + { "begin": 1881, "end": 1955, "name": "POP", "source": 1 }, + { + "begin": 1881, + "end": 1955, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1961, + "end": 2117, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 1961, "end": 2117, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2101, + "end": 2109, + "name": "PUSH", + "source": 1, + "value": "6661696C65640000000000000000000000000000000000000000000000000000" + }, + { + "begin": 2097, + "end": 2098, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2089, "end": 2095, "name": "DUP3", "source": 1 }, + { "begin": 2085, "end": 2099, "name": "ADD", "source": 1 }, + { "begin": 2078, "end": 2110, "name": "MSTORE", "source": 1 }, + { "begin": 2067, "end": 2117, "name": "POP", "source": 1 }, + { + "begin": 2067, + "end": 2117, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 34, + "end": 1229, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 34, "end": 1229, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1229, "name": "CODECOPY", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1229, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", + ".code": [ + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, + { + "begin": 34, + "end": 1229, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1229, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Multiply\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x0866695f85e6c1a4e1a8cb93dfeef35e2b9269877a1562fbd3e145c2e75e3395\",\"urls\":[\"bzz-raw://84a275684a19c387b2ffd04d1b4df333ff4c72127508ea5a3604b35ccd21492e\",\"dweb:/ipfs/QmQmBMj75rX9QqPYae9GiDacPuGieUfXsYjZavjPvkrRH2\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Multiply{\n constructor() {\n bool success;\n uint256[3] memory input = [\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x07 id of the bn256Mul precompile\n // 0 number of ether to transfer\n // 96 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x07, 0, input, 96, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n \"failed\");\n require(\n result[1] ==\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,\n \"failed\");\n }\n }" +} diff --git a/tests/contracts/compiled/Bn128Pairing.json b/tests/contracts/compiled/Bn128Pairing.json index c280a99bb4a..02c64010917 100644 --- a/tests/contracts/compiled/Bn128Pairing.json +++ b/tests/contracts/compiled/Bn128Pairing.json @@ -1 +1,2039 @@ -{"byteCode":"0x608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1702 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":90:114 uint256[12] memory input */\n 0x00\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n mload(0x40)\n dup1\n 0x0180\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":131:197 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02 */\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":211:277 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84 */\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":291:357 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee */\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":371:437 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f */\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":451:517 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237 */\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":531:597 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f */\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":611:677 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9 */\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":691:757 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1 */\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":771:837 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 */\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":851:917 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed */\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":931:997 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b */\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1011:1077 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa */\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1097:1121 uint256[1] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":1131:1143 bool success */\n 0x00\n /* \"main.sol\":1577:1579 32 */\n 0x20\n /* \"main.sol\":1569:1575 result */\n dup3\n /* \"main.sol\":1564:1567 384 */\n 0x0180\n /* \"main.sol\":1557:1562 input */\n dup6\n /* \"main.sol\":1554:1555 0 */\n 0x00\n /* \"main.sol\":1548:1552 0x08 */\n 0x08\n /* \"main.sol\":1541:1545 2000 */\n 0x07d0\n /* \"main.sol\":1534:1539 gas() */\n gas\n /* \"main.sol\":1530:1546 sub(gas(), 2000) */\n sub\n /* \"main.sol\":1525:1580 call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n call\n /* \"main.sol\":1514:1580 success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n swap1\n pop\n /* \"main.sol\":1607:1614 success */\n dup1\n /* \"main.sol\":1599:1648 require(success, \"elliptic curve pairing failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1679:1680 1 */\n 0x01\n /* \"main.sol\":1666:1672 result */\n dup3\n /* \"main.sol\":1673:1674 0 */\n 0x00\n /* \"main.sol\":1666:1675 result[0] */\n 0x01\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1666:1680 result[0] == 1 */\n eq\n /* \"main.sol\":1658:1691 require(result[0] == 1, \"failed\") */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":66:1702 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n jump(tag_13)\ntag_5:\n mload(0x40)\n dup1\n 0x20\n add\n 0x40\n mstore\n dup1\n 0x01\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:372 */\ntag_15:\n 0x00\n /* \"#utility.yul\":170:236 */\n tag_17\n /* \"#utility.yul\":234:235 */\n 0x06\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:236 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":163:236 */\n swap2\n pop\n /* \"#utility.yul\":245:338 */\n tag_19\n /* \"#utility.yul\":334:337 */\n dup3\n /* \"#utility.yul\":245:338 */\n tag_20\n jump\t// in\ntag_19:\n /* \"#utility.yul\":363:365 */\n 0x20\n /* \"#utility.yul\":358:361 */\n dup3\n /* \"#utility.yul\":354:366 */\n add\n /* \"#utility.yul\":347:366 */\n swap1\n pop\n /* \"#utility.yul\":153:372 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":378:744 */\ntag_21:\n 0x00\n /* \"#utility.yul\":541:608 */\n tag_23\n /* \"#utility.yul\":605:607 */\n 0x1d\n /* \"#utility.yul\":600:603 */\n dup4\n /* \"#utility.yul\":541:608 */\n tag_18\n jump\t// in\ntag_23:\n /* \"#utility.yul\":534:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_24\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_25\n jump\t// in\ntag_24:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":524:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_12:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_27\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_15\n jump\t// in\ntag_27:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_8:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_29\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_21\n jump\t// in\ntag_29:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_18:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1931 */\ntag_20:\n /* \"#utility.yul\":1915:1923 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1924 */\n mstore\n /* \"#utility.yul\":1881:1931 */\n pop\n jump\t// out\n /* \"#utility.yul\":1937:2116 */\ntag_25:\n /* \"#utility.yul\":2077:2108 */\n 0x656c6c69707469632063757276652070616972696e67206661696c6564000000\n /* \"#utility.yul\":2073:2074 */\n 0x00\n /* \"#utility.yul\":2065:2071 */\n dup3\n /* \"#utility.yul\":2061:2075 */\n add\n /* \"#utility.yul\":2054:2109 */\n mstore\n /* \"#utility.yul\":2043:2116 */\n pop\n jump\t// out\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\ntag_13:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2119:1","statements":[{"body":{"nodeType":"YulBlock","src":"153:219:1","statements":[{"nodeType":"YulAssignment","src":"163:73:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"229:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"234:1:1","type":"","value":"6"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"170:58:1"},"nodeType":"YulFunctionCall","src":"170:66:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"163:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"334:3:1"}],"functionName":{"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulIdentifier","src":"245:88:1"},"nodeType":"YulFunctionCall","src":"245:93:1"},"nodeType":"YulExpressionStatement","src":"245:93:1"},{"nodeType":"YulAssignment","src":"347:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"358:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"363:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"354:3:1"},"nodeType":"YulFunctionCall","src":"354:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"347:3:1"}]}]},"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"141:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"149:3:1","type":""}],"src":"7:365:1"},{"body":{"nodeType":"YulBlock","src":"524:220:1","statements":[{"nodeType":"YulAssignment","src":"534:74:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"600:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"605:2:1","type":"","value":"29"}],"functionName":{"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"541:58:1"},"nodeType":"YulFunctionCall","src":"541:67:1"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"534:3:1"}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"706:3:1"}],"functionName":{"name":"store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862","nodeType":"YulIdentifier","src":"617:88:1"},"nodeType":"YulFunctionCall","src":"617:93:1"},"nodeType":"YulExpressionStatement","src":"617:93:1"},{"nodeType":"YulAssignment","src":"719:19:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"735:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"726:3:1"},"nodeType":"YulFunctionCall","src":"726:12:1"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"719:3:1"}]}]},"name":"abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"512:3:1","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"520:3:1","type":""}],"src":"378:366:1"},{"body":{"nodeType":"YulBlock","src":"921:248:1","statements":[{"nodeType":"YulAssignment","src":"931:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"943:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"954:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"939:3:1"},"nodeType":"YulFunctionCall","src":"939:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"931:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:1"},"nodeType":"YulFunctionCall","src":"974:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"997:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1003:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:1"},"nodeType":"YulFunctionCall","src":"993:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:47:1"},"nodeType":"YulExpressionStatement","src":"967:47:1"},{"nodeType":"YulAssignment","src":"1023:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1157:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1031:124:1"},"nodeType":"YulFunctionCall","src":"1031:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1023:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"901:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"916:4:1","type":""}],"src":"750:419:1"},{"body":{"nodeType":"YulBlock","src":"1346:248:1","statements":[{"nodeType":"YulAssignment","src":"1356:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:1"},"nodeType":"YulFunctionCall","src":"1364:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:1"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1403:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1414:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1399:3:1"},"nodeType":"YulFunctionCall","src":"1399:17:1"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1422:4:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"1428:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1418:3:1"},"nodeType":"YulFunctionCall","src":"1418:20:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1392:6:1"},"nodeType":"YulFunctionCall","src":"1392:47:1"},"nodeType":"YulExpressionStatement","src":"1392:47:1"},{"nodeType":"YulAssignment","src":"1448:139:1","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1582:4:1"}],"functionName":{"name":"abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack","nodeType":"YulIdentifier","src":"1456:124:1"},"nodeType":"YulFunctionCall","src":"1456:131:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1448:4:1"}]}]},"name":"abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1341:4:1","type":""}],"src":"1175:419:1"},{"body":{"nodeType":"YulBlock","src":"1696:73:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1713:3:1"},{"name":"length","nodeType":"YulIdentifier","src":"1718:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:1"},"nodeType":"YulFunctionCall","src":"1706:19:1"},"nodeType":"YulExpressionStatement","src":"1706:19:1"},{"nodeType":"YulAssignment","src":"1734:29:1","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1753:3:1"},{"kind":"number","nodeType":"YulLiteral","src":"1758:4:1","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:1"},"nodeType":"YulFunctionCall","src":"1749:14:1"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"1734:11:1"}]}]},"name":"array_storeLengthForEncoding_t_string_memory_ptr_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1668:3:1","type":""},{"name":"length","nodeType":"YulTypedName","src":"1673:6:1","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"1684:11:1","type":""}],"src":"1600:169:1"},{"body":{"nodeType":"YulBlock","src":"1881:50:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1903:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"1911:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1899:3:1"},"nodeType":"YulFunctionCall","src":"1899:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"1915:8:1","type":"","value":"failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1892:6:1"},"nodeType":"YulFunctionCall","src":"1892:32:1"},"nodeType":"YulExpressionStatement","src":"1892:32:1"}]},"name":"store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"1873:6:1","type":""}],"src":"1775:156:1"},{"body":{"nodeType":"YulBlock","src":"2043:73:1","statements":[{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2065:6:1"},{"kind":"number","nodeType":"YulLiteral","src":"2073:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2061:3:1"},"nodeType":"YulFunctionCall","src":"2061:14:1"},{"kind":"string","nodeType":"YulLiteral","src":"2077:31:1","type":"","value":"elliptic curve pairing failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2054:6:1"},"nodeType":"YulFunctionCall","src":"2054:55:1"},"nodeType":"YulExpressionStatement","src":"2054:55:1"}]},"name":"store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862","nodeType":"YulFunctionDefinition","parameters":[{"name":"memPtr","nodeType":"YulTypedName","src":"2035:6:1","type":""}],"src":"1937:179:1"}]},"contents":"{\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n function store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve pairing failed\")\n\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x1EF PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x244 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x23B SWAP1 PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x280 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BC SWAP1 PUSH2 0x335 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FC PUSH1 0x6 DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x307 DUP3 PUSH2 0x386 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31F PUSH1 0x1D DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x32A DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34E DUP2 PUSH2 0x2EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x36E DUP2 PUSH2 0x312 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x3E6 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ","sourceMap":"34:1674:0:-:0;;;66:1636;;;;;;;;;;90:24;:997;;;;;;;;131:66;90:997;;;;211:66;90:997;;;;291:66;90:997;;;;371:66;90:997;;;;451:66;90:997;;;;531:66;90:997;;;;611:66;90:997;;;;691:66;90:997;;;;771:66;90:997;;;;851:66;90:997;;;;931:66;90:997;;;;1011:66;90:997;;;;;1097:24;;:::i;:::-;1131:12;1577:2;1569:6;1564:3;1557:5;1554:1;1548:4;1541;1534:5;1530:16;1525:55;1514:66;;1607:7;1599:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1679:1;1666:6;1673:1;1666:9;;;;;;;;;;;;;;;;;;;:14;1658:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1636;;;34:1674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:365:1:-;;170:66;234:1;229:3;170:66;:::i;:::-;163:73;;245:93;334:3;245:93;:::i;:::-;363:2;358:3;354:12;347:19;;153:219;;;:::o;378:366::-;;541:67;605:2;600:3;541:67;:::i;:::-;534:74;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;524:220;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:156::-;1915:8;1911:1;1903:6;1899:14;1892:32;1881:50;:::o;1937:179::-;2077:31;2073:1;2065:6;2061:14;2054:55;2043:73;:::o;34:1674:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ","sourceMap":"34:1674:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":66,"end":1702,"name":"CALLVALUE","source":0},{"begin":66,"end":1702,"name":"DUP1","source":0},{"begin":66,"end":1702,"name":"ISZERO","source":0},{"begin":66,"end":1702,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":66,"end":1702,"name":"JUMPI","source":0},{"begin":66,"end":1702,"name":"PUSH","source":0,"value":"0"},{"begin":66,"end":1702,"name":"DUP1","source":0},{"begin":66,"end":1702,"name":"REVERT","source":0},{"begin":66,"end":1702,"name":"tag","source":0,"value":"1"},{"begin":66,"end":1702,"name":"JUMPDEST","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":90,"end":114,"name":"PUSH","source":0,"value":"0"},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"40"},{"begin":90,"end":1087,"name":"MLOAD","source":0},{"begin":90,"end":1087,"name":"DUP1","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"180"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"40"},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"DUP1","source":0},{"begin":131,"end":197,"name":"PUSH","source":0,"value":"2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":211,"end":277,"name":"PUSH","source":0,"value":"3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":291,"end":357,"name":"PUSH","source":0,"value":"1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":371,"end":437,"name":"PUSH","source":0,"value":"2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":451,"end":517,"name":"PUSH","source":0,"value":"21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":531,"end":597,"name":"PUSH","source":0,"value":"96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":611,"end":677,"name":"PUSH","source":0,"value":"6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":691,"end":757,"name":"PUSH","source":0,"value":"22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":771,"end":837,"name":"PUSH","source":0,"value":"198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":851,"end":917,"name":"PUSH","source":0,"value":"1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":931,"end":997,"name":"PUSH","source":0,"value":"90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"PUSH","source":0,"value":"20"},{"begin":90,"end":1087,"name":"ADD","source":0},{"begin":1011,"end":1077,"name":"PUSH","source":0,"value":"12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA"},{"begin":90,"end":1087,"name":"DUP2","source":0},{"begin":90,"end":1087,"name":"MSTORE","source":0},{"begin":90,"end":1087,"name":"POP","source":0},{"begin":90,"end":1087,"name":"SWAP1","source":0},{"begin":90,"end":1087,"name":"POP","source":0},{"begin":1097,"end":1121,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":1097,"end":1121,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":1097,"end":1121,"name":"JUMP","source":0,"value":"[in]"},{"begin":1097,"end":1121,"name":"tag","source":0,"value":"4"},{"begin":1097,"end":1121,"name":"JUMPDEST","source":0},{"begin":1131,"end":1143,"name":"PUSH","source":0,"value":"0"},{"begin":1577,"end":1579,"name":"PUSH","source":0,"value":"20"},{"begin":1569,"end":1575,"name":"DUP3","source":0},{"begin":1564,"end":1567,"name":"PUSH","source":0,"value":"180"},{"begin":1557,"end":1562,"name":"DUP6","source":0},{"begin":1554,"end":1555,"name":"PUSH","source":0,"value":"0"},{"begin":1548,"end":1552,"name":"PUSH","source":0,"value":"8"},{"begin":1541,"end":1545,"name":"PUSH","source":0,"value":"7D0"},{"begin":1534,"end":1539,"name":"GAS","source":0},{"begin":1530,"end":1546,"name":"SUB","source":0},{"begin":1525,"end":1580,"name":"CALL","source":0},{"begin":1514,"end":1580,"name":"SWAP1","source":0},{"begin":1514,"end":1580,"name":"POP","source":0},{"begin":1607,"end":1614,"name":"DUP1","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":1599,"end":1648,"name":"JUMPI","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"40"},{"begin":1599,"end":1648,"name":"MLOAD","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1599,"end":1648,"name":"DUP2","source":0},{"begin":1599,"end":1648,"name":"MSTORE","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"4"},{"begin":1599,"end":1648,"name":"ADD","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":1599,"end":1648,"name":"SWAP1","source":0},{"begin":1599,"end":1648,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":1599,"end":1648,"name":"JUMP","source":0,"value":"[in]"},{"begin":1599,"end":1648,"name":"tag","source":0,"value":"7"},{"begin":1599,"end":1648,"name":"JUMPDEST","source":0},{"begin":1599,"end":1648,"name":"PUSH","source":0,"value":"40"},{"begin":1599,"end":1648,"name":"MLOAD","source":0},{"begin":1599,"end":1648,"name":"DUP1","source":0},{"begin":1599,"end":1648,"name":"SWAP2","source":0},{"begin":1599,"end":1648,"name":"SUB","source":0},{"begin":1599,"end":1648,"name":"SWAP1","source":0},{"begin":1599,"end":1648,"name":"REVERT","source":0},{"begin":1599,"end":1648,"name":"tag","source":0,"value":"6"},{"begin":1599,"end":1648,"name":"JUMPDEST","source":0},{"begin":1679,"end":1680,"name":"PUSH","source":0,"value":"1"},{"begin":1666,"end":1672,"name":"DUP3","source":0},{"begin":1673,"end":1674,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"1"},{"begin":1666,"end":1675,"name":"DUP2","source":0},{"begin":1666,"end":1675,"name":"LT","source":0},{"begin":1666,"end":1675,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":1666,"end":1675,"name":"JUMPI","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"MSTORE","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"32"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"4"},{"begin":1666,"end":1675,"name":"MSTORE","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"24"},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"0"},{"begin":1666,"end":1675,"name":"REVERT","source":0},{"begin":1666,"end":1675,"name":"tag","source":0,"value":"9"},{"begin":1666,"end":1675,"name":"JUMPDEST","source":0},{"begin":1666,"end":1675,"name":"PUSH","source":0,"value":"20"},{"begin":1666,"end":1675,"name":"MUL","source":0},{"begin":1666,"end":1675,"name":"ADD","source":0},{"begin":1666,"end":1675,"name":"MLOAD","source":0},{"begin":1666,"end":1680,"name":"EQ","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":1658,"end":1691,"name":"JUMPI","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"40"},{"begin":1658,"end":1691,"name":"MLOAD","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"8C379A000000000000000000000000000000000000000000000000000000000"},{"begin":1658,"end":1691,"name":"DUP2","source":0},{"begin":1658,"end":1691,"name":"MSTORE","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"4"},{"begin":1658,"end":1691,"name":"ADD","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1658,"end":1691,"name":"SWAP1","source":0},{"begin":1658,"end":1691,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":1658,"end":1691,"name":"JUMP","source":0,"value":"[in]"},{"begin":1658,"end":1691,"name":"tag","source":0,"value":"11"},{"begin":1658,"end":1691,"name":"JUMPDEST","source":0},{"begin":1658,"end":1691,"name":"PUSH","source":0,"value":"40"},{"begin":1658,"end":1691,"name":"MLOAD","source":0},{"begin":1658,"end":1691,"name":"DUP1","source":0},{"begin":1658,"end":1691,"name":"SWAP2","source":0},{"begin":1658,"end":1691,"name":"SUB","source":0},{"begin":1658,"end":1691,"name":"SWAP1","source":0},{"begin":1658,"end":1691,"name":"REVERT","source":0},{"begin":1658,"end":1691,"name":"tag","source":0,"value":"10"},{"begin":1658,"end":1691,"name":"JUMPDEST","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":66,"end":1702,"name":"POP","source":0},{"begin":34,"end":1708,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":34,"end":1708,"name":"JUMP","source":0},{"begin":34,"end":1708,"name":"tag","source":0,"value":"5"},{"begin":34,"end":1708,"name":"JUMPDEST","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MLOAD","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1708,"name":"ADD","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"1"},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"20"},{"begin":34,"end":1708,"name":"DUP3","source":0},{"begin":34,"end":1708,"name":"MUL","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1708,"name":"DUP4","source":0},{"begin":34,"end":1708,"name":"CALLDATACOPY","source":0},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"DUP3","source":0},{"begin":34,"end":1708,"name":"ADD","source":0},{"begin":34,"end":1708,"name":"SWAP2","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"POP","source":0},{"begin":34,"end":1708,"name":"SWAP1","source":0},{"begin":34,"end":1708,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":372,"name":"tag","source":1,"value":"15"},{"begin":7,"end":372,"name":"JUMPDEST","source":1},{"begin":7,"end":372,"name":"PUSH","source":1,"value":"0"},{"begin":170,"end":236,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":234,"end":235,"name":"PUSH","source":1,"value":"6"},{"begin":229,"end":232,"name":"DUP4","source":1},{"begin":170,"end":236,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":170,"end":236,"name":"JUMP","source":1,"value":"[in]"},{"begin":170,"end":236,"name":"tag","source":1,"value":"17"},{"begin":170,"end":236,"name":"JUMPDEST","source":1},{"begin":163,"end":236,"name":"SWAP2","source":1},{"begin":163,"end":236,"name":"POP","source":1},{"begin":245,"end":338,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":334,"end":337,"name":"DUP3","source":1},{"begin":245,"end":338,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":245,"end":338,"name":"JUMP","source":1,"value":"[in]"},{"begin":245,"end":338,"name":"tag","source":1,"value":"19"},{"begin":245,"end":338,"name":"JUMPDEST","source":1},{"begin":363,"end":365,"name":"PUSH","source":1,"value":"20"},{"begin":358,"end":361,"name":"DUP3","source":1},{"begin":354,"end":366,"name":"ADD","source":1},{"begin":347,"end":366,"name":"SWAP1","source":1},{"begin":347,"end":366,"name":"POP","source":1},{"begin":153,"end":372,"name":"SWAP2","source":1},{"begin":153,"end":372,"name":"SWAP1","source":1},{"begin":153,"end":372,"name":"POP","source":1},{"begin":153,"end":372,"name":"JUMP","source":1,"value":"[out]"},{"begin":378,"end":744,"name":"tag","source":1,"value":"21"},{"begin":378,"end":744,"name":"JUMPDEST","source":1},{"begin":378,"end":744,"name":"PUSH","source":1,"value":"0"},{"begin":541,"end":608,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":605,"end":607,"name":"PUSH","source":1,"value":"1D"},{"begin":600,"end":603,"name":"DUP4","source":1},{"begin":541,"end":608,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":541,"end":608,"name":"JUMP","source":1,"value":"[in]"},{"begin":541,"end":608,"name":"tag","source":1,"value":"23"},{"begin":541,"end":608,"name":"JUMPDEST","source":1},{"begin":534,"end":608,"name":"SWAP2","source":1},{"begin":534,"end":608,"name":"POP","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":706,"end":709,"name":"DUP3","source":1},{"begin":617,"end":710,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":617,"end":710,"name":"JUMP","source":1,"value":"[in]"},{"begin":617,"end":710,"name":"tag","source":1,"value":"24"},{"begin":617,"end":710,"name":"JUMPDEST","source":1},{"begin":735,"end":737,"name":"PUSH","source":1,"value":"20"},{"begin":730,"end":733,"name":"DUP3","source":1},{"begin":726,"end":738,"name":"ADD","source":1},{"begin":719,"end":738,"name":"SWAP1","source":1},{"begin":719,"end":738,"name":"POP","source":1},{"begin":524,"end":744,"name":"SWAP2","source":1},{"begin":524,"end":744,"name":"SWAP1","source":1},{"begin":524,"end":744,"name":"POP","source":1},{"begin":524,"end":744,"name":"JUMP","source":1,"value":"[out]"},{"begin":750,"end":1169,"name":"tag","source":1,"value":"12"},{"begin":750,"end":1169,"name":"JUMPDEST","source":1},{"begin":750,"end":1169,"name":"PUSH","source":1,"value":"0"},{"begin":954,"end":956,"name":"PUSH","source":1,"value":"20"},{"begin":943,"end":952,"name":"DUP3","source":1},{"begin":939,"end":957,"name":"ADD","source":1},{"begin":931,"end":957,"name":"SWAP1","source":1},{"begin":931,"end":957,"name":"POP","source":1},{"begin":1003,"end":1012,"name":"DUP2","source":1},{"begin":997,"end":1001,"name":"DUP2","source":1},{"begin":993,"end":1013,"name":"SUB","source":1},{"begin":989,"end":990,"name":"PUSH","source":1,"value":"0"},{"begin":978,"end":987,"name":"DUP4","source":1},{"begin":974,"end":991,"name":"ADD","source":1},{"begin":967,"end":1014,"name":"MSTORE","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1157,"end":1161,"name":"DUP2","source":1},{"begin":1031,"end":1162,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1031,"end":1162,"name":"JUMP","source":1,"value":"[in]"},{"begin":1031,"end":1162,"name":"tag","source":1,"value":"27"},{"begin":1031,"end":1162,"name":"JUMPDEST","source":1},{"begin":1023,"end":1162,"name":"SWAP1","source":1},{"begin":1023,"end":1162,"name":"POP","source":1},{"begin":921,"end":1169,"name":"SWAP2","source":1},{"begin":921,"end":1169,"name":"SWAP1","source":1},{"begin":921,"end":1169,"name":"POP","source":1},{"begin":921,"end":1169,"name":"JUMP","source":1,"value":"[out]"},{"begin":1175,"end":1594,"name":"tag","source":1,"value":"8"},{"begin":1175,"end":1594,"name":"JUMPDEST","source":1},{"begin":1175,"end":1594,"name":"PUSH","source":1,"value":"0"},{"begin":1379,"end":1381,"name":"PUSH","source":1,"value":"20"},{"begin":1368,"end":1377,"name":"DUP3","source":1},{"begin":1364,"end":1382,"name":"ADD","source":1},{"begin":1356,"end":1382,"name":"SWAP1","source":1},{"begin":1356,"end":1382,"name":"POP","source":1},{"begin":1428,"end":1437,"name":"DUP2","source":1},{"begin":1422,"end":1426,"name":"DUP2","source":1},{"begin":1418,"end":1438,"name":"SUB","source":1},{"begin":1414,"end":1415,"name":"PUSH","source":1,"value":"0"},{"begin":1403,"end":1412,"name":"DUP4","source":1},{"begin":1399,"end":1416,"name":"ADD","source":1},{"begin":1392,"end":1439,"name":"MSTORE","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":1582,"end":1586,"name":"DUP2","source":1},{"begin":1456,"end":1587,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":1456,"end":1587,"name":"JUMP","source":1,"value":"[in]"},{"begin":1456,"end":1587,"name":"tag","source":1,"value":"29"},{"begin":1456,"end":1587,"name":"JUMPDEST","source":1},{"begin":1448,"end":1587,"name":"SWAP1","source":1},{"begin":1448,"end":1587,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"SWAP2","source":1},{"begin":1346,"end":1594,"name":"SWAP1","source":1},{"begin":1346,"end":1594,"name":"POP","source":1},{"begin":1346,"end":1594,"name":"JUMP","source":1,"value":"[out]"},{"begin":1600,"end":1769,"name":"tag","source":1,"value":"18"},{"begin":1600,"end":1769,"name":"JUMPDEST","source":1},{"begin":1600,"end":1769,"name":"PUSH","source":1,"value":"0"},{"begin":1718,"end":1724,"name":"DUP3","source":1},{"begin":1713,"end":1716,"name":"DUP3","source":1},{"begin":1706,"end":1725,"name":"MSTORE","source":1},{"begin":1758,"end":1762,"name":"PUSH","source":1,"value":"20"},{"begin":1753,"end":1756,"name":"DUP3","source":1},{"begin":1749,"end":1763,"name":"ADD","source":1},{"begin":1734,"end":1763,"name":"SWAP1","source":1},{"begin":1734,"end":1763,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"SWAP3","source":1},{"begin":1696,"end":1769,"name":"SWAP2","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"POP","source":1},{"begin":1696,"end":1769,"name":"JUMP","source":1,"value":"[out]"},{"begin":1775,"end":1931,"name":"tag","source":1,"value":"20"},{"begin":1775,"end":1931,"name":"JUMPDEST","source":1},{"begin":1915,"end":1923,"name":"PUSH","source":1,"value":"6661696C65640000000000000000000000000000000000000000000000000000"},{"begin":1911,"end":1912,"name":"PUSH","source":1,"value":"0"},{"begin":1903,"end":1909,"name":"DUP3","source":1},{"begin":1899,"end":1913,"name":"ADD","source":1},{"begin":1892,"end":1924,"name":"MSTORE","source":1},{"begin":1881,"end":1931,"name":"POP","source":1},{"begin":1881,"end":1931,"name":"JUMP","source":1,"value":"[out]"},{"begin":1937,"end":2116,"name":"tag","source":1,"value":"25"},{"begin":1937,"end":2116,"name":"JUMPDEST","source":1},{"begin":2077,"end":2108,"name":"PUSH","source":1,"value":"656C6C69707469632063757276652070616972696E67206661696C6564000000"},{"begin":2073,"end":2074,"name":"PUSH","source":1,"value":"0"},{"begin":2065,"end":2071,"name":"DUP3","source":1},{"begin":2061,"end":2075,"name":"ADD","source":1},{"begin":2054,"end":2109,"name":"MSTORE","source":1},{"begin":2043,"end":2116,"name":"POP","source":1},{"begin":2043,"end":2116,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":1708,"name":"tag","source":0,"value":"13"},{"begin":34,"end":1708,"name":"JUMPDEST","source":0},{"begin":34,"end":1708,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"CODECOPY","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033",".code":[{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1708,"name":"MSTORE","source":0},{"begin":34,"end":1708,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1708,"name":"DUP1","source":0},{"begin":34,"end":1708,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Pairing\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x53e3d63190581fae7ffa509a011ef9051a34716920e445019ec671b70f62ce7b\",\"urls\":[\"bzz-raw://03fe2554e9fd58d008751b86eb89d2b31e5eac80d93f76dc939b0d13945cdd38\",\"dweb:/ipfs/QmUThb48t3ZMNE6a99sgqtWNUVGitj4eRrS2Gj3oxxRfMu\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract Bn128Pairing {\n constructor() {\n uint256[12] memory input = [\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n ];\n uint256[1] memory result;\n bool success;\n assembly {\n // 0x08 id of the bn256CheckPairing precompile\n // 0 number of ether to transfer\n // 0 since we have an array of fixed length, our input starts in 0\n // 384 size of call parameters, i.e. 12*256 bits == 384 bytes\n // 32 size of result (one 32 byte boolean!)\n success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)\n }\n require(success, \"elliptic curve pairing failed\");\n require(result[0] == 1, \"failed\");\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1702 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":90:114 uint256[12] memory input */\n 0x00\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n mload(0x40)\n dup1\n 0x0180\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":131:197 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02 */\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":211:277 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84 */\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":291:357 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee */\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":371:437 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f */\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":451:517 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237 */\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":531:597 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f */\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":611:677 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9 */\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":691:757 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1 */\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":771:837 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 */\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":851:917 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed */\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":931:997 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b */\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1011:1077 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa */\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1097:1121 uint256[1] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":1131:1143 bool success */\n 0x00\n /* \"main.sol\":1577:1579 32 */\n 0x20\n /* \"main.sol\":1569:1575 result */\n dup3\n /* \"main.sol\":1564:1567 384 */\n 0x0180\n /* \"main.sol\":1557:1562 input */\n dup6\n /* \"main.sol\":1554:1555 0 */\n 0x00\n /* \"main.sol\":1548:1552 0x08 */\n 0x08\n /* \"main.sol\":1541:1545 2000 */\n 0x07d0\n /* \"main.sol\":1534:1539 gas() */\n gas\n /* \"main.sol\":1530:1546 sub(gas(), 2000) */\n sub\n /* \"main.sol\":1525:1580 call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n call\n /* \"main.sol\":1514:1580 success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n swap1\n pop\n /* \"main.sol\":1607:1614 success */\n dup1\n /* \"main.sol\":1599:1648 require(success, \"elliptic curve pairing failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1679:1680 1 */\n 0x01\n /* \"main.sol\":1666:1672 result */\n dup3\n /* \"main.sol\":1673:1674 0 */\n 0x00\n /* \"main.sol\":1666:1675 result[0] */\n 0x01\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1666:1680 result[0] == 1 */\n eq\n /* \"main.sol\":1658:1691 require(result[0] == 1, \"failed\") */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":66:1702 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n jump(tag_13)\ntag_5:\n mload(0x40)\n dup1\n 0x20\n add\n 0x40\n mstore\n dup1\n 0x01\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:372 */\ntag_15:\n 0x00\n /* \"#utility.yul\":170:236 */\n tag_17\n /* \"#utility.yul\":234:235 */\n 0x06\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:236 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":163:236 */\n swap2\n pop\n /* \"#utility.yul\":245:338 */\n tag_19\n /* \"#utility.yul\":334:337 */\n dup3\n /* \"#utility.yul\":245:338 */\n tag_20\n jump\t// in\ntag_19:\n /* \"#utility.yul\":363:365 */\n 0x20\n /* \"#utility.yul\":358:361 */\n dup3\n /* \"#utility.yul\":354:366 */\n add\n /* \"#utility.yul\":347:366 */\n swap1\n pop\n /* \"#utility.yul\":153:372 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":378:744 */\ntag_21:\n 0x00\n /* \"#utility.yul\":541:608 */\n tag_23\n /* \"#utility.yul\":605:607 */\n 0x1d\n /* \"#utility.yul\":600:603 */\n dup4\n /* \"#utility.yul\":541:608 */\n tag_18\n jump\t// in\ntag_23:\n /* \"#utility.yul\":534:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_24\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_25\n jump\t// in\ntag_24:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":524:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_12:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_27\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_15\n jump\t// in\ntag_27:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_8:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_29\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_21\n jump\t// in\ntag_29:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_18:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1931 */\ntag_20:\n /* \"#utility.yul\":1915:1923 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1924 */\n mstore\n /* \"#utility.yul\":1881:1931 */\n pop\n jump\t// out\n /* \"#utility.yul\":1937:2116 */\ntag_25:\n /* \"#utility.yul\":2077:2108 */\n 0x656c6c69707469632063757276652070616972696e67206661696c6564000000\n /* \"#utility.yul\":2073:2074 */\n 0x00\n /* \"#utility.yul\":2065:2071 */\n dup3\n /* \"#utility.yul\":2061:2075 */\n add\n /* \"#utility.yul\":2054:2109 */\n mstore\n /* \"#utility.yul\":2043:2116 */\n pop\n jump\t// out\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\ntag_13:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2119:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "153:219:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "163:73:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "229:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "234:1:1", + "type": "", + "value": "6" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "170:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "170:66:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "163:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "334:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulIdentifier", + "src": "245:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "245:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "245:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "347:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "358:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "363:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "354:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "354:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "347:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "141:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "149:3:1", + "type": "" + } + ], + "src": "7:365:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "524:220:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "534:74:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "600:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "605:2:1", + "type": "", + "value": "29" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "541:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "541:67:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "534:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "706:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", + "nodeType": "YulIdentifier", + "src": "617:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "617:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "617:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "719:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "730:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "735:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "726:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "726:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "719:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "512:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "520:3:1", + "type": "" + } + ], + "src": "378:366:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "921:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "931:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "943:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "954:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "939:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "939:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "931:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "978:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "989:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "974:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "974:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "997:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1003:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "993:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "993:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "967:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "967:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "967:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1023:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1157:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1031:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1031:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1023:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "901:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "916:4:1", + "type": "" + } + ], + "src": "750:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1346:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1356:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1368:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1379:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1364:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1364:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1356:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1403:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1414:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1399:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1399:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1422:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1428:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1418:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1418:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1392:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1392:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1392:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "1448:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1582:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1456:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "1456:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1448:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1326:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1341:4:1", + "type": "" + } + ], + "src": "1175:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1696:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1713:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1718:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1706:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1706:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1706:19:1" + }, + { + "nodeType": "YulAssignment", + "src": "1734:29:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1753:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1758:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1749:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1749:14:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "1734:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1668:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "1673:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "1684:11:1", + "type": "" + } + ], + "src": "1600:169:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1881:50:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1903:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1911:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1899:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1899:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "1915:8:1", + "type": "", + "value": "failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1892:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1892:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1892:32:1" + } + ] + }, + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1873:6:1", + "type": "" + } + ], + "src": "1775:156:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2043:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2065:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2073:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2061:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2061:14:1" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "2077:31:1", + "type": "", + "value": "elliptic curve pairing failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2054:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2054:55:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2054:55:1" + } + ] + }, + "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2035:6:1", + "type": "" + } + ], + "src": "1937:179:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n function store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve pairing failed\")\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x1EF PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x244 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x23B SWAP1 PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x280 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BC SWAP1 PUSH2 0x335 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FC PUSH1 0x6 DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x307 DUP3 PUSH2 0x386 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31F PUSH1 0x1D DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x32A DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34E DUP2 PUSH2 0x2EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x36E DUP2 PUSH2 0x312 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x3E6 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ", + "sourceMap": "34:1674:0:-:0;;;66:1636;;;;;;;;;;90:24;:997;;;;;;;;131:66;90:997;;;;211:66;90:997;;;;291:66;90:997;;;;371:66;90:997;;;;451:66;90:997;;;;531:66;90:997;;;;611:66;90:997;;;;691:66;90:997;;;;771:66;90:997;;;;851:66;90:997;;;;931:66;90:997;;;;1011:66;90:997;;;;;1097:24;;:::i;:::-;1131:12;1577:2;1569:6;1564:3;1557:5;1554:1;1548:4;1541;1534:5;1530:16;1525:55;1514:66;;1607:7;1599:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1679:1;1666:6;1673:1;1666:9;;;;;;;;;;;;;;;;;;;:14;1658:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1636;;;34:1674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:365:1:-;;170:66;234:1;229:3;170:66;:::i;:::-;163:73;;245:93;334:3;245:93;:::i;:::-;363:2;358:3;354:12;347:19;;153:219;;;:::o;378:366::-;;541:67;605:2;600:3;541:67;:::i;:::-;534:74;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;524:220;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:156::-;1915:8;1911:1;1903:6;1899:14;1892:32;1881:50;:::o;1937:179::-;2077:31;2073:1;2065:6;2061:14;2054:55;2043:73;:::o;34:1674:0:-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ", + "sourceMap": "34:1674:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "infinite", + "totalCost": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, + { "begin": 66, "end": 1702, "name": "CALLVALUE", "source": 0 }, + { "begin": 66, "end": 1702, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1702, "name": "ISZERO", "source": 0 }, + { + "begin": 66, + "end": 1702, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1702, "name": "JUMPI", "source": 0 }, + { + "begin": 66, + "end": 1702, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 66, "end": 1702, "name": "DUP1", "source": 0 }, + { "begin": 66, "end": 1702, "name": "REVERT", "source": 0 }, + { + "begin": 66, + "end": 1702, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 66, "end": 1702, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, + { + "begin": 90, + "end": 114, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 90, "end": 1087, "name": "MLOAD", "source": 0 }, + { "begin": 90, "end": 1087, "name": "DUP1", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "180" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { "begin": 90, "end": 1087, "name": "DUP1", "source": 0 }, + { + "begin": 131, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 211, + "end": 277, + "name": "PUSH", + "source": 0, + "value": "3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 291, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 371, + "end": 437, + "name": "PUSH", + "source": 0, + "value": "2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 451, + "end": 517, + "name": "PUSH", + "source": 0, + "value": "21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 531, + "end": 597, + "name": "PUSH", + "source": 0, + "value": "96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 611, + "end": 677, + "name": "PUSH", + "source": 0, + "value": "6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 691, + "end": 757, + "name": "PUSH", + "source": 0, + "value": "22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 771, + "end": 837, + "name": "PUSH", + "source": 0, + "value": "198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 851, + "end": 917, + "name": "PUSH", + "source": 0, + "value": "1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 931, + "end": 997, + "name": "PUSH", + "source": 0, + "value": "90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { + "begin": 90, + "end": 1087, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, + { + "begin": 1011, + "end": 1077, + "name": "PUSH", + "source": 0, + "value": "12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA" + }, + { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, + { "begin": 90, "end": 1087, "name": "POP", "source": 0 }, + { "begin": 90, "end": 1087, "name": "SWAP1", "source": 0 }, + { "begin": 90, "end": 1087, "name": "POP", "source": 0 }, + { + "begin": 1097, + "end": 1121, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 1097, + "end": 1121, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 1097, + "end": 1121, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1097, + "end": 1121, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 1097, "end": 1121, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1131, + "end": 1143, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1577, + "end": 1579, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1569, "end": 1575, "name": "DUP3", "source": 0 }, + { + "begin": 1564, + "end": 1567, + "name": "PUSH", + "source": 0, + "value": "180" + }, + { "begin": 1557, "end": 1562, "name": "DUP6", "source": 0 }, + { + "begin": 1554, + "end": 1555, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1548, + "end": 1552, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { + "begin": 1541, + "end": 1545, + "name": "PUSH", + "source": 0, + "value": "7D0" + }, + { "begin": 1534, "end": 1539, "name": "GAS", "source": 0 }, + { "begin": 1530, "end": 1546, "name": "SUB", "source": 0 }, + { "begin": 1525, "end": 1580, "name": "CALL", "source": 0 }, + { "begin": 1514, "end": 1580, "name": "SWAP1", "source": 0 }, + { "begin": 1514, "end": 1580, "name": "POP", "source": 0 }, + { "begin": 1607, "end": 1614, "name": "DUP1", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 1599, "end": 1648, "name": "JUMPI", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1599, "end": 1648, "name": "MLOAD", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1599, "end": 1648, "name": "DUP2", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "MSTORE", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1599, "end": 1648, "name": "ADD", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 1599, "end": 1648, "name": "SWAP1", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 1599, + "end": 1648, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1599, + "end": 1648, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 1599, "end": 1648, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1599, "end": 1648, "name": "MLOAD", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "DUP1", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "SWAP2", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "SUB", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "SWAP1", "source": 0 }, + { "begin": 1599, "end": 1648, "name": "REVERT", "source": 0 }, + { + "begin": 1599, + "end": 1648, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1599, "end": 1648, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1679, + "end": 1680, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1666, "end": 1672, "name": "DUP3", "source": 0 }, + { + "begin": 1673, + "end": 1674, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1666, "end": 1675, "name": "DUP2", "source": 0 }, + { "begin": 1666, "end": 1675, "name": "LT", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 1666, "end": 1675, "name": "JUMPI", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1666, "end": 1675, "name": "MSTORE", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "32" + }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1666, "end": 1675, "name": "MSTORE", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "24" + }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1666, "end": 1675, "name": "REVERT", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1666, "end": 1675, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1666, + "end": 1675, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1666, "end": 1675, "name": "MUL", "source": 0 }, + { "begin": 1666, "end": 1675, "name": "ADD", "source": 0 }, + { "begin": 1666, "end": 1675, "name": "MLOAD", "source": 0 }, + { "begin": 1666, "end": 1680, "name": "EQ", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 1658, "end": 1691, "name": "JUMPI", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1658, "end": 1691, "name": "MLOAD", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1658, "end": 1691, "name": "DUP2", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "MSTORE", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1658, "end": 1691, "name": "ADD", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1658, "end": 1691, "name": "SWAP1", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1658, + "end": 1691, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1658, + "end": 1691, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1658, "end": 1691, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1658, "end": 1691, "name": "MLOAD", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "DUP1", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "SWAP2", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "SUB", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "SWAP1", "source": 0 }, + { "begin": 1658, "end": 1691, "name": "REVERT", "source": 0 }, + { + "begin": 1658, + "end": 1691, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 1658, "end": 1691, "name": "JUMPDEST", "source": 0 }, + { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, + { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 34, "end": 1708, "name": "JUMP", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 34, "end": 1708, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1708, "name": "MLOAD", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 34, "end": 1708, "name": "ADD", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 34, "end": 1708, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1708, "name": "MUL", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1708, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP4", "source": 0 }, + { "begin": 34, "end": 1708, "name": "CALLDATACOPY", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1708, "name": "DUP3", "source": 0 }, + { "begin": 34, "end": 1708, "name": "ADD", "source": 0 }, + { "begin": 34, "end": 1708, "name": "SWAP2", "source": 0 }, + { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, + { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, + { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { "begin": 7, "end": 372, "name": "tag", "source": 1, "value": "15" }, + { "begin": 7, "end": 372, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 372, "name": "PUSH", "source": 1, "value": "0" }, + { + "begin": 170, + "end": 236, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 234, + "end": 235, + "name": "PUSH", + "source": 1, + "value": "6" + }, + { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, + { + "begin": 170, + "end": 236, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 170, + "end": 236, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 170, + "end": 236, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 170, "end": 236, "name": "JUMPDEST", "source": 1 }, + { "begin": 163, "end": 236, "name": "SWAP2", "source": 1 }, + { "begin": 163, "end": 236, "name": "POP", "source": 1 }, + { + "begin": 245, + "end": 338, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 334, "end": 337, "name": "DUP3", "source": 1 }, + { + "begin": 245, + "end": 338, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 245, + "end": 338, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 245, + "end": 338, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 245, "end": 338, "name": "JUMPDEST", "source": 1 }, + { + "begin": 363, + "end": 365, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 358, "end": 361, "name": "DUP3", "source": 1 }, + { "begin": 354, "end": 366, "name": "ADD", "source": 1 }, + { "begin": 347, "end": 366, "name": "SWAP1", "source": 1 }, + { "begin": 347, "end": 366, "name": "POP", "source": 1 }, + { "begin": 153, "end": 372, "name": "SWAP2", "source": 1 }, + { "begin": 153, "end": 372, "name": "SWAP1", "source": 1 }, + { "begin": 153, "end": 372, "name": "POP", "source": 1 }, + { + "begin": 153, + "end": 372, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 378, + "end": 744, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 378, "end": 744, "name": "JUMPDEST", "source": 1 }, + { + "begin": 378, + "end": 744, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 541, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 605, + "end": 607, + "name": "PUSH", + "source": 1, + "value": "1D" + }, + { "begin": 600, "end": 603, "name": "DUP4", "source": 1 }, + { + "begin": 541, + "end": 608, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 541, + "end": 608, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 541, + "end": 608, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 541, "end": 608, "name": "JUMPDEST", "source": 1 }, + { "begin": 534, "end": 608, "name": "SWAP2", "source": 1 }, + { "begin": 534, "end": 608, "name": "POP", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, + { + "begin": 617, + "end": 710, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 617, + "end": 710, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 617, + "end": 710, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, + { + "begin": 735, + "end": 737, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, + { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, + { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, + { "begin": 719, "end": 738, "name": "POP", "source": 1 }, + { "begin": 524, "end": 744, "name": "SWAP2", "source": 1 }, + { "begin": 524, "end": 744, "name": "SWAP1", "source": 1 }, + { "begin": 524, "end": 744, "name": "POP", "source": 1 }, + { + "begin": 524, + "end": 744, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 750, + "end": 1169, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, + { + "begin": 750, + "end": 1169, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 954, + "end": 956, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, + { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, + { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, + { "begin": 931, "end": 957, "name": "POP", "source": 1 }, + { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, + { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, + { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, + { + "begin": 989, + "end": 990, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, + { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, + { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, + { + "begin": 1031, + "end": 1162, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 1031, + "end": 1162, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1031, + "end": 1162, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, + { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, + { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, + { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, + { + "begin": 921, + "end": 1169, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1175, + "end": 1594, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1175, + "end": 1594, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1379, + "end": 1381, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, + { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, + { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, + { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, + { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, + { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, + { + "begin": 1414, + "end": 1415, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, + { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, + { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, + { + "begin": 1456, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 1456, + "end": 1587, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1456, + "end": 1587, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, + { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, + { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, + { + "begin": 1346, + "end": 1594, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1600, + "end": 1769, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1600, + "end": 1769, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, + { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, + { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, + { + "begin": 1758, + "end": 1762, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, + { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, + { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, + { + "begin": 1696, + "end": 1769, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1775, + "end": 1931, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 1775, "end": 1931, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1915, + "end": 1923, + "name": "PUSH", + "source": 1, + "value": "6661696C65640000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1911, + "end": 1912, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, + { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, + { "begin": 1892, "end": 1924, "name": "MSTORE", "source": 1 }, + { "begin": 1881, "end": 1931, "name": "POP", "source": 1 }, + { + "begin": 1881, + "end": 1931, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1937, + "end": 2116, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 1937, "end": 2116, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2077, + "end": 2108, + "name": "PUSH", + "source": 1, + "value": "656C6C69707469632063757276652070616972696E67206661696C6564000000" + }, + { + "begin": 2073, + "end": 2074, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2065, "end": 2071, "name": "DUP3", "source": 1 }, + { "begin": 2061, "end": 2075, "name": "ADD", "source": 1 }, + { "begin": 2054, "end": 2109, "name": "MSTORE", "source": 1 }, + { "begin": 2043, "end": 2116, "name": "POP", "source": 1 }, + { + "begin": 2043, + "end": 2116, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 34, + "end": 1708, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 34, "end": 1708, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1708, "name": "CODECOPY", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1708, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", + ".code": [ + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, + { + "begin": 34, + "end": 1708, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1708, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Pairing\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x53e3d63190581fae7ffa509a011ef9051a34716920e445019ec671b70f62ce7b\",\"urls\":[\"bzz-raw://03fe2554e9fd58d008751b86eb89d2b31e5eac80d93f76dc939b0d13945cdd38\",\"dweb:/ipfs/QmUThb48t3ZMNE6a99sgqtWNUVGitj4eRrS2Gj3oxxRfMu\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Pairing {\n constructor() {\n uint256[12] memory input = [\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n ];\n uint256[1] memory result;\n bool success;\n assembly {\n // 0x08 id of the bn256CheckPairing precompile\n // 0 number of ether to transfer\n // 0 since we have an array of fixed length, our input starts in 0\n // 384 size of call parameters, i.e. 12*256 bits == 384 bytes\n // 32 size of result (one 32 byte boolean!)\n success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)\n }\n require(success, \"elliptic curve pairing failed\");\n require(result[0] == 1, \"failed\");\n }\n }" +} diff --git a/tests/contracts/compiled/FailContract.json b/tests/contracts/compiled/FailContract.json index 38bb29194d7..40314e99f59 100644 --- a/tests/contracts/compiled/FailContract.json +++ b/tests/contracts/compiled/FailContract.json @@ -1 +1,176 @@ -{"byteCode":"0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":71:131 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":114:119 false */\n 0x00\n /* \"main.sol\":106:120 require(false) */\n tag_4\n jumpi\n 0x00\n dup1\n revert\ntag_4:\n /* \"main.sol\":39:137 contract FailContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F DUP1 PUSH1 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:98:0:-:0;;;71:60;;;;;;;;;;114:5;106:14;;;;;;39:98;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:98:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"64","totalCost":"12664"}},"legacyAssembly":{".code":[{"begin":39,"end":137,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":137,"name":"MSTORE","source":0},{"begin":71,"end":131,"name":"CALLVALUE","source":0},{"begin":71,"end":131,"name":"DUP1","source":0},{"begin":71,"end":131,"name":"ISZERO","source":0},{"begin":71,"end":131,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":71,"end":131,"name":"JUMPI","source":0},{"begin":71,"end":131,"name":"PUSH","source":0,"value":"0"},{"begin":71,"end":131,"name":"DUP1","source":0},{"begin":71,"end":131,"name":"REVERT","source":0},{"begin":71,"end":131,"name":"tag","source":0,"value":"1"},{"begin":71,"end":131,"name":"JUMPDEST","source":0},{"begin":71,"end":131,"name":"POP","source":0},{"begin":114,"end":119,"name":"PUSH","source":0,"value":"0"},{"begin":106,"end":120,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":106,"end":120,"name":"JUMPI","source":0},{"begin":106,"end":120,"name":"PUSH","source":0,"value":"0"},{"begin":106,"end":120,"name":"DUP1","source":0},{"begin":106,"end":120,"name":"REVERT","source":0},{"begin":106,"end":120,"name":"tag","source":0,"value":"4"},{"begin":106,"end":120,"name":"JUMPDEST","source":0},{"begin":39,"end":137,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":137,"name":"DUP1","source":0},{"begin":39,"end":137,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"CODECOPY","source":0},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033",".code":[{"begin":39,"end":137,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":137,"name":"MSTORE","source":0},{"begin":39,"end":137,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":137,"name":"DUP1","source":0},{"begin":39,"end":137,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FailContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4de9ab93b7ba7a82d8e58a903a5a297b8a8dc5263369657b062496782a5a51e9\",\"urls\":[\"bzz-raw://70e08b1c0fff16d5982491d2b46221465b0094cd251f991786aa1ca409f6c431\",\"dweb:/ipfs/QmVc7Qm8cNSUa4CrQhPtuSUJndczcDARrLoYc4z1CCuJ3m\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FailContract {\n constructor() public {\n require(false);\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":71:131 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":114:119 false */\n 0x00\n /* \"main.sol\":106:120 require(false) */\n tag_4\n jumpi\n 0x00\n dup1\n revert\ntag_4:\n /* \"main.sol\":39:137 contract FailContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F DUP1 PUSH1 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:98:0:-:0;;;71:60;;;;;;;;;;114:5;106:14;;;;;;39:98;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:98:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "64", + "totalCost": "12664" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 137, "name": "MSTORE", "source": 0 }, + { "begin": 71, "end": 131, "name": "CALLVALUE", "source": 0 }, + { "begin": 71, "end": 131, "name": "DUP1", "source": 0 }, + { "begin": 71, "end": 131, "name": "ISZERO", "source": 0 }, + { + "begin": 71, + "end": 131, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 71, "end": 131, "name": "JUMPI", "source": 0 }, + { + "begin": 71, + "end": 131, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 71, "end": 131, "name": "DUP1", "source": 0 }, + { "begin": 71, "end": 131, "name": "REVERT", "source": 0 }, + { "begin": 71, "end": 131, "name": "tag", "source": 0, "value": "1" }, + { "begin": 71, "end": 131, "name": "JUMPDEST", "source": 0 }, + { "begin": 71, "end": 131, "name": "POP", "source": 0 }, + { + "begin": 114, + "end": 119, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 106, + "end": 120, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 106, "end": 120, "name": "JUMPI", "source": 0 }, + { + "begin": 106, + "end": 120, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 106, "end": 120, "name": "DUP1", "source": 0 }, + { "begin": 106, "end": 120, "name": "REVERT", "source": 0 }, + { + "begin": 106, + "end": 120, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 106, "end": 120, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 137, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 137, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 137, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 137, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 137, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 137, "name": "MSTORE", "source": 0 }, + { + "begin": 39, + "end": 137, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 137, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 137, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FailContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4de9ab93b7ba7a82d8e58a903a5a297b8a8dc5263369657b062496782a5a51e9\",\"urls\":[\"bzz-raw://70e08b1c0fff16d5982491d2b46221465b0094cd251f991786aa1ca409f6c431\",\"dweb:/ipfs/QmVc7Qm8cNSUa4CrQhPtuSUJndczcDARrLoYc4z1CCuJ3m\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FailContract {\n constructor() public {\n require(false);\n }\n }" +} diff --git a/tests/contracts/compiled/FiniteLoopContract.json b/tests/contracts/compiled/FiniteLoopContract.json index c731f6f5e43..723b6f0796c 100644 --- a/tests/contracts/compiled/FiniteLoopContract.json +++ b/tests/contracts/compiled/FiniteLoopContract.json @@ -1 +1,2128 @@ -{"byteCode":"0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ","sourceMap":"39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"100600","executionCost":"5161","totalCost":"105761"},"external":{"count()":"1107","incr(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":109,"end":164,"name":"CALLVALUE","source":0},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"ISZERO","source":0},{"begin":109,"end":164,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPI","source":0},{"begin":109,"end":164,"name":"PUSH","source":0,"value":"0"},{"begin":109,"end":164,"name":"DUP1","source":0},{"begin":109,"end":164,"name":"REVERT","source":0},{"begin":109,"end":164,"name":"tag","source":0,"value":"1"},{"begin":109,"end":164,"name":"JUMPDEST","source":0},{"begin":109,"end":164,"name":"POP","source":0},{"begin":152,"end":153,"name":"PUSH","source":0,"value":"0"},{"begin":144,"end":149,"name":"DUP1","source":0},{"begin":144,"end":153,"name":"DUP2","source":0},{"begin":144,"end":153,"name":"SWAP1","source":0},{"begin":144,"end":153,"name":"SSTORE","source":0},{"begin":144,"end":153,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CODECOPY","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033",".code":[{"begin":39,"end":339,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":339,"name":"MSTORE","source":0},{"begin":39,"end":339,"name":"CALLVALUE","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"ISZERO","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"1"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"POP","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":339,"name":"CALLDATASIZE","source":0},{"begin":39,"end":339,"name":"LT","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"CALLDATALOAD","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":339,"name":"SHR","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"21B13C48"},{"begin":39,"end":339,"name":"EQ","source":0},{"begin":39,"end":339,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":339,"name":"JUMPI","source":0},{"begin":39,"end":339,"name":"tag","source":0,"value":"2"},{"begin":39,"end":339,"name":"JUMPDEST","source":0},{"begin":39,"end":339,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":339,"name":"DUP1","source":0},{"begin":39,"end":339,"name":"REVERT","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"3"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"5"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[in]"},{"begin":77,"end":94,"name":"tag","source":0,"value":"7"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"40"},{"begin":77,"end":94,"name":"MLOAD","source":0},{"begin":77,"end":94,"name":"DUP1","source":0},{"begin":77,"end":94,"name":"SWAP2","source":0},{"begin":77,"end":94,"name":"SUB","source":0},{"begin":77,"end":94,"name":"SWAP1","source":0},{"begin":77,"end":94,"name":"RETURN","source":0},{"begin":178,"end":333,"name":"tag","source":0,"value":"4"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":178,"end":333,"name":"PUSH","source":0,"value":"4"},{"begin":178,"end":333,"name":"DUP1","source":0},{"begin":178,"end":333,"name":"CALLDATASIZE","source":0},{"begin":178,"end":333,"name":"SUB","source":0},{"begin":178,"end":333,"name":"DUP2","source":0},{"begin":178,"end":333,"name":"ADD","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":178,"end":333,"name":"SWAP2","source":0},{"begin":178,"end":333,"name":"SWAP1","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"10"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[in]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"9"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"STOP","source":0},{"begin":77,"end":94,"name":"tag","source":0,"value":"6"},{"begin":77,"end":94,"name":"JUMPDEST","source":0},{"begin":77,"end":94,"name":"PUSH","source":0,"value":"0"},{"begin":77,"end":94,"name":"SLOAD","source":0},{"begin":77,"end":94,"name":"DUP2","source":0},{"begin":77,"end":94,"name":"JUMP","source":0,"value":"[out]"},{"begin":178,"end":333,"name":"tag","source":0,"value":"12"},{"begin":178,"end":333,"name":"JUMPDEST","source":0},{"begin":221,"end":227,"name":"PUSH","source":0,"value":"0"},{"begin":243,"end":323,"name":"tag","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":252,"end":253,"name":"DUP2","source":0},{"begin":250,"end":251,"name":"DUP2","source":0},{"begin":250,"end":253,"name":"LT","source":0},{"begin":243,"end":323,"name":"ISZERO","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPI","source":0},{"begin":285,"end":286,"name":"PUSH","source":0,"value":"1"},{"begin":279,"end":284,"name":"PUSH","source":0,"value":"0"},{"begin":279,"end":284,"name":"SLOAD","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":279,"end":286,"name":"SWAP2","source":0},{"begin":279,"end":286,"name":"SWAP1","source":0},{"begin":279,"end":286,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":279,"end":286,"name":"JUMP","source":0,"value":"[in]"},{"begin":279,"end":286,"name":"tag","source":0,"value":"16"},{"begin":279,"end":286,"name":"JUMPDEST","source":0},{"begin":273,"end":278,"name":"PUSH","source":0,"value":"0"},{"begin":273,"end":286,"name":"DUP2","source":0},{"begin":273,"end":286,"name":"SWAP1","source":0},{"begin":273,"end":286,"name":"SSTORE","source":0},{"begin":273,"end":286,"name":"POP","source":0},{"begin":307,"end":308,"name":"PUSH","source":0,"value":"1"},{"begin":304,"end":308,"name":"DUP2","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":304,"end":308,"name":"SWAP2","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":304,"end":308,"name":"JUMP","source":0,"value":"[in]"},{"begin":304,"end":308,"name":"tag","source":0,"value":"18"},{"begin":304,"end":308,"name":"JUMPDEST","source":0},{"begin":304,"end":308,"name":"SWAP1","source":0},{"begin":304,"end":308,"name":"POP","source":0},{"begin":243,"end":323,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":243,"end":323,"name":"JUMP","source":0},{"begin":243,"end":323,"name":"tag","source":0,"value":"15"},{"begin":243,"end":323,"name":"JUMPDEST","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"POP","source":0},{"begin":178,"end":333,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"20"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"22"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"25"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"26"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"27"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"29"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"8"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"32"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1077,"name":"tag","source":1,"value":"17"},{"begin":772,"end":1077,"name":"JUMPDEST","source":1},{"begin":772,"end":1077,"name":"PUSH","source":1,"value":"0"},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"34"},{"begin":849,"end":850,"name":"DUP3","source":1},{"begin":831,"end":851,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":831,"end":851,"name":"JUMP","source":1,"value":"[in]"},{"begin":831,"end":851,"name":"tag","source":1,"value":"34"},{"begin":831,"end":851,"name":"JUMPDEST","source":1},{"begin":826,"end":851,"name":"SWAP2","source":1},{"begin":826,"end":851,"name":"POP","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":883,"end":884,"name":"DUP4","source":1},{"begin":865,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":865,"end":885,"name":"JUMP","source":1,"value":"[in]"},{"begin":865,"end":885,"name":"tag","source":1,"value":"35"},{"begin":865,"end":885,"name":"JUMPDEST","source":1},{"begin":860,"end":885,"name":"SWAP3","source":1},{"begin":860,"end":885,"name":"POP","source":1},{"begin":1019,"end":1020,"name":"DUP3","source":1},{"begin":951,"end":1017,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":947,"end":1021,"name":"SUB","source":1},{"begin":944,"end":945,"name":"DUP3","source":1},{"begin":941,"end":1022,"name":"GT","source":1},{"begin":938,"end":940,"name":"ISZERO","source":1},{"begin":938,"end":940,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPI","source":1},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1025,"end":1043,"name":"JUMP","source":1,"value":"[in]"},{"begin":1025,"end":1043,"name":"tag","source":1,"value":"37"},{"begin":1025,"end":1043,"name":"JUMPDEST","source":1},{"begin":938,"end":940,"name":"tag","source":1,"value":"36"},{"begin":938,"end":940,"name":"JUMPDEST","source":1},{"begin":1069,"end":1070,"name":"DUP3","source":1},{"begin":1066,"end":1067,"name":"DUP3","source":1},{"begin":1062,"end":1071,"name":"ADD","source":1},{"begin":1055,"end":1071,"name":"SWAP1","source":1},{"begin":1055,"end":1071,"name":"POP","source":1},{"begin":816,"end":1077,"name":"SWAP3","source":1},{"begin":816,"end":1077,"name":"SWAP2","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"POP","source":1},{"begin":816,"end":1077,"name":"JUMP","source":1,"value":"[out]"},{"begin":1083,"end":1160,"name":"tag","source":1,"value":"30"},{"begin":1083,"end":1160,"name":"JUMPDEST","source":1},{"begin":1083,"end":1160,"name":"PUSH","source":1,"value":"0"},{"begin":1149,"end":1154,"name":"DUP2","source":1},{"begin":1138,"end":1154,"name":"SWAP1","source":1},{"begin":1138,"end":1154,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"SWAP2","source":1},{"begin":1128,"end":1160,"name":"SWAP1","source":1},{"begin":1128,"end":1160,"name":"POP","source":1},{"begin":1128,"end":1160,"name":"JUMP","source":1,"value":"[out]"},{"begin":1166,"end":1346,"name":"tag","source":1,"value":"38"},{"begin":1166,"end":1346,"name":"JUMPDEST","source":1},{"begin":1214,"end":1291,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1211,"end":1212,"name":"PUSH","source":1,"value":"0"},{"begin":1204,"end":1292,"name":"MSTORE","source":1},{"begin":1311,"end":1315,"name":"PUSH","source":1,"value":"11"},{"begin":1308,"end":1309,"name":"PUSH","source":1,"value":"4"},{"begin":1301,"end":1316,"name":"MSTORE","source":1},{"begin":1335,"end":1339,"name":"PUSH","source":1,"value":"24"},{"begin":1332,"end":1333,"name":"PUSH","source":1,"value":"0"},{"begin":1325,"end":1340,"name":"REVERT","source":1},{"begin":1352,"end":1474,"name":"tag","source":1,"value":"23"},{"begin":1352,"end":1474,"name":"JUMPDEST","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"42"},{"begin":1443,"end":1448,"name":"DUP2","source":1},{"begin":1425,"end":1449,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1425,"end":1449,"name":"JUMP","source":1,"value":"[in]"},{"begin":1425,"end":1449,"name":"tag","source":1,"value":"42"},{"begin":1425,"end":1449,"name":"JUMPDEST","source":1},{"begin":1418,"end":1423,"name":"DUP2","source":1},{"begin":1415,"end":1450,"name":"EQ","source":1},{"begin":1405,"end":1407,"name":"PUSH [tag]","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPI","source":1},{"begin":1464,"end":1465,"name":"PUSH","source":1,"value":"0"},{"begin":1461,"end":1462,"name":"DUP1","source":1},{"begin":1454,"end":1466,"name":"REVERT","source":1},{"begin":1405,"end":1407,"name":"tag","source":1,"value":"43"},{"begin":1405,"end":1407,"name":"JUMPDEST","source":1},{"begin":1395,"end":1474,"name":"POP","source":1},{"begin":1395,"end":1474,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"count()":"06661abd","incr(uint256)":"21b13c48"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:FiniteLoopContract","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ", + "sourceMap": "39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "100600", + "executionCost": "5161", + "totalCost": "105761" + }, + "external": { "count()": "1107", "incr(uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, + { "begin": 109, "end": 164, "name": "CALLVALUE", "source": 0 }, + { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, + { "begin": 109, "end": 164, "name": "ISZERO", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 109, "end": 164, "name": "JUMPI", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, + { "begin": 109, "end": 164, "name": "REVERT", "source": 0 }, + { + "begin": 109, + "end": 164, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 109, "end": 164, "name": "JUMPDEST", "source": 0 }, + { "begin": 109, "end": 164, "name": "POP", "source": 0 }, + { + "begin": 152, + "end": 153, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 144, "end": 149, "name": "DUP1", "source": 0 }, + { "begin": 144, "end": 153, "name": "DUP2", "source": 0 }, + { "begin": 144, "end": 153, "name": "SWAP1", "source": 0 }, + { "begin": 144, "end": 153, "name": "SSTORE", "source": 0 }, + { "begin": 144, "end": 153, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 339, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 339, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 339, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 339, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 339, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "21B13C48" + }, + { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 339, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, + { "begin": 77, "end": 94, "name": "DUP1", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, + { "begin": 77, "end": 94, "name": "SUB", "source": 0 }, + { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, + { "begin": 77, "end": 94, "name": "RETURN", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 178, + "end": 333, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 178, "end": 333, "name": "DUP1", "source": 0 }, + { "begin": 178, "end": 333, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 178, "end": 333, "name": "SUB", "source": 0 }, + { "begin": 178, "end": 333, "name": "DUP2", "source": 0 }, + { "begin": 178, "end": 333, "name": "ADD", "source": 0 }, + { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 178, "end": 333, "name": "SWAP2", "source": 0 }, + { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { "begin": 178, "end": 333, "name": "STOP", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 77, "end": 94, "name": "SLOAD", "source": 0 }, + { "begin": 77, "end": 94, "name": "DUP2", "source": 0 }, + { + "begin": 77, + "end": 94, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 178, + "end": 333, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, + { + "begin": 221, + "end": 227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 243, + "end": 323, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, + { "begin": 252, "end": 253, "name": "DUP2", "source": 0 }, + { "begin": 250, "end": 251, "name": "DUP2", "source": 0 }, + { "begin": 250, "end": 253, "name": "LT", "source": 0 }, + { "begin": 243, "end": 323, "name": "ISZERO", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 243, "end": 323, "name": "JUMPI", "source": 0 }, + { + "begin": 285, + "end": 286, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 279, + "end": 284, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 279, "end": 284, "name": "SLOAD", "source": 0 }, + { + "begin": 279, + "end": 286, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 279, "end": 286, "name": "SWAP2", "source": 0 }, + { "begin": 279, "end": 286, "name": "SWAP1", "source": 0 }, + { + "begin": 279, + "end": 286, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 279, + "end": 286, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 279, + "end": 286, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 279, "end": 286, "name": "JUMPDEST", "source": 0 }, + { + "begin": 273, + "end": 278, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 273, "end": 286, "name": "DUP2", "source": 0 }, + { "begin": 273, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 273, "end": 286, "name": "SSTORE", "source": 0 }, + { "begin": 273, "end": 286, "name": "POP", "source": 0 }, + { + "begin": 307, + "end": 308, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 304, "end": 308, "name": "DUP2", "source": 0 }, + { + "begin": 304, + "end": 308, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 304, "end": 308, "name": "SWAP2", "source": 0 }, + { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, + { + "begin": 304, + "end": 308, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 304, + "end": 308, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 304, + "end": 308, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 304, "end": 308, "name": "JUMPDEST", "source": 0 }, + { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, + { "begin": 304, "end": 308, "name": "POP", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 243, "end": 323, "name": "JUMP", "source": 0 }, + { + "begin": 243, + "end": 323, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, + { "begin": 178, "end": 333, "name": "POP", "source": 0 }, + { "begin": 178, "end": 333, "name": "POP", "source": 0 }, + { + "begin": 178, + "end": 333, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 414, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 414, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 260, + "end": 262, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, + { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, + { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, + { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, + { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { + "begin": 276, + "end": 277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, + { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { + "begin": 319, + "end": 320, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, + { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, + { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, + { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 344, + "end": 397, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 344, + "end": 397, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 397, "name": "POP", "source": 1 }, + { "begin": 290, "end": 407, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { + "begin": 218, + "end": 414, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 420, + "end": 538, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 507, + "end": 531, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 507, + "end": 531, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, + { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, + { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { + "begin": 485, + "end": 538, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 544, + "end": 766, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, + { + "begin": 544, + "end": 766, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 675, + "end": 677, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, + { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, + { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, + { "begin": 652, "end": 678, "name": "POP", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 756, + "end": 757, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, + { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, + { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 688, + "end": 759, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 688, + "end": 759, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { + "begin": 642, + "end": 766, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 772, + "end": 1077, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, + { + "begin": 772, + "end": 1077, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 831, + "end": 851, + "name": "PUSH [tag]", + "source": 1, + "value": "34" + }, + { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, + { + "begin": 831, + "end": 851, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 831, + "end": 851, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 831, + "end": 851, + "name": "tag", + "source": 1, + "value": "34" + }, + { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, + { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, + { "begin": 826, "end": 851, "name": "POP", "source": 1 }, + { + "begin": 865, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "35" + }, + { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, + { + "begin": 865, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 865, + "end": 885, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 865, + "end": 885, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, + { "begin": 860, "end": 885, "name": "POP", "source": 1 }, + { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, + { + "begin": 951, + "end": 1017, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, + { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, + { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, + { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, + { + "begin": 938, + "end": 940, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, + { + "begin": 1025, + "end": 1043, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { + "begin": 1025, + "end": 1043, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 1025, + "end": 1043, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1025, + "end": 1043, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, + { + "begin": 938, + "end": 940, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, + { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, + { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, + { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, + { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, + { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, + { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, + { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, + { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, + { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, + { + "begin": 816, + "end": 1077, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1083, + "end": 1160, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1083, + "end": 1160, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, + { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, + { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, + { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, + { + "begin": 1128, + "end": 1160, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1166, + "end": 1346, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1214, + "end": 1291, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1211, + "end": 1212, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, + { + "begin": 1311, + "end": 1315, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1308, + "end": 1309, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, + { + "begin": 1335, + "end": 1339, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1332, + "end": 1333, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, + { + "begin": 1352, + "end": 1474, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1449, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, + { + "begin": 1425, + "end": 1449, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 1425, + "end": 1449, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1425, + "end": 1449, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, + { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, + { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, + { + "begin": 1405, + "end": 1407, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, + { + "begin": 1464, + "end": 1465, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, + { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, + { + "begin": 1405, + "end": 1407, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, + { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, + { + "begin": 1395, + "end": 1474, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "count()": "06661abd", + "incr(uint256)": "21b13c48" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:FiniteLoopContract", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b507f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161007791906100ed565b602060405180830381855afa158015610094573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146100b757600080fd5b61014d565b60006100c782610104565b6100d1818561010f565b93506100e181856020860161011a565b80840191505092915050565b60006100f982846100bc565b915081905092915050565b600081519050919050565b600081905092915050565b60005b8381101561013857808201518184015260208101905061011d565b83811115610147576000848401525b50505050565b603f8061015b6000396000f3fe6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x77 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7 DUP3 PUSH2 0x104 JUMP JUMPDEST PUSH2 0xD1 DUP2 DUP6 PUSH2 0x10F JUMP JUMPDEST SWAP4 POP PUSH2 0xE1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x11A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9 DUP3 DUP5 PUSH2 0xBC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x15B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"32:170:0:-:0;;;62:134;;;;;;;;;;94:92;:33;104:22;;;;;;;;;;;;;;;;;94:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;86:101;;;;;;32:170;;7:373:1;;139:38;171:5;139:38;:::i;:::-;193:88;274:6;269:3;193:88;:::i;:::-;186:95;;290:52;335:6;330:3;323:4;316:5;312:16;290:52;:::i;:::-;367:6;362:3;358:16;351:23;;115:265;;;;;:::o;386:271::-;;538:93;627:3;618:6;538:93;:::i;:::-;531:100;;648:3;641:10;;520:137;;;;:::o;663:98::-;;748:5;742:12;732:22;;721:40;;;:::o;767:147::-;;905:3;890:18;;880:34;;;;:::o;920:307::-;988:1;998:113;1012:6;1009:1;1006:13;998:113;;;1097:1;1092:3;1088:11;1082:18;1078:1;1073:3;1069:11;1062:39;1034:2;1031:1;1027:10;1022:15;;998:113;;;1129:6;1126:1;1123:13;1120:2;;;1209:1;1200:6;1195:3;1191:16;1184:27;1120:2;969:258;;;;:::o;32:170:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"32:170:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"infinite","totalCost":"infinite"}},"legacyAssembly":{".code":[{"begin":32,"end":202,"name":"PUSH","source":0,"value":"80"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"40"},{"begin":32,"end":202,"name":"MSTORE","source":0},{"begin":62,"end":196,"name":"CALLVALUE","source":0},{"begin":62,"end":196,"name":"DUP1","source":0},{"begin":62,"end":196,"name":"ISZERO","source":0},{"begin":62,"end":196,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":62,"end":196,"name":"JUMPI","source":0},{"begin":62,"end":196,"name":"PUSH","source":0,"value":"0"},{"begin":62,"end":196,"name":"DUP1","source":0},{"begin":62,"end":196,"name":"REVERT","source":0},{"begin":62,"end":196,"name":"tag","source":0,"value":"1"},{"begin":62,"end":196,"name":"JUMPDEST","source":0},{"begin":62,"end":196,"name":"POP","source":0},{"begin":94,"end":186,"name":"PUSH","source":0,"value":"8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000"},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"3"},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"MLOAD","source":0},{"begin":104,"end":126,"name":"DUP1","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"ADD","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"40"},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"DUP1","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"C"},{"begin":104,"end":126,"name":"DUP2","source":0},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"20"},{"begin":104,"end":126,"name":"ADD","source":0},{"begin":104,"end":126,"name":"PUSH","source":0,"value":"48656C6C6F20576F726C64210000000000000000000000000000000000000000"},{"begin":104,"end":126,"name":"DUP2","source":0},{"begin":104,"end":126,"name":"MSTORE","source":0},{"begin":104,"end":126,"name":"POP","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":94,"end":127,"name":"SWAP2","source":0},{"begin":94,"end":127,"name":"SWAP1","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":94,"end":127,"name":"JUMP","source":0,"value":"[in]"},{"begin":94,"end":127,"name":"tag","source":0,"value":"4"},{"begin":94,"end":127,"name":"JUMPDEST","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"20"},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"DUP4","source":0},{"begin":94,"end":127,"name":"SUB","source":0},{"begin":94,"end":127,"name":"DUP2","source":0},{"begin":94,"end":127,"name":"DUP6","source":0},{"begin":94,"end":127,"name":"GAS","source":0},{"begin":94,"end":127,"name":"STATICCALL","source":0},{"begin":94,"end":127,"name":"ISZERO","source":0},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"ISZERO","source":0},{"begin":94,"end":127,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":94,"end":127,"name":"JUMPI","source":0},{"begin":94,"end":127,"name":"RETURNDATASIZE","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"0"},{"begin":94,"end":127,"name":"DUP1","source":0},{"begin":94,"end":127,"name":"RETURNDATACOPY","source":0},{"begin":94,"end":127,"name":"RETURNDATASIZE","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"0"},{"begin":94,"end":127,"name":"REVERT","source":0},{"begin":94,"end":127,"name":"tag","source":0,"value":"7"},{"begin":94,"end":127,"name":"JUMPDEST","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"POP","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"40"},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"MLOAD","source":0},{"begin":94,"end":127,"name":"PUSH","source":0,"value":"60"},{"begin":94,"end":127,"name":"SHL","source":0},{"begin":94,"end":186,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":94,"end":186,"name":"NOT","source":0},{"begin":94,"end":186,"name":"AND","source":0},{"begin":94,"end":186,"name":"EQ","source":0},{"begin":86,"end":187,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":86,"end":187,"name":"JUMPI","source":0},{"begin":86,"end":187,"name":"PUSH","source":0,"value":"0"},{"begin":86,"end":187,"name":"DUP1","source":0},{"begin":86,"end":187,"name":"REVERT","source":0},{"begin":86,"end":187,"name":"tag","source":0,"value":"8"},{"begin":86,"end":187,"name":"JUMPDEST","source":0},{"begin":32,"end":202,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":32,"end":202,"name":"JUMP","source":0},{"begin":7,"end":380,"name":"tag","source":1,"value":"11"},{"begin":7,"end":380,"name":"JUMPDEST","source":1},{"begin":7,"end":380,"name":"PUSH","source":1,"value":"0"},{"begin":139,"end":177,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":171,"end":176,"name":"DUP3","source":1},{"begin":139,"end":177,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":139,"end":177,"name":"JUMP","source":1,"value":"[in]"},{"begin":139,"end":177,"name":"tag","source":1,"value":"13"},{"begin":139,"end":177,"name":"JUMPDEST","source":1},{"begin":193,"end":281,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":274,"end":280,"name":"DUP2","source":1},{"begin":269,"end":272,"name":"DUP6","source":1},{"begin":193,"end":281,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":193,"end":281,"name":"JUMP","source":1,"value":"[in]"},{"begin":193,"end":281,"name":"tag","source":1,"value":"15"},{"begin":193,"end":281,"name":"JUMPDEST","source":1},{"begin":186,"end":281,"name":"SWAP4","source":1},{"begin":186,"end":281,"name":"POP","source":1},{"begin":290,"end":342,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":335,"end":341,"name":"DUP2","source":1},{"begin":330,"end":333,"name":"DUP6","source":1},{"begin":323,"end":327,"name":"PUSH","source":1,"value":"20"},{"begin":316,"end":321,"name":"DUP7","source":1},{"begin":312,"end":328,"name":"ADD","source":1},{"begin":290,"end":342,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":290,"end":342,"name":"JUMP","source":1,"value":"[in]"},{"begin":290,"end":342,"name":"tag","source":1,"value":"17"},{"begin":290,"end":342,"name":"JUMPDEST","source":1},{"begin":367,"end":373,"name":"DUP1","source":1},{"begin":362,"end":365,"name":"DUP5","source":1},{"begin":358,"end":374,"name":"ADD","source":1},{"begin":351,"end":374,"name":"SWAP2","source":1},{"begin":351,"end":374,"name":"POP","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"SWAP3","source":1},{"begin":115,"end":380,"name":"SWAP2","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"POP","source":1},{"begin":115,"end":380,"name":"JUMP","source":1,"value":"[out]"},{"begin":386,"end":657,"name":"tag","source":1,"value":"5"},{"begin":386,"end":657,"name":"JUMPDEST","source":1},{"begin":386,"end":657,"name":"PUSH","source":1,"value":"0"},{"begin":538,"end":631,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":627,"end":630,"name":"DUP3","source":1},{"begin":618,"end":624,"name":"DUP5","source":1},{"begin":538,"end":631,"name":"PUSH [tag]","source":1,"value":"11"},{"begin":538,"end":631,"name":"JUMP","source":1,"value":"[in]"},{"begin":538,"end":631,"name":"tag","source":1,"value":"20"},{"begin":538,"end":631,"name":"JUMPDEST","source":1},{"begin":531,"end":631,"name":"SWAP2","source":1},{"begin":531,"end":631,"name":"POP","source":1},{"begin":648,"end":651,"name":"DUP2","source":1},{"begin":641,"end":651,"name":"SWAP1","source":1},{"begin":641,"end":651,"name":"POP","source":1},{"begin":520,"end":657,"name":"SWAP3","source":1},{"begin":520,"end":657,"name":"SWAP2","source":1},{"begin":520,"end":657,"name":"POP","source":1},{"begin":520,"end":657,"name":"POP","source":1},{"begin":520,"end":657,"name":"JUMP","source":1,"value":"[out]"},{"begin":663,"end":761,"name":"tag","source":1,"value":"14"},{"begin":663,"end":761,"name":"JUMPDEST","source":1},{"begin":663,"end":761,"name":"PUSH","source":1,"value":"0"},{"begin":748,"end":753,"name":"DUP2","source":1},{"begin":742,"end":754,"name":"MLOAD","source":1},{"begin":732,"end":754,"name":"SWAP1","source":1},{"begin":732,"end":754,"name":"POP","source":1},{"begin":721,"end":761,"name":"SWAP2","source":1},{"begin":721,"end":761,"name":"SWAP1","source":1},{"begin":721,"end":761,"name":"POP","source":1},{"begin":721,"end":761,"name":"JUMP","source":1,"value":"[out]"},{"begin":767,"end":914,"name":"tag","source":1,"value":"16"},{"begin":767,"end":914,"name":"JUMPDEST","source":1},{"begin":767,"end":914,"name":"PUSH","source":1,"value":"0"},{"begin":905,"end":908,"name":"DUP2","source":1},{"begin":890,"end":908,"name":"SWAP1","source":1},{"begin":890,"end":908,"name":"POP","source":1},{"begin":880,"end":914,"name":"SWAP3","source":1},{"begin":880,"end":914,"name":"SWAP2","source":1},{"begin":880,"end":914,"name":"POP","source":1},{"begin":880,"end":914,"name":"POP","source":1},{"begin":880,"end":914,"name":"JUMP","source":1,"value":"[out]"},{"begin":920,"end":1227,"name":"tag","source":1,"value":"18"},{"begin":920,"end":1227,"name":"JUMPDEST","source":1},{"begin":988,"end":989,"name":"PUSH","source":1,"value":"0"},{"begin":998,"end":1111,"name":"tag","source":1,"value":"24"},{"begin":998,"end":1111,"name":"JUMPDEST","source":1},{"begin":1012,"end":1018,"name":"DUP4","source":1},{"begin":1009,"end":1010,"name":"DUP2","source":1},{"begin":1006,"end":1019,"name":"LT","source":1},{"begin":998,"end":1111,"name":"ISZERO","source":1},{"begin":998,"end":1111,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":998,"end":1111,"name":"JUMPI","source":1},{"begin":1097,"end":1098,"name":"DUP1","source":1},{"begin":1092,"end":1095,"name":"DUP3","source":1},{"begin":1088,"end":1099,"name":"ADD","source":1},{"begin":1082,"end":1100,"name":"MLOAD","source":1},{"begin":1078,"end":1079,"name":"DUP2","source":1},{"begin":1073,"end":1076,"name":"DUP5","source":1},{"begin":1069,"end":1080,"name":"ADD","source":1},{"begin":1062,"end":1101,"name":"MSTORE","source":1},{"begin":1034,"end":1036,"name":"PUSH","source":1,"value":"20"},{"begin":1031,"end":1032,"name":"DUP2","source":1},{"begin":1027,"end":1037,"name":"ADD","source":1},{"begin":1022,"end":1037,"name":"SWAP1","source":1},{"begin":1022,"end":1037,"name":"POP","source":1},{"begin":998,"end":1111,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":998,"end":1111,"name":"JUMP","source":1},{"begin":998,"end":1111,"name":"tag","source":1,"value":"26"},{"begin":998,"end":1111,"name":"JUMPDEST","source":1},{"begin":1129,"end":1135,"name":"DUP4","source":1},{"begin":1126,"end":1127,"name":"DUP2","source":1},{"begin":1123,"end":1136,"name":"GT","source":1},{"begin":1120,"end":1122,"name":"ISZERO","source":1},{"begin":1120,"end":1122,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1120,"end":1122,"name":"JUMPI","source":1},{"begin":1209,"end":1210,"name":"PUSH","source":1,"value":"0"},{"begin":1200,"end":1206,"name":"DUP5","source":1},{"begin":1195,"end":1198,"name":"DUP5","source":1},{"begin":1191,"end":1207,"name":"ADD","source":1},{"begin":1184,"end":1211,"name":"MSTORE","source":1},{"begin":1120,"end":1122,"name":"tag","source":1,"value":"27"},{"begin":1120,"end":1122,"name":"JUMPDEST","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"POP","source":1},{"begin":969,"end":1227,"name":"JUMP","source":1,"value":"[out]"},{"begin":32,"end":202,"name":"tag","source":0,"value":"9"},{"begin":32,"end":202,"name":"JUMPDEST","source":0},{"begin":32,"end":202,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":32,"end":202,"name":"DUP1","source":0},{"begin":32,"end":202,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"CODECOPY","source":0},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033",".code":[{"begin":32,"end":202,"name":"PUSH","source":0,"value":"80"},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"40"},{"begin":32,"end":202,"name":"MSTORE","source":0},{"begin":32,"end":202,"name":"PUSH","source":0,"value":"0"},{"begin":32,"end":202,"name":"DUP1","source":0},{"begin":32,"end":202,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"HashRipmd160\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf3ae788ee7dce70defb6af44a4f7bfa31cb824bd3be9b4975e130191d96ea505\",\"urls\":[\"bzz-raw://4a252a1c455fb39492f493b58841b260aa4d0675a94cc892e218e07fc2d27b82\",\"dweb:/ipfs/QmUVQYPzqdmRavXJddNkSDZQ6hXThqVLHfYWFNj1yNMgSJ\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract HashRipmd160 {\n constructor() {\n require(ripemd160(bytes ('Hello World!')) ==\n hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c');\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b507f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161007791906100ed565b602060405180830381855afa158015610094573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146100b757600080fd5b61014d565b60006100c782610104565b6100d1818561010f565b93506100e181856020860161011a565b80840191505092915050565b60006100f982846100bc565b915081905092915050565b600081519050919050565b600081905092915050565b60005b8381101561013857808201518184015260208101905061011d565b83811115610147576000848401525b50505050565b603f8061015b6000396000f3fe6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":32:202 contract HashRipmd160 {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":62:196 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:186 ripemd160(bytes ('Hello World!')) ==... */\n 0x8476ee4631b9b30ac2754b0ee0c47e161d3f724c000000000000000000000000\n /* \"main.sol\":94:127 ripemd160(bytes ('Hello World!')) */\n 0x03\n /* \"main.sol\":104:126 bytes ('Hello World!') */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x0c\n dup2\n mstore\n 0x20\n add\n 0x48656c6c6f20576f726c64210000000000000000000000000000000000000000\n dup2\n mstore\n pop\n /* \"main.sol\":94:127 ripemd160(bytes ('Hello World!')) */\n mload(0x40)\n tag_4\n swap2\n swap1\n tag_5\n jump\t// in\ntag_4:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_7\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\ntag_7:\n pop\n pop\n pop\n shl(0x60, mload(mload(0x40)))\n /* \"main.sol\":94:186 ripemd160(bytes ('Hello World!')) ==... */\n not(0xffffffffffffffffffffffff)\n and\n eq\n /* \"main.sol\":86:187 require(ripemd160(bytes ('Hello World!')) ==... */\n tag_8\n jumpi\n 0x00\n dup1\n revert\ntag_8:\n /* \"main.sol\":32:202 contract HashRipmd160 {... */\n jump(tag_9)\n /* \"#utility.yul\":7:380 */\ntag_11:\n 0x00\n /* \"#utility.yul\":139:177 */\n tag_13\n /* \"#utility.yul\":171:176 */\n dup3\n /* \"#utility.yul\":139:177 */\n tag_14\n jump\t// in\ntag_13:\n /* \"#utility.yul\":193:281 */\n tag_15\n /* \"#utility.yul\":274:280 */\n dup2\n /* \"#utility.yul\":269:272 */\n dup6\n /* \"#utility.yul\":193:281 */\n tag_16\n jump\t// in\ntag_15:\n /* \"#utility.yul\":186:281 */\n swap4\n pop\n /* \"#utility.yul\":290:342 */\n tag_17\n /* \"#utility.yul\":335:341 */\n dup2\n /* \"#utility.yul\":330:333 */\n dup6\n /* \"#utility.yul\":323:327 */\n 0x20\n /* \"#utility.yul\":316:321 */\n dup7\n /* \"#utility.yul\":312:328 */\n add\n /* \"#utility.yul\":290:342 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":367:373 */\n dup1\n /* \"#utility.yul\":362:365 */\n dup5\n /* \"#utility.yul\":358:374 */\n add\n /* \"#utility.yul\":351:374 */\n swap2\n pop\n /* \"#utility.yul\":115:380 */\n pop\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":386:657 */\ntag_5:\n 0x00\n /* \"#utility.yul\":538:631 */\n tag_20\n /* \"#utility.yul\":627:630 */\n dup3\n /* \"#utility.yul\":618:624 */\n dup5\n /* \"#utility.yul\":538:631 */\n tag_11\n jump\t// in\ntag_20:\n /* \"#utility.yul\":531:631 */\n swap2\n pop\n /* \"#utility.yul\":648:651 */\n dup2\n /* \"#utility.yul\":641:651 */\n swap1\n pop\n /* \"#utility.yul\":520:657 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":663:761 */\ntag_14:\n 0x00\n /* \"#utility.yul\":748:753 */\n dup2\n /* \"#utility.yul\":742:754 */\n mload\n /* \"#utility.yul\":732:754 */\n swap1\n pop\n /* \"#utility.yul\":721:761 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":767:914 */\ntag_16:\n 0x00\n /* \"#utility.yul\":905:908 */\n dup2\n /* \"#utility.yul\":890:908 */\n swap1\n pop\n /* \"#utility.yul\":880:914 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":920:1227 */\ntag_18:\n /* \"#utility.yul\":988:989 */\n 0x00\n /* \"#utility.yul\":998:1111 */\ntag_24:\n /* \"#utility.yul\":1012:1018 */\n dup4\n /* \"#utility.yul\":1009:1010 */\n dup2\n /* \"#utility.yul\":1006:1019 */\n lt\n /* \"#utility.yul\":998:1111 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":1097:1098 */\n dup1\n /* \"#utility.yul\":1092:1095 */\n dup3\n /* \"#utility.yul\":1088:1099 */\n add\n /* \"#utility.yul\":1082:1100 */\n mload\n /* \"#utility.yul\":1078:1079 */\n dup2\n /* \"#utility.yul\":1073:1076 */\n dup5\n /* \"#utility.yul\":1069:1080 */\n add\n /* \"#utility.yul\":1062:1101 */\n mstore\n /* \"#utility.yul\":1034:1036 */\n 0x20\n /* \"#utility.yul\":1031:1032 */\n dup2\n /* \"#utility.yul\":1027:1037 */\n add\n /* \"#utility.yul\":1022:1037 */\n swap1\n pop\n /* \"#utility.yul\":998:1111 */\n jump(tag_24)\ntag_26:\n /* \"#utility.yul\":1129:1135 */\n dup4\n /* \"#utility.yul\":1126:1127 */\n dup2\n /* \"#utility.yul\":1123:1136 */\n gt\n /* \"#utility.yul\":1120:1122 */\n iszero\n tag_27\n jumpi\n /* \"#utility.yul\":1209:1210 */\n 0x00\n /* \"#utility.yul\":1200:1206 */\n dup5\n /* \"#utility.yul\":1195:1198 */\n dup5\n /* \"#utility.yul\":1191:1207 */\n add\n /* \"#utility.yul\":1184:1211 */\n mstore\n /* \"#utility.yul\":1120:1122 */\ntag_27:\n /* \"#utility.yul\":969:1227 */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":32:202 contract HashRipmd160 {... */\ntag_9:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":32:202 contract HashRipmd160 {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1230:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "115:265:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "125:52:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "171:5:1" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "139:31:1" + }, + "nodeType": "YulFunctionCall", + "src": "139:38:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "129:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "186:95:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "269:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "274:6:1" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "193:75:1" + }, + "nodeType": "YulFunctionCall", + "src": "193:88:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "186:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "316:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "323:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "312:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "312:16:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "330:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "335:6:1" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "290:21:1" + }, + "nodeType": "YulFunctionCall", + "src": "290:52:1" + }, + "nodeType": "YulExpressionStatement", + "src": "290:52:1" + }, + { + "nodeType": "YulAssignment", + "src": "351:23:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "362:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "367:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "358:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "358:16:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "351:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "96:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "103:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "111:3:1", + "type": "" + } + ], + "src": "7:373:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "520:137:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "531:100:1", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "618:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "627:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "538:79:1" + }, + "nodeType": "YulFunctionCall", + "src": "538:93:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "531:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "641:10:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "648:3:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "641:3:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "499:3:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "505:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "516:3:1", + "type": "" + } + ], + "src": "386:271:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "721:40:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "732:22:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "748:5:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "742:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "742:12:1" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "732:6:1" + } + ] + } + ] + }, + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "704:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "714:6:1", + "type": "" + } + ], + "src": "663:98:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "880:34:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "890:18:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "905:3:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "890:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "852:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "857:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "868:11:1", + "type": "" + } + ], + "src": "767:147:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "969:258:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "979:10:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "988:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "983:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1048:63:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1073:3:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1078:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1069:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1069:11:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1092:3:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1097:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1088:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1088:11:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1082:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "1082:18:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1062:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1062:39:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1062:39:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1009:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1012:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1006:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1006:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "1020:19:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1022:15:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1031:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1034:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1027:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1027:10:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1022:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "1002:3:1", + "statements": [] + }, + "src": "998:113:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1145:76:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1195:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1200:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1191:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1191:16:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1209:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1184:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1184:27:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1184:27:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1126:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1129:6:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1123:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1123:13:1" + }, + "nodeType": "YulIf", + "src": "1120:2:1" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "951:3:1", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "956:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "961:6:1", + "type": "" + } + ], + "src": "920:307:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b507f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161007791906100ed565b602060405180830381855afa158015610094573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146100b757600080fd5b61014d565b60006100c782610104565b6100d1818561010f565b93506100e181856020860161011a565b80840191505092915050565b60006100f982846100bc565b915081905092915050565b600081519050919050565b600081905092915050565b60005b8381101561013857808201518184015260208101905061011d565b83811115610147576000848401525b50505050565b603f8061015b6000396000f3fe6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x77 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7 DUP3 PUSH2 0x104 JUMP JUMPDEST PUSH2 0xD1 DUP2 DUP6 PUSH2 0x10F JUMP JUMPDEST SWAP4 POP PUSH2 0xE1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x11A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9 DUP3 DUP5 PUSH2 0xBC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x15B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "32:170:0:-:0;;;62:134;;;;;;;;;;94:92;:33;104:22;;;;;;;;;;;;;;;;;94:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;86:101;;;;;;32:170;;7:373:1;;139:38;171:5;139:38;:::i;:::-;193:88;274:6;269:3;193:88;:::i;:::-;186:95;;290:52;335:6;330:3;323:4;316:5;312:16;290:52;:::i;:::-;367:6;362:3;358:16;351:23;;115:265;;;;;:::o;386:271::-;;538:93;627:3;618:6;538:93;:::i;:::-;531:100;;648:3;641:10;;520:137;;;;:::o;663:98::-;;748:5;742:12;732:22;;721:40;;;:::o;767:147::-;;905:3;890:18;;880:34;;;;:::o;920:307::-;988:1;998:113;1012:6;1009:1;1006:13;998:113;;;1097:1;1092:3;1088:11;1082:18;1078:1;1073:3;1069:11;1062:39;1034:2;1031:1;1027:10;1022:15;;998:113;;;1129:6;1126:1;1123:13;1120:2;;;1209:1;1200:6;1195:3;1191:16;1184:27;1120:2;969:258;;;;:::o;32:170:0:-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "32:170:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "infinite", + "totalCost": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 32, "end": 202, "name": "MSTORE", "source": 0 }, + { "begin": 62, "end": 196, "name": "CALLVALUE", "source": 0 }, + { "begin": 62, "end": 196, "name": "DUP1", "source": 0 }, + { "begin": 62, "end": 196, "name": "ISZERO", "source": 0 }, + { + "begin": 62, + "end": 196, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 62, "end": 196, "name": "JUMPI", "source": 0 }, + { + "begin": 62, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 62, "end": 196, "name": "DUP1", "source": 0 }, + { "begin": 62, "end": 196, "name": "REVERT", "source": 0 }, + { "begin": 62, "end": 196, "name": "tag", "source": 0, "value": "1" }, + { "begin": 62, "end": 196, "name": "JUMPDEST", "source": 0 }, + { "begin": 62, "end": 196, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000" + }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 104, "end": 126, "name": "MLOAD", "source": 0 }, + { "begin": 104, "end": 126, "name": "DUP1", "source": 0 }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 104, "end": 126, "name": "ADD", "source": 0 }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, + { "begin": 104, "end": 126, "name": "DUP1", "source": 0 }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "C" + }, + { "begin": 104, "end": 126, "name": "DUP2", "source": 0 }, + { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 104, "end": 126, "name": "ADD", "source": 0 }, + { + "begin": 104, + "end": 126, + "name": "PUSH", + "source": 0, + "value": "48656C6C6F20576F726C64210000000000000000000000000000000000000000" + }, + { "begin": 104, "end": 126, "name": "DUP2", "source": 0 }, + { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, + { "begin": 104, "end": 126, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 94, "end": 127, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 127, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 94, + "end": 127, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { "begin": 94, "end": 127, "name": "tag", "source": 0, "value": "4" }, + { "begin": 94, "end": 127, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, + { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 127, "name": "DUP4", "source": 0 }, + { "begin": 94, "end": 127, "name": "SUB", "source": 0 }, + { "begin": 94, "end": 127, "name": "DUP2", "source": 0 }, + { "begin": 94, "end": 127, "name": "DUP6", "source": 0 }, + { "begin": 94, "end": 127, "name": "GAS", "source": 0 }, + { "begin": 94, "end": 127, "name": "STATICCALL", "source": 0 }, + { "begin": 94, "end": 127, "name": "ISZERO", "source": 0 }, + { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 127, "name": "ISZERO", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 94, "end": 127, "name": "JUMPI", "source": 0 }, + { "begin": 94, "end": 127, "name": "RETURNDATASIZE", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 127, "name": "RETURNDATACOPY", "source": 0 }, + { "begin": 94, "end": 127, "name": "RETURNDATASIZE", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 94, "end": 127, "name": "REVERT", "source": 0 }, + { "begin": 94, "end": 127, "name": "tag", "source": 0, "value": "7" }, + { "begin": 94, "end": 127, "name": "JUMPDEST", "source": 0 }, + { "begin": 94, "end": 127, "name": "POP", "source": 0 }, + { "begin": 94, "end": 127, "name": "POP", "source": 0 }, + { "begin": 94, "end": 127, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, + { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, + { + "begin": 94, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 94, "end": 127, "name": "SHL", "source": 0 }, + { + "begin": 94, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 94, "end": 186, "name": "NOT", "source": 0 }, + { "begin": 94, "end": 186, "name": "AND", "source": 0 }, + { "begin": 94, "end": 186, "name": "EQ", "source": 0 }, + { + "begin": 86, + "end": 187, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 86, "end": 187, "name": "JUMPI", "source": 0 }, + { + "begin": 86, + "end": 187, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 86, "end": 187, "name": "DUP1", "source": 0 }, + { "begin": 86, "end": 187, "name": "REVERT", "source": 0 }, + { "begin": 86, "end": 187, "name": "tag", "source": 0, "value": "8" }, + { "begin": 86, "end": 187, "name": "JUMPDEST", "source": 0 }, + { + "begin": 32, + "end": 202, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 32, "end": 202, "name": "JUMP", "source": 0 }, + { "begin": 7, "end": 380, "name": "tag", "source": 1, "value": "11" }, + { "begin": 7, "end": 380, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 380, "name": "PUSH", "source": 1, "value": "0" }, + { + "begin": 139, + "end": 177, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { "begin": 171, "end": 176, "name": "DUP3", "source": 1 }, + { + "begin": 139, + "end": 177, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { + "begin": 139, + "end": 177, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 139, + "end": 177, + "name": "tag", + "source": 1, + "value": "13" + }, + { "begin": 139, "end": 177, "name": "JUMPDEST", "source": 1 }, + { + "begin": 193, + "end": 281, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { "begin": 274, "end": 280, "name": "DUP2", "source": 1 }, + { "begin": 269, "end": 272, "name": "DUP6", "source": 1 }, + { + "begin": 193, + "end": 281, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 193, + "end": 281, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 193, + "end": 281, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 193, "end": 281, "name": "JUMPDEST", "source": 1 }, + { "begin": 186, "end": 281, "name": "SWAP4", "source": 1 }, + { "begin": 186, "end": 281, "name": "POP", "source": 1 }, + { + "begin": 290, + "end": 342, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { "begin": 335, "end": 341, "name": "DUP2", "source": 1 }, + { "begin": 330, "end": 333, "name": "DUP6", "source": 1 }, + { + "begin": 323, + "end": 327, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 316, "end": 321, "name": "DUP7", "source": 1 }, + { "begin": 312, "end": 328, "name": "ADD", "source": 1 }, + { + "begin": 290, + "end": 342, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 290, + "end": 342, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 290, + "end": 342, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 290, "end": 342, "name": "JUMPDEST", "source": 1 }, + { "begin": 367, "end": 373, "name": "DUP1", "source": 1 }, + { "begin": 362, "end": 365, "name": "DUP5", "source": 1 }, + { "begin": 358, "end": 374, "name": "ADD", "source": 1 }, + { "begin": 351, "end": 374, "name": "SWAP2", "source": 1 }, + { "begin": 351, "end": 374, "name": "POP", "source": 1 }, + { "begin": 115, "end": 380, "name": "POP", "source": 1 }, + { "begin": 115, "end": 380, "name": "SWAP3", "source": 1 }, + { "begin": 115, "end": 380, "name": "SWAP2", "source": 1 }, + { "begin": 115, "end": 380, "name": "POP", "source": 1 }, + { "begin": 115, "end": 380, "name": "POP", "source": 1 }, + { + "begin": 115, + "end": 380, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 386, + "end": 657, + "name": "tag", + "source": 1, + "value": "5" + }, + { "begin": 386, "end": 657, "name": "JUMPDEST", "source": 1 }, + { + "begin": 386, + "end": 657, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 538, + "end": 631, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 627, "end": 630, "name": "DUP3", "source": 1 }, + { "begin": 618, "end": 624, "name": "DUP5", "source": 1 }, + { + "begin": 538, + "end": 631, + "name": "PUSH [tag]", + "source": 1, + "value": "11" + }, + { + "begin": 538, + "end": 631, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 538, + "end": 631, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 538, "end": 631, "name": "JUMPDEST", "source": 1 }, + { "begin": 531, "end": 631, "name": "SWAP2", "source": 1 }, + { "begin": 531, "end": 631, "name": "POP", "source": 1 }, + { "begin": 648, "end": 651, "name": "DUP2", "source": 1 }, + { "begin": 641, "end": 651, "name": "SWAP1", "source": 1 }, + { "begin": 641, "end": 651, "name": "POP", "source": 1 }, + { "begin": 520, "end": 657, "name": "SWAP3", "source": 1 }, + { "begin": 520, "end": 657, "name": "SWAP2", "source": 1 }, + { "begin": 520, "end": 657, "name": "POP", "source": 1 }, + { "begin": 520, "end": 657, "name": "POP", "source": 1 }, + { + "begin": 520, + "end": 657, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 663, + "end": 761, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 663, "end": 761, "name": "JUMPDEST", "source": 1 }, + { + "begin": 663, + "end": 761, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 748, "end": 753, "name": "DUP2", "source": 1 }, + { "begin": 742, "end": 754, "name": "MLOAD", "source": 1 }, + { "begin": 732, "end": 754, "name": "SWAP1", "source": 1 }, + { "begin": 732, "end": 754, "name": "POP", "source": 1 }, + { "begin": 721, "end": 761, "name": "SWAP2", "source": 1 }, + { "begin": 721, "end": 761, "name": "SWAP1", "source": 1 }, + { "begin": 721, "end": 761, "name": "POP", "source": 1 }, + { + "begin": 721, + "end": 761, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 767, + "end": 914, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 767, "end": 914, "name": "JUMPDEST", "source": 1 }, + { + "begin": 767, + "end": 914, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 905, "end": 908, "name": "DUP2", "source": 1 }, + { "begin": 890, "end": 908, "name": "SWAP1", "source": 1 }, + { "begin": 890, "end": 908, "name": "POP", "source": 1 }, + { "begin": 880, "end": 914, "name": "SWAP3", "source": 1 }, + { "begin": 880, "end": 914, "name": "SWAP2", "source": 1 }, + { "begin": 880, "end": 914, "name": "POP", "source": 1 }, + { "begin": 880, "end": 914, "name": "POP", "source": 1 }, + { + "begin": 880, + "end": 914, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 920, + "end": 1227, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 920, "end": 1227, "name": "JUMPDEST", "source": 1 }, + { + "begin": 988, + "end": 989, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 998, + "end": 1111, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 998, "end": 1111, "name": "JUMPDEST", "source": 1 }, + { "begin": 1012, "end": 1018, "name": "DUP4", "source": 1 }, + { "begin": 1009, "end": 1010, "name": "DUP2", "source": 1 }, + { "begin": 1006, "end": 1019, "name": "LT", "source": 1 }, + { "begin": 998, "end": 1111, "name": "ISZERO", "source": 1 }, + { + "begin": 998, + "end": 1111, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 998, "end": 1111, "name": "JUMPI", "source": 1 }, + { "begin": 1097, "end": 1098, "name": "DUP1", "source": 1 }, + { "begin": 1092, "end": 1095, "name": "DUP3", "source": 1 }, + { "begin": 1088, "end": 1099, "name": "ADD", "source": 1 }, + { "begin": 1082, "end": 1100, "name": "MLOAD", "source": 1 }, + { "begin": 1078, "end": 1079, "name": "DUP2", "source": 1 }, + { "begin": 1073, "end": 1076, "name": "DUP5", "source": 1 }, + { "begin": 1069, "end": 1080, "name": "ADD", "source": 1 }, + { "begin": 1062, "end": 1101, "name": "MSTORE", "source": 1 }, + { + "begin": 1034, + "end": 1036, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1031, "end": 1032, "name": "DUP2", "source": 1 }, + { "begin": 1027, "end": 1037, "name": "ADD", "source": 1 }, + { "begin": 1022, "end": 1037, "name": "SWAP1", "source": 1 }, + { "begin": 1022, "end": 1037, "name": "POP", "source": 1 }, + { + "begin": 998, + "end": 1111, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 998, "end": 1111, "name": "JUMP", "source": 1 }, + { + "begin": 998, + "end": 1111, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 998, "end": 1111, "name": "JUMPDEST", "source": 1 }, + { "begin": 1129, "end": 1135, "name": "DUP4", "source": 1 }, + { "begin": 1126, "end": 1127, "name": "DUP2", "source": 1 }, + { "begin": 1123, "end": 1136, "name": "GT", "source": 1 }, + { "begin": 1120, "end": 1122, "name": "ISZERO", "source": 1 }, + { + "begin": 1120, + "end": 1122, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 1120, "end": 1122, "name": "JUMPI", "source": 1 }, + { + "begin": 1209, + "end": 1210, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1200, "end": 1206, "name": "DUP5", "source": 1 }, + { "begin": 1195, "end": 1198, "name": "DUP5", "source": 1 }, + { "begin": 1191, "end": 1207, "name": "ADD", "source": 1 }, + { "begin": 1184, "end": 1211, "name": "MSTORE", "source": 1 }, + { + "begin": 1120, + "end": 1122, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 1120, "end": 1122, "name": "JUMPDEST", "source": 1 }, + { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, + { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, + { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, + { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, + { + "begin": 969, + "end": 1227, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { "begin": 32, "end": 202, "name": "tag", "source": 0, "value": "9" }, + { "begin": 32, "end": 202, "name": "JUMPDEST", "source": 0 }, + { + "begin": 32, + "end": 202, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 32, "end": 202, "name": "DUP1", "source": 0 }, + { + "begin": 32, + "end": 202, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 32, "end": 202, "name": "CODECOPY", "source": 0 }, + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 32, "end": 202, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", + ".code": [ + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 32, "end": 202, "name": "MSTORE", "source": 0 }, + { + "begin": 32, + "end": 202, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 32, "end": 202, "name": "DUP1", "source": 0 }, + { "begin": 32, "end": 202, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"HashRipmd160\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf3ae788ee7dce70defb6af44a4f7bfa31cb824bd3be9b4975e130191d96ea505\",\"urls\":[\"bzz-raw://4a252a1c455fb39492f493b58841b260aa4d0675a94cc892e218e07fc2d27b82\",\"dweb:/ipfs/QmUVQYPzqdmRavXJddNkSDZQ6hXThqVLHfYWFNj1yNMgSJ\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract HashRipmd160 {\n constructor() {\n require(ripemd160(bytes ('Hello World!')) ==\n hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c');\n }\n }" +} diff --git a/tests/contracts/compiled/InfiniteContract.json b/tests/contracts/compiled/InfiniteContract.json index b8132ac18e3..e89a9b9afe3 100644 --- a/tests/contracts/compiled/InfiniteContract.json +++ b/tests/contracts/compiled/InfiniteContract.json @@ -1 +1,772 @@ -{"byteCode":"0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","contract":{"abi":[{"inputs":[],"name":"infinite","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:439:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"404:32:1","statements":[{"nodeType":"YulAssignment","src":"414:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"425:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"414:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"386:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"396:7:1","type":""}],"src":"359:77:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"37800","executionCost":"87","totalCost":"37887"},"external":{"infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CODECOPY","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033",".code":[{"begin":39,"end":146,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":146,"name":"MSTORE","source":0},{"begin":39,"end":146,"name":"CALLVALUE","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"ISZERO","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"1"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"POP","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":146,"name":"CALLDATASIZE","source":0},{"begin":39,"end":146,"name":"LT","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"CALLDATALOAD","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":146,"name":"SHR","source":0},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":146,"name":"EQ","source":0},{"begin":39,"end":146,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":146,"name":"JUMPI","source":0},{"begin":39,"end":146,"name":"tag","source":0,"value":"2"},{"begin":39,"end":146,"name":"JUMPDEST","source":0},{"begin":39,"end":146,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":146,"name":"DUP1","source":0},{"begin":39,"end":146,"name":"REVERT","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"3"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"4"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":140,"name":"tag","source":0,"value":"6"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":140,"name":"MLOAD","source":0},{"begin":75,"end":140,"name":"DUP1","source":0},{"begin":75,"end":140,"name":"SWAP2","source":0},{"begin":75,"end":140,"name":"SUB","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"RETURN","source":0},{"begin":75,"end":140,"name":"tag","source":0,"value":"5"},{"begin":75,"end":140,"name":"JUMPDEST","source":0},{"begin":115,"end":121,"name":"PUSH","source":0,"value":"0"},{"begin":124,"end":139,"name":"tag","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":131,"end":135,"name":"PUSH","source":0,"value":"1"},{"begin":124,"end":139,"name":"ISZERO","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPI","source":0},{"begin":124,"end":139,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":124,"end":139,"name":"JUMP","source":0},{"begin":124,"end":139,"name":"tag","source":0,"value":"10"},{"begin":124,"end":139,"name":"JUMPDEST","source":0},{"begin":75,"end":140,"name":"SWAP1","source":0},{"begin":75,"end":140,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"12"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"14"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"7"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":436,"name":"tag","source":1,"value":"15"},{"begin":359,"end":436,"name":"JUMPDEST","source":1},{"begin":359,"end":436,"name":"PUSH","source":1,"value":"0"},{"begin":425,"end":430,"name":"DUP2","source":1},{"begin":414,"end":430,"name":"SWAP1","source":1},{"begin":414,"end":430,"name":"POP","source":1},{"begin":404,"end":436,"name":"SWAP2","source":1},{"begin":404,"end":436,"name":"SWAP1","source":1},{"begin":404,"end":436,"name":"POP","source":1},{"begin":404,"end":436,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "contract": { + "abi": [ + { + "inputs": [], + "name": "infinite", + "outputs": [ + { "internalType": "uint256", "name": "d", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:439:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "404:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "414:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "425:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "414:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "386:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "396:7:1", + "type": "" + } + ], + "src": "359:77:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "37800", + "executionCost": "87", + "totalCost": "37887" + }, + "external": { "infinite()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { "begin": 39, "end": 146, "name": "tag", "source": 0, "value": "1" }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 146, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 146, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 146, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 146, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 146, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "5BEC9E67" + }, + { "begin": 39, "end": 146, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, + { "begin": 75, "end": 140, "name": "DUP1", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 140, "name": "SUB", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { "begin": 75, "end": 140, "name": "RETURN", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, + { + "begin": 115, + "end": 121, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 124, + "end": 139, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, + { + "begin": 131, + "end": 135, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 124, "end": 139, "name": "ISZERO", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 124, "end": 139, "name": "JUMPI", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 124, "end": 139, "name": "JUMP", "source": 0 }, + { + "begin": 124, + "end": 139, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, + { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, + { + "begin": 75, + "end": 140, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "7" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "12" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 436, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 436, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, + { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, + { "begin": 414, "end": 430, "name": "POP", "source": 1 }, + { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, + { "begin": 404, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 404, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "infinite()": "5bec9e67" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }" +} diff --git a/tests/contracts/compiled/InfiniteContractVar.json b/tests/contracts/compiled/InfiniteContractVar.json index d056385f910..fe3d7df9f29 100644 --- a/tests/contracts/compiled/InfiniteContractVar.json +++ b/tests/contracts/compiled/InfiniteContractVar.json @@ -1 +1,1429 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinite","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":110:165 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":153:154 0 */\n 0x00\n /* \"main.sol\":145:150 count */\n dup1\n /* \"main.sol\":145:154 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":78:95 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":78:95 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_10:\n /* \"main.sol\":220:279 while (true) {... */\n tag_12:\n /* \"main.sol\":227:231 true */\n 0x01\n /* \"main.sol\":220:279 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":263:264 1 */\n 0x01\n /* \"main.sol\":257:262 count */\n sload(0x00)\n /* \"main.sol\":257:264 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":251:256 count */\n 0x00\n /* \"main.sol\":251:264 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":220:279 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":179:289 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:256:0:-:0;;;110:55;;;;;;;;;;153:1;145:5;:9;;;;39:256;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ","sourceMap":"39:256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;179:110;;;:::i;:::-;;78:17;;;;:::o;179:110::-;220:59;227:4;220:59;;;263:1;257:5;;:7;;;;:::i;:::-;251:5;:13;;;;220:59;;;179:110::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"76000","executionCost":"5137","totalCost":"81137"},"external":{"count()":"1107","infinite()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":295,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":295,"name":"MSTORE","source":0},{"begin":110,"end":165,"name":"CALLVALUE","source":0},{"begin":110,"end":165,"name":"DUP1","source":0},{"begin":110,"end":165,"name":"ISZERO","source":0},{"begin":110,"end":165,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":110,"end":165,"name":"JUMPI","source":0},{"begin":110,"end":165,"name":"PUSH","source":0,"value":"0"},{"begin":110,"end":165,"name":"DUP1","source":0},{"begin":110,"end":165,"name":"REVERT","source":0},{"begin":110,"end":165,"name":"tag","source":0,"value":"1"},{"begin":110,"end":165,"name":"JUMPDEST","source":0},{"begin":110,"end":165,"name":"POP","source":0},{"begin":153,"end":154,"name":"PUSH","source":0,"value":"0"},{"begin":145,"end":150,"name":"DUP1","source":0},{"begin":145,"end":154,"name":"DUP2","source":0},{"begin":145,"end":154,"name":"SWAP1","source":0},{"begin":145,"end":154,"name":"SSTORE","source":0},{"begin":145,"end":154,"name":"POP","source":0},{"begin":39,"end":295,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"CODECOPY","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033",".code":[{"begin":39,"end":295,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":295,"name":"MSTORE","source":0},{"begin":39,"end":295,"name":"CALLVALUE","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"ISZERO","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"REVERT","source":0},{"begin":39,"end":295,"name":"tag","source":0,"value":"1"},{"begin":39,"end":295,"name":"JUMPDEST","source":0},{"begin":39,"end":295,"name":"POP","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":295,"name":"CALLDATASIZE","source":0},{"begin":39,"end":295,"name":"LT","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"CALLDATALOAD","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":295,"name":"SHR","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":295,"name":"EQ","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"5BEC9E67"},{"begin":39,"end":295,"name":"EQ","source":0},{"begin":39,"end":295,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":295,"name":"JUMPI","source":0},{"begin":39,"end":295,"name":"tag","source":0,"value":"2"},{"begin":39,"end":295,"name":"JUMPDEST","source":0},{"begin":39,"end":295,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":295,"name":"DUP1","source":0},{"begin":39,"end":295,"name":"REVERT","source":0},{"begin":78,"end":95,"name":"tag","source":0,"value":"3"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[in]"},{"begin":78,"end":95,"name":"tag","source":0,"value":"5"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"40"},{"begin":78,"end":95,"name":"MLOAD","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":78,"end":95,"name":"SWAP2","source":0},{"begin":78,"end":95,"name":"SWAP1","source":0},{"begin":78,"end":95,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[in]"},{"begin":78,"end":95,"name":"tag","source":0,"value":"7"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"40"},{"begin":78,"end":95,"name":"MLOAD","source":0},{"begin":78,"end":95,"name":"DUP1","source":0},{"begin":78,"end":95,"name":"SWAP2","source":0},{"begin":78,"end":95,"name":"SUB","source":0},{"begin":78,"end":95,"name":"SWAP1","source":0},{"begin":78,"end":95,"name":"RETURN","source":0},{"begin":179,"end":289,"name":"tag","source":0,"value":"4"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":179,"end":289,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":179,"end":289,"name":"JUMP","source":0,"value":"[in]"},{"begin":179,"end":289,"name":"tag","source":0,"value":"9"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"STOP","source":0},{"begin":78,"end":95,"name":"tag","source":0,"value":"6"},{"begin":78,"end":95,"name":"JUMPDEST","source":0},{"begin":78,"end":95,"name":"PUSH","source":0,"value":"0"},{"begin":78,"end":95,"name":"SLOAD","source":0},{"begin":78,"end":95,"name":"DUP2","source":0},{"begin":78,"end":95,"name":"JUMP","source":0,"value":"[out]"},{"begin":179,"end":289,"name":"tag","source":0,"value":"10"},{"begin":179,"end":289,"name":"JUMPDEST","source":0},{"begin":220,"end":279,"name":"tag","source":0,"value":"12"},{"begin":220,"end":279,"name":"JUMPDEST","source":0},{"begin":227,"end":231,"name":"PUSH","source":0,"value":"1"},{"begin":220,"end":279,"name":"ISZERO","source":0},{"begin":220,"end":279,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":220,"end":279,"name":"JUMPI","source":0},{"begin":263,"end":264,"name":"PUSH","source":0,"value":"1"},{"begin":257,"end":262,"name":"PUSH","source":0,"value":"0"},{"begin":257,"end":262,"name":"SLOAD","source":0},{"begin":257,"end":264,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":257,"end":264,"name":"SWAP2","source":0},{"begin":257,"end":264,"name":"SWAP1","source":0},{"begin":257,"end":264,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":257,"end":264,"name":"JUMP","source":0,"value":"[in]"},{"begin":257,"end":264,"name":"tag","source":0,"value":"14"},{"begin":257,"end":264,"name":"JUMPDEST","source":0},{"begin":251,"end":256,"name":"PUSH","source":0,"value":"0"},{"begin":251,"end":264,"name":"DUP2","source":0},{"begin":251,"end":264,"name":"SWAP1","source":0},{"begin":251,"end":264,"name":"SSTORE","source":0},{"begin":251,"end":264,"name":"POP","source":0},{"begin":220,"end":279,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":220,"end":279,"name":"JUMP","source":0},{"begin":220,"end":279,"name":"tag","source":0,"value":"13"},{"begin":220,"end":279,"name":"JUMPDEST","source":0},{"begin":179,"end":289,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"17"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"19"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"22"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"15"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"24"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"25"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"27"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"26"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"20"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"28"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","infinite()":"5bec9e67"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xcbf39d64fe7bd82974aa5a9bfb42586c61e5bb9108ce181d9ed5e1de9391de09\",\"urls\":[\"bzz-raw://b923edaafc3bd169c716485816211c8e1beabd855c34d9e1ca3702adae418b82\",\"dweb:/ipfs/QmQeXeFbuCmnqG1aSBxwmn5j5M4zPkmUWmbZcXytvYURwC\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:InfiniteContractVar","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "infinite", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":110:165 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":153:154 0 */\n 0x00\n /* \"main.sol\":145:150 count */\n dup1\n /* \"main.sol\":145:154 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":78:95 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":78:95 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_10:\n /* \"main.sol\":220:279 while (true) {... */\n tag_12:\n /* \"main.sol\":227:231 true */\n 0x01\n /* \"main.sol\":220:279 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":263:264 1 */\n 0x01\n /* \"main.sol\":257:262 count */\n sload(0x00)\n /* \"main.sol\":257:264 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":251:256 count */\n 0x00\n /* \"main.sol\":251:264 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":220:279 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":179:289 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:256:0:-:0;;;110:55;;;;;;;;;;153:1;145:5;:9;;;;39:256;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:936:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "403:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "413:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "436:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "418:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "418:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "413:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "447:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "470:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "452:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "452:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "447:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "610:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "612:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "612:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "612:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "531:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "538:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "606:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "534:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "534:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "528:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "528:81:1" + }, + "nodeType": "YulIf", + "src": "525:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "642:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "653:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "656:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "649:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "642:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "390:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "393:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "399:3:1", + "type": "" + } + ], + "src": "359:305:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "715:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "725:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "736:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "725:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "697:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "707:7:1", + "type": "" + } + ], + "src": "670:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "781:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "801:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "791:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "791:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "791:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "895:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "898:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "888:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "888:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "888:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "919:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "912:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "912:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "912:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "753:180:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ", + "sourceMap": "39:256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;179:110;;;:::i;:::-;;78:17;;;;:::o;179:110::-;220:59;227:4;220:59;;;263:1;257:5;;:7;;;;:::i;:::-;251:5;:13;;;;220:59;;;179:110::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "76000", + "executionCost": "5137", + "totalCost": "81137" + }, + "external": { "count()": "1107", "infinite()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 295, "name": "MSTORE", "source": 0 }, + { "begin": 110, "end": 165, "name": "CALLVALUE", "source": 0 }, + { "begin": 110, "end": 165, "name": "DUP1", "source": 0 }, + { "begin": 110, "end": 165, "name": "ISZERO", "source": 0 }, + { + "begin": 110, + "end": 165, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 110, "end": 165, "name": "JUMPI", "source": 0 }, + { + "begin": 110, + "end": 165, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 110, "end": 165, "name": "DUP1", "source": 0 }, + { "begin": 110, "end": 165, "name": "REVERT", "source": 0 }, + { + "begin": 110, + "end": 165, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 110, "end": 165, "name": "JUMPDEST", "source": 0 }, + { "begin": 110, "end": 165, "name": "POP", "source": 0 }, + { + "begin": 153, + "end": 154, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 145, "end": 150, "name": "DUP1", "source": 0 }, + { "begin": 145, "end": 154, "name": "DUP2", "source": 0 }, + { "begin": 145, "end": 154, "name": "SWAP1", "source": 0 }, + { "begin": 145, "end": 154, "name": "SSTORE", "source": 0 }, + { "begin": 145, "end": 154, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 295, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 295, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 295, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 295, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 295, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 295, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 295, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 295, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 295, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 295, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 295, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 295, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 39, "end": 295, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "5BEC9E67" + }, + { "begin": 39, "end": 295, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 295, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 295, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 295, "name": "REVERT", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 78, + "end": 95, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 78, + "end": 95, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 78, + "end": 95, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 78, "end": 95, "name": "MLOAD", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 78, "end": 95, "name": "SWAP2", "source": 0 }, + { "begin": 78, "end": 95, "name": "SWAP1", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 78, + "end": 95, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 78, + "end": 95, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 78, "end": 95, "name": "MLOAD", "source": 0 }, + { "begin": 78, "end": 95, "name": "DUP1", "source": 0 }, + { "begin": 78, "end": 95, "name": "SWAP2", "source": 0 }, + { "begin": 78, "end": 95, "name": "SUB", "source": 0 }, + { "begin": 78, "end": 95, "name": "SWAP1", "source": 0 }, + { "begin": 78, "end": 95, "name": "RETURN", "source": 0 }, + { + "begin": 179, + "end": 289, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, + { + "begin": 179, + "end": 289, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 179, + "end": 289, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 179, + "end": 289, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 179, + "end": 289, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, + { "begin": 179, "end": 289, "name": "STOP", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 78, "end": 95, "name": "SLOAD", "source": 0 }, + { "begin": 78, "end": 95, "name": "DUP2", "source": 0 }, + { + "begin": 78, + "end": 95, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 179, + "end": 289, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, + { + "begin": 220, + "end": 279, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 220, "end": 279, "name": "JUMPDEST", "source": 0 }, + { + "begin": 227, + "end": 231, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 220, "end": 279, "name": "ISZERO", "source": 0 }, + { + "begin": 220, + "end": 279, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 220, "end": 279, "name": "JUMPI", "source": 0 }, + { + "begin": 263, + "end": 264, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 257, + "end": 262, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 257, "end": 262, "name": "SLOAD", "source": 0 }, + { + "begin": 257, + "end": 264, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 257, "end": 264, "name": "SWAP2", "source": 0 }, + { "begin": 257, "end": 264, "name": "SWAP1", "source": 0 }, + { + "begin": 257, + "end": 264, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 257, + "end": 264, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 257, + "end": 264, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 257, "end": 264, "name": "JUMPDEST", "source": 0 }, + { + "begin": 251, + "end": 256, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 251, "end": 264, "name": "DUP2", "source": 0 }, + { "begin": 251, "end": 264, "name": "SWAP1", "source": 0 }, + { "begin": 251, "end": 264, "name": "SSTORE", "source": 0 }, + { "begin": 251, "end": 264, "name": "POP", "source": 0 }, + { + "begin": 220, + "end": 279, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 220, "end": 279, "name": "JUMP", "source": 0 }, + { + "begin": 220, + "end": 279, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 220, "end": 279, "name": "JUMPDEST", "source": 0 }, + { + "begin": 179, + "end": 289, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 664, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 664, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 418, + "end": 438, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 418, + "end": 438, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, + { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, + { "begin": 413, "end": 438, "name": "POP", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 452, + "end": 472, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 452, + "end": 472, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, + { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, + { "begin": 447, "end": 472, "name": "POP", "source": 1 }, + { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, + { + "begin": 538, + "end": 604, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, + { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, + { "begin": 528, "end": 609, "name": "GT", "source": 1 }, + { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 612, + "end": 630, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 612, + "end": 630, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, + { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, + { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, + { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, + { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, + { "begin": 642, "end": 658, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { + "begin": 403, + "end": 664, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 670, + "end": 747, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, + { + "begin": 670, + "end": 747, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, + { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, + { "begin": 725, "end": 741, "name": "POP", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, + { "begin": 715, "end": 747, "name": "POP", "source": 1 }, + { + "begin": 715, + "end": 747, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 753, + "end": 933, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, + { + "begin": 801, + "end": 878, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 798, + "end": 799, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, + { + "begin": 898, + "end": 902, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 895, + "end": 896, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, + { + "begin": 922, + "end": 926, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 919, + "end": 920, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } + ] + } + } + }, + "methodIdentifiers": { "count()": "06661abd", "infinite()": "5bec9e67" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xcbf39d64fe7bd82974aa5a9bfb42586c61e5bb9108ce181d9ed5e1de9391de09\",\"urls\":[\"bzz-raw://b923edaafc3bd169c716485816211c8e1beabd855c34d9e1ca3702adae418b82\",\"dweb:/ipfs/QmQeXeFbuCmnqG1aSBxwmn5j5M4zPkmUWmbZcXytvYURwC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:InfiniteContractVar", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }" +} diff --git a/tests/contracts/compiled/ModularCheck.json b/tests/contracts/compiled/ModularCheck.json index 686a335abb1..44d45af3d9f 100644 --- a/tests/contracts/compiled/ModularCheck.json +++ b/tests/contracts/compiled/ModularCheck.json @@ -1 +1,2206 @@ -{"byteCode":"0x608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_b","type":"uint256"},{"internalType":"uint256","name":"_e","type":"uint256"},{"internalType":"uint256","name":"_m","type":"uint256"}],"name":"modExp","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":118:230 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":173:174 5 */\n 0x05\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n tag_4\n /* \"main.sol\":161:162 3 */\n 0x03\n /* \"main.sol\":164:165 5 */\n 0x05\n /* \"main.sol\":167:168 7 */\n 0x07\n /* \"main.sol\":154:160 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n 0x20\n shr\n jump\t// in\ntag_4:\n /* \"main.sol\":154:174 modExp(3, 5, 7) == 5 */\n eq\n /* \"main.sol\":146:175 require(modExp(3, 5, 7) == 5) */\n tag_6\n jumpi\n 0x00\n dup1\n revert\ntag_6:\n /* \"main.sol\":217:218 3 */\n 0x03\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n tag_7\n /* \"main.sol\":204:205 5 */\n 0x05\n /* \"main.sol\":207:208 7 */\n 0x07\n /* \"main.sol\":210:212 11 */\n 0x0b\n /* \"main.sol\":197:203 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n 0x20\n shr\n jump\t// in\ntag_7:\n /* \"main.sol\":197:218 modExp(5, 7, 11) == 3 */\n eq\n /* \"main.sol\":189:219 require(modExp(5, 7, 11) == 3) */\n tag_8\n jumpi\n 0x00\n dup1\n revert\ntag_8:\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n jump(tag_9)\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\ntag_5:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\ntag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":34:1334 contract ModularCheck {... */\ntag_9:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3148f14f\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\n tag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_13:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_15\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_16\n jump\t// in\n tag_15:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:704 */\n tag_6:\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":294:296 */\n 0x60\n /* \"#utility.yul\":282:291 */\n dup5\n /* \"#utility.yul\":273:280 */\n dup7\n /* \"#utility.yul\":269:292 */\n sub\n /* \"#utility.yul\":265:297 */\n slt\n /* \"#utility.yul\":262:264 */\n iszero\n tag_18\n jumpi\n /* \"#utility.yul\":310:311 */\n 0x00\n /* \"#utility.yul\":307:308 */\n dup1\n /* \"#utility.yul\":300:312 */\n revert\n /* \"#utility.yul\":262:264 */\n tag_18:\n /* \"#utility.yul\":353:354 */\n 0x00\n /* \"#utility.yul\":378:431 */\n tag_19\n /* \"#utility.yul\":423:430 */\n dup7\n /* \"#utility.yul\":414:420 */\n dup3\n /* \"#utility.yul\":403:412 */\n dup8\n /* \"#utility.yul\":399:421 */\n add\n /* \"#utility.yul\":378:431 */\n tag_13\n jump\t// in\n tag_19:\n /* \"#utility.yul\":368:431 */\n swap4\n pop\n /* \"#utility.yul\":324:441 */\n pop\n /* \"#utility.yul\":480:482 */\n 0x20\n /* \"#utility.yul\":506:559 */\n tag_20\n /* \"#utility.yul\":551:558 */\n dup7\n /* \"#utility.yul\":542:548 */\n dup3\n /* \"#utility.yul\":531:540 */\n dup8\n /* \"#utility.yul\":527:549 */\n add\n /* \"#utility.yul\":506:559 */\n tag_13\n jump\t// in\n tag_20:\n /* \"#utility.yul\":496:559 */\n swap3\n pop\n /* \"#utility.yul\":451:569 */\n pop\n /* \"#utility.yul\":608:610 */\n 0x40\n /* \"#utility.yul\":634:687 */\n tag_21\n /* \"#utility.yul\":679:686 */\n dup7\n /* \"#utility.yul\":670:676 */\n dup3\n /* \"#utility.yul\":659:668 */\n dup8\n /* \"#utility.yul\":655:677 */\n add\n /* \"#utility.yul\":634:687 */\n tag_13\n jump\t// in\n tag_21:\n /* \"#utility.yul\":624:687 */\n swap2\n pop\n /* \"#utility.yul\":579:697 */\n pop\n /* \"#utility.yul\":252:704 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":710:828 */\n tag_22:\n /* \"#utility.yul\":797:821 */\n tag_24\n /* \"#utility.yul\":815:820 */\n dup2\n /* \"#utility.yul\":797:821 */\n tag_25\n jump\t// in\n tag_24:\n /* \"#utility.yul\":792:795 */\n dup3\n /* \"#utility.yul\":785:822 */\n mstore\n /* \"#utility.yul\":775:828 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":834:1056 */\n tag_9:\n 0x00\n /* \"#utility.yul\":965:967 */\n 0x20\n /* \"#utility.yul\":954:963 */\n dup3\n /* \"#utility.yul\":950:968 */\n add\n /* \"#utility.yul\":942:968 */\n swap1\n pop\n /* \"#utility.yul\":978:1049 */\n tag_27\n /* \"#utility.yul\":1046:1047 */\n 0x00\n /* \"#utility.yul\":1035:1044 */\n dup4\n /* \"#utility.yul\":1031:1048 */\n add\n /* \"#utility.yul\":1022:1028 */\n dup5\n /* \"#utility.yul\":978:1049 */\n tag_22\n jump\t// in\n tag_27:\n /* \"#utility.yul\":932:1056 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1062:1139 */\n tag_25:\n 0x00\n /* \"#utility.yul\":1128:1133 */\n dup2\n /* \"#utility.yul\":1117:1133 */\n swap1\n pop\n /* \"#utility.yul\":1107:1139 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1145:1267 */\n tag_16:\n /* \"#utility.yul\":1218:1242 */\n tag_30\n /* \"#utility.yul\":1236:1241 */\n dup2\n /* \"#utility.yul\":1218:1242 */\n tag_25\n jump\t// in\n tag_30:\n /* \"#utility.yul\":1211:1216 */\n dup2\n /* \"#utility.yul\":1208:1243 */\n eq\n /* \"#utility.yul\":1198:1200 */\n tag_31\n jumpi\n /* \"#utility.yul\":1257:1258 */\n 0x00\n /* \"#utility.yul\":1254:1255 */\n dup1\n /* \"#utility.yul\":1247:1259 */\n revert\n /* \"#utility.yul\":1198:1200 */\n tag_31:\n /* \"#utility.yul\":1188:1267 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 PUSH2 0x27 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x47 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x194 DUP1 PUSH2 0xB4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ","sourceMap":"34:1300:0:-:0;;;118:112;;;;;;;;;;173:1;154:15;161:1;164;167;154:6;;;:15;;:::i;:::-;:20;146:29;;;;;;217:1;197:16;204:1;207;210:2;197:6;;;:16;;:::i;:::-;:21;189:30;;;;;;34:1300;;364:964;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;34:1300::-;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1270:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"252:452:1","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:1"},"nodeType":"YulFunctionCall","src":"300:12:1"},"nodeType":"YulExpressionStatement","src":"300:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:1"},"nodeType":"YulFunctionCall","src":"269:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:1","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:1"},"nodeType":"YulFunctionCall","src":"265:32:1"},"nodeType":"YulIf","src":"262:2:1"},{"nodeType":"YulBlock","src":"324:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"339:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"353:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"343:6:1","type":""}]},{"nodeType":"YulAssignment","src":"368:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"403:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"414:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:1"},"nodeType":"YulFunctionCall","src":"399:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"423:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"378:20:1"},"nodeType":"YulFunctionCall","src":"378:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"368:6:1"}]}]},{"nodeType":"YulBlock","src":"451:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"466:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"480:2:1","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"470:6:1","type":""}]},{"nodeType":"YulAssignment","src":"496:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"531:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"542:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"527:3:1"},"nodeType":"YulFunctionCall","src":"527:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"551:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"506:20:1"},"nodeType":"YulFunctionCall","src":"506:53:1"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"496:6:1"}]}]},{"nodeType":"YulBlock","src":"579:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"594:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"608:2:1","type":"","value":"64"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"598:6:1","type":""}]},{"nodeType":"YulAssignment","src":"624:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"659:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"670:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"655:3:1"},"nodeType":"YulFunctionCall","src":"655:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"679:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"634:20:1"},"nodeType":"YulFunctionCall","src":"634:53:1"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"624:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"206:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"217:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"229:6:1","type":""},{"name":"value1","nodeType":"YulTypedName","src":"237:6:1","type":""},{"name":"value2","nodeType":"YulTypedName","src":"245:6:1","type":""}],"src":"152:552:1"},{"body":{"nodeType":"YulBlock","src":"775:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"792:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"815:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"797:17:1"},"nodeType":"YulFunctionCall","src":"797:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"785:6:1"},"nodeType":"YulFunctionCall","src":"785:37:1"},"nodeType":"YulExpressionStatement","src":"785:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"763:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"770:3:1","type":""}],"src":"710:118:1"},{"body":{"nodeType":"YulBlock","src":"932:124:1","statements":[{"nodeType":"YulAssignment","src":"942:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"954:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"965:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"950:3:1"},"nodeType":"YulFunctionCall","src":"950:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"942:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1022:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1035:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1046:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1031:3:1"},"nodeType":"YulFunctionCall","src":"1031:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"978:43:1"},"nodeType":"YulFunctionCall","src":"978:71:1"},"nodeType":"YulExpressionStatement","src":"978:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"904:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"916:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"927:4:1","type":""}],"src":"834:222:1"},{"body":{"nodeType":"YulBlock","src":"1107:32:1","statements":[{"nodeType":"YulAssignment","src":"1117:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1128:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1117:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1089:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1099:7:1","type":""}],"src":"1062:77:1"},{"body":{"nodeType":"YulBlock","src":"1188:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1245:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:12:1"},"nodeType":"YulExpressionStatement","src":"1247:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1211:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1236:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1218:17:1"},"nodeType":"YulFunctionCall","src":"1218:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1208:2:1"},"nodeType":"YulFunctionCall","src":"1208:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1201:6:1"},"nodeType":"YulFunctionCall","src":"1201:43:1"},"nodeType":"YulIf","src":"1198:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1181:5:1","type":""}],"src":"1145:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ","sourceMap":"34:1300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:964;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:552::-;;;;294:2;282:9;273:7;269:23;265:32;262:2;;;310:1;307;300:12;262:2;353:1;378:53;423:7;414:6;403:9;399:22;378:53;:::i;:::-;368:63;;324:117;480:2;506:53;551:7;542:6;531:9;527:22;506:53;:::i;:::-;496:63;;451:118;608:2;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;579:118;252:452;;;;;:::o;710:118::-;797:24;815:5;797:24;:::i;:::-;792:3;785:37;775:53;;:::o;834:222::-;;965:2;954:9;950:18;942:26;;978:71;1046:1;1035:9;1031:17;1022:6;978:71;:::i;:::-;932:124;;;;:::o;1062:77::-;;1128:5;1117:16;;1107:32;;;:::o;1145:122::-;1218:24;1236:5;1218:24;:::i;:::-;1211:5;1208:35;1198:2;;1257:1;1254;1247:12;1198:2;1188:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"80800","executionCost":"infinite","totalCost":"infinite"},"external":{"modExp(uint256,uint256,uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1334,"name":"MSTORE","source":0},{"begin":118,"end":230,"name":"CALLVALUE","source":0},{"begin":118,"end":230,"name":"DUP1","source":0},{"begin":118,"end":230,"name":"ISZERO","source":0},{"begin":118,"end":230,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":118,"end":230,"name":"JUMPI","source":0},{"begin":118,"end":230,"name":"PUSH","source":0,"value":"0"},{"begin":118,"end":230,"name":"DUP1","source":0},{"begin":118,"end":230,"name":"REVERT","source":0},{"begin":118,"end":230,"name":"tag","source":0,"value":"1"},{"begin":118,"end":230,"name":"JUMPDEST","source":0},{"begin":118,"end":230,"name":"POP","source":0},{"begin":173,"end":174,"name":"PUSH","source":0,"value":"5"},{"begin":154,"end":169,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":161,"end":162,"name":"PUSH","source":0,"value":"3"},{"begin":164,"end":165,"name":"PUSH","source":0,"value":"5"},{"begin":167,"end":168,"name":"PUSH","source":0,"value":"7"},{"begin":154,"end":160,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":154,"end":160,"name":"PUSH","source":0,"value":"20"},{"begin":154,"end":160,"name":"SHL","source":0},{"begin":154,"end":169,"name":"PUSH","source":0,"value":"20"},{"begin":154,"end":169,"name":"SHR","source":0},{"begin":154,"end":169,"name":"JUMP","source":0,"value":"[in]"},{"begin":154,"end":169,"name":"tag","source":0,"value":"4"},{"begin":154,"end":169,"name":"JUMPDEST","source":0},{"begin":154,"end":174,"name":"EQ","source":0},{"begin":146,"end":175,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":146,"end":175,"name":"JUMPI","source":0},{"begin":146,"end":175,"name":"PUSH","source":0,"value":"0"},{"begin":146,"end":175,"name":"DUP1","source":0},{"begin":146,"end":175,"name":"REVERT","source":0},{"begin":146,"end":175,"name":"tag","source":0,"value":"6"},{"begin":146,"end":175,"name":"JUMPDEST","source":0},{"begin":217,"end":218,"name":"PUSH","source":0,"value":"3"},{"begin":197,"end":213,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":204,"end":205,"name":"PUSH","source":0,"value":"5"},{"begin":207,"end":208,"name":"PUSH","source":0,"value":"7"},{"begin":210,"end":212,"name":"PUSH","source":0,"value":"B"},{"begin":197,"end":203,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":197,"end":203,"name":"PUSH","source":0,"value":"20"},{"begin":197,"end":203,"name":"SHL","source":0},{"begin":197,"end":213,"name":"PUSH","source":0,"value":"20"},{"begin":197,"end":213,"name":"SHR","source":0},{"begin":197,"end":213,"name":"JUMP","source":0,"value":"[in]"},{"begin":197,"end":213,"name":"tag","source":0,"value":"7"},{"begin":197,"end":213,"name":"JUMPDEST","source":0},{"begin":197,"end":218,"name":"EQ","source":0},{"begin":189,"end":219,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":189,"end":219,"name":"JUMPI","source":0},{"begin":189,"end":219,"name":"PUSH","source":0,"value":"0"},{"begin":189,"end":219,"name":"DUP1","source":0},{"begin":189,"end":219,"name":"REVERT","source":0},{"begin":189,"end":219,"name":"tag","source":0,"value":"8"},{"begin":189,"end":219,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":34,"end":1334,"name":"JUMP","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"5"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":432,"end":446,"name":"PUSH","source":0,"value":"0"},{"begin":549,"end":553,"name":"PUSH","source":0,"value":"40"},{"begin":543,"end":554,"name":"MLOAD","source":0},{"begin":672,"end":676,"name":"PUSH","source":0,"value":"20"},{"begin":663,"end":670,"name":"DUP2","source":0},{"begin":656,"end":677,"name":"MSTORE","source":0},{"begin":721,"end":725,"name":"PUSH","source":0,"value":"20"},{"begin":714,"end":718,"name":"DUP1","source":0},{"begin":705,"end":712,"name":"DUP3","source":0},{"begin":701,"end":719,"name":"ADD","source":0},{"begin":694,"end":726,"name":"MSTORE","source":0},{"begin":770,"end":774,"name":"PUSH","source":0,"value":"20"},{"begin":763,"end":767,"name":"PUSH","source":0,"value":"40"},{"begin":754,"end":761,"name":"DUP3","source":0},{"begin":750,"end":768,"name":"ADD","source":0},{"begin":743,"end":775,"name":"MSTORE","source":0},{"begin":886,"end":888,"name":"DUP5","source":0},{"begin":879,"end":883,"name":"PUSH","source":0,"value":"60"},{"begin":870,"end":877,"name":"DUP3","source":0},{"begin":866,"end":884,"name":"ADD","source":0},{"begin":859,"end":889,"name":"MSTORE","source":0},{"begin":933,"end":935,"name":"DUP4","source":0},{"begin":926,"end":930,"name":"PUSH","source":0,"value":"80"},{"begin":917,"end":924,"name":"DUP3","source":0},{"begin":913,"end":931,"name":"ADD","source":0},{"begin":906,"end":936,"name":"MSTORE","source":0},{"begin":981,"end":983,"name":"DUP3","source":0},{"begin":974,"end":978,"name":"PUSH","source":0,"value":"A0"},{"begin":965,"end":972,"name":"DUP3","source":0},{"begin":961,"end":979,"name":"ADD","source":0},{"begin":954,"end":984,"name":"MSTORE","source":0},{"begin":1056,"end":1060,"name":"PUSH","source":0,"value":"C0"},{"begin":1050,"end":1061,"name":"MLOAD","source":0},{"begin":1202,"end":1206,"name":"PUSH","source":0,"value":"20"},{"begin":1195,"end":1200,"name":"DUP2","source":0},{"begin":1189,"end":1193,"name":"PUSH","source":0,"value":"C0"},{"begin":1180,"end":1187,"name":"DUP5","source":0},{"begin":1177,"end":1178,"name":"PUSH","source":0,"value":"0"},{"begin":1171,"end":1175,"name":"PUSH","source":0,"value":"5"},{"begin":1167,"end":1168,"name":"PUSH","source":0,"value":"0"},{"begin":1163,"end":1169,"name":"NOT","source":0},{"begin":1158,"end":1207,"name":"CALL","source":0},{"begin":1148,"end":1150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPI","source":0},{"begin":1241,"end":1242,"name":"PUSH","source":0,"value":"0"},{"begin":1238,"end":1239,"name":"DUP1","source":0},{"begin":1231,"end":1243,"name":"REVERT","source":0},{"begin":1148,"end":1150,"name":"tag","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPDEST","source":0},{"begin":1298,"end":1303,"name":"DUP1","source":0},{"begin":1292,"end":1304,"name":"MLOAD","source":0},{"begin":1282,"end":1304,"name":"SWAP3","source":0},{"begin":1282,"end":1304,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"SWAP4","source":0},{"begin":471,"end":1318,"name":"SWAP3","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"JUMP","source":0,"value":"[out]"},{"begin":34,"end":1334,"name":"tag","source":0,"value":"9"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"CODECOPY","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033",".code":[{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":1334,"name":"MSTORE","source":0},{"begin":34,"end":1334,"name":"CALLVALUE","source":0},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"ISZERO","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"REVERT","source":0},{"begin":34,"end":1334,"name":"tag","source":0,"value":"1"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"POP","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"4"},{"begin":34,"end":1334,"name":"CALLDATASIZE","source":0},{"begin":34,"end":1334,"name":"LT","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"CALLDATALOAD","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"E0"},{"begin":34,"end":1334,"name":"SHR","source":0},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"3148F14F"},{"begin":34,"end":1334,"name":"EQ","source":0},{"begin":34,"end":1334,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":34,"end":1334,"name":"JUMPI","source":0},{"begin":34,"end":1334,"name":"tag","source":0,"value":"2"},{"begin":34,"end":1334,"name":"JUMPDEST","source":0},{"begin":34,"end":1334,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":1334,"name":"DUP1","source":0},{"begin":34,"end":1334,"name":"REVERT","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"3"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"4"},{"begin":364,"end":1328,"name":"DUP1","source":0},{"begin":364,"end":1328,"name":"CALLDATASIZE","source":0},{"begin":364,"end":1328,"name":"SUB","source":0},{"begin":364,"end":1328,"name":"DUP2","source":0},{"begin":364,"end":1328,"name":"ADD","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"5"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"4"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"40"},{"begin":364,"end":1328,"name":"MLOAD","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":364,"end":1328,"name":"JUMP","source":0,"value":"[in]"},{"begin":364,"end":1328,"name":"tag","source":0,"value":"8"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":364,"end":1328,"name":"PUSH","source":0,"value":"40"},{"begin":364,"end":1328,"name":"MLOAD","source":0},{"begin":364,"end":1328,"name":"DUP1","source":0},{"begin":364,"end":1328,"name":"SWAP2","source":0},{"begin":364,"end":1328,"name":"SUB","source":0},{"begin":364,"end":1328,"name":"SWAP1","source":0},{"begin":364,"end":1328,"name":"RETURN","source":0},{"begin":364,"end":1328,"name":"tag","source":0,"value":"7"},{"begin":364,"end":1328,"name":"JUMPDEST","source":0},{"begin":432,"end":446,"name":"PUSH","source":0,"value":"0"},{"begin":549,"end":553,"name":"PUSH","source":0,"value":"40"},{"begin":543,"end":554,"name":"MLOAD","source":0},{"begin":672,"end":676,"name":"PUSH","source":0,"value":"20"},{"begin":663,"end":670,"name":"DUP2","source":0},{"begin":656,"end":677,"name":"MSTORE","source":0},{"begin":721,"end":725,"name":"PUSH","source":0,"value":"20"},{"begin":714,"end":718,"name":"DUP1","source":0},{"begin":705,"end":712,"name":"DUP3","source":0},{"begin":701,"end":719,"name":"ADD","source":0},{"begin":694,"end":726,"name":"MSTORE","source":0},{"begin":770,"end":774,"name":"PUSH","source":0,"value":"20"},{"begin":763,"end":767,"name":"PUSH","source":0,"value":"40"},{"begin":754,"end":761,"name":"DUP3","source":0},{"begin":750,"end":768,"name":"ADD","source":0},{"begin":743,"end":775,"name":"MSTORE","source":0},{"begin":886,"end":888,"name":"DUP5","source":0},{"begin":879,"end":883,"name":"PUSH","source":0,"value":"60"},{"begin":870,"end":877,"name":"DUP3","source":0},{"begin":866,"end":884,"name":"ADD","source":0},{"begin":859,"end":889,"name":"MSTORE","source":0},{"begin":933,"end":935,"name":"DUP4","source":0},{"begin":926,"end":930,"name":"PUSH","source":0,"value":"80"},{"begin":917,"end":924,"name":"DUP3","source":0},{"begin":913,"end":931,"name":"ADD","source":0},{"begin":906,"end":936,"name":"MSTORE","source":0},{"begin":981,"end":983,"name":"DUP3","source":0},{"begin":974,"end":978,"name":"PUSH","source":0,"value":"A0"},{"begin":965,"end":972,"name":"DUP3","source":0},{"begin":961,"end":979,"name":"ADD","source":0},{"begin":954,"end":984,"name":"MSTORE","source":0},{"begin":1056,"end":1060,"name":"PUSH","source":0,"value":"C0"},{"begin":1050,"end":1061,"name":"MLOAD","source":0},{"begin":1202,"end":1206,"name":"PUSH","source":0,"value":"20"},{"begin":1195,"end":1200,"name":"DUP2","source":0},{"begin":1189,"end":1193,"name":"PUSH","source":0,"value":"C0"},{"begin":1180,"end":1187,"name":"DUP5","source":0},{"begin":1177,"end":1178,"name":"PUSH","source":0,"value":"0"},{"begin":1171,"end":1175,"name":"PUSH","source":0,"value":"5"},{"begin":1167,"end":1168,"name":"PUSH","source":0,"value":"0"},{"begin":1163,"end":1169,"name":"NOT","source":0},{"begin":1158,"end":1207,"name":"CALL","source":0},{"begin":1148,"end":1150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPI","source":0},{"begin":1241,"end":1242,"name":"PUSH","source":0,"value":"0"},{"begin":1238,"end":1239,"name":"DUP1","source":0},{"begin":1231,"end":1243,"name":"REVERT","source":0},{"begin":1148,"end":1150,"name":"tag","source":0,"value":"11"},{"begin":1148,"end":1150,"name":"JUMPDEST","source":0},{"begin":1298,"end":1303,"name":"DUP1","source":0},{"begin":1292,"end":1304,"name":"MLOAD","source":0},{"begin":1282,"end":1304,"name":"SWAP3","source":0},{"begin":1282,"end":1304,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"SWAP4","source":0},{"begin":471,"end":1318,"name":"SWAP3","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"POP","source":0},{"begin":471,"end":1318,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"13"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"15"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":704,"name":"tag","source":1,"value":"6"},{"begin":152,"end":704,"name":"JUMPDEST","source":1},{"begin":152,"end":704,"name":"PUSH","source":1,"value":"0"},{"begin":152,"end":704,"name":"DUP1","source":1},{"begin":152,"end":704,"name":"PUSH","source":1,"value":"0"},{"begin":294,"end":296,"name":"PUSH","source":1,"value":"60"},{"begin":282,"end":291,"name":"DUP5","source":1},{"begin":273,"end":280,"name":"DUP7","source":1},{"begin":269,"end":292,"name":"SUB","source":1},{"begin":265,"end":297,"name":"SLT","source":1},{"begin":262,"end":264,"name":"ISZERO","source":1},{"begin":262,"end":264,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":262,"end":264,"name":"JUMPI","source":1},{"begin":310,"end":311,"name":"PUSH","source":1,"value":"0"},{"begin":307,"end":308,"name":"DUP1","source":1},{"begin":300,"end":312,"name":"REVERT","source":1},{"begin":262,"end":264,"name":"tag","source":1,"value":"18"},{"begin":262,"end":264,"name":"JUMPDEST","source":1},{"begin":353,"end":354,"name":"PUSH","source":1,"value":"0"},{"begin":378,"end":431,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":423,"end":430,"name":"DUP7","source":1},{"begin":414,"end":420,"name":"DUP3","source":1},{"begin":403,"end":412,"name":"DUP8","source":1},{"begin":399,"end":421,"name":"ADD","source":1},{"begin":378,"end":431,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":378,"end":431,"name":"JUMP","source":1,"value":"[in]"},{"begin":378,"end":431,"name":"tag","source":1,"value":"19"},{"begin":378,"end":431,"name":"JUMPDEST","source":1},{"begin":368,"end":431,"name":"SWAP4","source":1},{"begin":368,"end":431,"name":"POP","source":1},{"begin":324,"end":441,"name":"POP","source":1},{"begin":480,"end":482,"name":"PUSH","source":1,"value":"20"},{"begin":506,"end":559,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":551,"end":558,"name":"DUP7","source":1},{"begin":542,"end":548,"name":"DUP3","source":1},{"begin":531,"end":540,"name":"DUP8","source":1},{"begin":527,"end":549,"name":"ADD","source":1},{"begin":506,"end":559,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":506,"end":559,"name":"JUMP","source":1,"value":"[in]"},{"begin":506,"end":559,"name":"tag","source":1,"value":"20"},{"begin":506,"end":559,"name":"JUMPDEST","source":1},{"begin":496,"end":559,"name":"SWAP3","source":1},{"begin":496,"end":559,"name":"POP","source":1},{"begin":451,"end":569,"name":"POP","source":1},{"begin":608,"end":610,"name":"PUSH","source":1,"value":"40"},{"begin":634,"end":687,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":679,"end":686,"name":"DUP7","source":1},{"begin":670,"end":676,"name":"DUP3","source":1},{"begin":659,"end":668,"name":"DUP8","source":1},{"begin":655,"end":677,"name":"ADD","source":1},{"begin":634,"end":687,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":634,"end":687,"name":"JUMP","source":1,"value":"[in]"},{"begin":634,"end":687,"name":"tag","source":1,"value":"21"},{"begin":634,"end":687,"name":"JUMPDEST","source":1},{"begin":624,"end":687,"name":"SWAP2","source":1},{"begin":624,"end":687,"name":"POP","source":1},{"begin":579,"end":697,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"POP","source":1},{"begin":252,"end":704,"name":"SWAP3","source":1},{"begin":252,"end":704,"name":"JUMP","source":1,"value":"[out]"},{"begin":710,"end":828,"name":"tag","source":1,"value":"22"},{"begin":710,"end":828,"name":"JUMPDEST","source":1},{"begin":797,"end":821,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":815,"end":820,"name":"DUP2","source":1},{"begin":797,"end":821,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":797,"end":821,"name":"JUMP","source":1,"value":"[in]"},{"begin":797,"end":821,"name":"tag","source":1,"value":"24"},{"begin":797,"end":821,"name":"JUMPDEST","source":1},{"begin":792,"end":795,"name":"DUP3","source":1},{"begin":785,"end":822,"name":"MSTORE","source":1},{"begin":775,"end":828,"name":"POP","source":1},{"begin":775,"end":828,"name":"POP","source":1},{"begin":775,"end":828,"name":"JUMP","source":1,"value":"[out]"},{"begin":834,"end":1056,"name":"tag","source":1,"value":"9"},{"begin":834,"end":1056,"name":"JUMPDEST","source":1},{"begin":834,"end":1056,"name":"PUSH","source":1,"value":"0"},{"begin":965,"end":967,"name":"PUSH","source":1,"value":"20"},{"begin":954,"end":963,"name":"DUP3","source":1},{"begin":950,"end":968,"name":"ADD","source":1},{"begin":942,"end":968,"name":"SWAP1","source":1},{"begin":942,"end":968,"name":"POP","source":1},{"begin":978,"end":1049,"name":"PUSH [tag]","source":1,"value":"27"},{"begin":1046,"end":1047,"name":"PUSH","source":1,"value":"0"},{"begin":1035,"end":1044,"name":"DUP4","source":1},{"begin":1031,"end":1048,"name":"ADD","source":1},{"begin":1022,"end":1028,"name":"DUP5","source":1},{"begin":978,"end":1049,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":978,"end":1049,"name":"JUMP","source":1,"value":"[in]"},{"begin":978,"end":1049,"name":"tag","source":1,"value":"27"},{"begin":978,"end":1049,"name":"JUMPDEST","source":1},{"begin":932,"end":1056,"name":"SWAP3","source":1},{"begin":932,"end":1056,"name":"SWAP2","source":1},{"begin":932,"end":1056,"name":"POP","source":1},{"begin":932,"end":1056,"name":"POP","source":1},{"begin":932,"end":1056,"name":"JUMP","source":1,"value":"[out]"},{"begin":1062,"end":1139,"name":"tag","source":1,"value":"25"},{"begin":1062,"end":1139,"name":"JUMPDEST","source":1},{"begin":1062,"end":1139,"name":"PUSH","source":1,"value":"0"},{"begin":1128,"end":1133,"name":"DUP2","source":1},{"begin":1117,"end":1133,"name":"SWAP1","source":1},{"begin":1117,"end":1133,"name":"POP","source":1},{"begin":1107,"end":1139,"name":"SWAP2","source":1},{"begin":1107,"end":1139,"name":"SWAP1","source":1},{"begin":1107,"end":1139,"name":"POP","source":1},{"begin":1107,"end":1139,"name":"JUMP","source":1,"value":"[out]"},{"begin":1145,"end":1267,"name":"tag","source":1,"value":"16"},{"begin":1145,"end":1267,"name":"JUMPDEST","source":1},{"begin":1218,"end":1242,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":1236,"end":1241,"name":"DUP2","source":1},{"begin":1218,"end":1242,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":1218,"end":1242,"name":"JUMP","source":1,"value":"[in]"},{"begin":1218,"end":1242,"name":"tag","source":1,"value":"30"},{"begin":1218,"end":1242,"name":"JUMPDEST","source":1},{"begin":1211,"end":1216,"name":"DUP2","source":1},{"begin":1208,"end":1243,"name":"EQ","source":1},{"begin":1198,"end":1200,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1198,"end":1200,"name":"JUMPI","source":1},{"begin":1257,"end":1258,"name":"PUSH","source":1,"value":"0"},{"begin":1254,"end":1255,"name":"DUP1","source":1},{"begin":1247,"end":1259,"name":"REVERT","source":1},{"begin":1198,"end":1200,"name":"tag","source":1,"value":"31"},{"begin":1198,"end":1200,"name":"JUMPDEST","source":1},{"begin":1188,"end":1267,"name":"POP","source":1},{"begin":1188,"end":1267,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"modExp(uint256,uint256,uint256)":"3148f14f"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_e\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_m\",\"type\":\"uint256\"}],\"name\":\"modExp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ModularCheck\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x097512cf9987b49bfe8f0a182553ada97250dc01d384db9cdcaed8ad64079749\",\"urls\":[\"bzz-raw://58b5775c60ddc5d903527600fcd1730275d92f25d2cbe4155407d1dcf1409268\",\"dweb:/ipfs/QmYGYVSziwMp5tgyj6R6WxDScMUSdLTBNuzgjU1DwFHiN5\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract ModularCheck {\n // Verify simple modular exponentiation\n constructor() {\n require(modExp(3, 5, 7) == 5);\n require(modExp(5, 7, 11) == 3);\n }\n // Wrapper function to use the precompile.\n // Taken from https://ethereum.stackexchange.com/a/71590/9963\n function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {\n assembly {\n // Free memory pointer\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), _b)\n mstore(add(pointer, 0x80), _e)\n\n mstore(add(pointer, 0xa0), _m)\n // Store the result\n let value := mload(0xc0)\n // Call the precompiled contract 0x05 = bigModExp\n if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {\n revert(0, 0)\n }\n result := mload(value)\n }\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [ + { "internalType": "uint256", "name": "_b", "type": "uint256" }, + { "internalType": "uint256", "name": "_e", "type": "uint256" }, + { "internalType": "uint256", "name": "_m", "type": "uint256" } + ], + "name": "modExp", + "outputs": [ + { "internalType": "uint256", "name": "result", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":118:230 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":173:174 5 */\n 0x05\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n tag_4\n /* \"main.sol\":161:162 3 */\n 0x03\n /* \"main.sol\":164:165 5 */\n 0x05\n /* \"main.sol\":167:168 7 */\n 0x07\n /* \"main.sol\":154:160 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n 0x20\n shr\n jump\t// in\ntag_4:\n /* \"main.sol\":154:174 modExp(3, 5, 7) == 5 */\n eq\n /* \"main.sol\":146:175 require(modExp(3, 5, 7) == 5) */\n tag_6\n jumpi\n 0x00\n dup1\n revert\ntag_6:\n /* \"main.sol\":217:218 3 */\n 0x03\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n tag_7\n /* \"main.sol\":204:205 5 */\n 0x05\n /* \"main.sol\":207:208 7 */\n 0x07\n /* \"main.sol\":210:212 11 */\n 0x0b\n /* \"main.sol\":197:203 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n 0x20\n shr\n jump\t// in\ntag_7:\n /* \"main.sol\":197:218 modExp(5, 7, 11) == 3 */\n eq\n /* \"main.sol\":189:219 require(modExp(5, 7, 11) == 3) */\n tag_8\n jumpi\n 0x00\n dup1\n revert\ntag_8:\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n jump(tag_9)\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\ntag_5:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\ntag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":34:1334 contract ModularCheck {... */\ntag_9:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3148f14f\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\n tag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_13:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_15\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_16\n jump\t// in\n tag_15:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:704 */\n tag_6:\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":294:296 */\n 0x60\n /* \"#utility.yul\":282:291 */\n dup5\n /* \"#utility.yul\":273:280 */\n dup7\n /* \"#utility.yul\":269:292 */\n sub\n /* \"#utility.yul\":265:297 */\n slt\n /* \"#utility.yul\":262:264 */\n iszero\n tag_18\n jumpi\n /* \"#utility.yul\":310:311 */\n 0x00\n /* \"#utility.yul\":307:308 */\n dup1\n /* \"#utility.yul\":300:312 */\n revert\n /* \"#utility.yul\":262:264 */\n tag_18:\n /* \"#utility.yul\":353:354 */\n 0x00\n /* \"#utility.yul\":378:431 */\n tag_19\n /* \"#utility.yul\":423:430 */\n dup7\n /* \"#utility.yul\":414:420 */\n dup3\n /* \"#utility.yul\":403:412 */\n dup8\n /* \"#utility.yul\":399:421 */\n add\n /* \"#utility.yul\":378:431 */\n tag_13\n jump\t// in\n tag_19:\n /* \"#utility.yul\":368:431 */\n swap4\n pop\n /* \"#utility.yul\":324:441 */\n pop\n /* \"#utility.yul\":480:482 */\n 0x20\n /* \"#utility.yul\":506:559 */\n tag_20\n /* \"#utility.yul\":551:558 */\n dup7\n /* \"#utility.yul\":542:548 */\n dup3\n /* \"#utility.yul\":531:540 */\n dup8\n /* \"#utility.yul\":527:549 */\n add\n /* \"#utility.yul\":506:559 */\n tag_13\n jump\t// in\n tag_20:\n /* \"#utility.yul\":496:559 */\n swap3\n pop\n /* \"#utility.yul\":451:569 */\n pop\n /* \"#utility.yul\":608:610 */\n 0x40\n /* \"#utility.yul\":634:687 */\n tag_21\n /* \"#utility.yul\":679:686 */\n dup7\n /* \"#utility.yul\":670:676 */\n dup3\n /* \"#utility.yul\":659:668 */\n dup8\n /* \"#utility.yul\":655:677 */\n add\n /* \"#utility.yul\":634:687 */\n tag_13\n jump\t// in\n tag_21:\n /* \"#utility.yul\":624:687 */\n swap2\n pop\n /* \"#utility.yul\":579:697 */\n pop\n /* \"#utility.yul\":252:704 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":710:828 */\n tag_22:\n /* \"#utility.yul\":797:821 */\n tag_24\n /* \"#utility.yul\":815:820 */\n dup2\n /* \"#utility.yul\":797:821 */\n tag_25\n jump\t// in\n tag_24:\n /* \"#utility.yul\":792:795 */\n dup3\n /* \"#utility.yul\":785:822 */\n mstore\n /* \"#utility.yul\":775:828 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":834:1056 */\n tag_9:\n 0x00\n /* \"#utility.yul\":965:967 */\n 0x20\n /* \"#utility.yul\":954:963 */\n dup3\n /* \"#utility.yul\":950:968 */\n add\n /* \"#utility.yul\":942:968 */\n swap1\n pop\n /* \"#utility.yul\":978:1049 */\n tag_27\n /* \"#utility.yul\":1046:1047 */\n 0x00\n /* \"#utility.yul\":1035:1044 */\n dup4\n /* \"#utility.yul\":1031:1048 */\n add\n /* \"#utility.yul\":1022:1028 */\n dup5\n /* \"#utility.yul\":978:1049 */\n tag_22\n jump\t// in\n tag_27:\n /* \"#utility.yul\":932:1056 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1062:1139 */\n tag_25:\n 0x00\n /* \"#utility.yul\":1128:1133 */\n dup2\n /* \"#utility.yul\":1117:1133 */\n swap1\n pop\n /* \"#utility.yul\":1107:1139 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1145:1267 */\n tag_16:\n /* \"#utility.yul\":1218:1242 */\n tag_30\n /* \"#utility.yul\":1236:1241 */\n dup2\n /* \"#utility.yul\":1218:1242 */\n tag_25\n jump\t// in\n tag_30:\n /* \"#utility.yul\":1211:1216 */\n dup2\n /* \"#utility.yul\":1208:1243 */\n eq\n /* \"#utility.yul\":1198:1200 */\n tag_31\n jumpi\n /* \"#utility.yul\":1257:1258 */\n 0x00\n /* \"#utility.yul\":1254:1255 */\n dup1\n /* \"#utility.yul\":1247:1259 */\n revert\n /* \"#utility.yul\":1198:1200 */\n tag_31:\n /* \"#utility.yul\":1188:1267 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 PUSH2 0x27 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x47 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x194 DUP1 PUSH2 0xB4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1300:0:-:0;;;118:112;;;;;;;;;;173:1;154:15;161:1;164;167;154:6;;;:15;;:::i;:::-;:20;146:29;;;;;;217:1;197:16;204:1;207;210:2;197:6;;;:16;;:::i;:::-;:21;189:30;;;;;;34:1300;;364:964;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;34:1300::-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1270:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "59:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "69:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "91:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "78:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "78:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "69:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "134:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "107:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "107:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "107:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "37:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "45:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "53:5:1", + "type": "" + } + ], + "src": "7:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "252:452:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "298:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "307:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "310:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "300:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "300:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "300:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "273:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "282:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "269:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "269:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "294:2:1", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "265:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "265:32:1" + }, + "nodeType": "YulIf", + "src": "262:2:1" + }, + { + "nodeType": "YulBlock", + "src": "324:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "339:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "353:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "343:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "368:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "403:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "414:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "399:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "399:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "423:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "378:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "378:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "368:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "451:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "466:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "480:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "470:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "496:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "531:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "542:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "527:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "527:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "551:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "506:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "506:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "496:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "579:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "594:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "608:2:1", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "598:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "624:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "659:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "670:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "655:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "655:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "679:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "634:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "634:53:1" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "624:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "206:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "217:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "229:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "237:6:1", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "245:6:1", + "type": "" + } + ], + "src": "152:552:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "775:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "792:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "815:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "797:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "797:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "785:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "785:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "785:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "763:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "770:3:1", + "type": "" + } + ], + "src": "710:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "932:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "942:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "954:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "965:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "950:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "950:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "942:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1022:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1035:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1046:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1031:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1031:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "978:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "978:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "978:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "904:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "916:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "927:4:1", + "type": "" + } + ], + "src": "834:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1107:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1117:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1128:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1117:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1089:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1099:7:1", + "type": "" + } + ], + "src": "1062:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1188:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1245:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1254:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1257:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1247:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1247:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1247:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1211:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1236:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1218:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1218:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1208:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1208:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1201:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1201:43:1" + }, + "nodeType": "YulIf", + "src": "1198:2:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1181:5:1", + "type": "" + } + ], + "src": "1145:122:1" + } + ] + }, + "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ", + "sourceMap": "34:1300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:964;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:552::-;;;;294:2;282:9;273:7;269:23;265:32;262:2;;;310:1;307;300:12;262:2;353:1;378:53;423:7;414:6;403:9;399:22;378:53;:::i;:::-;368:63;;324:117;480:2;506:53;551:7;542:6;531:9;527:22;506:53;:::i;:::-;496:63;;451:118;608:2;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;579:118;252:452;;;;;:::o;710:118::-;797:24;815:5;797:24;:::i;:::-;792:3;785:37;775:53;;:::o;834:222::-;;965:2;954:9;950:18;942:26;;978:71;1046:1;1035:9;1031:17;1022:6;978:71;:::i;:::-;932:124;;;;:::o;1062:77::-;;1128:5;1117:16;;1107:32;;;:::o;1145:122::-;1218:24;1236:5;1218:24;:::i;:::-;1211:5;1208:35;1198:2;;1257:1;1254;1247:12;1198:2;1188:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "80800", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { "modExp(uint256,uint256,uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1334, "name": "MSTORE", "source": 0 }, + { "begin": 118, "end": 230, "name": "CALLVALUE", "source": 0 }, + { "begin": 118, "end": 230, "name": "DUP1", "source": 0 }, + { "begin": 118, "end": 230, "name": "ISZERO", "source": 0 }, + { + "begin": 118, + "end": 230, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 118, "end": 230, "name": "JUMPI", "source": 0 }, + { + "begin": 118, + "end": 230, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 118, "end": 230, "name": "DUP1", "source": 0 }, + { "begin": 118, "end": 230, "name": "REVERT", "source": 0 }, + { + "begin": 118, + "end": 230, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 118, "end": 230, "name": "JUMPDEST", "source": 0 }, + { "begin": 118, "end": 230, "name": "POP", "source": 0 }, + { + "begin": 173, + "end": 174, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 154, + "end": 169, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 161, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 164, + "end": 165, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 167, + "end": 168, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 154, + "end": 160, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 154, + "end": 160, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 154, "end": 160, "name": "SHL", "source": 0 }, + { + "begin": 154, + "end": 169, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 154, "end": 169, "name": "SHR", "source": 0 }, + { + "begin": 154, + "end": 169, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 154, + "end": 169, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 154, "end": 169, "name": "JUMPDEST", "source": 0 }, + { "begin": 154, "end": 174, "name": "EQ", "source": 0 }, + { + "begin": 146, + "end": 175, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 146, "end": 175, "name": "JUMPI", "source": 0 }, + { + "begin": 146, + "end": 175, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 146, "end": 175, "name": "DUP1", "source": 0 }, + { "begin": 146, "end": 175, "name": "REVERT", "source": 0 }, + { + "begin": 146, + "end": 175, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 146, "end": 175, "name": "JUMPDEST", "source": 0 }, + { + "begin": 217, + "end": 218, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 197, + "end": 213, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 204, + "end": 205, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 207, + "end": 208, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 210, + "end": 212, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 197, + "end": 203, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 197, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 197, "end": 203, "name": "SHL", "source": 0 }, + { + "begin": 197, + "end": 213, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 197, "end": 213, "name": "SHR", "source": 0 }, + { + "begin": 197, + "end": 213, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 197, + "end": 213, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 197, "end": 213, "name": "JUMPDEST", "source": 0 }, + { "begin": 197, "end": 218, "name": "EQ", "source": 0 }, + { + "begin": 189, + "end": 219, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 189, "end": 219, "name": "JUMPI", "source": 0 }, + { + "begin": 189, + "end": 219, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 189, "end": 219, "name": "DUP1", "source": 0 }, + { "begin": 189, "end": 219, "name": "REVERT", "source": 0 }, + { + "begin": 189, + "end": 219, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 189, "end": 219, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 34, "end": 1334, "name": "JUMP", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 432, + "end": 446, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 549, + "end": 553, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 543, "end": 554, "name": "MLOAD", "source": 0 }, + { + "begin": 672, + "end": 676, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 663, "end": 670, "name": "DUP2", "source": 0 }, + { "begin": 656, "end": 677, "name": "MSTORE", "source": 0 }, + { + "begin": 721, + "end": 725, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 714, "end": 718, "name": "DUP1", "source": 0 }, + { "begin": 705, "end": 712, "name": "DUP3", "source": 0 }, + { "begin": 701, "end": 719, "name": "ADD", "source": 0 }, + { "begin": 694, "end": 726, "name": "MSTORE", "source": 0 }, + { + "begin": 770, + "end": 774, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 763, + "end": 767, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 754, "end": 761, "name": "DUP3", "source": 0 }, + { "begin": 750, "end": 768, "name": "ADD", "source": 0 }, + { "begin": 743, "end": 775, "name": "MSTORE", "source": 0 }, + { "begin": 886, "end": 888, "name": "DUP5", "source": 0 }, + { + "begin": 879, + "end": 883, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 870, "end": 877, "name": "DUP3", "source": 0 }, + { "begin": 866, "end": 884, "name": "ADD", "source": 0 }, + { "begin": 859, "end": 889, "name": "MSTORE", "source": 0 }, + { "begin": 933, "end": 935, "name": "DUP4", "source": 0 }, + { + "begin": 926, + "end": 930, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 917, "end": 924, "name": "DUP3", "source": 0 }, + { "begin": 913, "end": 931, "name": "ADD", "source": 0 }, + { "begin": 906, "end": 936, "name": "MSTORE", "source": 0 }, + { "begin": 981, "end": 983, "name": "DUP3", "source": 0 }, + { + "begin": 974, + "end": 978, + "name": "PUSH", + "source": 0, + "value": "A0" + }, + { "begin": 965, "end": 972, "name": "DUP3", "source": 0 }, + { "begin": 961, "end": 979, "name": "ADD", "source": 0 }, + { "begin": 954, "end": 984, "name": "MSTORE", "source": 0 }, + { + "begin": 1056, + "end": 1060, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 1050, "end": 1061, "name": "MLOAD", "source": 0 }, + { + "begin": 1202, + "end": 1206, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1195, "end": 1200, "name": "DUP2", "source": 0 }, + { + "begin": 1189, + "end": 1193, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 1180, "end": 1187, "name": "DUP5", "source": 0 }, + { + "begin": 1177, + "end": 1178, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1171, + "end": 1175, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 1167, + "end": 1168, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1163, "end": 1169, "name": "NOT", "source": 0 }, + { "begin": 1158, "end": 1207, "name": "CALL", "source": 0 }, + { + "begin": 1148, + "end": 1150, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1148, "end": 1150, "name": "JUMPI", "source": 0 }, + { + "begin": 1241, + "end": 1242, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1238, "end": 1239, "name": "DUP1", "source": 0 }, + { "begin": 1231, "end": 1243, "name": "REVERT", "source": 0 }, + { + "begin": 1148, + "end": 1150, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1148, "end": 1150, "name": "JUMPDEST", "source": 0 }, + { "begin": 1298, "end": 1303, "name": "DUP1", "source": 0 }, + { "begin": 1292, "end": 1304, "name": "MLOAD", "source": 0 }, + { "begin": 1282, "end": 1304, "name": "SWAP3", "source": 0 }, + { "begin": 1282, "end": 1304, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "SWAP4", "source": 0 }, + { "begin": 471, "end": 1318, "name": "SWAP3", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { + "begin": 471, + "end": 1318, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 34, + "end": 1334, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1334, "name": "CODECOPY", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1334, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", + ".code": [ + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 1334, "name": "MSTORE", "source": 0 }, + { "begin": 34, "end": 1334, "name": "CALLVALUE", "source": 0 }, + { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1334, "name": "ISZERO", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1334, "name": "REVERT", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, + { "begin": 34, "end": 1334, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 34, "end": 1334, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 34, "end": 1334, "name": "LT", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1334, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 34, "end": 1334, "name": "SHR", "source": 0 }, + { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "3148F14F" + }, + { "begin": 34, "end": 1334, "name": "EQ", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 1334, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 1334, "name": "REVERT", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 364, + "end": 1328, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 364, "end": 1328, "name": "DUP1", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 364, "end": 1328, "name": "SUB", "source": 0 }, + { "begin": 364, "end": 1328, "name": "DUP2", "source": 0 }, + { "begin": 364, "end": 1328, "name": "ADD", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 364, + "end": 1328, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 364, + "end": 1328, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 364, "end": 1328, "name": "MLOAD", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 364, + "end": 1328, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 364, "end": 1328, "name": "MLOAD", "source": 0 }, + { "begin": 364, "end": 1328, "name": "DUP1", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SUB", "source": 0 }, + { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, + { "begin": 364, "end": 1328, "name": "RETURN", "source": 0 }, + { + "begin": 364, + "end": 1328, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 432, + "end": 446, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 549, + "end": 553, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 543, "end": 554, "name": "MLOAD", "source": 0 }, + { + "begin": 672, + "end": 676, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 663, "end": 670, "name": "DUP2", "source": 0 }, + { "begin": 656, "end": 677, "name": "MSTORE", "source": 0 }, + { + "begin": 721, + "end": 725, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 714, "end": 718, "name": "DUP1", "source": 0 }, + { "begin": 705, "end": 712, "name": "DUP3", "source": 0 }, + { "begin": 701, "end": 719, "name": "ADD", "source": 0 }, + { "begin": 694, "end": 726, "name": "MSTORE", "source": 0 }, + { + "begin": 770, + "end": 774, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 763, + "end": 767, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 754, "end": 761, "name": "DUP3", "source": 0 }, + { "begin": 750, "end": 768, "name": "ADD", "source": 0 }, + { "begin": 743, "end": 775, "name": "MSTORE", "source": 0 }, + { "begin": 886, "end": 888, "name": "DUP5", "source": 0 }, + { + "begin": 879, + "end": 883, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 870, "end": 877, "name": "DUP3", "source": 0 }, + { "begin": 866, "end": 884, "name": "ADD", "source": 0 }, + { "begin": 859, "end": 889, "name": "MSTORE", "source": 0 }, + { "begin": 933, "end": 935, "name": "DUP4", "source": 0 }, + { + "begin": 926, + "end": 930, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 917, "end": 924, "name": "DUP3", "source": 0 }, + { "begin": 913, "end": 931, "name": "ADD", "source": 0 }, + { "begin": 906, "end": 936, "name": "MSTORE", "source": 0 }, + { "begin": 981, "end": 983, "name": "DUP3", "source": 0 }, + { + "begin": 974, + "end": 978, + "name": "PUSH", + "source": 0, + "value": "A0" + }, + { "begin": 965, "end": 972, "name": "DUP3", "source": 0 }, + { "begin": 961, "end": 979, "name": "ADD", "source": 0 }, + { "begin": 954, "end": 984, "name": "MSTORE", "source": 0 }, + { + "begin": 1056, + "end": 1060, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 1050, "end": 1061, "name": "MLOAD", "source": 0 }, + { + "begin": 1202, + "end": 1206, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1195, "end": 1200, "name": "DUP2", "source": 0 }, + { + "begin": 1189, + "end": 1193, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 1180, "end": 1187, "name": "DUP5", "source": 0 }, + { + "begin": 1177, + "end": 1178, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1171, + "end": 1175, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 1167, + "end": 1168, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1163, "end": 1169, "name": "NOT", "source": 0 }, + { "begin": 1158, "end": 1207, "name": "CALL", "source": 0 }, + { + "begin": 1148, + "end": 1150, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1148, "end": 1150, "name": "JUMPI", "source": 0 }, + { + "begin": 1241, + "end": 1242, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1238, "end": 1239, "name": "DUP1", "source": 0 }, + { "begin": 1231, "end": 1243, "name": "REVERT", "source": 0 }, + { + "begin": 1148, + "end": 1150, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1148, "end": 1150, "name": "JUMPDEST", "source": 0 }, + { "begin": 1298, "end": 1303, "name": "DUP1", "source": 0 }, + { "begin": 1292, "end": 1304, "name": "MLOAD", "source": 0 }, + { "begin": 1282, "end": 1304, "name": "SWAP3", "source": 0 }, + { "begin": 1282, "end": 1304, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "SWAP4", "source": 0 }, + { "begin": 471, "end": 1318, "name": "SWAP3", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, + { + "begin": 471, + "end": 1318, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "13" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 704, + "name": "tag", + "source": 1, + "value": "6" + }, + { "begin": 152, "end": 704, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 704, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 152, "end": 704, "name": "DUP1", "source": 1 }, + { + "begin": 152, + "end": 704, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 294, + "end": 296, + "name": "PUSH", + "source": 1, + "value": "60" + }, + { "begin": 282, "end": 291, "name": "DUP5", "source": 1 }, + { "begin": 273, "end": 280, "name": "DUP7", "source": 1 }, + { "begin": 269, "end": 292, "name": "SUB", "source": 1 }, + { "begin": 265, "end": 297, "name": "SLT", "source": 1 }, + { "begin": 262, "end": 264, "name": "ISZERO", "source": 1 }, + { + "begin": 262, + "end": 264, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { "begin": 262, "end": 264, "name": "JUMPI", "source": 1 }, + { + "begin": 310, + "end": 311, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 307, "end": 308, "name": "DUP1", "source": 1 }, + { "begin": 300, "end": 312, "name": "REVERT", "source": 1 }, + { + "begin": 262, + "end": 264, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 262, "end": 264, "name": "JUMPDEST", "source": 1 }, + { + "begin": 353, + "end": 354, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 378, + "end": 431, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 423, "end": 430, "name": "DUP7", "source": 1 }, + { "begin": 414, "end": 420, "name": "DUP3", "source": 1 }, + { "begin": 403, "end": 412, "name": "DUP8", "source": 1 }, + { "begin": 399, "end": 421, "name": "ADD", "source": 1 }, + { + "begin": 378, + "end": 431, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { + "begin": 378, + "end": 431, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 378, + "end": 431, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 378, "end": 431, "name": "JUMPDEST", "source": 1 }, + { "begin": 368, "end": 431, "name": "SWAP4", "source": 1 }, + { "begin": 368, "end": 431, "name": "POP", "source": 1 }, + { "begin": 324, "end": 441, "name": "POP", "source": 1 }, + { + "begin": 480, + "end": 482, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { + "begin": 506, + "end": 559, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 551, "end": 558, "name": "DUP7", "source": 1 }, + { "begin": 542, "end": 548, "name": "DUP3", "source": 1 }, + { "begin": 531, "end": 540, "name": "DUP8", "source": 1 }, + { "begin": 527, "end": 549, "name": "ADD", "source": 1 }, + { + "begin": 506, + "end": 559, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { + "begin": 506, + "end": 559, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 506, + "end": 559, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 506, "end": 559, "name": "JUMPDEST", "source": 1 }, + { "begin": 496, "end": 559, "name": "SWAP3", "source": 1 }, + { "begin": 496, "end": 559, "name": "POP", "source": 1 }, + { "begin": 451, "end": 569, "name": "POP", "source": 1 }, + { + "begin": 608, + "end": 610, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 634, + "end": 687, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { "begin": 679, "end": 686, "name": "DUP7", "source": 1 }, + { "begin": 670, "end": 676, "name": "DUP3", "source": 1 }, + { "begin": 659, "end": 668, "name": "DUP8", "source": 1 }, + { "begin": 655, "end": 677, "name": "ADD", "source": 1 }, + { + "begin": 634, + "end": 687, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { + "begin": 634, + "end": 687, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 634, + "end": 687, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 634, "end": 687, "name": "JUMPDEST", "source": 1 }, + { "begin": 624, "end": 687, "name": "SWAP2", "source": 1 }, + { "begin": 624, "end": 687, "name": "POP", "source": 1 }, + { "begin": 579, "end": 697, "name": "POP", "source": 1 }, + { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, + { "begin": 252, "end": 704, "name": "POP", "source": 1 }, + { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, + { "begin": 252, "end": 704, "name": "POP", "source": 1 }, + { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, + { + "begin": 252, + "end": 704, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 710, + "end": 828, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 710, "end": 828, "name": "JUMPDEST", "source": 1 }, + { + "begin": 797, + "end": 821, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 815, "end": 820, "name": "DUP2", "source": 1 }, + { + "begin": 797, + "end": 821, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 797, + "end": 821, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 797, + "end": 821, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 797, "end": 821, "name": "JUMPDEST", "source": 1 }, + { "begin": 792, "end": 795, "name": "DUP3", "source": 1 }, + { "begin": 785, "end": 822, "name": "MSTORE", "source": 1 }, + { "begin": 775, "end": 828, "name": "POP", "source": 1 }, + { "begin": 775, "end": 828, "name": "POP", "source": 1 }, + { + "begin": 775, + "end": 828, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 834, + "end": 1056, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 834, "end": 1056, "name": "JUMPDEST", "source": 1 }, + { + "begin": 834, + "end": 1056, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 965, + "end": 967, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 954, "end": 963, "name": "DUP3", "source": 1 }, + { "begin": 950, "end": 968, "name": "ADD", "source": 1 }, + { "begin": 942, "end": 968, "name": "SWAP1", "source": 1 }, + { "begin": 942, "end": 968, "name": "POP", "source": 1 }, + { + "begin": 978, + "end": 1049, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 1046, + "end": 1047, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1035, "end": 1044, "name": "DUP4", "source": 1 }, + { "begin": 1031, "end": 1048, "name": "ADD", "source": 1 }, + { "begin": 1022, "end": 1028, "name": "DUP5", "source": 1 }, + { + "begin": 978, + "end": 1049, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 978, + "end": 1049, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 978, + "end": 1049, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 978, "end": 1049, "name": "JUMPDEST", "source": 1 }, + { "begin": 932, "end": 1056, "name": "SWAP3", "source": 1 }, + { "begin": 932, "end": 1056, "name": "SWAP2", "source": 1 }, + { "begin": 932, "end": 1056, "name": "POP", "source": 1 }, + { "begin": 932, "end": 1056, "name": "POP", "source": 1 }, + { + "begin": 932, + "end": 1056, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1062, + "end": 1139, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 1062, "end": 1139, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1062, + "end": 1139, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1128, "end": 1133, "name": "DUP2", "source": 1 }, + { "begin": 1117, "end": 1133, "name": "SWAP1", "source": 1 }, + { "begin": 1117, "end": 1133, "name": "POP", "source": 1 }, + { "begin": 1107, "end": 1139, "name": "SWAP2", "source": 1 }, + { "begin": 1107, "end": 1139, "name": "SWAP1", "source": 1 }, + { "begin": 1107, "end": 1139, "name": "POP", "source": 1 }, + { + "begin": 1107, + "end": 1139, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1145, + "end": 1267, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 1145, "end": 1267, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1218, + "end": 1242, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 1236, "end": 1241, "name": "DUP2", "source": 1 }, + { + "begin": 1218, + "end": 1242, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 1218, + "end": 1242, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1218, + "end": 1242, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 1218, "end": 1242, "name": "JUMPDEST", "source": 1 }, + { "begin": 1211, "end": 1216, "name": "DUP2", "source": 1 }, + { "begin": 1208, "end": 1243, "name": "EQ", "source": 1 }, + { + "begin": 1198, + "end": 1200, + "name": "PUSH [tag]", + "source": 1, + "value": "31" + }, + { "begin": 1198, "end": 1200, "name": "JUMPI", "source": 1 }, + { + "begin": 1257, + "end": 1258, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1254, "end": 1255, "name": "DUP1", "source": 1 }, + { "begin": 1247, "end": 1259, "name": "REVERT", "source": 1 }, + { + "begin": 1198, + "end": 1200, + "name": "tag", + "source": 1, + "value": "31" + }, + { "begin": 1198, "end": 1200, "name": "JUMPDEST", "source": 1 }, + { "begin": 1188, "end": 1267, "name": "POP", "source": 1 }, + { + "begin": 1188, + "end": 1267, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "modExp(uint256,uint256,uint256)": "3148f14f" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_e\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_m\",\"type\":\"uint256\"}],\"name\":\"modExp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ModularCheck\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x097512cf9987b49bfe8f0a182553ada97250dc01d384db9cdcaed8ad64079749\",\"urls\":[\"bzz-raw://58b5775c60ddc5d903527600fcd1730275d92f25d2cbe4155407d1dcf1409268\",\"dweb:/ipfs/QmYGYVSziwMp5tgyj6R6WxDScMUSdLTBNuzgjU1DwFHiN5\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract ModularCheck {\n // Verify simple modular exponentiation\n constructor() {\n require(modExp(3, 5, 7) == 5);\n require(modExp(5, 7, 11) == 3);\n }\n // Wrapper function to use the precompile.\n // Taken from https://ethereum.stackexchange.com/a/71590/9963\n function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {\n assembly {\n // Free memory pointer\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), _b)\n mstore(add(pointer, 0x80), _e)\n\n mstore(add(pointer, 0xa0), _m)\n // Store the result\n let value := mload(0xc0)\n // Call the precompiled contract 0x05 = bigModExp\n if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {\n revert(0, 0)\n }\n result := mload(value)\n }\n }\n }" +} diff --git a/tests/contracts/compiled/SingleEventContract.json b/tests/contracts/compiled/SingleEventContract.json index 01e6d253210..ec12305e569 100644 --- a/tests/contracts/compiled/SingleEventContract.json +++ b/tests/contracts/compiled/SingleEventContract.json @@ -1 +1,200 @@ -{"byteCode":"0x6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"Constructed","type":"event"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":133:200 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":178:188 msg.sender */\n caller\n /* \"main.sol\":166:189 Constructed(msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3F DUP1 PUSH1 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:163:0:-:0;;;133:67;;;;;;;;;;178:10;166:23;;;;;;;;;;;;43:163;;;;;;"},"deployedBytecode":{"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"43:163:0:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"1226","totalCost":"13826"}},"legacyAssembly":{".code":[{"begin":43,"end":206,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":206,"name":"MSTORE","source":0},{"begin":133,"end":200,"name":"CALLVALUE","source":0},{"begin":133,"end":200,"name":"DUP1","source":0},{"begin":133,"end":200,"name":"ISZERO","source":0},{"begin":133,"end":200,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":133,"end":200,"name":"JUMPI","source":0},{"begin":133,"end":200,"name":"PUSH","source":0,"value":"0"},{"begin":133,"end":200,"name":"DUP1","source":0},{"begin":133,"end":200,"name":"REVERT","source":0},{"begin":133,"end":200,"name":"tag","source":0,"value":"1"},{"begin":133,"end":200,"name":"JUMPDEST","source":0},{"begin":133,"end":200,"name":"POP","source":0},{"begin":178,"end":188,"name":"CALLER","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":166,"end":189,"name":"AND","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D"},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40"},{"begin":166,"end":189,"name":"MLOAD","source":0},{"begin":166,"end":189,"name":"PUSH","source":0,"value":"40"},{"begin":166,"end":189,"name":"MLOAD","source":0},{"begin":166,"end":189,"name":"DUP1","source":0},{"begin":166,"end":189,"name":"SWAP2","source":0},{"begin":166,"end":189,"name":"SUB","source":0},{"begin":166,"end":189,"name":"SWAP1","source":0},{"begin":166,"end":189,"name":"LOG2","source":0},{"begin":43,"end":206,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":206,"name":"DUP1","source":0},{"begin":43,"end":206,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"CODECOPY","source":0},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033",".code":[{"begin":43,"end":206,"name":"PUSH","source":0,"value":"80"},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"40"},{"begin":43,"end":206,"name":"MSTORE","source":0},{"begin":43,"end":206,"name":"PUSH","source":0,"value":"0"},{"begin":43,"end":206,"name":"DUP1","source":0},{"begin":43,"end":206,"name":"REVERT","source":0}]}}},"methodIdentifiers":{}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Constructed\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"SingleEventContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5bdc4e014e35f9b07112af42347d90a14e9ea3cf8b609e48e93273606b5896b2\",\"urls\":[\"bzz-raw://20d9c0eb3ca1fceec867318c063ab277ffcf57928a325da537cb5f061ea713cf\",\"dweb:/ipfs/QmYHPwfoDdMa7p1oUG44unJ3vHQWSSqaBJ2xVj5dJEvoim\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract SingleEventContract {\n event Constructed(address indexed owner);\n\n constructor() {\n emit Constructed(msg.sender);\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "Constructed", + "type": "event" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":133:200 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":178:188 msg.sender */\n caller\n /* \"main.sol\":166:189 Constructed(msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3F DUP1 PUSH1 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "43:163:0:-:0;;;133:67;;;;;;;;;;178:10;166:23;;;;;;;;;;;;43:163;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "43:163:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "1226", + "totalCost": "13826" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 43, "end": 206, "name": "MSTORE", "source": 0 }, + { "begin": 133, "end": 200, "name": "CALLVALUE", "source": 0 }, + { "begin": 133, "end": 200, "name": "DUP1", "source": 0 }, + { "begin": 133, "end": 200, "name": "ISZERO", "source": 0 }, + { + "begin": 133, + "end": 200, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 133, "end": 200, "name": "JUMPI", "source": 0 }, + { + "begin": 133, + "end": 200, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 133, "end": 200, "name": "DUP1", "source": 0 }, + { "begin": 133, "end": 200, "name": "REVERT", "source": 0 }, + { + "begin": 133, + "end": 200, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 133, "end": 200, "name": "JUMPDEST", "source": 0 }, + { "begin": 133, "end": 200, "name": "POP", "source": 0 }, + { "begin": 178, "end": 188, "name": "CALLER", "source": 0 }, + { + "begin": 166, + "end": 189, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 166, "end": 189, "name": "AND", "source": 0 }, + { + "begin": 166, + "end": 189, + "name": "PUSH", + "source": 0, + "value": "40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D" + }, + { + "begin": 166, + "end": 189, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 166, "end": 189, "name": "MLOAD", "source": 0 }, + { + "begin": 166, + "end": 189, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 166, "end": 189, "name": "MLOAD", "source": 0 }, + { "begin": 166, "end": 189, "name": "DUP1", "source": 0 }, + { "begin": 166, "end": 189, "name": "SWAP2", "source": 0 }, + { "begin": 166, "end": 189, "name": "SUB", "source": 0 }, + { "begin": 166, "end": 189, "name": "SWAP1", "source": 0 }, + { "begin": 166, "end": 189, "name": "LOG2", "source": 0 }, + { + "begin": 43, + "end": 206, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 43, "end": 206, "name": "DUP1", "source": 0 }, + { + "begin": 43, + "end": 206, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 206, "name": "CODECOPY", "source": 0 }, + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 206, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", + ".code": [ + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 43, "end": 206, "name": "MSTORE", "source": 0 }, + { + "begin": 43, + "end": 206, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 43, "end": 206, "name": "DUP1", "source": 0 }, + { "begin": 43, "end": 206, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Constructed\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"SingleEventContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5bdc4e014e35f9b07112af42347d90a14e9ea3cf8b609e48e93273606b5896b2\",\"urls\":[\"bzz-raw://20d9c0eb3ca1fceec867318c063ab277ffcf57928a325da537cb5f061ea713cf\",\"dweb:/ipfs/QmYHPwfoDdMa7p1oUG44unJ3vHQWSSqaBJ2xVj5dJEvoim\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract SingleEventContract {\n event Constructed(address indexed owner);\n\n constructor() {\n emit Constructed(msg.sender);\n }\n }" +} diff --git a/tests/contracts/compiled/TestContract.json b/tests/contracts/compiled/TestContract.json index 6eec83ae53e..b3fb31861c7 100644 --- a/tests/contracts/compiled/TestContract.json +++ b/tests/contracts/compiled/TestContract.json @@ -1 +1,1952 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"multiply","outputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":117:123 uint d */\n 0x00\n /* \"main.sol\":149:150 7 */\n 0x07\n /* \"main.sol\":146:147 a */\n dup3\n /* \"main.sol\":146:150 a *7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":139:150 return a *7 */\n swap1\n pop\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:128:0:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1520:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_uint256","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_uint256","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"485:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"502:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"525:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"507:17:1"},"nodeType":"YulFunctionCall","src":"507:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"495:6:1"},"nodeType":"YulFunctionCall","src":"495:37:1"},"nodeType":"YulExpressionStatement","src":"495:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"473:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"480:3:1","type":""}],"src":"420:118:1"},{"body":{"nodeType":"YulBlock","src":"642:124:1","statements":[{"nodeType":"YulAssignment","src":"652:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"664:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"675:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"660:3:1"},"nodeType":"YulFunctionCall","src":"660:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"652:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"732:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"756:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"741:3:1"},"nodeType":"YulFunctionCall","src":"741:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"688:43:1"},"nodeType":"YulFunctionCall","src":"688:71:1"},"nodeType":"YulExpressionStatement","src":"688:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"614:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"626:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"637:4:1","type":""}],"src":"544:222:1"},{"body":{"nodeType":"YulBlock","src":"820:300:1","statements":[{"nodeType":"YulAssignment","src":"830:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"853:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"835:17:1"},"nodeType":"YulFunctionCall","src":"835:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"830:1:1"}]},{"nodeType":"YulAssignment","src":"864:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"887:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"869:17:1"},"nodeType":"YulFunctionCall","src":"869:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"864:1:1"}]},{"body":{"nodeType":"YulBlock","src":"1062:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"1064:16:1"},"nodeType":"YulFunctionCall","src":"1064:18:1"},"nodeType":"YulExpressionStatement","src":"1064:18:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"974:1:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"967:6:1"},"nodeType":"YulFunctionCall","src":"967:9:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"960:6:1"},"nodeType":"YulFunctionCall","src":"960:17:1"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"982:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"989:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"1057:1:1"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"985:3:1"},"nodeType":"YulFunctionCall","src":"985:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"979:2:1"},"nodeType":"YulFunctionCall","src":"979:81:1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"956:3:1"},"nodeType":"YulFunctionCall","src":"956:105:1"},"nodeType":"YulIf","src":"953:2:1"},{"nodeType":"YulAssignment","src":"1094:20:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1109:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"1112:1:1"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1105:3:1"},"nodeType":"YulFunctionCall","src":"1105:9:1"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"1094:7:1"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"803:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"806:1:1","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"812:7:1","type":""}],"src":"772:348:1"},{"body":{"nodeType":"YulBlock","src":"1171:32:1","statements":[{"nodeType":"YulAssignment","src":"1181:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"1192:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1181:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1153:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1163:7:1","type":""}],"src":"1126:77:1"},{"body":{"nodeType":"YulBlock","src":"1237:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1254:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1257:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1247:6:1"},"nodeType":"YulFunctionCall","src":"1247:88:1"},"nodeType":"YulExpressionStatement","src":"1247:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1351:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1354:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1344:6:1"},"nodeType":"YulFunctionCall","src":"1344:15:1"},"nodeType":"YulExpressionStatement","src":"1344:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1375:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1378:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1368:6:1"},"nodeType":"YulFunctionCall","src":"1368:15:1"},"nodeType":"YulExpressionStatement","src":"1368:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1209:180:1"},{"body":{"nodeType":"YulBlock","src":"1438:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1495:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1504:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1507:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1497:6:1"},"nodeType":"YulFunctionCall","src":"1497:12:1"},"nodeType":"YulExpressionStatement","src":"1497:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1461:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1486:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"1468:17:1"},"nodeType":"YulFunctionCall","src":"1468:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1458:2:1"},"nodeType":"YulFunctionCall","src":"1458:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1451:6:1"},"nodeType":"YulFunctionCall","src":"1451:43:1"},"nodeType":"YulIf","src":"1448:2:1"}]},"name":"validator_revert_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1431:5:1","type":""}],"src":"1395:122:1"}]},"contents":"{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;117:6;149:1;146;:4;;;;:::i;:::-;139:11;;71:90;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"89200","executionCost":"135","totalCost":"89335"},"external":{"multiply(uint256)":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":167,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":167,"name":"MSTORE","source":0},{"begin":39,"end":167,"name":"CALLVALUE","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"ISZERO","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"POP","source":0},{"begin":39,"end":167,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"CODECOPY","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033",".code":[{"begin":39,"end":167,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":167,"name":"MSTORE","source":0},{"begin":39,"end":167,"name":"CALLVALUE","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"ISZERO","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"1"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"POP","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":167,"name":"CALLDATASIZE","source":0},{"begin":39,"end":167,"name":"LT","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"CALLDATALOAD","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":167,"name":"SHR","source":0},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"C6888FA1"},{"begin":39,"end":167,"name":"EQ","source":0},{"begin":39,"end":167,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":167,"name":"JUMPI","source":0},{"begin":39,"end":167,"name":"tag","source":0,"value":"2"},{"begin":39,"end":167,"name":"JUMPDEST","source":0},{"begin":39,"end":167,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":167,"name":"DUP1","source":0},{"begin":39,"end":167,"name":"REVERT","source":0},{"begin":71,"end":161,"name":"tag","source":0,"value":"3"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"4"},{"begin":71,"end":161,"name":"DUP1","source":0},{"begin":71,"end":161,"name":"CALLDATASIZE","source":0},{"begin":71,"end":161,"name":"SUB","source":0},{"begin":71,"end":161,"name":"DUP2","source":0},{"begin":71,"end":161,"name":"ADD","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"5"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"4"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"40"},{"begin":71,"end":161,"name":"MLOAD","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[in]"},{"begin":71,"end":161,"name":"tag","source":0,"value":"8"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":71,"end":161,"name":"PUSH","source":0,"value":"40"},{"begin":71,"end":161,"name":"MLOAD","source":0},{"begin":71,"end":161,"name":"DUP1","source":0},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SUB","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"RETURN","source":0},{"begin":71,"end":161,"name":"tag","source":0,"value":"7"},{"begin":71,"end":161,"name":"JUMPDEST","source":0},{"begin":117,"end":123,"name":"PUSH","source":0,"value":"0"},{"begin":149,"end":150,"name":"PUSH","source":0,"value":"7"},{"begin":146,"end":147,"name":"DUP3","source":0},{"begin":146,"end":150,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":146,"end":150,"name":"SWAP2","source":0},{"begin":146,"end":150,"name":"SWAP1","source":0},{"begin":146,"end":150,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":146,"end":150,"name":"JUMP","source":0,"value":"[in]"},{"begin":146,"end":150,"name":"tag","source":0,"value":"11"},{"begin":146,"end":150,"name":"JUMPDEST","source":0},{"begin":139,"end":150,"name":"SWAP1","source":0},{"begin":139,"end":150,"name":"POP","source":0},{"begin":71,"end":161,"name":"SWAP2","source":0},{"begin":71,"end":161,"name":"SWAP1","source":0},{"begin":71,"end":161,"name":"POP","source":0},{"begin":71,"end":161,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"14"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"16"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"6"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"19"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"20"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":538,"name":"tag","source":1,"value":"21"},{"begin":420,"end":538,"name":"JUMPDEST","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":525,"end":530,"name":"DUP2","source":1},{"begin":507,"end":531,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":507,"end":531,"name":"JUMP","source":1,"value":"[in]"},{"begin":507,"end":531,"name":"tag","source":1,"value":"23"},{"begin":507,"end":531,"name":"JUMPDEST","source":1},{"begin":502,"end":505,"name":"DUP3","source":1},{"begin":495,"end":532,"name":"MSTORE","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"POP","source":1},{"begin":485,"end":538,"name":"JUMP","source":1,"value":"[out]"},{"begin":544,"end":766,"name":"tag","source":1,"value":"9"},{"begin":544,"end":766,"name":"JUMPDEST","source":1},{"begin":544,"end":766,"name":"PUSH","source":1,"value":"0"},{"begin":675,"end":677,"name":"PUSH","source":1,"value":"20"},{"begin":664,"end":673,"name":"DUP3","source":1},{"begin":660,"end":678,"name":"ADD","source":1},{"begin":652,"end":678,"name":"SWAP1","source":1},{"begin":652,"end":678,"name":"POP","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":756,"end":757,"name":"PUSH","source":1,"value":"0"},{"begin":745,"end":754,"name":"DUP4","source":1},{"begin":741,"end":758,"name":"ADD","source":1},{"begin":732,"end":738,"name":"DUP5","source":1},{"begin":688,"end":759,"name":"PUSH [tag]","source":1,"value":"21"},{"begin":688,"end":759,"name":"JUMP","source":1,"value":"[in]"},{"begin":688,"end":759,"name":"tag","source":1,"value":"26"},{"begin":688,"end":759,"name":"JUMPDEST","source":1},{"begin":642,"end":766,"name":"SWAP3","source":1},{"begin":642,"end":766,"name":"SWAP2","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"POP","source":1},{"begin":642,"end":766,"name":"JUMP","source":1,"value":"[out]"},{"begin":772,"end":1120,"name":"tag","source":1,"value":"12"},{"begin":772,"end":1120,"name":"JUMPDEST","source":1},{"begin":772,"end":1120,"name":"PUSH","source":1,"value":"0"},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":853,"end":854,"name":"DUP3","source":1},{"begin":835,"end":855,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":835,"end":855,"name":"JUMP","source":1,"value":"[in]"},{"begin":835,"end":855,"name":"tag","source":1,"value":"28"},{"begin":835,"end":855,"name":"JUMPDEST","source":1},{"begin":830,"end":855,"name":"SWAP2","source":1},{"begin":830,"end":855,"name":"POP","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"29"},{"begin":887,"end":888,"name":"DUP4","source":1},{"begin":869,"end":889,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":869,"end":889,"name":"JUMP","source":1,"value":"[in]"},{"begin":869,"end":889,"name":"tag","source":1,"value":"29"},{"begin":869,"end":889,"name":"JUMPDEST","source":1},{"begin":864,"end":889,"name":"SWAP3","source":1},{"begin":864,"end":889,"name":"POP","source":1},{"begin":1057,"end":1058,"name":"DUP2","source":1},{"begin":989,"end":1055,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":985,"end":1059,"name":"DIV","source":1},{"begin":982,"end":983,"name":"DUP4","source":1},{"begin":979,"end":1060,"name":"GT","source":1},{"begin":974,"end":975,"name":"DUP3","source":1},{"begin":967,"end":976,"name":"ISZERO","source":1},{"begin":960,"end":977,"name":"ISZERO","source":1},{"begin":956,"end":1061,"name":"AND","source":1},{"begin":953,"end":955,"name":"ISZERO","source":1},{"begin":953,"end":955,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPI","source":1},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":1064,"end":1082,"name":"JUMP","source":1,"value":"[in]"},{"begin":1064,"end":1082,"name":"tag","source":1,"value":"31"},{"begin":1064,"end":1082,"name":"JUMPDEST","source":1},{"begin":953,"end":955,"name":"tag","source":1,"value":"30"},{"begin":953,"end":955,"name":"JUMPDEST","source":1},{"begin":1112,"end":1113,"name":"DUP3","source":1},{"begin":1109,"end":1110,"name":"DUP3","source":1},{"begin":1105,"end":1114,"name":"MUL","source":1},{"begin":1094,"end":1114,"name":"SWAP1","source":1},{"begin":1094,"end":1114,"name":"POP","source":1},{"begin":820,"end":1120,"name":"SWAP3","source":1},{"begin":820,"end":1120,"name":"SWAP2","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"POP","source":1},{"begin":820,"end":1120,"name":"JUMP","source":1,"value":"[out]"},{"begin":1126,"end":1203,"name":"tag","source":1,"value":"24"},{"begin":1126,"end":1203,"name":"JUMPDEST","source":1},{"begin":1126,"end":1203,"name":"PUSH","source":1,"value":"0"},{"begin":1192,"end":1197,"name":"DUP2","source":1},{"begin":1181,"end":1197,"name":"SWAP1","source":1},{"begin":1181,"end":1197,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"SWAP2","source":1},{"begin":1171,"end":1203,"name":"SWAP1","source":1},{"begin":1171,"end":1203,"name":"POP","source":1},{"begin":1171,"end":1203,"name":"JUMP","source":1,"value":"[out]"},{"begin":1209,"end":1389,"name":"tag","source":1,"value":"32"},{"begin":1209,"end":1389,"name":"JUMPDEST","source":1},{"begin":1257,"end":1334,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1254,"end":1255,"name":"PUSH","source":1,"value":"0"},{"begin":1247,"end":1335,"name":"MSTORE","source":1},{"begin":1354,"end":1358,"name":"PUSH","source":1,"value":"11"},{"begin":1351,"end":1352,"name":"PUSH","source":1,"value":"4"},{"begin":1344,"end":1359,"name":"MSTORE","source":1},{"begin":1378,"end":1382,"name":"PUSH","source":1,"value":"24"},{"begin":1375,"end":1376,"name":"PUSH","source":1,"value":"0"},{"begin":1368,"end":1383,"name":"REVERT","source":1},{"begin":1395,"end":1517,"name":"tag","source":1,"value":"17"},{"begin":1395,"end":1517,"name":"JUMPDEST","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1486,"end":1491,"name":"DUP2","source":1},{"begin":1468,"end":1492,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":1468,"end":1492,"name":"JUMP","source":1,"value":"[in]"},{"begin":1468,"end":1492,"name":"tag","source":1,"value":"36"},{"begin":1468,"end":1492,"name":"JUMPDEST","source":1},{"begin":1461,"end":1466,"name":"DUP2","source":1},{"begin":1458,"end":1493,"name":"EQ","source":1},{"begin":1448,"end":1450,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPI","source":1},{"begin":1507,"end":1508,"name":"PUSH","source":1,"value":"0"},{"begin":1504,"end":1505,"name":"DUP1","source":1},{"begin":1497,"end":1509,"name":"REVERT","source":1},{"begin":1448,"end":1450,"name":"tag","source":1,"value":"37"},{"begin":1448,"end":1450,"name":"JUMPDEST","source":1},{"begin":1438,"end":1517,"name":"POP","source":1},{"begin":1438,"end":1517,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"multiply(uint256)":"c6888fa1"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5d29beacc41878230d7981905bb45b41180007e0dbc2d810ff03c7b630b4048a\",\"urls\":[\"bzz-raw://b1fbe1547a505b6904392fc22ab43c61ca28882c7687498a84d4d648b374dc0e\",\"dweb:/ipfs/QmRVHiSGD6nBrUfXf8NX18FVrkitbuoVHj2r1To5k2XK6q\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContract {\n function multiply(uint a) public pure returns(uint d) {\n return a *7;\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "uint256", "name": "a", "type": "uint256" } + ], + "name": "multiply", + "outputs": [ + { "internalType": "uint256", "name": "d", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:167 contract TestContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":117:123 uint d */\n 0x00\n /* \"main.sol\":149:150 7 */\n 0x07\n /* \"main.sol\":146:147 a */\n dup3\n /* \"main.sol\":146:150 a *7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":139:150 return a *7 */\n swap1\n pop\n /* \"main.sol\":71:161 function multiply(uint a) public pure returns(uint d) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1120 */\n tag_12:\n 0x00\n /* \"#utility.yul\":835:855 */\n tag_28\n /* \"#utility.yul\":853:854 */\n dup3\n /* \"#utility.yul\":835:855 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":830:855 */\n swap2\n pop\n /* \"#utility.yul\":869:889 */\n tag_29\n /* \"#utility.yul\":887:888 */\n dup4\n /* \"#utility.yul\":869:889 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":864:889 */\n swap3\n pop\n /* \"#utility.yul\":1057:1058 */\n dup2\n /* \"#utility.yul\":989:1055 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":985:1059 */\n div\n /* \"#utility.yul\":982:983 */\n dup4\n /* \"#utility.yul\":979:1060 */\n gt\n /* \"#utility.yul\":974:975 */\n dup3\n /* \"#utility.yul\":967:976 */\n iszero\n /* \"#utility.yul\":960:977 */\n iszero\n /* \"#utility.yul\":956:1061 */\n and\n /* \"#utility.yul\":953:955 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1064:1082 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":953:955 */\n tag_30:\n /* \"#utility.yul\":1112:1113 */\n dup3\n /* \"#utility.yul\":1109:1110 */\n dup3\n /* \"#utility.yul\":1105:1114 */\n mul\n /* \"#utility.yul\":1094:1114 */\n swap1\n pop\n /* \"#utility.yul\":820:1120 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1126:1203 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1192:1197 */\n dup2\n /* \"#utility.yul\":1181:1197 */\n swap1\n pop\n /* \"#utility.yul\":1171:1203 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1209:1389 */\n tag_32:\n /* \"#utility.yul\":1257:1334 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1254:1255 */\n 0x00\n /* \"#utility.yul\":1247:1335 */\n mstore\n /* \"#utility.yul\":1354:1358 */\n 0x11\n /* \"#utility.yul\":1351:1352 */\n 0x04\n /* \"#utility.yul\":1344:1359 */\n mstore\n /* \"#utility.yul\":1378:1382 */\n 0x24\n /* \"#utility.yul\":1375:1376 */\n 0x00\n /* \"#utility.yul\":1368:1383 */\n revert\n /* \"#utility.yul\":1395:1517 */\n tag_17:\n /* \"#utility.yul\":1468:1492 */\n tag_36\n /* \"#utility.yul\":1486:1491 */\n dup2\n /* \"#utility.yul\":1468:1492 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1461:1466 */\n dup2\n /* \"#utility.yul\":1458:1493 */\n eq\n /* \"#utility.yul\":1448:1450 */\n tag_37\n jumpi\n /* \"#utility.yul\":1507:1508 */\n 0x00\n /* \"#utility.yul\":1504:1505 */\n dup1\n /* \"#utility.yul\":1497:1509 */\n revert\n /* \"#utility.yul\":1448:1450 */\n tag_37:\n /* \"#utility.yul\":1438:1517 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506101be806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:128:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1520:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "59:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "69:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "91:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "78:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "78:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "69:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "134:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "107:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "107:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "107:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "37:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "45:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "53:5:1", + "type": "" + } + ], + "src": "7:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "218:196:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "264:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "273:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "276:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "266:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "266:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "266:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "239:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "248:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "235:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "235:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "260:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "231:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "231:32:1" + }, + "nodeType": "YulIf", + "src": "228:2:1" + }, + { + "nodeType": "YulBlock", + "src": "290:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "305:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "319:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "309:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "334:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "369:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "380:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "365:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "365:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "344:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "344:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "334:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "188:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "199:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "211:6:1", + "type": "" + } + ], + "src": "152:262:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "485:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "502:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "525:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "507:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "507:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "495:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "495:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "495:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "473:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "480:3:1", + "type": "" + } + ], + "src": "420:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "642:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "652:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "664:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "675:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "660:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "660:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "652:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "732:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "745:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "756:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "741:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "741:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "688:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "688:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "688:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "614:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "626:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "637:4:1", + "type": "" + } + ], + "src": "544:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "820:300:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "830:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "853:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "835:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "835:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "830:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "864:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "887:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "869:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "869:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "864:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1062:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1064:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1064:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1064:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "974:1:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "967:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "967:9:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "960:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "960:17:1" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "982:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "989:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1057:1:1" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "985:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "985:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "979:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "979:81:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "956:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "956:105:1" + }, + "nodeType": "YulIf", + "src": "953:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "1094:20:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1109:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1112:1:1" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1105:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1105:9:1" + }, + "variableNames": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "1094:7:1" + } + ] + } + ] + }, + "name": "checked_mul_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "803:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "806:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nodeType": "YulTypedName", + "src": "812:7:1", + "type": "" + } + ], + "src": "772:348:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1171:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1181:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1192:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1181:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1153:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1163:7:1", + "type": "" + } + ], + "src": "1126:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1237:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1254:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1257:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1247:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1247:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1247:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1351:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1354:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1344:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1344:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1344:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1375:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1378:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1368:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1368:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1368:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1209:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1438:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1495:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1504:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1507:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1497:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1497:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1497:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1461:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1486:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1468:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1468:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1458:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1458:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1451:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1451:43:1" + }, + "nodeType": "YulIf", + "src": "1448:2:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1431:5:1", + "type": "" + } + ], + "src": "1395:122:1" + } + ] + }, + "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;117:6;149:1;146;:4;;;;:::i;:::-;139:11;;71:90;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "89200", + "executionCost": "135", + "totalCost": "89335" + }, + "external": { "multiply(uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 167, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 167, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 167, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, + { "begin": 39, "end": 167, "name": "tag", "source": 0, "value": "1" }, + { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 167, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 167, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 167, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 167, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 167, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 167, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 167, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 167, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "C6888FA1" + }, + { "begin": 39, "end": 167, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 167, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 71, + "end": 161, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 71, "end": 161, "name": "DUP1", "source": 0 }, + { "begin": 71, "end": 161, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 71, "end": 161, "name": "SUB", "source": 0 }, + { "begin": 71, "end": 161, "name": "DUP2", "source": 0 }, + { "begin": 71, "end": 161, "name": "ADD", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 71, + "end": 161, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 71, + "end": 161, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 71, + "end": 161, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 71, + "end": 161, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 71, "end": 161, "name": "MLOAD", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 71, + "end": 161, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 71, + "end": 161, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 71, "end": 161, "name": "MLOAD", "source": 0 }, + { "begin": 71, "end": 161, "name": "DUP1", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, + { "begin": 71, "end": 161, "name": "SUB", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, + { "begin": 71, "end": 161, "name": "RETURN", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, + { + "begin": 117, + "end": 123, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 149, + "end": 150, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 146, "end": 147, "name": "DUP3", "source": 0 }, + { + "begin": 146, + "end": 150, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 146, "end": 150, "name": "SWAP2", "source": 0 }, + { "begin": 146, "end": 150, "name": "SWAP1", "source": 0 }, + { + "begin": 146, + "end": 150, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 146, + "end": 150, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 146, + "end": 150, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 146, "end": 150, "name": "JUMPDEST", "source": 0 }, + { "begin": 139, "end": 150, "name": "SWAP1", "source": 0 }, + { "begin": 139, "end": 150, "name": "POP", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, + { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, + { "begin": 71, "end": 161, "name": "POP", "source": 0 }, + { + "begin": 71, + "end": 161, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 414, + "name": "tag", + "source": 1, + "value": "6" + }, + { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 414, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 260, + "end": 262, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, + { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, + { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, + { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, + { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { + "begin": 276, + "end": 277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, + { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { + "begin": 319, + "end": 320, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, + { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, + { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, + { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { + "begin": 344, + "end": 397, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 344, + "end": 397, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 397, "name": "POP", "source": 1 }, + { "begin": 290, "end": 407, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { + "begin": 218, + "end": 414, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 420, + "end": 538, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, + { + "begin": 507, + "end": 531, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 507, + "end": 531, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 507, + "end": 531, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, + { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, + { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { "begin": 485, "end": 538, "name": "POP", "source": 1 }, + { + "begin": 485, + "end": 538, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 544, + "end": 766, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, + { + "begin": 544, + "end": 766, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 675, + "end": 677, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, + { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, + { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, + { "begin": 652, "end": 678, "name": "POP", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 756, + "end": 757, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, + { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, + { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, + { + "begin": 688, + "end": 759, + "name": "PUSH [tag]", + "source": 1, + "value": "21" + }, + { + "begin": 688, + "end": 759, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 688, + "end": 759, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, + { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { "begin": 642, "end": 766, "name": "POP", "source": 1 }, + { + "begin": 642, + "end": 766, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 772, + "end": 1120, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 772, "end": 1120, "name": "JUMPDEST", "source": 1 }, + { + "begin": 772, + "end": 1120, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 835, + "end": 855, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { "begin": 853, "end": 854, "name": "DUP3", "source": 1 }, + { + "begin": 835, + "end": 855, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 835, + "end": 855, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 835, + "end": 855, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 835, "end": 855, "name": "JUMPDEST", "source": 1 }, + { "begin": 830, "end": 855, "name": "SWAP2", "source": 1 }, + { "begin": 830, "end": 855, "name": "POP", "source": 1 }, + { + "begin": 869, + "end": 889, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { "begin": 887, "end": 888, "name": "DUP4", "source": 1 }, + { + "begin": 869, + "end": 889, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 869, + "end": 889, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 869, + "end": 889, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 869, "end": 889, "name": "JUMPDEST", "source": 1 }, + { "begin": 864, "end": 889, "name": "SWAP3", "source": 1 }, + { "begin": 864, "end": 889, "name": "POP", "source": 1 }, + { "begin": 1057, "end": 1058, "name": "DUP2", "source": 1 }, + { + "begin": 989, + "end": 1055, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 985, "end": 1059, "name": "DIV", "source": 1 }, + { "begin": 982, "end": 983, "name": "DUP4", "source": 1 }, + { "begin": 979, "end": 1060, "name": "GT", "source": 1 }, + { "begin": 974, "end": 975, "name": "DUP3", "source": 1 }, + { "begin": 967, "end": 976, "name": "ISZERO", "source": 1 }, + { "begin": 960, "end": 977, "name": "ISZERO", "source": 1 }, + { "begin": 956, "end": 1061, "name": "AND", "source": 1 }, + { "begin": 953, "end": 955, "name": "ISZERO", "source": 1 }, + { + "begin": 953, + "end": 955, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 953, "end": 955, "name": "JUMPI", "source": 1 }, + { + "begin": 1064, + "end": 1082, + "name": "PUSH [tag]", + "source": 1, + "value": "31" + }, + { + "begin": 1064, + "end": 1082, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 1064, + "end": 1082, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1064, + "end": 1082, + "name": "tag", + "source": 1, + "value": "31" + }, + { "begin": 1064, "end": 1082, "name": "JUMPDEST", "source": 1 }, + { + "begin": 953, + "end": 955, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 953, "end": 955, "name": "JUMPDEST", "source": 1 }, + { "begin": 1112, "end": 1113, "name": "DUP3", "source": 1 }, + { "begin": 1109, "end": 1110, "name": "DUP3", "source": 1 }, + { "begin": 1105, "end": 1114, "name": "MUL", "source": 1 }, + { "begin": 1094, "end": 1114, "name": "SWAP1", "source": 1 }, + { "begin": 1094, "end": 1114, "name": "POP", "source": 1 }, + { "begin": 820, "end": 1120, "name": "SWAP3", "source": 1 }, + { "begin": 820, "end": 1120, "name": "SWAP2", "source": 1 }, + { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, + { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, + { + "begin": 820, + "end": 1120, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1126, + "end": 1203, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 1126, "end": 1203, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1126, + "end": 1203, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1192, "end": 1197, "name": "DUP2", "source": 1 }, + { "begin": 1181, "end": 1197, "name": "SWAP1", "source": 1 }, + { "begin": 1181, "end": 1197, "name": "POP", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "SWAP2", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "SWAP1", "source": 1 }, + { "begin": 1171, "end": 1203, "name": "POP", "source": 1 }, + { + "begin": 1171, + "end": 1203, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1209, + "end": 1389, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 1209, "end": 1389, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1257, + "end": 1334, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1254, + "end": 1255, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1247, "end": 1335, "name": "MSTORE", "source": 1 }, + { + "begin": 1354, + "end": 1358, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1351, + "end": 1352, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1344, "end": 1359, "name": "MSTORE", "source": 1 }, + { + "begin": 1378, + "end": 1382, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1375, + "end": 1376, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1368, "end": 1383, "name": "REVERT", "source": 1 }, + { + "begin": 1395, + "end": 1517, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 1395, "end": 1517, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1468, + "end": 1492, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 1486, "end": 1491, "name": "DUP2", "source": 1 }, + { + "begin": 1468, + "end": 1492, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 1468, + "end": 1492, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1468, + "end": 1492, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 1468, "end": 1492, "name": "JUMPDEST", "source": 1 }, + { "begin": 1461, "end": 1466, "name": "DUP2", "source": 1 }, + { "begin": 1458, "end": 1493, "name": "EQ", "source": 1 }, + { + "begin": 1448, + "end": 1450, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { "begin": 1448, "end": 1450, "name": "JUMPI", "source": 1 }, + { + "begin": 1507, + "end": 1508, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1504, "end": 1505, "name": "DUP1", "source": 1 }, + { "begin": 1497, "end": 1509, "name": "REVERT", "source": 1 }, + { + "begin": 1448, + "end": 1450, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 1448, "end": 1450, "name": "JUMPDEST", "source": 1 }, + { "begin": 1438, "end": 1517, "name": "POP", "source": 1 }, + { + "begin": 1438, + "end": 1517, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5d29beacc41878230d7981905bb45b41180007e0dbc2d810ff03c7b630b4048a\",\"urls\":[\"bzz-raw://b1fbe1547a505b6904392fc22ab43c61ca28882c7687498a84d4d648b374dc0e\",\"dweb:/ipfs/QmRVHiSGD6nBrUfXf8NX18FVrkitbuoVHj2r1To5k2XK6q\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContract {\n function multiply(uint a) public pure returns(uint d) {\n return a *7;\n }\n }" +} diff --git a/tests/contracts/compiled/TestContractIncr.json b/tests/contracts/compiled/TestContractIncr.json index d41f0b03c62..5e1d9d95a15 100644 --- a/tests/contracts/compiled/TestContractIncr.json +++ b/tests/contracts/compiled/TestContractIncr.json @@ -1 +1,1389 @@ -{"byteCode":"0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","contract":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incr","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":107:162 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":150:151 0 */\n 0x00\n /* \"main.sol\":142:147 count */\n dup1\n /* \"main.sol\":142:151 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:92 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":176:237 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":75:92 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":176:237 function incr() public {... */\n tag_10:\n /* \"main.sol\":225:226 1 */\n 0x01\n /* \"main.sol\":219:224 count */\n sload(0x00)\n /* \"main.sol\":219:226 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":213:218 count */\n 0x00\n /* \"main.sol\":213:226 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":176:237 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033\n}\n","bytecode":{"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:204:0:-:0;;;107:55;;;;;;;;;;150:1;142:5;:9;;;;39:204;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:936:1","statements":[{"body":{"nodeType":"YulBlock","src":"72:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"89:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"112:5:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"94:17:1"},"nodeType":"YulFunctionCall","src":"94:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"82:6:1"},"nodeType":"YulFunctionCall","src":"82:37:1"},"nodeType":"YulExpressionStatement","src":"82:37:1"}]},"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"60:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"67:3:1","type":""}],"src":"7:118:1"},{"body":{"nodeType":"YulBlock","src":"229:124:1","statements":[{"nodeType":"YulAssignment","src":"239:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:1"},"nodeType":"YulFunctionCall","src":"247:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"239:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"319:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"328:3:1"},"nodeType":"YulFunctionCall","src":"328:17:1"}],"functionName":{"name":"abi_encode_t_uint256_to_t_uint256_fromStack","nodeType":"YulIdentifier","src":"275:43:1"},"nodeType":"YulFunctionCall","src":"275:71:1"},"nodeType":"YulExpressionStatement","src":"275:71:1"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"201:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"213:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"224:4:1","type":""}],"src":"131:222:1"},{"body":{"nodeType":"YulBlock","src":"403:261:1","statements":[{"nodeType":"YulAssignment","src":"413:25:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"436:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"418:17:1"},"nodeType":"YulFunctionCall","src":"418:20:1"},"variableNames":[{"name":"x","nodeType":"YulIdentifier","src":"413:1:1"}]},{"nodeType":"YulAssignment","src":"447:25:1","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"470:1:1"}],"functionName":{"name":"cleanup_t_uint256","nodeType":"YulIdentifier","src":"452:17:1"},"nodeType":"YulFunctionCall","src":"452:20:1"},"variableNames":[{"name":"y","nodeType":"YulIdentifier","src":"447:1:1"}]},{"body":{"nodeType":"YulBlock","src":"610:22:1","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"612:16:1"},"nodeType":"YulFunctionCall","src":"612:18:1"},"nodeType":"YulExpressionStatement","src":"612:18:1"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"531:1:1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"538:66:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"y","nodeType":"YulIdentifier","src":"606:1:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"534:3:1"},"nodeType":"YulFunctionCall","src":"534:74:1"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"528:2:1"},"nodeType":"YulFunctionCall","src":"528:81:1"},"nodeType":"YulIf","src":"525:2:1"},{"nodeType":"YulAssignment","src":"642:16:1","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"653:1:1"},{"name":"y","nodeType":"YulIdentifier","src":"656:1:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:1"},"nodeType":"YulFunctionCall","src":"649:9:1"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"642:3:1"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"390:1:1","type":""},{"name":"y","nodeType":"YulTypedName","src":"393:1:1","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"399:3:1","type":""}],"src":"359:305:1"},{"body":{"nodeType":"YulBlock","src":"715:32:1","statements":[{"nodeType":"YulAssignment","src":"725:16:1","value":{"name":"value","nodeType":"YulIdentifier","src":"736:5:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"725:7:1"}]}]},"name":"cleanup_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"707:7:1","type":""}],"src":"670:77:1"},{"body":{"nodeType":"YulBlock","src":"781:152:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"798:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"801:77:1","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"791:6:1"},"nodeType":"YulFunctionCall","src":"791:88:1"},"nodeType":"YulExpressionStatement","src":"791:88:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"895:1:1","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"898:4:1","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"888:6:1"},"nodeType":"YulFunctionCall","src":"888:15:1"},"nodeType":"YulExpressionStatement","src":"888:15:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"919:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"922:4:1","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"912:6:1"},"nodeType":"YulFunctionCall","src":"912:15:1"},"nodeType":"YulExpressionStatement","src":"912:15:1"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"753:180:1"}]},"contents":"{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ","sourceMap":"39:204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176:61;;;:::i;:::-;;75:17;;;;:::o;176:61::-;225:1;219:5;;:7;;;;:::i;:::-;213:5;:13;;;;176:61::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15"},"gasEstimates":{"creation":{"codeDepositCost":"73400","executionCost":"5137","totalCost":"78537"},"external":{"count()":"1107","incr()":"infinite"}},"legacyAssembly":{".code":[{"begin":39,"end":243,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":243,"name":"MSTORE","source":0},{"begin":107,"end":162,"name":"CALLVALUE","source":0},{"begin":107,"end":162,"name":"DUP1","source":0},{"begin":107,"end":162,"name":"ISZERO","source":0},{"begin":107,"end":162,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":107,"end":162,"name":"JUMPI","source":0},{"begin":107,"end":162,"name":"PUSH","source":0,"value":"0"},{"begin":107,"end":162,"name":"DUP1","source":0},{"begin":107,"end":162,"name":"REVERT","source":0},{"begin":107,"end":162,"name":"tag","source":0,"value":"1"},{"begin":107,"end":162,"name":"JUMPDEST","source":0},{"begin":107,"end":162,"name":"POP","source":0},{"begin":150,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":142,"end":147,"name":"DUP1","source":0},{"begin":142,"end":151,"name":"DUP2","source":0},{"begin":142,"end":151,"name":"SWAP1","source":0},{"begin":142,"end":151,"name":"SSTORE","source":0},{"begin":142,"end":151,"name":"POP","source":0},{"begin":39,"end":243,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"CODECOPY","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033",".code":[{"begin":39,"end":243,"name":"PUSH","source":0,"value":"80"},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"40"},{"begin":39,"end":243,"name":"MSTORE","source":0},{"begin":39,"end":243,"name":"CALLVALUE","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"ISZERO","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"REVERT","source":0},{"begin":39,"end":243,"name":"tag","source":0,"value":"1"},{"begin":39,"end":243,"name":"JUMPDEST","source":0},{"begin":39,"end":243,"name":"POP","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"4"},{"begin":39,"end":243,"name":"CALLDATASIZE","source":0},{"begin":39,"end":243,"name":"LT","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"CALLDATALOAD","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"E0"},{"begin":39,"end":243,"name":"SHR","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"6661ABD"},{"begin":39,"end":243,"name":"EQ","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"119FBBD4"},{"begin":39,"end":243,"name":"EQ","source":0},{"begin":39,"end":243,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":39,"end":243,"name":"JUMPI","source":0},{"begin":39,"end":243,"name":"tag","source":0,"value":"2"},{"begin":39,"end":243,"name":"JUMPDEST","source":0},{"begin":39,"end":243,"name":"PUSH","source":0,"value":"0"},{"begin":39,"end":243,"name":"DUP1","source":0},{"begin":39,"end":243,"name":"REVERT","source":0},{"begin":75,"end":92,"name":"tag","source":0,"value":"3"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":92,"name":"tag","source":0,"value":"5"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":92,"name":"MLOAD","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":75,"end":92,"name":"SWAP2","source":0},{"begin":75,"end":92,"name":"SWAP1","source":0},{"begin":75,"end":92,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[in]"},{"begin":75,"end":92,"name":"tag","source":0,"value":"7"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"40"},{"begin":75,"end":92,"name":"MLOAD","source":0},{"begin":75,"end":92,"name":"DUP1","source":0},{"begin":75,"end":92,"name":"SWAP2","source":0},{"begin":75,"end":92,"name":"SUB","source":0},{"begin":75,"end":92,"name":"SWAP1","source":0},{"begin":75,"end":92,"name":"RETURN","source":0},{"begin":176,"end":237,"name":"tag","source":0,"value":"4"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":176,"end":237,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":176,"end":237,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":176,"end":237,"name":"JUMP","source":0,"value":"[in]"},{"begin":176,"end":237,"name":"tag","source":0,"value":"9"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":176,"end":237,"name":"STOP","source":0},{"begin":75,"end":92,"name":"tag","source":0,"value":"6"},{"begin":75,"end":92,"name":"JUMPDEST","source":0},{"begin":75,"end":92,"name":"PUSH","source":0,"value":"0"},{"begin":75,"end":92,"name":"SLOAD","source":0},{"begin":75,"end":92,"name":"DUP2","source":0},{"begin":75,"end":92,"name":"JUMP","source":0,"value":"[out]"},{"begin":176,"end":237,"name":"tag","source":0,"value":"10"},{"begin":176,"end":237,"name":"JUMPDEST","source":0},{"begin":225,"end":226,"name":"PUSH","source":0,"value":"1"},{"begin":219,"end":224,"name":"PUSH","source":0,"value":"0"},{"begin":219,"end":224,"name":"SLOAD","source":0},{"begin":219,"end":226,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":219,"end":226,"name":"SWAP2","source":0},{"begin":219,"end":226,"name":"SWAP1","source":0},{"begin":219,"end":226,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":219,"end":226,"name":"JUMP","source":0,"value":"[in]"},{"begin":219,"end":226,"name":"tag","source":0,"value":"12"},{"begin":219,"end":226,"name":"JUMPDEST","source":0},{"begin":213,"end":218,"name":"PUSH","source":0,"value":"0"},{"begin":213,"end":226,"name":"DUP2","source":0},{"begin":213,"end":226,"name":"SWAP1","source":0},{"begin":213,"end":226,"name":"SSTORE","source":0},{"begin":213,"end":226,"name":"POP","source":0},{"begin":176,"end":237,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":125,"name":"tag","source":1,"value":"15"},{"begin":7,"end":125,"name":"JUMPDEST","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":112,"end":117,"name":"DUP2","source":1},{"begin":94,"end":118,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":94,"end":118,"name":"JUMP","source":1,"value":"[in]"},{"begin":94,"end":118,"name":"tag","source":1,"value":"17"},{"begin":94,"end":118,"name":"JUMPDEST","source":1},{"begin":89,"end":92,"name":"DUP3","source":1},{"begin":82,"end":119,"name":"MSTORE","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"POP","source":1},{"begin":72,"end":125,"name":"JUMP","source":1,"value":"[out]"},{"begin":131,"end":353,"name":"tag","source":1,"value":"8"},{"begin":131,"end":353,"name":"JUMPDEST","source":1},{"begin":131,"end":353,"name":"PUSH","source":1,"value":"0"},{"begin":262,"end":264,"name":"PUSH","source":1,"value":"20"},{"begin":251,"end":260,"name":"DUP3","source":1},{"begin":247,"end":265,"name":"ADD","source":1},{"begin":239,"end":265,"name":"SWAP1","source":1},{"begin":239,"end":265,"name":"POP","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":343,"end":344,"name":"PUSH","source":1,"value":"0"},{"begin":332,"end":341,"name":"DUP4","source":1},{"begin":328,"end":345,"name":"ADD","source":1},{"begin":319,"end":325,"name":"DUP5","source":1},{"begin":275,"end":346,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":275,"end":346,"name":"JUMP","source":1,"value":"[in]"},{"begin":275,"end":346,"name":"tag","source":1,"value":"20"},{"begin":275,"end":346,"name":"JUMPDEST","source":1},{"begin":229,"end":353,"name":"SWAP3","source":1},{"begin":229,"end":353,"name":"SWAP2","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"POP","source":1},{"begin":229,"end":353,"name":"JUMP","source":1,"value":"[out]"},{"begin":359,"end":664,"name":"tag","source":1,"value":"13"},{"begin":359,"end":664,"name":"JUMPDEST","source":1},{"begin":359,"end":664,"name":"PUSH","source":1,"value":"0"},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"22"},{"begin":436,"end":437,"name":"DUP3","source":1},{"begin":418,"end":438,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":418,"end":438,"name":"JUMP","source":1,"value":"[in]"},{"begin":418,"end":438,"name":"tag","source":1,"value":"22"},{"begin":418,"end":438,"name":"JUMPDEST","source":1},{"begin":413,"end":438,"name":"SWAP2","source":1},{"begin":413,"end":438,"name":"POP","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"23"},{"begin":470,"end":471,"name":"DUP4","source":1},{"begin":452,"end":472,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":452,"end":472,"name":"JUMP","source":1,"value":"[in]"},{"begin":452,"end":472,"name":"tag","source":1,"value":"23"},{"begin":452,"end":472,"name":"JUMPDEST","source":1},{"begin":447,"end":472,"name":"SWAP3","source":1},{"begin":447,"end":472,"name":"POP","source":1},{"begin":606,"end":607,"name":"DUP3","source":1},{"begin":538,"end":604,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":534,"end":608,"name":"SUB","source":1},{"begin":531,"end":532,"name":"DUP3","source":1},{"begin":528,"end":609,"name":"GT","source":1},{"begin":525,"end":527,"name":"ISZERO","source":1},{"begin":525,"end":527,"name":"PUSH [tag]","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPI","source":1},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":612,"end":630,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":612,"end":630,"name":"JUMP","source":1,"value":"[in]"},{"begin":612,"end":630,"name":"tag","source":1,"value":"25"},{"begin":612,"end":630,"name":"JUMPDEST","source":1},{"begin":525,"end":527,"name":"tag","source":1,"value":"24"},{"begin":525,"end":527,"name":"JUMPDEST","source":1},{"begin":656,"end":657,"name":"DUP3","source":1},{"begin":653,"end":654,"name":"DUP3","source":1},{"begin":649,"end":658,"name":"ADD","source":1},{"begin":642,"end":658,"name":"SWAP1","source":1},{"begin":642,"end":658,"name":"POP","source":1},{"begin":403,"end":664,"name":"SWAP3","source":1},{"begin":403,"end":664,"name":"SWAP2","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"POP","source":1},{"begin":403,"end":664,"name":"JUMP","source":1,"value":"[out]"},{"begin":670,"end":747,"name":"tag","source":1,"value":"18"},{"begin":670,"end":747,"name":"JUMPDEST","source":1},{"begin":670,"end":747,"name":"PUSH","source":1,"value":"0"},{"begin":736,"end":741,"name":"DUP2","source":1},{"begin":725,"end":741,"name":"SWAP1","source":1},{"begin":725,"end":741,"name":"POP","source":1},{"begin":715,"end":747,"name":"SWAP2","source":1},{"begin":715,"end":747,"name":"SWAP1","source":1},{"begin":715,"end":747,"name":"POP","source":1},{"begin":715,"end":747,"name":"JUMP","source":1,"value":"[out]"},{"begin":753,"end":933,"name":"tag","source":1,"value":"26"},{"begin":753,"end":933,"name":"JUMPDEST","source":1},{"begin":801,"end":878,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":798,"end":799,"name":"PUSH","source":1,"value":"0"},{"begin":791,"end":879,"name":"MSTORE","source":1},{"begin":898,"end":902,"name":"PUSH","source":1,"value":"11"},{"begin":895,"end":896,"name":"PUSH","source":1,"value":"4"},{"begin":888,"end":903,"name":"MSTORE","source":1},{"begin":922,"end":926,"name":"PUSH","source":1,"value":"24"},{"begin":919,"end":920,"name":"PUSH","source":1,"value":"0"},{"begin":912,"end":927,"name":"REVERT","source":1}]}}},"methodIdentifiers":{"count()":"06661abd","incr()":"119fbbd4"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x338162b85eaf39a85daac3fe2d3d8e94fad18f74dd7c238709d0500e96f14b71\",\"urls\":[\"bzz-raw://0229ffcdcdfa88d496ad29dc5532ca35e6ab895b46b64762d09e01bc31056af5\",\"dweb:/ipfs/QmeE5zDfodVZWTxxQ6iTJ6W8GKvdL1bKhAR2P1m21ejfzP\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3,"contract":"main.sol:TestContractIncr","label":"count","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":107:162 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":150:151 0 */\n 0x00\n /* \"main.sol\":142:147 count */\n dup1\n /* \"main.sol\":142:151 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:92 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":176:237 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":75:92 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":176:237 function incr() public {... */\n tag_10:\n /* \"main.sol\":225:226 1 */\n 0x01\n /* \"main.sol\":219:224 count */\n sload(0x00)\n /* \"main.sol\":219:226 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":213:218 count */\n 0x00\n /* \"main.sol\":213:226 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":176:237 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:204:0:-:0;;;107:55;;;;;;;;;;150:1;142:5;:9;;;;39:204;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:936:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "72:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "89:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "112:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "94:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "94:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "82:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "82:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "82:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "60:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "67:3:1", + "type": "" + } + ], + "src": "7:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "229:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "239:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "251:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "262:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "247:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "247:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "239:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "319:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "332:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "343:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "328:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "328:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "275:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "275:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "275:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "201:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "213:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "224:4:1", + "type": "" + } + ], + "src": "131:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "403:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "413:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "436:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "418:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "418:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "413:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "447:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "470:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "452:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "452:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "447:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "610:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "612:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "612:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "612:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "531:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "538:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "606:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "534:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "534:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "528:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "528:81:1" + }, + "nodeType": "YulIf", + "src": "525:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "642:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "653:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "656:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "649:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "642:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "390:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "393:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "399:3:1", + "type": "" + } + ], + "src": "359:305:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "715:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "725:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "736:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "725:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "697:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "707:7:1", + "type": "" + } + ], + "src": "670:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "781:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "801:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "791:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "791:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "791:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "895:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "898:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "888:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "888:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "888:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "919:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "912:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "912:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "912:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "753:180:1" + } + ] + }, + "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", + "sourceMap": "39:204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176:61;;;:::i;:::-;;75:17;;;;:::o;176:61::-;225:1;219:5;;:7;;;;:::i;:::-;213:5;:13;;;;176:61::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "73400", + "executionCost": "5137", + "totalCost": "78537" + }, + "external": { "count()": "1107", "incr()": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 243, "name": "MSTORE", "source": 0 }, + { "begin": 107, "end": 162, "name": "CALLVALUE", "source": 0 }, + { "begin": 107, "end": 162, "name": "DUP1", "source": 0 }, + { "begin": 107, "end": 162, "name": "ISZERO", "source": 0 }, + { + "begin": 107, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 107, "end": 162, "name": "JUMPI", "source": 0 }, + { + "begin": 107, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 107, "end": 162, "name": "DUP1", "source": 0 }, + { "begin": 107, "end": 162, "name": "REVERT", "source": 0 }, + { + "begin": 107, + "end": 162, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 107, "end": 162, "name": "JUMPDEST", "source": 0 }, + { "begin": 107, "end": 162, "name": "POP", "source": 0 }, + { + "begin": 150, + "end": 151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 142, "end": 147, "name": "DUP1", "source": 0 }, + { "begin": 142, "end": 151, "name": "DUP2", "source": 0 }, + { "begin": 142, "end": 151, "name": "SWAP1", "source": 0 }, + { "begin": 142, "end": 151, "name": "SSTORE", "source": 0 }, + { "begin": 142, "end": 151, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 243, "name": "CODECOPY", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 243, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", + ".code": [ + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 39, "end": 243, "name": "MSTORE", "source": 0 }, + { "begin": 39, "end": 243, "name": "CALLVALUE", "source": 0 }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 243, "name": "ISZERO", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 243, "name": "REVERT", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 39, "end": 243, "name": "JUMPDEST", "source": 0 }, + { "begin": 39, "end": 243, "name": "POP", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 243, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 39, "end": 243, "name": "LT", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 243, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 39, "end": 243, "name": "SHR", "source": 0 }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 39, "end": 243, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "119FBBD4" + }, + { "begin": 39, "end": 243, "name": "EQ", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 39, "end": 243, "name": "JUMPDEST", "source": 0 }, + { + "begin": 39, + "end": 243, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, + { "begin": 39, "end": 243, "name": "REVERT", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 75, + "end": 92, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 75, + "end": 92, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 92, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 92, "name": "MLOAD", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 75, "end": 92, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 92, "name": "SWAP1", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 75, + "end": 92, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 75, + "end": 92, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 75, "end": 92, "name": "MLOAD", "source": 0 }, + { "begin": 75, "end": 92, "name": "DUP1", "source": 0 }, + { "begin": 75, "end": 92, "name": "SWAP2", "source": 0 }, + { "begin": 75, "end": 92, "name": "SUB", "source": 0 }, + { "begin": 75, "end": 92, "name": "SWAP1", "source": 0 }, + { "begin": 75, "end": 92, "name": "RETURN", "source": 0 }, + { + "begin": 176, + "end": 237, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, + { + "begin": 176, + "end": 237, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 176, + "end": 237, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 176, + "end": 237, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 176, + "end": 237, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, + { "begin": 176, "end": 237, "name": "STOP", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 75, "end": 92, "name": "SLOAD", "source": 0 }, + { "begin": 75, "end": 92, "name": "DUP2", "source": 0 }, + { + "begin": 75, + "end": 92, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 176, + "end": 237, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, + { + "begin": 225, + "end": 226, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 219, + "end": 224, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 219, "end": 224, "name": "SLOAD", "source": 0 }, + { + "begin": 219, + "end": 226, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 219, "end": 226, "name": "SWAP2", "source": 0 }, + { "begin": 219, "end": 226, "name": "SWAP1", "source": 0 }, + { + "begin": 219, + "end": 226, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 219, + "end": 226, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 219, + "end": 226, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 219, "end": 226, "name": "JUMPDEST", "source": 0 }, + { + "begin": 213, + "end": 218, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 213, "end": 226, "name": "DUP2", "source": 0 }, + { "begin": 213, "end": 226, "name": "SWAP1", "source": 0 }, + { "begin": 213, "end": 226, "name": "SSTORE", "source": 0 }, + { "begin": 213, "end": 226, "name": "POP", "source": 0 }, + { + "begin": 176, + "end": 237, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 125, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, + { + "begin": 94, + "end": 118, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 94, + "end": 118, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 94, + "end": 118, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, + { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, + { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { "begin": 72, "end": 125, "name": "POP", "source": 1 }, + { + "begin": 72, + "end": 125, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 131, + "end": 353, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, + { + "begin": 131, + "end": 353, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 262, + "end": 264, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, + { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, + { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, + { "begin": 239, "end": 265, "name": "POP", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 343, + "end": 344, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, + { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, + { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, + { + "begin": 275, + "end": 346, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 275, + "end": 346, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 275, + "end": 346, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, + { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { "begin": 229, "end": 353, "name": "POP", "source": 1 }, + { + "begin": 229, + "end": 353, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 359, + "end": 664, + "name": "tag", + "source": 1, + "value": "13" + }, + { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, + { + "begin": 359, + "end": 664, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, + { + "begin": 418, + "end": 438, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 418, + "end": 438, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 418, + "end": 438, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, + { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, + { "begin": 413, "end": 438, "name": "POP", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, + { + "begin": 452, + "end": 472, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 452, + "end": 472, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 452, + "end": 472, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, + { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, + { "begin": 447, "end": 472, "name": "POP", "source": 1 }, + { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, + { + "begin": 538, + "end": 604, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, + { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, + { "begin": 528, "end": 609, "name": "GT", "source": 1 }, + { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 612, + "end": 630, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 612, + "end": 630, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 612, + "end": 630, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, + { + "begin": 525, + "end": 527, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, + { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, + { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, + { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, + { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, + { "begin": 642, "end": 658, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, + { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { "begin": 403, "end": 664, "name": "POP", "source": 1 }, + { + "begin": 403, + "end": 664, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 670, + "end": 747, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, + { + "begin": 670, + "end": 747, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, + { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, + { "begin": 725, "end": 741, "name": "POP", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, + { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, + { "begin": 715, "end": 747, "name": "POP", "source": 1 }, + { + "begin": 715, + "end": 747, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 753, + "end": 933, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, + { + "begin": 801, + "end": 878, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 798, + "end": 799, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, + { + "begin": 898, + "end": 902, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 895, + "end": 896, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, + { + "begin": 922, + "end": 926, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 919, + "end": 920, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } + ] + } + } + }, + "methodIdentifiers": { "count()": "06661abd", "incr()": "119fbbd4" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x338162b85eaf39a85daac3fe2d3d8e94fad18f74dd7c238709d0500e96f14b71\",\"urls\":[\"bzz-raw://0229ffcdcdfa88d496ad29dc5532ca35e6ab895b46b64762d09e01bc31056af5\",\"dweb:/ipfs/QmeE5zDfodVZWTxxQ6iTJ6W8GKvdL1bKhAR2P1m21ejfzP\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:TestContractIncr", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }" +} diff --git a/tests/contracts/compiled/TraceFilter.json b/tests/contracts/compiled/TraceFilter.json index d7b1e0df341..8609ccc938f 100644 --- a/tests/contracts/compiled/TraceFilter.json +++ b/tests/contracts/compiled/TraceFilter.json @@ -1 +1,3710 @@ -{"byteCode":"0x608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","contract":{"abi":[{"inputs":[{"internalType":"bool","name":"should_revert","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"call_ok","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"call_revert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target0","type":"address"},{"internalType":"address","name":"target1","type":"address"}],"name":"subcalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target1","type":"address"}],"name":"subsubcalls","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"assembly":" /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":115:128 should_revert */\n dup1\n /* \"main.sol\":111:171 if (should_revert) {... */\n iszero\n tag_6\n jumpi\n /* \"main.sol\":148:156 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":111:171 if (should_revert) {... */\ntag_6:\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n pop\n /* \"main.sol\":34:705 contract TraceFilter {... */\n jump(tag_7)\n /* \"#utility.yul\":7:144 */\ntag_9:\n 0x00\n /* \"#utility.yul\":92:98 */\n dup2\n /* \"#utility.yul\":86:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":108:138 */\n tag_11\n /* \"#utility.yul\":132:137 */\n dup2\n /* \"#utility.yul\":108:138 */\n tag_12\n jump\t// in\ntag_11:\n /* \"#utility.yul\":67:144 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":150:428 */\ntag_3:\n 0x00\n /* \"#utility.yul\":266:268 */\n 0x20\n /* \"#utility.yul\":254:263 */\n dup3\n /* \"#utility.yul\":245:252 */\n dup5\n /* \"#utility.yul\":241:264 */\n sub\n /* \"#utility.yul\":237:269 */\n slt\n /* \"#utility.yul\":234:236 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":282:283 */\n 0x00\n /* \"#utility.yul\":279:280 */\n dup1\n /* \"#utility.yul\":272:284 */\n revert\n /* \"#utility.yul\":234:236 */\ntag_14:\n /* \"#utility.yul\":325:326 */\n 0x00\n /* \"#utility.yul\":350:411 */\n tag_15\n /* \"#utility.yul\":403:410 */\n dup5\n /* \"#utility.yul\":394:400 */\n dup3\n /* \"#utility.yul\":383:392 */\n dup6\n /* \"#utility.yul\":379:401 */\n add\n /* \"#utility.yul\":350:411 */\n tag_9\n jump\t// in\ntag_15:\n /* \"#utility.yul\":340:411 */\n swap2\n pop\n /* \"#utility.yul\":296:421 */\n pop\n /* \"#utility.yul\":224:428 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":434:524 */\ntag_16:\n 0x00\n /* \"#utility.yul\":511:516 */\n dup2\n /* \"#utility.yul\":504:517 */\n iszero\n /* \"#utility.yul\":497:518 */\n iszero\n /* \"#utility.yul\":486:518 */\n swap1\n pop\n /* \"#utility.yul\":476:524 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":530:646 */\ntag_12:\n /* \"#utility.yul\":600:621 */\n tag_19\n /* \"#utility.yul\":615:620 */\n dup2\n /* \"#utility.yul\":600:621 */\n tag_16\n jump\t// in\ntag_19:\n /* \"#utility.yul\":593:598 */\n dup2\n /* \"#utility.yul\":590:622 */\n eq\n /* \"#utility.yul\":580:582 */\n tag_20\n jumpi\n /* \"#utility.yul\":636:637 */\n 0x00\n /* \"#utility.yul\":633:634 */\n dup1\n /* \"#utility.yul\":626:638 */\n revert\n /* \"#utility.yul\":580:582 */\ntag_20:\n /* \"#utility.yul\":570:646 */\n pop\n jump\t// out\n /* \"main.sol\":34:705 contract TraceFilter {... */\ntag_7:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5eaf9bc1\n eq\n tag_3\n jumpi\n dup1\n 0xa885f4e3\n eq\n tag_4\n jumpi\n dup1\n 0xcb30e696\n eq\n tag_5\n jumpi\n dup1\n 0xf34f1610\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_3:\n tag_7\n tag_8\n jump\t// in\n tag_7:\n stop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_5:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_6:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_8:\n jump\t// out\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_12:\n /* \"main.sol\":622:629 target1 */\n dup1\n /* \"main.sol\":610:638 TraceFilter(target1).call_ok */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5eaf9bc1\n /* \"main.sol\":610:640 TraceFilter(target1).call_ok() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_21\n jumpi\n 0x00\n dup1\n revert\n tag_21:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_23\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_23:\n pop\n pop\n pop\n pop\n /* \"main.sol\":666:673 target1 */\n dup1\n /* \"main.sol\":654:686 TraceFilter(target1).call_revert */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb30e696\n /* \"main.sol\":654:688 TraceFilter(target1).call_revert() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_24\n jumpi\n 0x00\n dup1\n revert\n tag_24:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_26\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_26:\n pop\n pop\n pop\n pop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n pop\n jump\t// out\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_14:\n /* \"main.sol\":282:290 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_18:\n /* \"main.sol\":412:419 target0 */\n dup2\n /* \"main.sol\":400:432 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":433:440 target1 */\n dup3\n /* \"main.sol\":400:441 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_29\n swap2\n swap1\n tag_30\n jump\t// in\n tag_29:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_31\n jumpi\n 0x00\n dup1\n revert\n tag_31:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_32\n jumpi\n pop\n 0x01\n tag_32:\n /* \"main.sol\":396:455 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_33\n jumpi\n jump(tag_37)\n tag_33:\n tag_37:\n /* \"main.sol\":484:491 target0 */\n dup2\n /* \"main.sol\":472:504 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":505:512 target1 */\n dup3\n /* \"main.sol\":472:513 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_38\n swap2\n swap1\n tag_30\n jump\t// in\n tag_38:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_40\n jumpi\n pop\n 0x01\n tag_40:\n /* \"main.sol\":468:527 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_41\n jumpi\n jump(tag_45)\n tag_41:\n tag_45:\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_47:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_49\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_50\n jump\t// in\n tag_49:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_11:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_52\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_52:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_53\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_47\n jump\t// in\n tag_53:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:827 */\n tag_17:\n 0x00\n dup1\n /* \"#utility.yul\":545:547 */\n 0x40\n /* \"#utility.yul\":533:542 */\n dup4\n /* \"#utility.yul\":524:531 */\n dup6\n /* \"#utility.yul\":520:543 */\n sub\n /* \"#utility.yul\":516:548 */\n slt\n /* \"#utility.yul\":513:515 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":561:562 */\n 0x00\n /* \"#utility.yul\":558:559 */\n dup1\n /* \"#utility.yul\":551:563 */\n revert\n /* \"#utility.yul\":513:515 */\n tag_55:\n /* \"#utility.yul\":604:605 */\n 0x00\n /* \"#utility.yul\":629:682 */\n tag_56\n /* \"#utility.yul\":674:681 */\n dup6\n /* \"#utility.yul\":665:671 */\n dup3\n /* \"#utility.yul\":654:663 */\n dup7\n /* \"#utility.yul\":650:672 */\n add\n /* \"#utility.yul\":629:682 */\n tag_47\n jump\t// in\n tag_56:\n /* \"#utility.yul\":619:682 */\n swap3\n pop\n /* \"#utility.yul\":575:692 */\n pop\n /* \"#utility.yul\":731:733 */\n 0x20\n /* \"#utility.yul\":757:810 */\n tag_57\n /* \"#utility.yul\":802:809 */\n dup6\n /* \"#utility.yul\":793:799 */\n dup3\n /* \"#utility.yul\":782:791 */\n dup7\n /* \"#utility.yul\":778:800 */\n add\n /* \"#utility.yul\":757:810 */\n tag_47\n jump\t// in\n tag_57:\n /* \"#utility.yul\":747:810 */\n swap2\n pop\n /* \"#utility.yul\":702:820 */\n pop\n /* \"#utility.yul\":503:827 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":833:951 */\n tag_58:\n /* \"#utility.yul\":920:944 */\n tag_60\n /* \"#utility.yul\":938:943 */\n dup2\n /* \"#utility.yul\":920:944 */\n tag_61\n jump\t// in\n tag_60:\n /* \"#utility.yul\":915:918 */\n dup3\n /* \"#utility.yul\":908:945 */\n mstore\n /* \"#utility.yul\":898:951 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":957:1179 */\n tag_30:\n 0x00\n /* \"#utility.yul\":1088:1090 */\n 0x20\n /* \"#utility.yul\":1077:1086 */\n dup3\n /* \"#utility.yul\":1073:1091 */\n add\n /* \"#utility.yul\":1065:1091 */\n swap1\n pop\n /* \"#utility.yul\":1101:1172 */\n tag_63\n /* \"#utility.yul\":1169:1170 */\n 0x00\n /* \"#utility.yul\":1158:1167 */\n dup4\n /* \"#utility.yul\":1154:1171 */\n add\n /* \"#utility.yul\":1145:1151 */\n dup5\n /* \"#utility.yul\":1101:1172 */\n tag_58\n jump\t// in\n tag_63:\n /* \"#utility.yul\":1055:1179 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1185:1281 */\n tag_61:\n 0x00\n /* \"#utility.yul\":1251:1275 */\n tag_65\n /* \"#utility.yul\":1269:1274 */\n dup3\n /* \"#utility.yul\":1251:1275 */\n tag_66\n jump\t// in\n tag_65:\n /* \"#utility.yul\":1240:1275 */\n swap1\n pop\n /* \"#utility.yul\":1230:1281 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1287:1413 */\n tag_66:\n 0x00\n /* \"#utility.yul\":1364:1406 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1357:1362 */\n dup3\n /* \"#utility.yul\":1353:1407 */\n and\n /* \"#utility.yul\":1342:1407 */\n swap1\n pop\n /* \"#utility.yul\":1332:1413 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1419:1541 */\n tag_50:\n /* \"#utility.yul\":1492:1516 */\n tag_69\n /* \"#utility.yul\":1510:1515 */\n dup2\n /* \"#utility.yul\":1492:1516 */\n tag_61\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1485:1490 */\n dup2\n /* \"#utility.yul\":1482:1517 */\n eq\n /* \"#utility.yul\":1472:1474 */\n tag_70\n jumpi\n /* \"#utility.yul\":1531:1532 */\n 0x00\n /* \"#utility.yul\":1528:1529 */\n dup1\n /* \"#utility.yul\":1521:1533 */\n revert\n /* \"#utility.yul\":1472:1474 */\n tag_70:\n /* \"#utility.yul\":1462:1541 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033\n}\n","bytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:649:1","statements":[{"body":{"nodeType":"YulBlock","src":"67:77:1","statements":[{"nodeType":"YulAssignment","src":"77:22:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"92:6:1"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"86:5:1"},"nodeType":"YulFunctionCall","src":"86:13:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"77:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"132:5:1"}],"functionName":{"name":"validator_revert_t_bool","nodeType":"YulIdentifier","src":"108:23:1"},"nodeType":"YulFunctionCall","src":"108:30:1"},"nodeType":"YulExpressionStatement","src":"108:30:1"}]},"name":"abi_decode_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"45:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"53:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"61:5:1","type":""}],"src":"7:137:1"},{"body":{"nodeType":"YulBlock","src":"224:204:1","statements":[{"body":{"nodeType":"YulBlock","src":"270:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"279:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"282:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"272:6:1"},"nodeType":"YulFunctionCall","src":"272:12:1"},"nodeType":"YulExpressionStatement","src":"272:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"245:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"254:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"241:3:1"},"nodeType":"YulFunctionCall","src":"241:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"266:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"237:3:1"},"nodeType":"YulFunctionCall","src":"237:32:1"},"nodeType":"YulIf","src":"234:2:1"},{"nodeType":"YulBlock","src":"296:125:1","statements":[{"nodeType":"YulVariableDeclaration","src":"311:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"325:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"315:6:1","type":""}]},{"nodeType":"YulAssignment","src":"340:71:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"394:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"379:3:1"},"nodeType":"YulFunctionCall","src":"379:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"403:7:1"}],"functionName":{"name":"abi_decode_t_bool_fromMemory","nodeType":"YulIdentifier","src":"350:28:1"},"nodeType":"YulFunctionCall","src":"350:61:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"340:6:1"}]}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"194:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"205:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"217:6:1","type":""}],"src":"150:278:1"},{"body":{"nodeType":"YulBlock","src":"476:48:1","statements":[{"nodeType":"YulAssignment","src":"486:32:1","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"511:5:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"504:6:1"},"nodeType":"YulFunctionCall","src":"504:13:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"497:6:1"},"nodeType":"YulFunctionCall","src":"497:21:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"486:7:1"}]}]},"name":"cleanup_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"458:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"468:7:1","type":""}],"src":"434:90:1"},{"body":{"nodeType":"YulBlock","src":"570:76:1","statements":[{"body":{"nodeType":"YulBlock","src":"624:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"633:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"636:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"626:6:1"},"nodeType":"YulFunctionCall","src":"626:12:1"},"nodeType":"YulExpressionStatement","src":"626:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"593:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"615:5:1"}],"functionName":{"name":"cleanup_t_bool","nodeType":"YulIdentifier","src":"600:14:1"},"nodeType":"YulFunctionCall","src":"600:21:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"590:2:1"},"nodeType":"YulFunctionCall","src":"590:32:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"583:6:1"},"nodeType":"YulFunctionCall","src":"583:40:1"},"nodeType":"YulIf","src":"580:2:1"}]},"name":"validator_revert_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"563:5:1","type":""}],"src":"530:116:1"}]},"contents":"{\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x41D CODESIZE SUB DUP1 PUSH2 0x41D DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x58 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x52 DUP2 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78 DUP5 DUP3 DUP6 ADD PUSH2 0x43 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x36A DUP1 PUSH2 0xB3 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ","sourceMap":"34:671:0:-:0;;;65:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;115:13;111:60;;;148:8;;;111:60;65:116;34:671;;7:137:1;;92:6;86:13;77:22;;108:30;132:5;108:30;:::i;:::-;67:77;;;;:::o;150:278::-;;266:2;254:9;245:7;241:23;237:32;234:2;;;282:1;279;272:12;234:2;325:1;350:61;403:7;394:6;383:9;379:22;350:61;:::i;:::-;340:71;;296:125;224:204;;;;:::o;434:90::-;;511:5;504:13;497:21;486:32;;476:48;;;:::o;530:116::-;600:21;615:5;600:21;:::i;:::-;593:5;590:32;580:2;;636:1;633;626:12;580:2;570:76;:::o;34:671:0:-;;;;;;;"},"deployedBytecode":{"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1544:1","statements":[{"body":{"nodeType":"YulBlock","src":"59:87:1","statements":[{"nodeType":"YulAssignment","src":"69:29:1","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"91:6:1"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"78:12:1"},"nodeType":"YulFunctionCall","src":"78:20:1"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"69:5:1"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:1"}],"functionName":{"name":"validator_revert_t_address","nodeType":"YulIdentifier","src":"107:26:1"},"nodeType":"YulFunctionCall","src":"107:33:1"},"nodeType":"YulExpressionStatement","src":"107:33:1"}]},"name":"abi_decode_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"37:6:1","type":""},{"name":"end","nodeType":"YulTypedName","src":"45:3:1","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:1","type":""}],"src":"7:139:1"},{"body":{"nodeType":"YulBlock","src":"218:196:1","statements":[{"body":{"nodeType":"YulBlock","src":"264:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"273:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"276:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"266:6:1"},"nodeType":"YulFunctionCall","src":"266:12:1"},"nodeType":"YulExpressionStatement","src":"266:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"239:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"248:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:1"},"nodeType":"YulFunctionCall","src":"235:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"260:2:1","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"231:3:1"},"nodeType":"YulFunctionCall","src":"231:32:1"},"nodeType":"YulIf","src":"228:2:1"},{"nodeType":"YulBlock","src":"290:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"305:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"319:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"309:6:1","type":""}]},{"nodeType":"YulAssignment","src":"334:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"380:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:1"},"nodeType":"YulFunctionCall","src":"365:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"389:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"344:20:1"},"nodeType":"YulFunctionCall","src":"344:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"334:6:1"}]}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"188:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"199:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"211:6:1","type":""}],"src":"152:262:1"},{"body":{"nodeType":"YulBlock","src":"503:324:1","statements":[{"body":{"nodeType":"YulBlock","src":"549:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"558:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"561:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"551:6:1"},"nodeType":"YulFunctionCall","src":"551:12:1"},"nodeType":"YulExpressionStatement","src":"551:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"524:7:1"},{"name":"headStart","nodeType":"YulIdentifier","src":"533:9:1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"520:3:1"},"nodeType":"YulFunctionCall","src":"520:23:1"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:1","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"516:3:1"},"nodeType":"YulFunctionCall","src":"516:32:1"},"nodeType":"YulIf","src":"513:2:1"},{"nodeType":"YulBlock","src":"575:117:1","statements":[{"nodeType":"YulVariableDeclaration","src":"590:15:1","value":{"kind":"number","nodeType":"YulLiteral","src":"604:1:1","type":"","value":"0"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"594:6:1","type":""}]},{"nodeType":"YulAssignment","src":"619:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"654:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"665:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"650:3:1"},"nodeType":"YulFunctionCall","src":"650:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"674:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"629:20:1"},"nodeType":"YulFunctionCall","src":"629:53:1"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"619:6:1"}]}]},{"nodeType":"YulBlock","src":"702:118:1","statements":[{"nodeType":"YulVariableDeclaration","src":"717:16:1","value":{"kind":"number","nodeType":"YulLiteral","src":"731:2:1","type":"","value":"32"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"721:6:1","type":""}]},{"nodeType":"YulAssignment","src":"747:63:1","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"782:9:1"},{"name":"offset","nodeType":"YulIdentifier","src":"793:6:1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"778:3:1"},"nodeType":"YulFunctionCall","src":"778:22:1"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"802:7:1"}],"functionName":{"name":"abi_decode_t_address","nodeType":"YulIdentifier","src":"757:20:1"},"nodeType":"YulFunctionCall","src":"757:53:1"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"747:6:1"}]}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"465:9:1","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"476:7:1","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"488:6:1","type":""},{"name":"value1","nodeType":"YulTypedName","src":"496:6:1","type":""}],"src":"420:407:1"},{"body":{"nodeType":"YulBlock","src":"898:53:1","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"915:3:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"938:5:1"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"920:17:1"},"nodeType":"YulFunctionCall","src":"920:24:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"908:6:1"},"nodeType":"YulFunctionCall","src":"908:37:1"},"nodeType":"YulExpressionStatement","src":"908:37:1"}]},"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"886:5:1","type":""},{"name":"pos","nodeType":"YulTypedName","src":"893:3:1","type":""}],"src":"833:118:1"},{"body":{"nodeType":"YulBlock","src":"1055:124:1","statements":[{"nodeType":"YulAssignment","src":"1065:26:1","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1077:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1088:2:1","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1073:3:1"},"nodeType":"YulFunctionCall","src":"1073:18:1"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1065:4:1"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1145:6:1"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1158:9:1"},{"kind":"number","nodeType":"YulLiteral","src":"1169:1:1","type":"","value":"0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1154:3:1"},"nodeType":"YulFunctionCall","src":"1154:17:1"}],"functionName":{"name":"abi_encode_t_address_to_t_address_fromStack","nodeType":"YulIdentifier","src":"1101:43:1"},"nodeType":"YulFunctionCall","src":"1101:71:1"},"nodeType":"YulExpressionStatement","src":"1101:71:1"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1027:9:1","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1039:6:1","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1050:4:1","type":""}],"src":"957:222:1"},{"body":{"nodeType":"YulBlock","src":"1230:51:1","statements":[{"nodeType":"YulAssignment","src":"1240:35:1","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1269:5:1"}],"functionName":{"name":"cleanup_t_uint160","nodeType":"YulIdentifier","src":"1251:17:1"},"nodeType":"YulFunctionCall","src":"1251:24:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1240:7:1"}]}]},"name":"cleanup_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1212:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1222:7:1","type":""}],"src":"1185:96:1"},{"body":{"nodeType":"YulBlock","src":"1332:81:1","statements":[{"nodeType":"YulAssignment","src":"1342:65:1","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1357:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"1364:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1353:3:1"},"nodeType":"YulFunctionCall","src":"1353:54:1"},"variableNames":[{"name":"cleaned","nodeType":"YulIdentifier","src":"1342:7:1"}]}]},"name":"cleanup_t_uint160","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1314:5:1","type":""}],"returnVariables":[{"name":"cleaned","nodeType":"YulTypedName","src":"1324:7:1","type":""}],"src":"1287:126:1"},{"body":{"nodeType":"YulBlock","src":"1462:79:1","statements":[{"body":{"nodeType":"YulBlock","src":"1519:16:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1528:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1531:1:1","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1521:6:1"},"nodeType":"YulFunctionCall","src":"1521:12:1"},"nodeType":"YulExpressionStatement","src":"1521:12:1"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1485:5:1"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1510:5:1"}],"functionName":{"name":"cleanup_t_address","nodeType":"YulIdentifier","src":"1492:17:1"},"nodeType":"YulFunctionCall","src":"1492:24:1"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1482:2:1"},"nodeType":"YulFunctionCall","src":"1482:35:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1475:6:1"},"nodeType":"YulFunctionCall","src":"1475:43:1"},"nodeType":"YulIf","src":"1472:2:1"}]},"name":"validator_revert_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1455:5:1","type":""}],"src":"1419:122:1"}]},"contents":"{\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ","sourceMap":"34:671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;195:29;;;:::i;:::-;;551:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;238:71;;;:::i;:::-;;323:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;195:29;:::o;551:148::-;622:7;610:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:7;654:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:148;:::o;238:71::-;282:8;;;323:214;412:7;400:32;;;433:7;400:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;396:59;;;;;;484:7;472:32;;;505:7;472:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:59;;;;;;323:214;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:407::-;;;545:2;533:9;524:7;520:23;516:32;513:2;;;561:1;558;551:12;513:2;604:1;629:53;674:7;665:6;654:9;650:22;629:53;:::i;:::-;619:63;;575:117;731:2;757:53;802:7;793:6;782:9;778:22;757:53;:::i;:::-;747:63;;702:118;503:324;;;;;:::o;833:118::-;920:24;938:5;920:24;:::i;:::-;915:3;908:37;898:53;;:::o;957:222::-;;1088:2;1077:9;1073:18;1065:26;;1101:71;1169:1;1158:9;1154:17;1145:6;1101:71;:::i;:::-;1055:124;;;;:::o;1185:96::-;;1251:24;1269:5;1251:24;:::i;:::-;1240:35;;1230:51;;;:::o;1287:126::-;;1364:42;1357:5;1353:54;1342:65;;1332:81;;;:::o;1419:122::-;1492:24;1510:5;1492:24;:::i;:::-;1485:5;1482:35;1472:2;;1531:1;1528;1521:12;1472:2;1462:79;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"174800","executionCost":"infinite","totalCost":"infinite"},"external":{"call_ok()":"122","call_revert()":"163","subcalls(address,address)":"infinite","subsubcalls(address)":"infinite"}},"legacyAssembly":{".code":[{"begin":34,"end":705,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":705,"name":"MSTORE","source":0},{"begin":65,"end":181,"name":"CALLVALUE","source":0},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"ISZERO","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":65,"end":181,"name":"JUMPI","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"0"},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"REVERT","source":0},{"begin":65,"end":181,"name":"tag","source":0,"value":"1"},{"begin":65,"end":181,"name":"JUMPDEST","source":0},{"begin":65,"end":181,"name":"POP","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"40"},{"begin":65,"end":181,"name":"MLOAD","source":0},{"begin":65,"end":181,"name":"PUSHSIZE","source":0},{"begin":65,"end":181,"name":"CODESIZE","source":0},{"begin":65,"end":181,"name":"SUB","source":0},{"begin":65,"end":181,"name":"DUP1","source":0},{"begin":65,"end":181,"name":"PUSHSIZE","source":0},{"begin":65,"end":181,"name":"DUP4","source":0},{"begin":65,"end":181,"name":"CODECOPY","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"ADD","source":0},{"begin":65,"end":181,"name":"PUSH","source":0,"value":"40"},{"begin":65,"end":181,"name":"MSTORE","source":0},{"begin":65,"end":181,"name":"DUP2","source":0},{"begin":65,"end":181,"name":"ADD","source":0},{"begin":65,"end":181,"name":"SWAP1","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":65,"end":181,"name":"SWAP2","source":0},{"begin":65,"end":181,"name":"SWAP1","source":0},{"begin":65,"end":181,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":65,"end":181,"name":"JUMP","source":0,"value":"[in]"},{"begin":65,"end":181,"name":"tag","source":0,"value":"2"},{"begin":65,"end":181,"name":"JUMPDEST","source":0},{"begin":115,"end":128,"name":"DUP1","source":0},{"begin":111,"end":171,"name":"ISZERO","source":0},{"begin":111,"end":171,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":111,"end":171,"name":"JUMPI","source":0},{"begin":148,"end":156,"name":"PUSH","source":0,"value":"0"},{"begin":148,"end":156,"name":"DUP1","source":0},{"begin":148,"end":156,"name":"REVERT","source":0},{"begin":111,"end":171,"name":"tag","source":0,"value":"6"},{"begin":111,"end":171,"name":"JUMPDEST","source":0},{"begin":65,"end":181,"name":"POP","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":34,"end":705,"name":"JUMP","source":0},{"begin":7,"end":144,"name":"tag","source":1,"value":"9"},{"begin":7,"end":144,"name":"JUMPDEST","source":1},{"begin":7,"end":144,"name":"PUSH","source":1,"value":"0"},{"begin":92,"end":98,"name":"DUP2","source":1},{"begin":86,"end":99,"name":"MLOAD","source":1},{"begin":77,"end":99,"name":"SWAP1","source":1},{"begin":77,"end":99,"name":"POP","source":1},{"begin":108,"end":138,"name":"PUSH [tag]","source":1,"value":"11"},{"begin":132,"end":137,"name":"DUP2","source":1},{"begin":108,"end":138,"name":"PUSH [tag]","source":1,"value":"12"},{"begin":108,"end":138,"name":"JUMP","source":1,"value":"[in]"},{"begin":108,"end":138,"name":"tag","source":1,"value":"11"},{"begin":108,"end":138,"name":"JUMPDEST","source":1},{"begin":67,"end":144,"name":"SWAP3","source":1},{"begin":67,"end":144,"name":"SWAP2","source":1},{"begin":67,"end":144,"name":"POP","source":1},{"begin":67,"end":144,"name":"POP","source":1},{"begin":67,"end":144,"name":"JUMP","source":1,"value":"[out]"},{"begin":150,"end":428,"name":"tag","source":1,"value":"3"},{"begin":150,"end":428,"name":"JUMPDEST","source":1},{"begin":150,"end":428,"name":"PUSH","source":1,"value":"0"},{"begin":266,"end":268,"name":"PUSH","source":1,"value":"20"},{"begin":254,"end":263,"name":"DUP3","source":1},{"begin":245,"end":252,"name":"DUP5","source":1},{"begin":241,"end":264,"name":"SUB","source":1},{"begin":237,"end":269,"name":"SLT","source":1},{"begin":234,"end":236,"name":"ISZERO","source":1},{"begin":234,"end":236,"name":"PUSH [tag]","source":1,"value":"14"},{"begin":234,"end":236,"name":"JUMPI","source":1},{"begin":282,"end":283,"name":"PUSH","source":1,"value":"0"},{"begin":279,"end":280,"name":"DUP1","source":1},{"begin":272,"end":284,"name":"REVERT","source":1},{"begin":234,"end":236,"name":"tag","source":1,"value":"14"},{"begin":234,"end":236,"name":"JUMPDEST","source":1},{"begin":325,"end":326,"name":"PUSH","source":1,"value":"0"},{"begin":350,"end":411,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":403,"end":410,"name":"DUP5","source":1},{"begin":394,"end":400,"name":"DUP3","source":1},{"begin":383,"end":392,"name":"DUP6","source":1},{"begin":379,"end":401,"name":"ADD","source":1},{"begin":350,"end":411,"name":"PUSH [tag]","source":1,"value":"9"},{"begin":350,"end":411,"name":"JUMP","source":1,"value":"[in]"},{"begin":350,"end":411,"name":"tag","source":1,"value":"15"},{"begin":350,"end":411,"name":"JUMPDEST","source":1},{"begin":340,"end":411,"name":"SWAP2","source":1},{"begin":340,"end":411,"name":"POP","source":1},{"begin":296,"end":421,"name":"POP","source":1},{"begin":224,"end":428,"name":"SWAP3","source":1},{"begin":224,"end":428,"name":"SWAP2","source":1},{"begin":224,"end":428,"name":"POP","source":1},{"begin":224,"end":428,"name":"POP","source":1},{"begin":224,"end":428,"name":"JUMP","source":1,"value":"[out]"},{"begin":434,"end":524,"name":"tag","source":1,"value":"16"},{"begin":434,"end":524,"name":"JUMPDEST","source":1},{"begin":434,"end":524,"name":"PUSH","source":1,"value":"0"},{"begin":511,"end":516,"name":"DUP2","source":1},{"begin":504,"end":517,"name":"ISZERO","source":1},{"begin":497,"end":518,"name":"ISZERO","source":1},{"begin":486,"end":518,"name":"SWAP1","source":1},{"begin":486,"end":518,"name":"POP","source":1},{"begin":476,"end":524,"name":"SWAP2","source":1},{"begin":476,"end":524,"name":"SWAP1","source":1},{"begin":476,"end":524,"name":"POP","source":1},{"begin":476,"end":524,"name":"JUMP","source":1,"value":"[out]"},{"begin":530,"end":646,"name":"tag","source":1,"value":"12"},{"begin":530,"end":646,"name":"JUMPDEST","source":1},{"begin":600,"end":621,"name":"PUSH [tag]","source":1,"value":"19"},{"begin":615,"end":620,"name":"DUP2","source":1},{"begin":600,"end":621,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":600,"end":621,"name":"JUMP","source":1,"value":"[in]"},{"begin":600,"end":621,"name":"tag","source":1,"value":"19"},{"begin":600,"end":621,"name":"JUMPDEST","source":1},{"begin":593,"end":598,"name":"DUP2","source":1},{"begin":590,"end":622,"name":"EQ","source":1},{"begin":580,"end":582,"name":"PUSH [tag]","source":1,"value":"20"},{"begin":580,"end":582,"name":"JUMPI","source":1},{"begin":636,"end":637,"name":"PUSH","source":1,"value":"0"},{"begin":633,"end":634,"name":"DUP1","source":1},{"begin":626,"end":638,"name":"REVERT","source":1},{"begin":580,"end":582,"name":"tag","source":1,"value":"20"},{"begin":580,"end":582,"name":"JUMPDEST","source":1},{"begin":570,"end":646,"name":"POP","source":1},{"begin":570,"end":646,"name":"JUMP","source":1,"value":"[out]"},{"begin":34,"end":705,"name":"tag","source":0,"value":"7"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"CODECOPY","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"a26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033",".code":[{"begin":34,"end":705,"name":"PUSH","source":0,"value":"80"},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"40"},{"begin":34,"end":705,"name":"MSTORE","source":0},{"begin":34,"end":705,"name":"CALLVALUE","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"ISZERO","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"REVERT","source":0},{"begin":34,"end":705,"name":"tag","source":0,"value":"1"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"POP","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"4"},{"begin":34,"end":705,"name":"CALLDATASIZE","source":0},{"begin":34,"end":705,"name":"LT","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"CALLDATALOAD","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"E0"},{"begin":34,"end":705,"name":"SHR","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"5EAF9BC1"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"CB30E696"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"F34F1610"},{"begin":34,"end":705,"name":"EQ","source":0},{"begin":34,"end":705,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":34,"end":705,"name":"JUMPI","source":0},{"begin":34,"end":705,"name":"tag","source":0,"value":"2"},{"begin":34,"end":705,"name":"JUMPDEST","source":0},{"begin":34,"end":705,"name":"PUSH","source":0,"value":"0"},{"begin":34,"end":705,"name":"DUP1","source":0},{"begin":34,"end":705,"name":"REVERT","source":0},{"begin":195,"end":224,"name":"tag","source":0,"value":"3"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":195,"end":224,"name":"PUSH [tag]","source":0,"value":"8"},{"begin":195,"end":224,"name":"JUMP","source":0,"value":"[in]"},{"begin":195,"end":224,"name":"tag","source":0,"value":"7"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"STOP","source":0},{"begin":551,"end":699,"name":"tag","source":0,"value":"4"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":551,"end":699,"name":"PUSH","source":0,"value":"4"},{"begin":551,"end":699,"name":"DUP1","source":0},{"begin":551,"end":699,"name":"CALLDATASIZE","source":0},{"begin":551,"end":699,"name":"SUB","source":0},{"begin":551,"end":699,"name":"DUP2","source":0},{"begin":551,"end":699,"name":"ADD","source":0},{"begin":551,"end":699,"name":"SWAP1","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":551,"end":699,"name":"SWAP2","source":0},{"begin":551,"end":699,"name":"SWAP1","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[in]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"10"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"PUSH [tag]","source":0,"value":"12"},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[in]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"9"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":551,"end":699,"name":"STOP","source":0},{"begin":238,"end":309,"name":"tag","source":0,"value":"5"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":238,"end":309,"name":"PUSH [tag]","source":0,"value":"13"},{"begin":238,"end":309,"name":"PUSH [tag]","source":0,"value":"14"},{"begin":238,"end":309,"name":"JUMP","source":0,"value":"[in]"},{"begin":238,"end":309,"name":"tag","source":0,"value":"13"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":238,"end":309,"name":"STOP","source":0},{"begin":323,"end":537,"name":"tag","source":0,"value":"6"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"15"},{"begin":323,"end":537,"name":"PUSH","source":0,"value":"4"},{"begin":323,"end":537,"name":"DUP1","source":0},{"begin":323,"end":537,"name":"CALLDATASIZE","source":0},{"begin":323,"end":537,"name":"SUB","source":0},{"begin":323,"end":537,"name":"DUP2","source":0},{"begin":323,"end":537,"name":"ADD","source":0},{"begin":323,"end":537,"name":"SWAP1","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"16"},{"begin":323,"end":537,"name":"SWAP2","source":0},{"begin":323,"end":537,"name":"SWAP1","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"17"},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[in]"},{"begin":323,"end":537,"name":"tag","source":0,"value":"16"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"PUSH [tag]","source":0,"value":"18"},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[in]"},{"begin":323,"end":537,"name":"tag","source":0,"value":"15"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"STOP","source":0},{"begin":195,"end":224,"name":"tag","source":0,"value":"8"},{"begin":195,"end":224,"name":"JUMPDEST","source":0},{"begin":195,"end":224,"name":"JUMP","source":0,"value":"[out]"},{"begin":551,"end":699,"name":"tag","source":0,"value":"12"},{"begin":551,"end":699,"name":"JUMPDEST","source":0},{"begin":622,"end":629,"name":"DUP1","source":0},{"begin":610,"end":638,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":610,"end":638,"name":"AND","source":0},{"begin":610,"end":638,"name":"PUSH","source":0,"value":"5EAF9BC1"},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"40"},{"begin":610,"end":640,"name":"MLOAD","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":610,"end":640,"name":"AND","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"E0"},{"begin":610,"end":640,"name":"SHL","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"MSTORE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"4"},{"begin":610,"end":640,"name":"ADD","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"40"},{"begin":610,"end":640,"name":"MLOAD","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"DUP4","source":0},{"begin":610,"end":640,"name":"SUB","source":0},{"begin":610,"end":640,"name":"DUP2","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP8","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"EXTCODESIZE","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"PUSH [tag]","source":0,"value":"21"},{"begin":610,"end":640,"name":"JUMPI","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"REVERT","source":0},{"begin":610,"end":640,"name":"tag","source":0,"value":"21"},{"begin":610,"end":640,"name":"JUMPDEST","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"GAS","source":0},{"begin":610,"end":640,"name":"CALL","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"ISZERO","source":0},{"begin":610,"end":640,"name":"PUSH [tag]","source":0,"value":"23"},{"begin":610,"end":640,"name":"JUMPI","source":0},{"begin":610,"end":640,"name":"RETURNDATASIZE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"DUP1","source":0},{"begin":610,"end":640,"name":"RETURNDATACOPY","source":0},{"begin":610,"end":640,"name":"RETURNDATASIZE","source":0},{"begin":610,"end":640,"name":"PUSH","source":0,"value":"0"},{"begin":610,"end":640,"name":"REVERT","source":0},{"begin":610,"end":640,"name":"tag","source":0,"value":"23"},{"begin":610,"end":640,"name":"JUMPDEST","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":610,"end":640,"name":"POP","source":0},{"begin":666,"end":673,"name":"DUP1","source":0},{"begin":654,"end":686,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":654,"end":686,"name":"AND","source":0},{"begin":654,"end":686,"name":"PUSH","source":0,"value":"CB30E696"},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"40"},{"begin":654,"end":688,"name":"MLOAD","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":654,"end":688,"name":"AND","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"E0"},{"begin":654,"end":688,"name":"SHL","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"MSTORE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"4"},{"begin":654,"end":688,"name":"ADD","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"40"},{"begin":654,"end":688,"name":"MLOAD","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"DUP4","source":0},{"begin":654,"end":688,"name":"SUB","source":0},{"begin":654,"end":688,"name":"DUP2","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP8","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"EXTCODESIZE","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"PUSH [tag]","source":0,"value":"24"},{"begin":654,"end":688,"name":"JUMPI","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"REVERT","source":0},{"begin":654,"end":688,"name":"tag","source":0,"value":"24"},{"begin":654,"end":688,"name":"JUMPDEST","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"GAS","source":0},{"begin":654,"end":688,"name":"CALL","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"ISZERO","source":0},{"begin":654,"end":688,"name":"PUSH [tag]","source":0,"value":"26"},{"begin":654,"end":688,"name":"JUMPI","source":0},{"begin":654,"end":688,"name":"RETURNDATASIZE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"DUP1","source":0},{"begin":654,"end":688,"name":"RETURNDATACOPY","source":0},{"begin":654,"end":688,"name":"RETURNDATASIZE","source":0},{"begin":654,"end":688,"name":"PUSH","source":0,"value":"0"},{"begin":654,"end":688,"name":"REVERT","source":0},{"begin":654,"end":688,"name":"tag","source":0,"value":"26"},{"begin":654,"end":688,"name":"JUMPDEST","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":654,"end":688,"name":"POP","source":0},{"begin":551,"end":699,"name":"POP","source":0},{"begin":551,"end":699,"name":"JUMP","source":0,"value":"[out]"},{"begin":238,"end":309,"name":"tag","source":0,"value":"14"},{"begin":238,"end":309,"name":"JUMPDEST","source":0},{"begin":282,"end":290,"name":"PUSH","source":0,"value":"0"},{"begin":282,"end":290,"name":"DUP1","source":0},{"begin":282,"end":290,"name":"REVERT","source":0},{"begin":323,"end":537,"name":"tag","source":0,"value":"18"},{"begin":323,"end":537,"name":"JUMPDEST","source":0},{"begin":412,"end":419,"name":"DUP2","source":0},{"begin":400,"end":432,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":400,"end":432,"name":"AND","source":0},{"begin":400,"end":432,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":433,"end":440,"name":"DUP3","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"40"},{"begin":400,"end":441,"name":"MLOAD","source":0},{"begin":400,"end":441,"name":"DUP3","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":400,"end":441,"name":"AND","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"E0"},{"begin":400,"end":441,"name":"SHL","source":0},{"begin":400,"end":441,"name":"DUP2","source":0},{"begin":400,"end":441,"name":"MSTORE","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"4"},{"begin":400,"end":441,"name":"ADD","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"29"},{"begin":400,"end":441,"name":"SWAP2","source":0},{"begin":400,"end":441,"name":"SWAP1","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"30"},{"begin":400,"end":441,"name":"JUMP","source":0,"value":"[in]"},{"begin":400,"end":441,"name":"tag","source":0,"value":"29"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"40"},{"begin":400,"end":441,"name":"MLOAD","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"DUP4","source":0},{"begin":400,"end":441,"name":"SUB","source":0},{"begin":400,"end":441,"name":"DUP2","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"DUP8","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"EXTCODESIZE","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"31"},{"begin":400,"end":441,"name":"JUMPI","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"0"},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"REVERT","source":0},{"begin":400,"end":441,"name":"tag","source":0,"value":"31"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"GAS","source":0},{"begin":400,"end":441,"name":"CALL","source":0},{"begin":400,"end":441,"name":"SWAP3","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"DUP1","source":0},{"begin":400,"end":441,"name":"ISZERO","source":0},{"begin":400,"end":441,"name":"PUSH [tag]","source":0,"value":"32"},{"begin":400,"end":441,"name":"JUMPI","source":0},{"begin":400,"end":441,"name":"POP","source":0},{"begin":400,"end":441,"name":"PUSH","source":0,"value":"1"},{"begin":400,"end":441,"name":"tag","source":0,"value":"32"},{"begin":400,"end":441,"name":"JUMPDEST","source":0},{"begin":396,"end":455,"name":"PUSH [tag]","source":0,"value":"33"},{"begin":396,"end":455,"name":"JUMPI","source":0},{"begin":396,"end":455,"name":"PUSH [tag]","source":0,"value":"37"},{"begin":396,"end":455,"name":"JUMP","source":0},{"begin":396,"end":455,"name":"tag","source":0,"value":"33"},{"begin":396,"end":455,"name":"JUMPDEST","source":0},{"begin":396,"end":455,"name":"tag","source":0,"value":"37"},{"begin":396,"end":455,"name":"JUMPDEST","source":0},{"begin":484,"end":491,"name":"DUP2","source":0},{"begin":472,"end":504,"name":"PUSH","source":0,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":472,"end":504,"name":"AND","source":0},{"begin":472,"end":504,"name":"PUSH","source":0,"value":"A885F4E3"},{"begin":505,"end":512,"name":"DUP3","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"40"},{"begin":472,"end":513,"name":"MLOAD","source":0},{"begin":472,"end":513,"name":"DUP3","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"FFFFFFFF"},{"begin":472,"end":513,"name":"AND","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"E0"},{"begin":472,"end":513,"name":"SHL","source":0},{"begin":472,"end":513,"name":"DUP2","source":0},{"begin":472,"end":513,"name":"MSTORE","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"4"},{"begin":472,"end":513,"name":"ADD","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"38"},{"begin":472,"end":513,"name":"SWAP2","source":0},{"begin":472,"end":513,"name":"SWAP1","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"30"},{"begin":472,"end":513,"name":"JUMP","source":0,"value":"[in]"},{"begin":472,"end":513,"name":"tag","source":0,"value":"38"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"40"},{"begin":472,"end":513,"name":"MLOAD","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"DUP4","source":0},{"begin":472,"end":513,"name":"SUB","source":0},{"begin":472,"end":513,"name":"DUP2","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"DUP8","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"EXTCODESIZE","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"39"},{"begin":472,"end":513,"name":"JUMPI","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"0"},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"REVERT","source":0},{"begin":472,"end":513,"name":"tag","source":0,"value":"39"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"GAS","source":0},{"begin":472,"end":513,"name":"CALL","source":0},{"begin":472,"end":513,"name":"SWAP3","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"DUP1","source":0},{"begin":472,"end":513,"name":"ISZERO","source":0},{"begin":472,"end":513,"name":"PUSH [tag]","source":0,"value":"40"},{"begin":472,"end":513,"name":"JUMPI","source":0},{"begin":472,"end":513,"name":"POP","source":0},{"begin":472,"end":513,"name":"PUSH","source":0,"value":"1"},{"begin":472,"end":513,"name":"tag","source":0,"value":"40"},{"begin":472,"end":513,"name":"JUMPDEST","source":0},{"begin":468,"end":527,"name":"PUSH [tag]","source":0,"value":"41"},{"begin":468,"end":527,"name":"JUMPI","source":0},{"begin":468,"end":527,"name":"PUSH [tag]","source":0,"value":"45"},{"begin":468,"end":527,"name":"JUMP","source":0},{"begin":468,"end":527,"name":"tag","source":0,"value":"41"},{"begin":468,"end":527,"name":"JUMPDEST","source":0},{"begin":468,"end":527,"name":"tag","source":0,"value":"45"},{"begin":468,"end":527,"name":"JUMPDEST","source":0},{"begin":323,"end":537,"name":"POP","source":0},{"begin":323,"end":537,"name":"POP","source":0},{"begin":323,"end":537,"name":"JUMP","source":0,"value":"[out]"},{"begin":7,"end":146,"name":"tag","source":1,"value":"47"},{"begin":7,"end":146,"name":"JUMPDEST","source":1},{"begin":7,"end":146,"name":"PUSH","source":1,"value":"0"},{"begin":91,"end":97,"name":"DUP2","source":1},{"begin":78,"end":98,"name":"CALLDATALOAD","source":1},{"begin":69,"end":98,"name":"SWAP1","source":1},{"begin":69,"end":98,"name":"POP","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"49"},{"begin":134,"end":139,"name":"DUP2","source":1},{"begin":107,"end":140,"name":"PUSH [tag]","source":1,"value":"50"},{"begin":107,"end":140,"name":"JUMP","source":1,"value":"[in]"},{"begin":107,"end":140,"name":"tag","source":1,"value":"49"},{"begin":107,"end":140,"name":"JUMPDEST","source":1},{"begin":59,"end":146,"name":"SWAP3","source":1},{"begin":59,"end":146,"name":"SWAP2","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"POP","source":1},{"begin":59,"end":146,"name":"JUMP","source":1,"value":"[out]"},{"begin":152,"end":414,"name":"tag","source":1,"value":"11"},{"begin":152,"end":414,"name":"JUMPDEST","source":1},{"begin":152,"end":414,"name":"PUSH","source":1,"value":"0"},{"begin":260,"end":262,"name":"PUSH","source":1,"value":"20"},{"begin":248,"end":257,"name":"DUP3","source":1},{"begin":239,"end":246,"name":"DUP5","source":1},{"begin":235,"end":258,"name":"SUB","source":1},{"begin":231,"end":263,"name":"SLT","source":1},{"begin":228,"end":230,"name":"ISZERO","source":1},{"begin":228,"end":230,"name":"PUSH [tag]","source":1,"value":"52"},{"begin":228,"end":230,"name":"JUMPI","source":1},{"begin":276,"end":277,"name":"PUSH","source":1,"value":"0"},{"begin":273,"end":274,"name":"DUP1","source":1},{"begin":266,"end":278,"name":"REVERT","source":1},{"begin":228,"end":230,"name":"tag","source":1,"value":"52"},{"begin":228,"end":230,"name":"JUMPDEST","source":1},{"begin":319,"end":320,"name":"PUSH","source":1,"value":"0"},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"53"},{"begin":389,"end":396,"name":"DUP5","source":1},{"begin":380,"end":386,"name":"DUP3","source":1},{"begin":369,"end":378,"name":"DUP6","source":1},{"begin":365,"end":387,"name":"ADD","source":1},{"begin":344,"end":397,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":344,"end":397,"name":"JUMP","source":1,"value":"[in]"},{"begin":344,"end":397,"name":"tag","source":1,"value":"53"},{"begin":344,"end":397,"name":"JUMPDEST","source":1},{"begin":334,"end":397,"name":"SWAP2","source":1},{"begin":334,"end":397,"name":"POP","source":1},{"begin":290,"end":407,"name":"POP","source":1},{"begin":218,"end":414,"name":"SWAP3","source":1},{"begin":218,"end":414,"name":"SWAP2","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"POP","source":1},{"begin":218,"end":414,"name":"JUMP","source":1,"value":"[out]"},{"begin":420,"end":827,"name":"tag","source":1,"value":"17"},{"begin":420,"end":827,"name":"JUMPDEST","source":1},{"begin":420,"end":827,"name":"PUSH","source":1,"value":"0"},{"begin":420,"end":827,"name":"DUP1","source":1},{"begin":545,"end":547,"name":"PUSH","source":1,"value":"40"},{"begin":533,"end":542,"name":"DUP4","source":1},{"begin":524,"end":531,"name":"DUP6","source":1},{"begin":520,"end":543,"name":"SUB","source":1},{"begin":516,"end":548,"name":"SLT","source":1},{"begin":513,"end":515,"name":"ISZERO","source":1},{"begin":513,"end":515,"name":"PUSH [tag]","source":1,"value":"55"},{"begin":513,"end":515,"name":"JUMPI","source":1},{"begin":561,"end":562,"name":"PUSH","source":1,"value":"0"},{"begin":558,"end":559,"name":"DUP1","source":1},{"begin":551,"end":563,"name":"REVERT","source":1},{"begin":513,"end":515,"name":"tag","source":1,"value":"55"},{"begin":513,"end":515,"name":"JUMPDEST","source":1},{"begin":604,"end":605,"name":"PUSH","source":1,"value":"0"},{"begin":629,"end":682,"name":"PUSH [tag]","source":1,"value":"56"},{"begin":674,"end":681,"name":"DUP6","source":1},{"begin":665,"end":671,"name":"DUP3","source":1},{"begin":654,"end":663,"name":"DUP7","source":1},{"begin":650,"end":672,"name":"ADD","source":1},{"begin":629,"end":682,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":629,"end":682,"name":"JUMP","source":1,"value":"[in]"},{"begin":629,"end":682,"name":"tag","source":1,"value":"56"},{"begin":629,"end":682,"name":"JUMPDEST","source":1},{"begin":619,"end":682,"name":"SWAP3","source":1},{"begin":619,"end":682,"name":"POP","source":1},{"begin":575,"end":692,"name":"POP","source":1},{"begin":731,"end":733,"name":"PUSH","source":1,"value":"20"},{"begin":757,"end":810,"name":"PUSH [tag]","source":1,"value":"57"},{"begin":802,"end":809,"name":"DUP6","source":1},{"begin":793,"end":799,"name":"DUP3","source":1},{"begin":782,"end":791,"name":"DUP7","source":1},{"begin":778,"end":800,"name":"ADD","source":1},{"begin":757,"end":810,"name":"PUSH [tag]","source":1,"value":"47"},{"begin":757,"end":810,"name":"JUMP","source":1,"value":"[in]"},{"begin":757,"end":810,"name":"tag","source":1,"value":"57"},{"begin":757,"end":810,"name":"JUMPDEST","source":1},{"begin":747,"end":810,"name":"SWAP2","source":1},{"begin":747,"end":810,"name":"POP","source":1},{"begin":702,"end":820,"name":"POP","source":1},{"begin":503,"end":827,"name":"SWAP3","source":1},{"begin":503,"end":827,"name":"POP","source":1},{"begin":503,"end":827,"name":"SWAP3","source":1},{"begin":503,"end":827,"name":"SWAP1","source":1},{"begin":503,"end":827,"name":"POP","source":1},{"begin":503,"end":827,"name":"JUMP","source":1,"value":"[out]"},{"begin":833,"end":951,"name":"tag","source":1,"value":"58"},{"begin":833,"end":951,"name":"JUMPDEST","source":1},{"begin":920,"end":944,"name":"PUSH [tag]","source":1,"value":"60"},{"begin":938,"end":943,"name":"DUP2","source":1},{"begin":920,"end":944,"name":"PUSH [tag]","source":1,"value":"61"},{"begin":920,"end":944,"name":"JUMP","source":1,"value":"[in]"},{"begin":920,"end":944,"name":"tag","source":1,"value":"60"},{"begin":920,"end":944,"name":"JUMPDEST","source":1},{"begin":915,"end":918,"name":"DUP3","source":1},{"begin":908,"end":945,"name":"MSTORE","source":1},{"begin":898,"end":951,"name":"POP","source":1},{"begin":898,"end":951,"name":"POP","source":1},{"begin":898,"end":951,"name":"JUMP","source":1,"value":"[out]"},{"begin":957,"end":1179,"name":"tag","source":1,"value":"30"},{"begin":957,"end":1179,"name":"JUMPDEST","source":1},{"begin":957,"end":1179,"name":"PUSH","source":1,"value":"0"},{"begin":1088,"end":1090,"name":"PUSH","source":1,"value":"20"},{"begin":1077,"end":1086,"name":"DUP3","source":1},{"begin":1073,"end":1091,"name":"ADD","source":1},{"begin":1065,"end":1091,"name":"SWAP1","source":1},{"begin":1065,"end":1091,"name":"POP","source":1},{"begin":1101,"end":1172,"name":"PUSH [tag]","source":1,"value":"63"},{"begin":1169,"end":1170,"name":"PUSH","source":1,"value":"0"},{"begin":1158,"end":1167,"name":"DUP4","source":1},{"begin":1154,"end":1171,"name":"ADD","source":1},{"begin":1145,"end":1151,"name":"DUP5","source":1},{"begin":1101,"end":1172,"name":"PUSH [tag]","source":1,"value":"58"},{"begin":1101,"end":1172,"name":"JUMP","source":1,"value":"[in]"},{"begin":1101,"end":1172,"name":"tag","source":1,"value":"63"},{"begin":1101,"end":1172,"name":"JUMPDEST","source":1},{"begin":1055,"end":1179,"name":"SWAP3","source":1},{"begin":1055,"end":1179,"name":"SWAP2","source":1},{"begin":1055,"end":1179,"name":"POP","source":1},{"begin":1055,"end":1179,"name":"POP","source":1},{"begin":1055,"end":1179,"name":"JUMP","source":1,"value":"[out]"},{"begin":1185,"end":1281,"name":"tag","source":1,"value":"61"},{"begin":1185,"end":1281,"name":"JUMPDEST","source":1},{"begin":1185,"end":1281,"name":"PUSH","source":1,"value":"0"},{"begin":1251,"end":1275,"name":"PUSH [tag]","source":1,"value":"65"},{"begin":1269,"end":1274,"name":"DUP3","source":1},{"begin":1251,"end":1275,"name":"PUSH [tag]","source":1,"value":"66"},{"begin":1251,"end":1275,"name":"JUMP","source":1,"value":"[in]"},{"begin":1251,"end":1275,"name":"tag","source":1,"value":"65"},{"begin":1251,"end":1275,"name":"JUMPDEST","source":1},{"begin":1240,"end":1275,"name":"SWAP1","source":1},{"begin":1240,"end":1275,"name":"POP","source":1},{"begin":1230,"end":1281,"name":"SWAP2","source":1},{"begin":1230,"end":1281,"name":"SWAP1","source":1},{"begin":1230,"end":1281,"name":"POP","source":1},{"begin":1230,"end":1281,"name":"JUMP","source":1,"value":"[out]"},{"begin":1287,"end":1413,"name":"tag","source":1,"value":"66"},{"begin":1287,"end":1413,"name":"JUMPDEST","source":1},{"begin":1287,"end":1413,"name":"PUSH","source":1,"value":"0"},{"begin":1364,"end":1406,"name":"PUSH","source":1,"value":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"begin":1357,"end":1362,"name":"DUP3","source":1},{"begin":1353,"end":1407,"name":"AND","source":1},{"begin":1342,"end":1407,"name":"SWAP1","source":1},{"begin":1342,"end":1407,"name":"POP","source":1},{"begin":1332,"end":1413,"name":"SWAP2","source":1},{"begin":1332,"end":1413,"name":"SWAP1","source":1},{"begin":1332,"end":1413,"name":"POP","source":1},{"begin":1332,"end":1413,"name":"JUMP","source":1,"value":"[out]"},{"begin":1419,"end":1541,"name":"tag","source":1,"value":"50"},{"begin":1419,"end":1541,"name":"JUMPDEST","source":1},{"begin":1492,"end":1516,"name":"PUSH [tag]","source":1,"value":"69"},{"begin":1510,"end":1515,"name":"DUP2","source":1},{"begin":1492,"end":1516,"name":"PUSH [tag]","source":1,"value":"61"},{"begin":1492,"end":1516,"name":"JUMP","source":1,"value":"[in]"},{"begin":1492,"end":1516,"name":"tag","source":1,"value":"69"},{"begin":1492,"end":1516,"name":"JUMPDEST","source":1},{"begin":1485,"end":1490,"name":"DUP2","source":1},{"begin":1482,"end":1517,"name":"EQ","source":1},{"begin":1472,"end":1474,"name":"PUSH [tag]","source":1,"value":"70"},{"begin":1472,"end":1474,"name":"JUMPI","source":1},{"begin":1531,"end":1532,"name":"PUSH","source":1,"value":"0"},{"begin":1528,"end":1529,"name":"DUP1","source":1},{"begin":1521,"end":1533,"name":"REVERT","source":1},{"begin":1472,"end":1474,"name":"tag","source":1,"value":"70"},{"begin":1472,"end":1474,"name":"JUMPDEST","source":1},{"begin":1462,"end":1541,"name":"POP","source":1},{"begin":1462,"end":1541,"name":"JUMP","source":1,"value":"[out]"}]}}},"methodIdentifiers":{"call_ok()":"5eaf9bc1","call_revert()":"cb30e696","subcalls(address,address)":"f34f1610","subsubcalls(address)":"a885f4e3"}},"ewasm":{"wasm":""},"metadata":"{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"should_revert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"call_ok\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subsubcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceFilter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf153bb9ac8a40ad2b947921abebad02891a26a7b8d73dbe03472330a1a669e83\",\"urls\":[\"bzz-raw://9180f7c6665f2ee8bb90a0ac0330a1df854a37186bfdf68d982995ae884da57c\",\"dweb:/ipfs/QmPcFyzXLPmF99Zjz4ytwYqw5rkKqumEoSHbDxruCdb2Av\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"sourceCode":"\n pragma solidity >=0.8.0;\n contract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n \n function call_ok() public { }\n \n function call_revert() public {\n revert(); \n }\n \n function subcalls(address target0, address target1) public {\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n }\n \n function subsubcalls(address target1) public {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n }"} \ No newline at end of file +{ + "byteCode": "0x608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "bool", "name": "should_revert", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "call_ok", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "call_revert", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target0", "type": "address" }, + { "internalType": "address", "name": "target1", "type": "address" } + ], + "name": "subcalls", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target1", "type": "address" } + ], + "name": "subsubcalls", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":115:128 should_revert */\n dup1\n /* \"main.sol\":111:171 if (should_revert) {... */\n iszero\n tag_6\n jumpi\n /* \"main.sol\":148:156 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":111:171 if (should_revert) {... */\ntag_6:\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n pop\n /* \"main.sol\":34:705 contract TraceFilter {... */\n jump(tag_7)\n /* \"#utility.yul\":7:144 */\ntag_9:\n 0x00\n /* \"#utility.yul\":92:98 */\n dup2\n /* \"#utility.yul\":86:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":108:138 */\n tag_11\n /* \"#utility.yul\":132:137 */\n dup2\n /* \"#utility.yul\":108:138 */\n tag_12\n jump\t// in\ntag_11:\n /* \"#utility.yul\":67:144 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":150:428 */\ntag_3:\n 0x00\n /* \"#utility.yul\":266:268 */\n 0x20\n /* \"#utility.yul\":254:263 */\n dup3\n /* \"#utility.yul\":245:252 */\n dup5\n /* \"#utility.yul\":241:264 */\n sub\n /* \"#utility.yul\":237:269 */\n slt\n /* \"#utility.yul\":234:236 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":282:283 */\n 0x00\n /* \"#utility.yul\":279:280 */\n dup1\n /* \"#utility.yul\":272:284 */\n revert\n /* \"#utility.yul\":234:236 */\ntag_14:\n /* \"#utility.yul\":325:326 */\n 0x00\n /* \"#utility.yul\":350:411 */\n tag_15\n /* \"#utility.yul\":403:410 */\n dup5\n /* \"#utility.yul\":394:400 */\n dup3\n /* \"#utility.yul\":383:392 */\n dup6\n /* \"#utility.yul\":379:401 */\n add\n /* \"#utility.yul\":350:411 */\n tag_9\n jump\t// in\ntag_15:\n /* \"#utility.yul\":340:411 */\n swap2\n pop\n /* \"#utility.yul\":296:421 */\n pop\n /* \"#utility.yul\":224:428 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":434:524 */\ntag_16:\n 0x00\n /* \"#utility.yul\":511:516 */\n dup2\n /* \"#utility.yul\":504:517 */\n iszero\n /* \"#utility.yul\":497:518 */\n iszero\n /* \"#utility.yul\":486:518 */\n swap1\n pop\n /* \"#utility.yul\":476:524 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":530:646 */\ntag_12:\n /* \"#utility.yul\":600:621 */\n tag_19\n /* \"#utility.yul\":615:620 */\n dup2\n /* \"#utility.yul\":600:621 */\n tag_16\n jump\t// in\ntag_19:\n /* \"#utility.yul\":593:598 */\n dup2\n /* \"#utility.yul\":590:622 */\n eq\n /* \"#utility.yul\":580:582 */\n tag_20\n jumpi\n /* \"#utility.yul\":636:637 */\n 0x00\n /* \"#utility.yul\":633:634 */\n dup1\n /* \"#utility.yul\":626:638 */\n revert\n /* \"#utility.yul\":580:582 */\ntag_20:\n /* \"#utility.yul\":570:646 */\n pop\n jump\t// out\n /* \"main.sol\":34:705 contract TraceFilter {... */\ntag_7:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5eaf9bc1\n eq\n tag_3\n jumpi\n dup1\n 0xa885f4e3\n eq\n tag_4\n jumpi\n dup1\n 0xcb30e696\n eq\n tag_5\n jumpi\n dup1\n 0xf34f1610\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_3:\n tag_7\n tag_8\n jump\t// in\n tag_7:\n stop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_5:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_6:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_8:\n jump\t// out\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_12:\n /* \"main.sol\":622:629 target1 */\n dup1\n /* \"main.sol\":610:638 TraceFilter(target1).call_ok */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5eaf9bc1\n /* \"main.sol\":610:640 TraceFilter(target1).call_ok() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_21\n jumpi\n 0x00\n dup1\n revert\n tag_21:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_23\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_23:\n pop\n pop\n pop\n pop\n /* \"main.sol\":666:673 target1 */\n dup1\n /* \"main.sol\":654:686 TraceFilter(target1).call_revert */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb30e696\n /* \"main.sol\":654:688 TraceFilter(target1).call_revert() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_24\n jumpi\n 0x00\n dup1\n revert\n tag_24:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_26\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_26:\n pop\n pop\n pop\n pop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n pop\n jump\t// out\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_14:\n /* \"main.sol\":282:290 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_18:\n /* \"main.sol\":412:419 target0 */\n dup2\n /* \"main.sol\":400:432 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":433:440 target1 */\n dup3\n /* \"main.sol\":400:441 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_29\n swap2\n swap1\n tag_30\n jump\t// in\n tag_29:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_31\n jumpi\n 0x00\n dup1\n revert\n tag_31:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_32\n jumpi\n pop\n 0x01\n tag_32:\n /* \"main.sol\":396:455 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_33\n jumpi\n jump(tag_37)\n tag_33:\n tag_37:\n /* \"main.sol\":484:491 target0 */\n dup2\n /* \"main.sol\":472:504 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":505:512 target1 */\n dup3\n /* \"main.sol\":472:513 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_38\n swap2\n swap1\n tag_30\n jump\t// in\n tag_38:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_40\n jumpi\n pop\n 0x01\n tag_40:\n /* \"main.sol\":468:527 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_41\n jumpi\n jump(tag_45)\n tag_41:\n tag_45:\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_47:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_49\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_50\n jump\t// in\n tag_49:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_11:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_52\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_52:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_53\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_47\n jump\t// in\n tag_53:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:827 */\n tag_17:\n 0x00\n dup1\n /* \"#utility.yul\":545:547 */\n 0x40\n /* \"#utility.yul\":533:542 */\n dup4\n /* \"#utility.yul\":524:531 */\n dup6\n /* \"#utility.yul\":520:543 */\n sub\n /* \"#utility.yul\":516:548 */\n slt\n /* \"#utility.yul\":513:515 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":561:562 */\n 0x00\n /* \"#utility.yul\":558:559 */\n dup1\n /* \"#utility.yul\":551:563 */\n revert\n /* \"#utility.yul\":513:515 */\n tag_55:\n /* \"#utility.yul\":604:605 */\n 0x00\n /* \"#utility.yul\":629:682 */\n tag_56\n /* \"#utility.yul\":674:681 */\n dup6\n /* \"#utility.yul\":665:671 */\n dup3\n /* \"#utility.yul\":654:663 */\n dup7\n /* \"#utility.yul\":650:672 */\n add\n /* \"#utility.yul\":629:682 */\n tag_47\n jump\t// in\n tag_56:\n /* \"#utility.yul\":619:682 */\n swap3\n pop\n /* \"#utility.yul\":575:692 */\n pop\n /* \"#utility.yul\":731:733 */\n 0x20\n /* \"#utility.yul\":757:810 */\n tag_57\n /* \"#utility.yul\":802:809 */\n dup6\n /* \"#utility.yul\":793:799 */\n dup3\n /* \"#utility.yul\":782:791 */\n dup7\n /* \"#utility.yul\":778:800 */\n add\n /* \"#utility.yul\":757:810 */\n tag_47\n jump\t// in\n tag_57:\n /* \"#utility.yul\":747:810 */\n swap2\n pop\n /* \"#utility.yul\":702:820 */\n pop\n /* \"#utility.yul\":503:827 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":833:951 */\n tag_58:\n /* \"#utility.yul\":920:944 */\n tag_60\n /* \"#utility.yul\":938:943 */\n dup2\n /* \"#utility.yul\":920:944 */\n tag_61\n jump\t// in\n tag_60:\n /* \"#utility.yul\":915:918 */\n dup3\n /* \"#utility.yul\":908:945 */\n mstore\n /* \"#utility.yul\":898:951 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":957:1179 */\n tag_30:\n 0x00\n /* \"#utility.yul\":1088:1090 */\n 0x20\n /* \"#utility.yul\":1077:1086 */\n dup3\n /* \"#utility.yul\":1073:1091 */\n add\n /* \"#utility.yul\":1065:1091 */\n swap1\n pop\n /* \"#utility.yul\":1101:1172 */\n tag_63\n /* \"#utility.yul\":1169:1170 */\n 0x00\n /* \"#utility.yul\":1158:1167 */\n dup4\n /* \"#utility.yul\":1154:1171 */\n add\n /* \"#utility.yul\":1145:1151 */\n dup5\n /* \"#utility.yul\":1101:1172 */\n tag_58\n jump\t// in\n tag_63:\n /* \"#utility.yul\":1055:1179 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1185:1281 */\n tag_61:\n 0x00\n /* \"#utility.yul\":1251:1275 */\n tag_65\n /* \"#utility.yul\":1269:1274 */\n dup3\n /* \"#utility.yul\":1251:1275 */\n tag_66\n jump\t// in\n tag_65:\n /* \"#utility.yul\":1240:1275 */\n swap1\n pop\n /* \"#utility.yul\":1230:1281 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1287:1413 */\n tag_66:\n 0x00\n /* \"#utility.yul\":1364:1406 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1357:1362 */\n dup3\n /* \"#utility.yul\":1353:1407 */\n and\n /* \"#utility.yul\":1342:1407 */\n swap1\n pop\n /* \"#utility.yul\":1332:1413 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1419:1541 */\n tag_50:\n /* \"#utility.yul\":1492:1516 */\n tag_69\n /* \"#utility.yul\":1510:1515 */\n dup2\n /* \"#utility.yul\":1492:1516 */\n tag_61\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1485:1490 */\n dup2\n /* \"#utility.yul\":1482:1517 */\n eq\n /* \"#utility.yul\":1472:1474 */\n tag_70\n jumpi\n /* \"#utility.yul\":1531:1532 */\n 0x00\n /* \"#utility.yul\":1528:1529 */\n dup1\n /* \"#utility.yul\":1521:1533 */\n revert\n /* \"#utility.yul\":1472:1474 */\n tag_70:\n /* \"#utility.yul\":1462:1541 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033\n}\n", + "bytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:649:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "67:77:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "77:22:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "92:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "86:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "86:13:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "77:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "132:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "108:23:1" + }, + "nodeType": "YulFunctionCall", + "src": "108:30:1" + }, + "nodeType": "YulExpressionStatement", + "src": "108:30:1" + } + ] + }, + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "45:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "53:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "61:5:1", + "type": "" + } + ], + "src": "7:137:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "224:204:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "270:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "279:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "282:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "272:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "272:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "272:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "245:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "254:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "241:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "241:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "266:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "237:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "237:32:1" + }, + "nodeType": "YulIf", + "src": "234:2:1" + }, + { + "nodeType": "YulBlock", + "src": "296:125:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "311:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "325:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "315:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "340:71:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "383:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "394:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "379:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "379:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "403:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulIdentifier", + "src": "350:28:1" + }, + "nodeType": "YulFunctionCall", + "src": "350:61:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "340:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "194:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "205:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "217:6:1", + "type": "" + } + ], + "src": "150:278:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "476:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "486:32:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "511:5:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "504:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "504:13:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "497:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "497:21:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "486:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "458:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "468:7:1", + "type": "" + } + ], + "src": "434:90:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "570:76:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "624:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "633:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "636:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "626:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "626:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "626:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "593:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "615:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "600:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "600:21:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "590:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "590:32:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "583:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "583:40:1" + }, + "nodeType": "YulIf", + "src": "580:2:1" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "563:5:1", + "type": "" + } + ], + "src": "530:116:1" + } + ] + }, + "contents": "{\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x41D CODESIZE SUB DUP1 PUSH2 0x41D DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x58 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x52 DUP2 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78 DUP5 DUP3 DUP6 ADD PUSH2 0x43 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x36A DUP1 PUSH2 0xB3 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ", + "sourceMap": "34:671:0:-:0;;;65:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;115:13;111:60;;;148:8;;;111:60;65:116;34:671;;7:137:1;;92:6;86:13;77:22;;108:30;132:5;108:30;:::i;:::-;67:77;;;;:::o;150:278::-;;266:2;254:9;245:7;241:23;237:32;234:2;;;282:1;279;272:12;234:2;325:1;350:61;403:7;394:6;383:9;379:22;350:61;:::i;:::-;340:71;;296:125;224:204;;;;:::o;434:90::-;;511:5;504:13;497:21;486:32;;476:48;;;:::o;530:116::-;600:21;615:5;600:21;:::i;:::-;593:5;590:32;580:2;;636:1;633;626:12;580:2;570:76;:::o;34:671:0:-;;;;;;;" + }, + "deployedBytecode": { + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1544:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "59:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "69:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "91:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "78:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "78:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "69:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "134:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "107:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "107:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "107:33:1" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "37:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "45:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "53:5:1", + "type": "" + } + ], + "src": "7:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "218:196:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "264:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "273:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "276:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "266:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "266:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "266:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "239:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "248:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "235:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "235:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "260:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "231:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "231:32:1" + }, + "nodeType": "YulIf", + "src": "228:2:1" + }, + { + "nodeType": "YulBlock", + "src": "290:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "305:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "319:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "309:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "334:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "369:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "380:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "365:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "365:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "344:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "344:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "334:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "188:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "199:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "211:6:1", + "type": "" + } + ], + "src": "152:262:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "503:324:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "549:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "558:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "561:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "551:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "551:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "551:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "524:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "533:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "520:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "520:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "545:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "516:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "516:32:1" + }, + "nodeType": "YulIf", + "src": "513:2:1" + }, + { + "nodeType": "YulBlock", + "src": "575:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "590:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "604:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "594:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "619:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "654:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "665:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "650:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "650:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "674:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "629:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "629:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "619:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "702:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "717:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "731:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "721:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "747:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "782:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "793:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "778:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "778:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "802:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "757:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "757:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "747:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "465:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "476:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "488:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "496:6:1", + "type": "" + } + ], + "src": "420:407:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "898:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "915:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "938:5:1" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "920:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "920:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "908:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "908:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "908:37:1" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "886:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "893:3:1", + "type": "" + } + ], + "src": "833:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1055:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1065:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1077:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1088:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1073:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1073:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1065:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1145:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1158:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1169:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1154:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1154:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "1101:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "1101:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1101:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1027:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1039:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1050:4:1", + "type": "" + } + ], + "src": "957:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1230:51:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1240:35:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1269:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1251:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1251:24:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1240:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1212:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1222:7:1", + "type": "" + } + ], + "src": "1185:96:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1332:81:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1342:65:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1357:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1364:42:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1353:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1353:54:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1342:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1314:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1324:7:1", + "type": "" + } + ], + "src": "1287:126:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1462:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1519:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1528:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1531:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1521:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1521:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1521:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1485:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1510:5:1" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1492:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1492:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1482:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1482:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1475:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1475:43:1" + }, + "nodeType": "YulIf", + "src": "1472:2:1" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1455:5:1", + "type": "" + } + ], + "src": "1419:122:1" + } + ] + }, + "contents": "{\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ", + "sourceMap": "34:671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;195:29;;;:::i;:::-;;551:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;238:71;;;:::i;:::-;;323:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;195:29;:::o;551:148::-;622:7;610:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:7;654:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:148;:::o;238:71::-;282:8;;;323:214;412:7;400:32;;;433:7;400:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;396:59;;;;;;484:7;472:32;;;505:7;472:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:59;;;;;;323:214;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:407::-;;;545:2;533:9;524:7;520:23;516:32;513:2;;;561:1;558;551:12;513:2;604:1;629:53;674:7;665:6;654:9;650:22;629:53;:::i;:::-;619:63;;575:117;731:2;757:53;802:7;793:6;782:9;778:22;757:53;:::i;:::-;747:63;;702:118;503:324;;;;;:::o;833:118::-;920:24;938:5;920:24;:::i;:::-;915:3;908:37;898:53;;:::o;957:222::-;;1088:2;1077:9;1073:18;1065:26;;1101:71;1169:1;1158:9;1154:17;1145:6;1101:71;:::i;:::-;1055:124;;;;:::o;1185:96::-;;1251:24;1269:5;1251:24;:::i;:::-;1240:35;;1230:51;;;:::o;1287:126::-;;1364:42;1357:5;1353:54;1342:65;;1332:81;;;:::o;1419:122::-;1492:24;1510:5;1492:24;:::i;:::-;1485:5;1482:35;1472:2;;1531:1;1528;1521:12;1472:2;1462:79;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "174800", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "call_ok()": "122", + "call_revert()": "163", + "subcalls(address,address)": "infinite", + "subsubcalls(address)": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 705, "name": "MSTORE", "source": 0 }, + { "begin": 65, "end": 181, "name": "CALLVALUE", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, + { "begin": 65, "end": 181, "name": "ISZERO", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 65, "end": 181, "name": "JUMPI", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, + { "begin": 65, "end": 181, "name": "REVERT", "source": 0 }, + { "begin": 65, "end": 181, "name": "tag", "source": 0, "value": "1" }, + { "begin": 65, "end": 181, "name": "JUMPDEST", "source": 0 }, + { "begin": 65, "end": 181, "name": "POP", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 65, "end": 181, "name": "MLOAD", "source": 0 }, + { "begin": 65, "end": 181, "name": "PUSHSIZE", "source": 0 }, + { "begin": 65, "end": 181, "name": "CODESIZE", "source": 0 }, + { "begin": 65, "end": 181, "name": "SUB", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, + { "begin": 65, "end": 181, "name": "PUSHSIZE", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP4", "source": 0 }, + { "begin": 65, "end": 181, "name": "CODECOPY", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, + { "begin": 65, "end": 181, "name": "ADD", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 65, "end": 181, "name": "MSTORE", "source": 0 }, + { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, + { "begin": 65, "end": 181, "name": "ADD", "source": 0 }, + { "begin": 65, "end": 181, "name": "SWAP1", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 65, "end": 181, "name": "SWAP2", "source": 0 }, + { "begin": 65, "end": 181, "name": "SWAP1", "source": 0 }, + { + "begin": 65, + "end": 181, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { + "begin": 65, + "end": 181, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { "begin": 65, "end": 181, "name": "tag", "source": 0, "value": "2" }, + { "begin": 65, "end": 181, "name": "JUMPDEST", "source": 0 }, + { "begin": 115, "end": 128, "name": "DUP1", "source": 0 }, + { "begin": 111, "end": 171, "name": "ISZERO", "source": 0 }, + { + "begin": 111, + "end": 171, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 111, "end": 171, "name": "JUMPI", "source": 0 }, + { + "begin": 148, + "end": 156, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 148, "end": 156, "name": "DUP1", "source": 0 }, + { "begin": 148, "end": 156, "name": "REVERT", "source": 0 }, + { + "begin": 111, + "end": 171, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 111, "end": 171, "name": "JUMPDEST", "source": 0 }, + { "begin": 65, "end": 181, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 34, "end": 705, "name": "JUMP", "source": 0 }, + { "begin": 7, "end": 144, "name": "tag", "source": 1, "value": "9" }, + { "begin": 7, "end": 144, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 144, "name": "PUSH", "source": 1, "value": "0" }, + { "begin": 92, "end": 98, "name": "DUP2", "source": 1 }, + { "begin": 86, "end": 99, "name": "MLOAD", "source": 1 }, + { "begin": 77, "end": 99, "name": "SWAP1", "source": 1 }, + { "begin": 77, "end": 99, "name": "POP", "source": 1 }, + { + "begin": 108, + "end": 138, + "name": "PUSH [tag]", + "source": 1, + "value": "11" + }, + { "begin": 132, "end": 137, "name": "DUP2", "source": 1 }, + { + "begin": 108, + "end": 138, + "name": "PUSH [tag]", + "source": 1, + "value": "12" + }, + { + "begin": 108, + "end": 138, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 108, + "end": 138, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 108, "end": 138, "name": "JUMPDEST", "source": 1 }, + { "begin": 67, "end": 144, "name": "SWAP3", "source": 1 }, + { "begin": 67, "end": 144, "name": "SWAP2", "source": 1 }, + { "begin": 67, "end": 144, "name": "POP", "source": 1 }, + { "begin": 67, "end": 144, "name": "POP", "source": 1 }, + { + "begin": 67, + "end": 144, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 150, + "end": 428, + "name": "tag", + "source": 1, + "value": "3" + }, + { "begin": 150, "end": 428, "name": "JUMPDEST", "source": 1 }, + { + "begin": 150, + "end": 428, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 266, + "end": 268, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 254, "end": 263, "name": "DUP3", "source": 1 }, + { "begin": 245, "end": 252, "name": "DUP5", "source": 1 }, + { "begin": 241, "end": 264, "name": "SUB", "source": 1 }, + { "begin": 237, "end": 269, "name": "SLT", "source": 1 }, + { "begin": 234, "end": 236, "name": "ISZERO", "source": 1 }, + { + "begin": 234, + "end": 236, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { "begin": 234, "end": 236, "name": "JUMPI", "source": 1 }, + { + "begin": 282, + "end": 283, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 279, "end": 280, "name": "DUP1", "source": 1 }, + { "begin": 272, "end": 284, "name": "REVERT", "source": 1 }, + { + "begin": 234, + "end": 236, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 234, "end": 236, "name": "JUMPDEST", "source": 1 }, + { + "begin": 325, + "end": 326, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 350, + "end": 411, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { "begin": 403, "end": 410, "name": "DUP5", "source": 1 }, + { "begin": 394, "end": 400, "name": "DUP3", "source": 1 }, + { "begin": 383, "end": 392, "name": "DUP6", "source": 1 }, + { "begin": 379, "end": 401, "name": "ADD", "source": 1 }, + { + "begin": 350, + "end": 411, + "name": "PUSH [tag]", + "source": 1, + "value": "9" + }, + { + "begin": 350, + "end": 411, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 350, + "end": 411, + "name": "tag", + "source": 1, + "value": "15" + }, + { "begin": 350, "end": 411, "name": "JUMPDEST", "source": 1 }, + { "begin": 340, "end": 411, "name": "SWAP2", "source": 1 }, + { "begin": 340, "end": 411, "name": "POP", "source": 1 }, + { "begin": 296, "end": 421, "name": "POP", "source": 1 }, + { "begin": 224, "end": 428, "name": "SWAP3", "source": 1 }, + { "begin": 224, "end": 428, "name": "SWAP2", "source": 1 }, + { "begin": 224, "end": 428, "name": "POP", "source": 1 }, + { "begin": 224, "end": 428, "name": "POP", "source": 1 }, + { + "begin": 224, + "end": 428, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 434, + "end": 524, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 434, "end": 524, "name": "JUMPDEST", "source": 1 }, + { + "begin": 434, + "end": 524, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 511, "end": 516, "name": "DUP2", "source": 1 }, + { "begin": 504, "end": 517, "name": "ISZERO", "source": 1 }, + { "begin": 497, "end": 518, "name": "ISZERO", "source": 1 }, + { "begin": 486, "end": 518, "name": "SWAP1", "source": 1 }, + { "begin": 486, "end": 518, "name": "POP", "source": 1 }, + { "begin": 476, "end": 524, "name": "SWAP2", "source": 1 }, + { "begin": 476, "end": 524, "name": "SWAP1", "source": 1 }, + { "begin": 476, "end": 524, "name": "POP", "source": 1 }, + { + "begin": 476, + "end": 524, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 530, + "end": 646, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 530, "end": 646, "name": "JUMPDEST", "source": 1 }, + { + "begin": 600, + "end": 621, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 615, "end": 620, "name": "DUP2", "source": 1 }, + { + "begin": 600, + "end": 621, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 600, + "end": 621, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 600, + "end": 621, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 600, "end": 621, "name": "JUMPDEST", "source": 1 }, + { "begin": 593, "end": 598, "name": "DUP2", "source": 1 }, + { "begin": 590, "end": 622, "name": "EQ", "source": 1 }, + { + "begin": 580, + "end": 582, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 580, "end": 582, "name": "JUMPI", "source": 1 }, + { + "begin": 636, + "end": 637, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 633, "end": 634, "name": "DUP1", "source": 1 }, + { "begin": 626, "end": 638, "name": "REVERT", "source": 1 }, + { + "begin": 580, + "end": 582, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 580, "end": 582, "name": "JUMPDEST", "source": 1 }, + { "begin": 570, "end": 646, "name": "POP", "source": 1 }, + { + "begin": 570, + "end": 646, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { "begin": 34, "end": 705, "name": "tag", "source": 0, "value": "7" }, + { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 705, "name": "CODECOPY", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 705, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + ".code": [ + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 34, "end": 705, "name": "MSTORE", "source": 0 }, + { "begin": 34, "end": 705, "name": "CALLVALUE", "source": 0 }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 705, "name": "ISZERO", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 705, "name": "REVERT", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, + { "begin": 34, "end": 705, "name": "POP", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 34, "end": 705, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 34, "end": 705, "name": "LT", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 705, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 34, "end": 705, "name": "SHR", "source": 0 }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "5EAF9BC1" + }, + { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "A885F4E3" + }, + { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "CB30E696" + }, + { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "F34F1610" + }, + { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, + { + "begin": 34, + "end": 705, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 34, "end": 705, "name": "REVERT", "source": 0 }, + { + "begin": 195, + "end": 224, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, + { + "begin": 195, + "end": 224, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 195, + "end": 224, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 195, + "end": 224, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 195, + "end": 224, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, + { "begin": 195, "end": 224, "name": "STOP", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 551, + "end": 699, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 551, "end": 699, "name": "DUP1", "source": 0 }, + { "begin": 551, "end": 699, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 551, "end": 699, "name": "SUB", "source": 0 }, + { "begin": 551, "end": 699, "name": "DUP2", "source": 0 }, + { "begin": 551, "end": 699, "name": "ADD", "source": 0 }, + { "begin": 551, "end": 699, "name": "SWAP1", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 551, "end": 699, "name": "SWAP2", "source": 0 }, + { "begin": 551, "end": 699, "name": "SWAP1", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 551, + "end": 699, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 551, + "end": 699, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 551, + "end": 699, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 551, + "end": 699, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { "begin": 551, "end": 699, "name": "STOP", "source": 0 }, + { + "begin": 238, + "end": 309, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, + { + "begin": 238, + "end": 309, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 238, + "end": 309, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 238, + "end": 309, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 238, + "end": 309, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, + { "begin": 238, "end": 309, "name": "STOP", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 323, + "end": 537, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 323, "end": 537, "name": "DUP1", "source": 0 }, + { "begin": 323, "end": 537, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 323, "end": 537, "name": "SUB", "source": 0 }, + { "begin": 323, "end": 537, "name": "DUP2", "source": 0 }, + { "begin": 323, "end": 537, "name": "ADD", "source": 0 }, + { "begin": 323, "end": 537, "name": "SWAP1", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 323, "end": 537, "name": "SWAP2", "source": 0 }, + { "begin": 323, "end": 537, "name": "SWAP1", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 323, + "end": 537, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 323, + "end": 537, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { + "begin": 323, + "end": 537, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 323, + "end": 537, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, + { "begin": 323, "end": 537, "name": "STOP", "source": 0 }, + { + "begin": 195, + "end": 224, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, + { + "begin": 195, + "end": 224, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 551, + "end": 699, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { "begin": 622, "end": 629, "name": "DUP1", "source": 0 }, + { + "begin": 610, + "end": 638, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 610, "end": 638, "name": "AND", "source": 0 }, + { + "begin": 610, + "end": 638, + "name": "PUSH", + "source": 0, + "value": "5EAF9BC1" + }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 610, "end": 640, "name": "MLOAD", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 610, "end": 640, "name": "AND", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 610, "end": 640, "name": "SHL", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, + { "begin": 610, "end": 640, "name": "MSTORE", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 610, "end": 640, "name": "ADD", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 610, "end": 640, "name": "MLOAD", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP4", "source": 0 }, + { "begin": 610, "end": 640, "name": "SUB", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 610, "end": 640, "name": "DUP8", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { "begin": 610, "end": 640, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 610, "end": 640, "name": "JUMPI", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { "begin": 610, "end": 640, "name": "REVERT", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 610, "end": 640, "name": "JUMPDEST", "source": 0 }, + { "begin": 610, "end": 640, "name": "POP", "source": 0 }, + { "begin": 610, "end": 640, "name": "GAS", "source": 0 }, + { "begin": 610, "end": 640, "name": "CALL", "source": 0 }, + { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { "begin": 610, "end": 640, "name": "JUMPI", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 610, + "end": 640, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 610, + "end": 640, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 610, "end": 640, "name": "REVERT", "source": 0 }, + { + "begin": 610, + "end": 640, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 610, "end": 640, "name": "JUMPDEST", "source": 0 }, + { "begin": 610, "end": 640, "name": "POP", "source": 0 }, + { "begin": 610, "end": 640, "name": "POP", "source": 0 }, + { "begin": 610, "end": 640, "name": "POP", "source": 0 }, + { "begin": 610, "end": 640, "name": "POP", "source": 0 }, + { "begin": 666, "end": 673, "name": "DUP1", "source": 0 }, + { + "begin": 654, + "end": 686, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 654, "end": 686, "name": "AND", "source": 0 }, + { + "begin": 654, + "end": 686, + "name": "PUSH", + "source": 0, + "value": "CB30E696" + }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 654, "end": 688, "name": "MLOAD", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 654, "end": 688, "name": "AND", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 654, "end": 688, "name": "SHL", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, + { "begin": 654, "end": 688, "name": "MSTORE", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 654, "end": 688, "name": "ADD", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 654, "end": 688, "name": "MLOAD", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP4", "source": 0 }, + { "begin": 654, "end": 688, "name": "SUB", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 654, "end": 688, "name": "DUP8", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 654, "end": 688, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { "begin": 654, "end": 688, "name": "JUMPI", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 654, "end": 688, "name": "REVERT", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 654, "end": 688, "name": "JUMPDEST", "source": 0 }, + { "begin": 654, "end": 688, "name": "POP", "source": 0 }, + { "begin": 654, "end": 688, "name": "GAS", "source": 0 }, + { "begin": 654, "end": 688, "name": "CALL", "source": 0 }, + { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { "begin": 654, "end": 688, "name": "JUMPI", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 654, + "end": 688, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 654, + "end": 688, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 654, "end": 688, "name": "REVERT", "source": 0 }, + { + "begin": 654, + "end": 688, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 654, "end": 688, "name": "JUMPDEST", "source": 0 }, + { "begin": 654, "end": 688, "name": "POP", "source": 0 }, + { "begin": 654, "end": 688, "name": "POP", "source": 0 }, + { "begin": 654, "end": 688, "name": "POP", "source": 0 }, + { "begin": 654, "end": 688, "name": "POP", "source": 0 }, + { "begin": 551, "end": 699, "name": "POP", "source": 0 }, + { + "begin": 551, + "end": 699, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 238, + "end": 309, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, + { + "begin": 282, + "end": 290, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 282, "end": 290, "name": "DUP1", "source": 0 }, + { "begin": 282, "end": 290, "name": "REVERT", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, + { "begin": 412, "end": 419, "name": "DUP2", "source": 0 }, + { + "begin": 400, + "end": 432, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 400, "end": 432, "name": "AND", "source": 0 }, + { + "begin": 400, + "end": 432, + "name": "PUSH", + "source": 0, + "value": "A885F4E3" + }, + { "begin": 433, "end": 440, "name": "DUP3", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 400, "end": 441, "name": "MLOAD", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP3", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 400, "end": 441, "name": "AND", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 400, "end": 441, "name": "SHL", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP2", "source": 0 }, + { "begin": 400, "end": 441, "name": "MSTORE", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 400, "end": 441, "name": "ADD", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "29" + }, + { "begin": 400, "end": 441, "name": "SWAP2", "source": 0 }, + { "begin": 400, "end": 441, "name": "SWAP1", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { + "begin": 400, + "end": 441, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 400, + "end": 441, + "name": "tag", + "source": 0, + "value": "29" + }, + { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 400, "end": 441, "name": "MLOAD", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP4", "source": 0 }, + { "begin": 400, "end": 441, "name": "SUB", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP2", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 400, "end": 441, "name": "DUP8", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 400, "end": 441, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "31" + }, + { "begin": 400, "end": 441, "name": "JUMPI", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 400, "end": 441, "name": "REVERT", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "tag", + "source": 0, + "value": "31" + }, + { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, + { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { "begin": 400, "end": 441, "name": "GAS", "source": 0 }, + { "begin": 400, "end": 441, "name": "CALL", "source": 0 }, + { "begin": 400, "end": 441, "name": "SWAP3", "source": 0 }, + { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "32" + }, + { "begin": 400, "end": 441, "name": "JUMPI", "source": 0 }, + { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { + "begin": 400, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 400, + "end": 441, + "name": "tag", + "source": 0, + "value": "32" + }, + { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 396, + "end": 455, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { "begin": 396, "end": 455, "name": "JUMPI", "source": 0 }, + { + "begin": 396, + "end": 455, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { "begin": 396, "end": 455, "name": "JUMP", "source": 0 }, + { + "begin": 396, + "end": 455, + "name": "tag", + "source": 0, + "value": "33" + }, + { "begin": 396, "end": 455, "name": "JUMPDEST", "source": 0 }, + { + "begin": 396, + "end": 455, + "name": "tag", + "source": 0, + "value": "37" + }, + { "begin": 396, "end": 455, "name": "JUMPDEST", "source": 0 }, + { "begin": 484, "end": 491, "name": "DUP2", "source": 0 }, + { + "begin": 472, + "end": 504, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 472, "end": 504, "name": "AND", "source": 0 }, + { + "begin": 472, + "end": 504, + "name": "PUSH", + "source": 0, + "value": "A885F4E3" + }, + { "begin": 505, "end": 512, "name": "DUP3", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 472, "end": 513, "name": "MLOAD", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP3", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 472, "end": 513, "name": "AND", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 472, "end": 513, "name": "SHL", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP2", "source": 0 }, + { "begin": 472, "end": 513, "name": "MSTORE", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 472, "end": 513, "name": "ADD", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH [tag]", + "source": 0, + "value": "38" + }, + { "begin": 472, "end": 513, "name": "SWAP2", "source": 0 }, + { "begin": 472, "end": 513, "name": "SWAP1", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { + "begin": 472, + "end": 513, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 472, + "end": 513, + "name": "tag", + "source": 0, + "value": "38" + }, + { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 472, "end": 513, "name": "MLOAD", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP4", "source": 0 }, + { "begin": 472, "end": 513, "name": "SUB", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP2", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 472, "end": 513, "name": "DUP8", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, + { "begin": 472, "end": 513, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, + { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH [tag]", + "source": 0, + "value": "39" + }, + { "begin": 472, "end": 513, "name": "JUMPI", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, + { "begin": 472, "end": 513, "name": "REVERT", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "tag", + "source": 0, + "value": "39" + }, + { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, + { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { "begin": 472, "end": 513, "name": "GAS", "source": 0 }, + { "begin": 472, "end": 513, "name": "CALL", "source": 0 }, + { "begin": 472, "end": 513, "name": "SWAP3", "source": 0 }, + { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, + { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH [tag]", + "source": 0, + "value": "40" + }, + { "begin": 472, "end": 513, "name": "JUMPI", "source": 0 }, + { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { + "begin": 472, + "end": 513, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 472, + "end": 513, + "name": "tag", + "source": 0, + "value": "40" + }, + { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, + { + "begin": 468, + "end": 527, + "name": "PUSH [tag]", + "source": 0, + "value": "41" + }, + { "begin": 468, "end": 527, "name": "JUMPI", "source": 0 }, + { + "begin": 468, + "end": 527, + "name": "PUSH [tag]", + "source": 0, + "value": "45" + }, + { "begin": 468, "end": 527, "name": "JUMP", "source": 0 }, + { + "begin": 468, + "end": 527, + "name": "tag", + "source": 0, + "value": "41" + }, + { "begin": 468, "end": 527, "name": "JUMPDEST", "source": 0 }, + { + "begin": 468, + "end": 527, + "name": "tag", + "source": 0, + "value": "45" + }, + { "begin": 468, "end": 527, "name": "JUMPDEST", "source": 0 }, + { "begin": 323, "end": 537, "name": "POP", "source": 0 }, + { "begin": 323, "end": 537, "name": "POP", "source": 0 }, + { + "begin": 323, + "end": 537, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 146, + "name": "tag", + "source": 1, + "value": "47" + }, + { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7, + "end": 146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, + { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, + { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "49" + }, + { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { + "begin": 107, + "end": 140, + "name": "PUSH [tag]", + "source": 1, + "value": "50" + }, + { + "begin": 107, + "end": 140, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 107, + "end": 140, + "name": "tag", + "source": 1, + "value": "49" + }, + { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, + { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { + "begin": 59, + "end": 146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 152, + "end": 414, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { + "begin": 152, + "end": 414, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 260, + "end": 262, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, + { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, + { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, + { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, + { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "PUSH [tag]", + "source": 1, + "value": "52" + }, + { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { + "begin": 276, + "end": 277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, + { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, + { + "begin": 228, + "end": 230, + "name": "tag", + "source": 1, + "value": "52" + }, + { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { + "begin": 319, + "end": 320, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "53" + }, + { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, + { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, + { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, + { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { + "begin": 344, + "end": 397, + "name": "PUSH [tag]", + "source": 1, + "value": "47" + }, + { + "begin": 344, + "end": 397, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 344, + "end": 397, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 397, "name": "POP", "source": 1 }, + { "begin": 290, "end": 407, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, + { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { "begin": 218, "end": 414, "name": "POP", "source": 1 }, + { + "begin": 218, + "end": 414, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 420, + "end": 827, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 420, "end": 827, "name": "JUMPDEST", "source": 1 }, + { + "begin": 420, + "end": 827, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 420, "end": 827, "name": "DUP1", "source": 1 }, + { + "begin": 545, + "end": 547, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 533, "end": 542, "name": "DUP4", "source": 1 }, + { "begin": 524, "end": 531, "name": "DUP6", "source": 1 }, + { "begin": 520, "end": 543, "name": "SUB", "source": 1 }, + { "begin": 516, "end": 548, "name": "SLT", "source": 1 }, + { "begin": 513, "end": 515, "name": "ISZERO", "source": 1 }, + { + "begin": 513, + "end": 515, + "name": "PUSH [tag]", + "source": 1, + "value": "55" + }, + { "begin": 513, "end": 515, "name": "JUMPI", "source": 1 }, + { + "begin": 561, + "end": 562, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 558, "end": 559, "name": "DUP1", "source": 1 }, + { "begin": 551, "end": 563, "name": "REVERT", "source": 1 }, + { + "begin": 513, + "end": 515, + "name": "tag", + "source": 1, + "value": "55" + }, + { "begin": 513, "end": 515, "name": "JUMPDEST", "source": 1 }, + { + "begin": 604, + "end": 605, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 629, + "end": 682, + "name": "PUSH [tag]", + "source": 1, + "value": "56" + }, + { "begin": 674, "end": 681, "name": "DUP6", "source": 1 }, + { "begin": 665, "end": 671, "name": "DUP3", "source": 1 }, + { "begin": 654, "end": 663, "name": "DUP7", "source": 1 }, + { "begin": 650, "end": 672, "name": "ADD", "source": 1 }, + { + "begin": 629, + "end": 682, + "name": "PUSH [tag]", + "source": 1, + "value": "47" + }, + { + "begin": 629, + "end": 682, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 629, + "end": 682, + "name": "tag", + "source": 1, + "value": "56" + }, + { "begin": 629, "end": 682, "name": "JUMPDEST", "source": 1 }, + { "begin": 619, "end": 682, "name": "SWAP3", "source": 1 }, + { "begin": 619, "end": 682, "name": "POP", "source": 1 }, + { "begin": 575, "end": 692, "name": "POP", "source": 1 }, + { + "begin": 731, + "end": 733, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { + "begin": 757, + "end": 810, + "name": "PUSH [tag]", + "source": 1, + "value": "57" + }, + { "begin": 802, "end": 809, "name": "DUP6", "source": 1 }, + { "begin": 793, "end": 799, "name": "DUP3", "source": 1 }, + { "begin": 782, "end": 791, "name": "DUP7", "source": 1 }, + { "begin": 778, "end": 800, "name": "ADD", "source": 1 }, + { + "begin": 757, + "end": 810, + "name": "PUSH [tag]", + "source": 1, + "value": "47" + }, + { + "begin": 757, + "end": 810, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 757, + "end": 810, + "name": "tag", + "source": 1, + "value": "57" + }, + { "begin": 757, "end": 810, "name": "JUMPDEST", "source": 1 }, + { "begin": 747, "end": 810, "name": "SWAP2", "source": 1 }, + { "begin": 747, "end": 810, "name": "POP", "source": 1 }, + { "begin": 702, "end": 820, "name": "POP", "source": 1 }, + { "begin": 503, "end": 827, "name": "SWAP3", "source": 1 }, + { "begin": 503, "end": 827, "name": "POP", "source": 1 }, + { "begin": 503, "end": 827, "name": "SWAP3", "source": 1 }, + { "begin": 503, "end": 827, "name": "SWAP1", "source": 1 }, + { "begin": 503, "end": 827, "name": "POP", "source": 1 }, + { + "begin": 503, + "end": 827, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 833, + "end": 951, + "name": "tag", + "source": 1, + "value": "58" + }, + { "begin": 833, "end": 951, "name": "JUMPDEST", "source": 1 }, + { + "begin": 920, + "end": 944, + "name": "PUSH [tag]", + "source": 1, + "value": "60" + }, + { "begin": 938, "end": 943, "name": "DUP2", "source": 1 }, + { + "begin": 920, + "end": 944, + "name": "PUSH [tag]", + "source": 1, + "value": "61" + }, + { + "begin": 920, + "end": 944, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 920, + "end": 944, + "name": "tag", + "source": 1, + "value": "60" + }, + { "begin": 920, "end": 944, "name": "JUMPDEST", "source": 1 }, + { "begin": 915, "end": 918, "name": "DUP3", "source": 1 }, + { "begin": 908, "end": 945, "name": "MSTORE", "source": 1 }, + { "begin": 898, "end": 951, "name": "POP", "source": 1 }, + { "begin": 898, "end": 951, "name": "POP", "source": 1 }, + { + "begin": 898, + "end": 951, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 957, + "end": 1179, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 957, "end": 1179, "name": "JUMPDEST", "source": 1 }, + { + "begin": 957, + "end": 1179, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1088, + "end": 1090, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1077, "end": 1086, "name": "DUP3", "source": 1 }, + { "begin": 1073, "end": 1091, "name": "ADD", "source": 1 }, + { "begin": 1065, "end": 1091, "name": "SWAP1", "source": 1 }, + { "begin": 1065, "end": 1091, "name": "POP", "source": 1 }, + { + "begin": 1101, + "end": 1172, + "name": "PUSH [tag]", + "source": 1, + "value": "63" + }, + { + "begin": 1169, + "end": 1170, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1158, "end": 1167, "name": "DUP4", "source": 1 }, + { "begin": 1154, "end": 1171, "name": "ADD", "source": 1 }, + { "begin": 1145, "end": 1151, "name": "DUP5", "source": 1 }, + { + "begin": 1101, + "end": 1172, + "name": "PUSH [tag]", + "source": 1, + "value": "58" + }, + { + "begin": 1101, + "end": 1172, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1101, + "end": 1172, + "name": "tag", + "source": 1, + "value": "63" + }, + { "begin": 1101, "end": 1172, "name": "JUMPDEST", "source": 1 }, + { "begin": 1055, "end": 1179, "name": "SWAP3", "source": 1 }, + { "begin": 1055, "end": 1179, "name": "SWAP2", "source": 1 }, + { "begin": 1055, "end": 1179, "name": "POP", "source": 1 }, + { "begin": 1055, "end": 1179, "name": "POP", "source": 1 }, + { + "begin": 1055, + "end": 1179, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1185, + "end": 1281, + "name": "tag", + "source": 1, + "value": "61" + }, + { "begin": 1185, "end": 1281, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1185, + "end": 1281, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1251, + "end": 1275, + "name": "PUSH [tag]", + "source": 1, + "value": "65" + }, + { "begin": 1269, "end": 1274, "name": "DUP3", "source": 1 }, + { + "begin": 1251, + "end": 1275, + "name": "PUSH [tag]", + "source": 1, + "value": "66" + }, + { + "begin": 1251, + "end": 1275, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1251, + "end": 1275, + "name": "tag", + "source": 1, + "value": "65" + }, + { "begin": 1251, "end": 1275, "name": "JUMPDEST", "source": 1 }, + { "begin": 1240, "end": 1275, "name": "SWAP1", "source": 1 }, + { "begin": 1240, "end": 1275, "name": "POP", "source": 1 }, + { "begin": 1230, "end": 1281, "name": "SWAP2", "source": 1 }, + { "begin": 1230, "end": 1281, "name": "SWAP1", "source": 1 }, + { "begin": 1230, "end": 1281, "name": "POP", "source": 1 }, + { + "begin": 1230, + "end": 1281, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1287, + "end": 1413, + "name": "tag", + "source": 1, + "value": "66" + }, + { "begin": 1287, "end": 1413, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1287, + "end": 1413, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1364, + "end": 1406, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1357, "end": 1362, "name": "DUP3", "source": 1 }, + { "begin": 1353, "end": 1407, "name": "AND", "source": 1 }, + { "begin": 1342, "end": 1407, "name": "SWAP1", "source": 1 }, + { "begin": 1342, "end": 1407, "name": "POP", "source": 1 }, + { "begin": 1332, "end": 1413, "name": "SWAP2", "source": 1 }, + { "begin": 1332, "end": 1413, "name": "SWAP1", "source": 1 }, + { "begin": 1332, "end": 1413, "name": "POP", "source": 1 }, + { + "begin": 1332, + "end": 1413, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1419, + "end": 1541, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 1419, "end": 1541, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1492, + "end": 1516, + "name": "PUSH [tag]", + "source": 1, + "value": "69" + }, + { "begin": 1510, "end": 1515, "name": "DUP2", "source": 1 }, + { + "begin": 1492, + "end": 1516, + "name": "PUSH [tag]", + "source": 1, + "value": "61" + }, + { + "begin": 1492, + "end": 1516, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1492, + "end": 1516, + "name": "tag", + "source": 1, + "value": "69" + }, + { "begin": 1492, "end": 1516, "name": "JUMPDEST", "source": 1 }, + { "begin": 1485, "end": 1490, "name": "DUP2", "source": 1 }, + { "begin": 1482, "end": 1517, "name": "EQ", "source": 1 }, + { + "begin": 1472, + "end": 1474, + "name": "PUSH [tag]", + "source": 1, + "value": "70" + }, + { "begin": 1472, "end": 1474, "name": "JUMPI", "source": 1 }, + { + "begin": 1531, + "end": 1532, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1528, "end": 1529, "name": "DUP1", "source": 1 }, + { "begin": 1521, "end": 1533, "name": "REVERT", "source": 1 }, + { + "begin": 1472, + "end": 1474, + "name": "tag", + "source": 1, + "value": "70" + }, + { "begin": 1472, "end": 1474, "name": "JUMPDEST", "source": 1 }, + { "begin": 1462, "end": 1541, "name": "POP", "source": 1 }, + { + "begin": 1462, + "end": 1541, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "call_ok()": "5eaf9bc1", + "call_revert()": "cb30e696", + "subcalls(address,address)": "f34f1610", + "subsubcalls(address)": "a885f4e3" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"should_revert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"call_ok\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subsubcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceFilter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf153bb9ac8a40ad2b947921abebad02891a26a7b8d73dbe03472330a1a669e83\",\"urls\":[\"bzz-raw://9180f7c6665f2ee8bb90a0ac0330a1df854a37186bfdf68d982995ae884da57c\",\"dweb:/ipfs/QmPcFyzXLPmF99Zjz4ytwYqw5rkKqumEoSHbDxruCdb2Av\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "\n pragma solidity >=0.8.0;\n contract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n \n function call_ok() public { }\n \n function call_revert() public {\n revert(); \n }\n \n function subcalls(address target0, address target1) public {\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n }\n \n function subsubcalls(address target1) public {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n }" +} diff --git a/tests/util/constants.ts b/tests/util/constants.ts index a7b17aa402a..f6feef32ca9 100644 --- a/tests/util/constants.ts +++ b/tests/util/constants.ts @@ -1,33 +1,34 @@ -export const SPECS_PATH = `./moonbeam-test-specs`; - -export const DISPLAY_LOG = process.env.MOONBEAM_LOG || false; -export const MOONBEAM_LOG = process.env.MOONBEAM_LOG || "info"; - -export const BINARY_PATH = process.env.BINARY_PATH || `../target/release/moonbeam`; -export const SPAWNING_TIME = 30000; - -// Test variables -export const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; -export const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; -export const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; -export const GLMR = 1_000_000_000_000_000_000n; -export const DEFAULT_GENESIS_BALANCE = 2n ** 80n; -export const DEFAULT_GENESIS_STAKING = 1_000n * GLMR; -export const GENESIS_ACCOUNT_BALANCE = DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_STAKING; - -// Current gas per second -export const GAS_PER_SECOND = 40_000_000; -// The real computation is 1_000_000_000_000 / 40_000_000, but we simplify to avoid bigint. -export const GAS_PER_WEIGHT = 1_000_000 / 40; - -// Our weight limit is 500ms. -export const BLOCK_TX_LIMIT = GAS_PER_SECOND * 0.5; - -// Current implementation is limiting block transactions to 75% of the block gas limit -export const BLOCK_TX_GAS_LIMIT = BLOCK_TX_LIMIT * 0.75; -export const EXTRINSIC_BASE_COST = 125_000_000 / GAS_PER_WEIGHT; // 125_000_000 Weight per extrinsics - -// Maximum extrinsic weight is taken from the max allowed transaction weight per block, -// minus the block initialization (10%) and minus the extrinsic base cost. -export const EXTRINSIC_GAS_LIMIT = BLOCK_TX_GAS_LIMIT - BLOCK_TX_LIMIT * 0.1 - EXTRINSIC_BASE_COST; +export const SPECS_PATH = `./moonbeam-test-specs`; + +export const DISPLAY_LOG = process.env.MOONBEAM_LOG || false; +export const MOONBEAM_LOG = process.env.MOONBEAM_LOG || "info"; + +export const BINARY_PATH = process.env.BINARY_PATH || `../target/release/moonbeam`; +export const SPAWNING_TIME = 30000; + +// Test variables +export const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"; +export const GENESIS_ACCOUNT_PRIVATE_KEY = + "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; +export const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; +export const GLMR = 1_000_000_000_000_000_000n; +export const DEFAULT_GENESIS_BALANCE = 2n ** 80n; +export const DEFAULT_GENESIS_STAKING = 1_000n * GLMR; +export const GENESIS_ACCOUNT_BALANCE = DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_STAKING; + +// Current gas per second +export const GAS_PER_SECOND = 40_000_000; +// The real computation is 1_000_000_000_000 / 40_000_000, but we simplify to avoid bigint. +export const GAS_PER_WEIGHT = 1_000_000 / 40; + +// Our weight limit is 500ms. +export const BLOCK_TX_LIMIT = GAS_PER_SECOND * 0.5; + +// Current implementation is limiting block transactions to 75% of the block gas limit +export const BLOCK_TX_GAS_LIMIT = BLOCK_TX_LIMIT * 0.75; +// 125_000_000 Weight per extrinsics +export const EXTRINSIC_BASE_COST = 125_000_000 / GAS_PER_WEIGHT; + +// Maximum extrinsic weight is taken from the max allowed transaction weight per block, +// minus the block initialization (10%) and minus the extrinsic base cost. +export const EXTRINSIC_GAS_LIMIT = BLOCK_TX_GAS_LIMIT - BLOCK_TX_LIMIT * 0.1 - EXTRINSIC_BASE_COST; diff --git a/tests/util/contracts.ts b/tests/util/contracts.ts index 73474379fe5..2d41df16edf 100644 --- a/tests/util/contracts.ts +++ b/tests/util/contracts.ts @@ -1,75 +1,74 @@ -import { customWeb3Request } from "./providers"; -import { TransactionReceipt } from "web3-core"; -import { AbiItem } from "web3-utils"; -import { Contract } from "web3-eth-contract"; -import Web3 from "web3"; -import fs from "fs"; - -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import { contractSources } from "../contracts/sources"; - -export interface Compiled { - byteCode: string; - contract: any; - sourceCode: string; -} - -const contracts: { [name: string]: Compiled } = {}; -const contractObs: { [name: string]: ((Compiled) => void)[] } = {}; -export async function getCompiled(name: string): Promise { - if (!contractSources[name]) { - throw new Error(`Contract name (${name}) doesn't exist in test suite`); - } - if (contracts[name]) { - return contracts[name]; - } - const promise = new Promise((resolve) => { - const shouldLoad = !contractObs[name]; - if (!contractObs[name]) { - contractObs[name] = []; - } - contractObs[name].push(resolve); - if (shouldLoad) { - // Will load the contract async and callback all the promise waiting for this contract. - setImmediate(() => { - try { - contracts[name] = require(`../contracts/compiled/${name}.json`); - } catch (e) { - throw new Error( - `Contract name ${name} is not compiled. (should be done in mochaGlobalSetup)` - ); - } - - // Call back all the pending promises and clear the list. - contractObs[name].forEach((resolvePending) => { - resolvePending(contracts[name]); - }); - delete contractObs[name]; - }); - } - }); - return promise; -} - -// Deploy and instantiate a contract with manuel seal -export async function deployContractManualSeal( - web3: Web3, - contractByteCode: string, - contractABI: AbiItem[], - account: string = GENESIS_ACCOUNT, - privateKey: string = GENESIS_ACCOUNT_PRIVATE_KEY -): Promise { - const tx = await web3.eth.accounts.signTransaction( - { - from: account, - data: contractByteCode, - value: "0x00", - gasPrice: "0x01", - gas: "0x100000", - }, - privateKey - ); - await customWeb3Request(web3, "eth_sendRawTransaction", [tx.rawTransaction]); - let rcpt: TransactionReceipt = await web3.eth.getTransactionReceipt(tx.transactionHash); - return new web3.eth.Contract(contractABI, rcpt.contractAddress); -} +import { customWeb3Request } from "./providers"; +import { TransactionReceipt } from "web3-core"; +import { AbiItem } from "web3-utils"; +import { Contract } from "web3-eth-contract"; +import Web3 from "web3"; + +import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { contractSources } from "../contracts/sources"; + +export interface Compiled { + byteCode: string; + contract: any; + sourceCode: string; +} + +const contracts: { [name: string]: Compiled } = {}; +const contractObs: { [name: string]: ((Compiled) => void)[] } = {}; +export async function getCompiled(name: string): Promise { + if (!contractSources[name]) { + throw new Error(`Contract name (${name}) doesn't exist in test suite`); + } + if (contracts[name]) { + return contracts[name]; + } + const promise = new Promise((resolve) => { + const shouldLoad = !contractObs[name]; + if (!contractObs[name]) { + contractObs[name] = []; + } + contractObs[name].push(resolve); + if (shouldLoad) { + // Will load the contract async and callback all the promise waiting for this contract. + setImmediate(() => { + try { + contracts[name] = require(`../contracts/compiled/${name}.json`); + } catch (e) { + throw new Error( + `Contract name ${name} is not compiled. (should be done in mochaGlobalSetup)` + ); + } + + // Call back all the pending promises and clear the list. + contractObs[name].forEach((resolvePending) => { + resolvePending(contracts[name]); + }); + delete contractObs[name]; + }); + } + }); + return promise; +} + +// Deploy and instantiate a contract with manuel seal +export async function deployContractManualSeal( + web3: Web3, + contractByteCode: string, + contractABI: AbiItem[], + account: string = GENESIS_ACCOUNT, + privateKey: string = GENESIS_ACCOUNT_PRIVATE_KEY +): Promise { + const tx = await web3.eth.accounts.signTransaction( + { + from: account, + data: contractByteCode, + value: "0x00", + gasPrice: "0x01", + gas: "0x100000", + }, + privateKey + ); + await customWeb3Request(web3, "eth_sendRawTransaction", [tx.rawTransaction]); + let rcpt: TransactionReceipt = await web3.eth.getTransactionReceipt(tx.transactionHash); + return new web3.eth.Contract(contractABI, rcpt.contractAddress); +} diff --git a/tests/util/dev-node.ts b/tests/util/dev-node.ts index 591172a8dda..4df4d223bb2 100644 --- a/tests/util/dev-node.ts +++ b/tests/util/dev-node.ts @@ -1,125 +1,125 @@ -import tcpPortUsed from "tcp-port-used"; -import { spawn, ChildProcess } from "child_process"; -import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "./constants"; - -export async function findAvailablePorts() { - const availablePorts = await Promise.all( - [null, null, null].map(async (_, index) => { - let selectedPort = 0; - let port = 1024 + index * 20000 + (process.pid % 20000); - let endingPort = 65535; - while (!selectedPort && port < endingPort) { - const inUse = await tcpPortUsed.check(port, "127.0.0.1"); - if (!inUse) { - selectedPort = port; - } - port++; - } - if (!selectedPort) { - throw new Error(`No available port`); - } - return selectedPort; - }) - ); - - return { - p2pPort: availablePorts[0], - rpcPort: availablePorts[1], - wsPort: availablePorts[2], - }; -} - -// Stores if the node has already started. -// It is used when a test file contains multiple describeDevMoonbeam. Those are -// executed within the same PID and so would generate a race condition if started -// at the same time. -let nodeStarted = false; - -// This will start a moonbeam dev node, only 1 at a time (check every 100ms). -// This will prevent race condition on the findAvailablePorts which uses the PID of the process -export async function startMoonbeamDevNode(): Promise<{ - p2pPort: number; - rpcPort: number; - wsPort: number; - runningNode: ChildProcess; -}> { - while (nodeStarted) { - // Wait 100ms to see if the node is free - await new Promise((resolve) => { - setTimeout(resolve, 100); - }); - } - nodeStarted = true; - const { p2pPort, rpcPort, wsPort } = await findAvailablePorts(); - - // console.log("Using ports", { p2pPort, rpcPort, wsPort }); - const cmd = BINARY_PATH; - const args = [ - `--execution=Native`, // Faster execution using native - `--no-telemetry`, - `--no-prometheus`, - `--dev`, - `--ethapi=txpool,debug,trace`, - `--sealing=manual`, - `-l${MOONBEAM_LOG}`, - `--port=${p2pPort}`, - `--rpc-port=${rpcPort}`, - `--ws-port=${wsPort}`, - `--tmp`, - ]; - - let runningNode: ChildProcess = null; - process.once("exit", function () { - runningNode && runningNode.kill(); - }); - process.once("SIGINT", function () { - process.exit(2); - }); - runningNode = spawn(cmd, args); - - runningNode.once("exit", () => { - nodeStarted = false; - }); - - runningNode.on("error", (err) => { - if ((err as any).errno == "ENOENT") { - console.error( - `\x1b[31mMissing Moonbeam binary ` + - `(${BINARY_PATH}).\nPlease compile the Moonbeam project\x1b[0m` - ); - } else { - console.error(err); - } - process.exit(1); - }); - - const binaryLogs = []; - await new Promise((resolve) => { - const timer = setTimeout(() => { - console.error(`\x1b[31m Failed to start Moonbeam Test Node.\x1b[0m`); - console.error(`Command: ${cmd} ${args.join(" ")}`); - console.error(`Logs:`); - console.error(binaryLogs.map((chunk) => chunk.toString()).join("\n")); - process.exit(1); - }, SPAWNING_TIME - 2000); - - const onData = async (chunk) => { - if (DISPLAY_LOG) { - console.log(chunk.toString()); - } - binaryLogs.push(chunk); - if (chunk.toString().match(/Development Service Ready/)) { - clearTimeout(timer); - if (!DISPLAY_LOG) { - runningNode.stderr.off("data", onData); - runningNode.stdout.off("data", onData); - } - resolve(); - } - }; - runningNode.stderr.on("data", onData); - runningNode.stdout.on("data", onData); - }); - - return { p2pPort, rpcPort, wsPort, runningNode }; -} +import tcpPortUsed from "tcp-port-used"; +import { spawn, ChildProcess } from "child_process"; +import { BINARY_PATH, DISPLAY_LOG, MOONBEAM_LOG, SPAWNING_TIME } from "./constants"; + +export async function findAvailablePorts() { + const availablePorts = await Promise.all( + [null, null, null].map(async (_, index) => { + let selectedPort = 0; + let port = 1024 + index * 20000 + (process.pid % 20000); + let endingPort = 65535; + while (!selectedPort && port < endingPort) { + const inUse = await tcpPortUsed.check(port, "127.0.0.1"); + if (!inUse) { + selectedPort = port; + } + port++; + } + if (!selectedPort) { + throw new Error(`No available port`); + } + return selectedPort; + }) + ); + + return { + p2pPort: availablePorts[0], + rpcPort: availablePorts[1], + wsPort: availablePorts[2], + }; +} + +// Stores if the node has already started. +// It is used when a test file contains multiple describeDevMoonbeam. Those are +// executed within the same PID and so would generate a race condition if started +// at the same time. +let nodeStarted = false; + +// This will start a moonbeam dev node, only 1 at a time (check every 100ms). +// This will prevent race condition on the findAvailablePorts which uses the PID of the process +export async function startMoonbeamDevNode(): Promise<{ + p2pPort: number; + rpcPort: number; + wsPort: number; + runningNode: ChildProcess; +}> { + while (nodeStarted) { + // Wait 100ms to see if the node is free + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); + } + nodeStarted = true; + const { p2pPort, rpcPort, wsPort } = await findAvailablePorts(); + + // console.log("Using ports", { p2pPort, rpcPort, wsPort }); + const cmd = BINARY_PATH; + const args = [ + `--execution=Native`, // Faster execution using native + `--no-telemetry`, + `--no-prometheus`, + `--dev`, + `--ethapi=txpool,debug,trace`, + `--sealing=manual`, + `-l${MOONBEAM_LOG}`, + `--port=${p2pPort}`, + `--rpc-port=${rpcPort}`, + `--ws-port=${wsPort}`, + `--tmp`, + ]; + + let runningNode: ChildProcess = null; + process.once("exit", function () { + runningNode && runningNode.kill(); + }); + process.once("SIGINT", function () { + process.exit(2); + }); + runningNode = spawn(cmd, args); + + runningNode.once("exit", () => { + nodeStarted = false; + }); + + runningNode.on("error", (err) => { + if ((err as any).errno == "ENOENT") { + console.error( + `\x1b[31mMissing Moonbeam binary ` + + `(${BINARY_PATH}).\nPlease compile the Moonbeam project\x1b[0m` + ); + } else { + console.error(err); + } + process.exit(1); + }); + + const binaryLogs = []; + await new Promise((resolve) => { + const timer = setTimeout(() => { + console.error(`\x1b[31m Failed to start Moonbeam Test Node.\x1b[0m`); + console.error(`Command: ${cmd} ${args.join(" ")}`); + console.error(`Logs:`); + console.error(binaryLogs.map((chunk) => chunk.toString()).join("\n")); + process.exit(1); + }, SPAWNING_TIME - 2000); + + const onData = async (chunk) => { + if (DISPLAY_LOG) { + console.log(chunk.toString()); + } + binaryLogs.push(chunk); + if (chunk.toString().match(/Development Service Ready/)) { + clearTimeout(timer); + if (!DISPLAY_LOG) { + runningNode.stderr.off("data", onData); + runningNode.stdout.off("data", onData); + } + resolve(); + } + }; + runningNode.stderr.on("data", onData); + runningNode.stdout.on("data", onData); + }); + + return { p2pPort, rpcPort, wsPort, runningNode }; +} diff --git a/tests/util/providers.ts b/tests/util/providers.ts index ce4e91c0bc0..a15829d3387 100644 --- a/tests/util/providers.ts +++ b/tests/util/providers.ts @@ -1,84 +1,84 @@ -import Web3 from "web3"; -import { ApiPromise, WsProvider } from "@polkadot/api"; -import { typesBundle } from "../../moonbeam-types-bundle"; -import { JsonRpcResponse } from "web3-core-helpers"; -import { ethers } from "ethers"; -import { GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import { Subscription as Web3Subscription } from "web3-core-subscriptions"; -import { BlockHeader } from "web3-eth"; -import { Log } from "web3-core"; - -export async function customWeb3Request(web3: Web3, method: string, params: any[]) { - return new Promise((resolve, reject) => { - (web3.currentProvider as any).send( - { - jsonrpc: "2.0", - id: 1, - method, - params, - }, - (error: Error | null, result?: JsonRpcResponse) => { - if (error) { - reject( - `Failed to send custom request (${method} (${params.join(",")})): ${ - error.message || error.toString() - }` - ); - } - resolve(result); - } - ); - }); -} - -// Extra type because web3 is not well typed -export interface Subscription extends Web3Subscription { - once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; -} - -// Little helper to hack web3 that are not complete. -export function web3Subscribe(web3: Web3, type: "newBlockHeaders"): Subscription; -export function web3Subscribe(web3: Web3, type: "pendingTransactions"): Subscription; -export function web3Subscribe(web3: Web3, type: "logs", params: {}): Subscription; -export function web3Subscribe( - web3: Web3, - type: "newBlockHeaders" | "pendingTransactions" | "logs", - params?: any -) { - return (web3.eth as any).subscribe(...[].slice.call(arguments, 1)); -} - -export type EnhancedWeb3 = Web3 & { - customRequest: (method: string, params: any[]) => Promise; -}; - -export const provideWeb3Api = async (port: number, protocol: "ws" | "http" = "http") => { - const web3 = - protocol == "ws" - ? new Web3(`ws://localhost:${port}`) // TODO: restore support for - : new Web3(`http://localhost:${port}`); - - // Adding genesis account for convenience - web3.eth.accounts.wallet.add(GENESIS_ACCOUNT_PRIVATE_KEY); - - // Hack to add customRequest method. - (web3 as any).customRequest = (method: string, params: any[]) => - customWeb3Request(web3, method, params); - - return web3 as EnhancedWeb3; -}; - -export const providePolkadotApi = async (port: number) => { - const provider = new WsProvider(`ws://localhost:${port}`); - return { - provider, - apiPromise: await ApiPromise.create({ - provider: provider, - typesBundle: typesBundle as any, - }), - }; -}; - -export const provideEthersApi = async (port: number) => { - return new ethers.providers.JsonRpcProvider(`http://localhost:${port}`); -}; +import Web3 from "web3"; +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { typesBundle } from "../../moonbeam-types-bundle"; +import { JsonRpcResponse } from "web3-core-helpers"; +import { ethers } from "ethers"; +import { GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import { Subscription as Web3Subscription } from "web3-core-subscriptions"; +import { BlockHeader } from "web3-eth"; +import { Log } from "web3-core"; + +export async function customWeb3Request(web3: Web3, method: string, params: any[]) { + return new Promise((resolve, reject) => { + (web3.currentProvider as any).send( + { + jsonrpc: "2.0", + id: 1, + method, + params, + }, + (error: Error | null, result?: JsonRpcResponse) => { + if (error) { + reject( + `Failed to send custom request (${method} (${params.join(",")})): ${ + error.message || error.toString() + }` + ); + } + resolve(result); + } + ); + }); +} + +// Extra type because web3 is not well typed +export interface Subscription extends Web3Subscription { + once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; +} + +// Little helper to hack web3 that are not complete. +export function web3Subscribe(web3: Web3, type: "newBlockHeaders"): Subscription; +export function web3Subscribe(web3: Web3, type: "pendingTransactions"): Subscription; +export function web3Subscribe(web3: Web3, type: "logs", params: {}): Subscription; +export function web3Subscribe( + web3: Web3, + type: "newBlockHeaders" | "pendingTransactions" | "logs", + params?: any +) { + return (web3.eth as any).subscribe(...[].slice.call(arguments, 1)); +} + +export type EnhancedWeb3 = Web3 & { + customRequest: (method: string, params: any[]) => Promise; +}; + +export const provideWeb3Api = async (port: number, protocol: "ws" | "http" = "http") => { + const web3 = + protocol == "ws" + ? new Web3(`ws://localhost:${port}`) // TODO: restore support for + : new Web3(`http://localhost:${port}`); + + // Adding genesis account for convenience + web3.eth.accounts.wallet.add(GENESIS_ACCOUNT_PRIVATE_KEY); + + // Hack to add customRequest method. + (web3 as any).customRequest = (method: string, params: any[]) => + customWeb3Request(web3, method, params); + + return web3 as EnhancedWeb3; +}; + +export const providePolkadotApi = async (port: number) => { + const provider = new WsProvider(`ws://localhost:${port}`); + return { + provider, + apiPromise: await ApiPromise.create({ + provider: provider, + typesBundle: typesBundle as any, + }), + }; +}; + +export const provideEthersApi = async (port: number) => { + return new ethers.providers.JsonRpcProvider(`http://localhost:${port}`); +}; diff --git a/tests/util/setup-dev-tests.ts b/tests/util/setup-dev-tests.ts index e82da4365d0..72f106ec64c 100644 --- a/tests/util/setup-dev-tests.ts +++ b/tests/util/setup-dev-tests.ts @@ -1,114 +1,114 @@ -import { ApiPromise, WsProvider } from "@polkadot/api"; -import { JsonRpcResponse } from "web3-core-helpers"; -import { BlockHash } from "@polkadot/types/interfaces/chain"; -import { ethers } from "ethers"; -import { startMoonbeamDevNode } from "./dev-node"; -import { - provideWeb3Api, - provideEthersApi, - providePolkadotApi, - EnhancedWeb3, - customWeb3Request, -} from "./providers"; -import { ChildProcess } from "child_process"; -import { createAndFinalizeBlock } from "./block"; -import { SPAWNING_TIME } from "./constants"; - -export interface BlockCreation { - parentHash?: BlockHash; - finalize?: boolean; - transactions?: string[]; -} - -export interface DevTestContext { - createWeb3: (protocol?: "ws" | "http") => Promise; - createEthers: () => Promise; - createPolkadotApi: () => Promise; - - createBlock: ( - options?: BlockCreation - ) => Promise<{ - txResults: JsonRpcResponse[]; - block: { - duration: number; - hash: BlockHash; - }; - }>; - - // We also provided singleton providers for simplicity - web3: EnhancedWeb3; - ethers: ethers.providers.JsonRpcProvider; - polkadotApi: ApiPromise; - - moonbeamProcess: ChildProcess; -} - -interface InternalDevTestContext extends DevTestContext { - polkadotWsProviders: WsProvider[]; - - // Internal member to keep track of web3 singleton - _polkadotApi: EnhancedWeb3; -} - -export function describeDevMoonbeam(title: string, cb: (context: DevTestContext) => void) { - describe(title, function () { - // Set timeout to 5000 for all tests. - this.timeout(5000); - - // The context is initialized empty to allow passing a reference - // and to be filled once the node information is retrieved - let context: InternalDevTestContext = {} as InternalDevTestContext; - - // Making sure the Moonbeam node has started - before("Starting Moonbeam Test Node", async function () { - this.timeout(SPAWNING_TIME); - const init = await startMoonbeamDevNode(); - // Context is given prior to this assignement, so doing - // context = init.context will fail because it replace the variable; - - context.polkadotWsProviders = []; - context.moonbeamProcess = init.runningNode; - - context.createWeb3 = async (protocol: "ws" | "http" = "http") => - protocol == "ws" ? provideWeb3Api(init.wsPort, "ws") : provideWeb3Api(init.rpcPort, "http"); - context.createEthers = async () => provideEthersApi(init.rpcPort); - context.createPolkadotApi = async () => { - const { provider, apiPromise } = await providePolkadotApi(init.wsPort); - // We keep track of the polkadotWsProvider to close them at the end of the test - if (!context.polkadotWsProviders) { - context.polkadotWsProviders = []; - } - context.polkadotWsProviders.push(provider); - return apiPromise; - }; - - context.web3 = await context.createWeb3(); - context.ethers = await context.createEthers(); - context.polkadotApi = await context.createPolkadotApi(); - - context.createBlock = async (options: BlockCreation = {}) => { - let { parentHash, finalize, transactions = [] } = options; - - let txResults = await Promise.all( - transactions.map((t) => customWeb3Request(context.web3, "eth_sendRawTransaction", [t])) - ); - const block = await createAndFinalizeBlock(context.polkadotApi, parentHash, finalize); - return { - txResults, - block, - }; - }; - }); - - after(async function () { - // console.log(`\x1b[31m Killing RPC\x1b[0m`); - if (context.polkadotWsProviders) { - context.polkadotWsProviders.forEach((p) => p.disconnect()); - } - context.moonbeamProcess.kill(); - context.moonbeamProcess = null; - }); - - cb(context); - }); -} +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { JsonRpcResponse } from "web3-core-helpers"; +import { BlockHash } from "@polkadot/types/interfaces/chain"; +import { ethers } from "ethers"; +import { startMoonbeamDevNode } from "./dev-node"; +import { + provideWeb3Api, + provideEthersApi, + providePolkadotApi, + EnhancedWeb3, + customWeb3Request, +} from "./providers"; +import { ChildProcess } from "child_process"; +import { createAndFinalizeBlock } from "./block"; +import { SPAWNING_TIME } from "./constants"; + +export interface BlockCreation { + parentHash?: BlockHash; + finalize?: boolean; + transactions?: string[]; +} + +export interface DevTestContext { + createWeb3: (protocol?: "ws" | "http") => Promise; + createEthers: () => Promise; + createPolkadotApi: () => Promise; + + createBlock: ( + options?: BlockCreation + ) => Promise<{ + txResults: JsonRpcResponse[]; + block: { + duration: number; + hash: BlockHash; + }; + }>; + + // We also provided singleton providers for simplicity + web3: EnhancedWeb3; + ethers: ethers.providers.JsonRpcProvider; + polkadotApi: ApiPromise; + + moonbeamProcess: ChildProcess; +} + +interface InternalDevTestContext extends DevTestContext { + polkadotWsProviders: WsProvider[]; + + // Internal member to keep track of web3 singleton + _polkadotApi: EnhancedWeb3; +} + +export function describeDevMoonbeam(title: string, cb: (context: DevTestContext) => void) { + describe(title, function () { + // Set timeout to 5000 for all tests. + this.timeout(5000); + + // The context is initialized empty to allow passing a reference + // and to be filled once the node information is retrieved + let context: InternalDevTestContext = {} as InternalDevTestContext; + + // Making sure the Moonbeam node has started + before("Starting Moonbeam Test Node", async function () { + this.timeout(SPAWNING_TIME); + const init = await startMoonbeamDevNode(); + // Context is given prior to this assignement, so doing + // context = init.context will fail because it replace the variable; + + context.polkadotWsProviders = []; + context.moonbeamProcess = init.runningNode; + + context.createWeb3 = async (protocol: "ws" | "http" = "http") => + protocol == "ws" ? provideWeb3Api(init.wsPort, "ws") : provideWeb3Api(init.rpcPort, "http"); + context.createEthers = async () => provideEthersApi(init.rpcPort); + context.createPolkadotApi = async () => { + const { provider, apiPromise } = await providePolkadotApi(init.wsPort); + // We keep track of the polkadotWsProvider to close them at the end of the test + if (!context.polkadotWsProviders) { + context.polkadotWsProviders = []; + } + context.polkadotWsProviders.push(provider); + return apiPromise; + }; + + context.web3 = await context.createWeb3(); + context.ethers = await context.createEthers(); + context.polkadotApi = await context.createPolkadotApi(); + + context.createBlock = async (options: BlockCreation = {}) => { + let { parentHash, finalize, transactions = [] } = options; + + let txResults = await Promise.all( + transactions.map((t) => customWeb3Request(context.web3, "eth_sendRawTransaction", [t])) + ); + const block = await createAndFinalizeBlock(context.polkadotApi, parentHash, finalize); + return { + txResults, + block, + }; + }; + }); + + after(async function () { + // console.log(`\x1b[31m Killing RPC\x1b[0m`); + if (context.polkadotWsProviders) { + context.polkadotWsProviders.forEach((p) => p.disconnect()); + } + context.moonbeamProcess.kill(); + context.moonbeamProcess = null; + }); + + cb(context); + }); +} From 51baddaa8a7f132b0b824af5c623f903d1ec5ac9 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 19 Apr 2021 05:19:34 +0000 Subject: [PATCH 48/49] Limit concurrency to half cpus for ts tests --- .github/workflows/release.yml | 4 ++-- tests/tests/test-event.ts | 1 - tests/util/setup-dev-tests.ts | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 75b4afaaaac..4eb48c08841 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -102,7 +102,7 @@ jobs: with: node-version: 14.x - name: Check with Prettier - run: npx prettier --check --ignore-path .gitignore '**/*.(yml|js|ts|json)' + run: npx prettier --check --ignore-path .gitignore --ignore-path tests/contracts '**/*.(yml|js|ts|json)' ####### Building and Testing binaries ####### @@ -176,7 +176,7 @@ jobs: npm install cd ../tests npm install - npm run test; + npm run test -- -j $(($(nproc) / 2)); - name: Save parachain binary run: | mkdir -p build diff --git a/tests/tests/test-event.ts b/tests/tests/test-event.ts index 74a38461c38..510fb424501 100644 --- a/tests/tests/test-event.ts +++ b/tests/tests/test-event.ts @@ -12,7 +12,6 @@ describeDevMoonbeam("Event - Contract", (context) => { const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); expect(receipt.logs.length).to.be.eq(1); - console.log(receipt.logs); expect( "0x" + receipt.logs[0].topics[1].substring(26, receipt.logs[0].topics[1].length + 1) ).to.be.eq(GENESIS_ACCOUNT); diff --git a/tests/util/setup-dev-tests.ts b/tests/util/setup-dev-tests.ts index 72f106ec64c..4c0f73226cf 100644 --- a/tests/util/setup-dev-tests.ts +++ b/tests/util/setup-dev-tests.ts @@ -79,6 +79,7 @@ export function describeDevMoonbeam(title: string, cb: (context: DevTestContext) context.polkadotWsProviders = []; } context.polkadotWsProviders.push(provider); + await apiPromise.isReady; return apiPromise; }; @@ -103,7 +104,7 @@ export function describeDevMoonbeam(title: string, cb: (context: DevTestContext) after(async function () { // console.log(`\x1b[31m Killing RPC\x1b[0m`); if (context.polkadotWsProviders) { - context.polkadotWsProviders.forEach((p) => p.disconnect()); + await Promise.all(context.polkadotWsProviders.map((p) => p.disconnect())); } context.moonbeamProcess.kill(); context.moonbeamProcess = null; From 001966764fa82d1ebb791c948f9032f9b0062842 Mon Sep 17 00:00:00 2001 From: Crystalin Date: Mon, 19 Apr 2021 05:50:56 +0000 Subject: [PATCH 49/49] Fixes github action typo --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4eb48c08841..707c380b6e0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -102,7 +102,7 @@ jobs: with: node-version: 14.x - name: Check with Prettier - run: npx prettier --check --ignore-path .gitignore --ignore-path tests/contracts '**/*.(yml|js|ts|json)' + run: npx prettier --check --ignore-path .gitignore '**/*.(yml|js|ts|json)' ####### Building and Testing binaries #######