diff --git a/package-lock.json b/package-lock.json index 7b48382ac..3dfc4db4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19807,6 +19807,7 @@ "license": "MIT", "dependencies": { "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", "cbor": "^9.0.0", "debug": "^4.3.2", "ethers": "^6.7.0", diff --git a/packages/core/package.json b/packages/core/package.json index 4c2dd82cc..619096662 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -52,6 +52,7 @@ }, "dependencies": { "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", "cbor": "^9.0.0", "debug": "^4.3.2", "ethers": "^6.7.0", diff --git a/packages/core/src/verify.ts b/packages/core/src/verify.ts index adcb9630a..10b50ea0c 100644 --- a/packages/core/src/verify.ts +++ b/packages/core/src/verify.ts @@ -1,3 +1,6 @@ +import { analyze } from "@nomicfoundation/solidity-analyzer"; +import path from "path"; + import { IgnitionError } from "./errors"; import { builtinChains } from "./internal/chain-config"; import { FileDeploymentLoader } from "./internal/deployment-loader/file-deployment-loader"; @@ -13,7 +16,7 @@ import { } from "./internal/execution/types/execution-state"; import { assertIgnitionInvariant } from "./internal/utils/assertions"; import { findExecutionStatesByType } from "./internal/views/find-execution-states-by-type"; -import { Artifact, BuildInfo } from "./types/artifact"; +import { Artifact, BuildInfo, CompilerInput } from "./types/artifact"; import { ChainConfig, SourceToLibraryToAddress, @@ -30,7 +33,8 @@ import { */ export async function* getVerificationInformation( deploymentDir: string, - customChains: ChainConfig[] = [] + customChains: ChainConfig[] = [], + includeUnrelatedContracts = false ): AsyncGenerator { const deploymentLoader = new FileDeploymentLoader(deploymentDir); @@ -58,7 +62,8 @@ export async function* getVerificationInformation( for (const exState of deploymentExStates) { const verifyInfo = await convertExStateToVerifyInfo( exState, - deploymentLoader + deploymentLoader, + includeUnrelatedContracts ); const verifyResult: VerifyResult = [chainConfig, verifyInfo]; @@ -87,9 +92,31 @@ function resolveChainConfig( return chainConfig; } +function getImportSourceNames( + sourceName: string, + buildInfo: BuildInfo +): string[] { + const contractSource = buildInfo.input.sources[sourceName].content; + const { imports } = analyze(contractSource); + + const importSources = imports.map((i) => { + if (/^\.\.?[\/|\\]/.test(i)) { + return path.join(path.dirname(sourceName), i).replaceAll("\\", "/"); + } + + return i; + }); + + return [ + ...importSources, + ...importSources.flatMap((i) => getImportSourceNames(i, buildInfo)), + ]; +} + async function convertExStateToVerifyInfo( exState: DeploymentExecutionState, - deploymentLoader: FileDeploymentLoader + deploymentLoader: FileDeploymentLoader, + includeUnrelatedContracts: boolean = false ) { const [buildInfo, artifact] = await Promise.all([ deploymentLoader.readBuildInfo(exState.artifactId), @@ -104,12 +131,27 @@ async function convertExStateToVerifyInfo( `Deployment execution state ${exState.id} should have a successful result to retrieve address` ); + const sourceCode = prepareInputBasedOn(buildInfo, artifact, libraries); + + if (!includeUnrelatedContracts) { + const sourceNames = [ + artifact.sourceName, + ...getImportSourceNames(artifact.sourceName, buildInfo), + ]; + + for (const source of Object.keys(sourceCode.sources)) { + if (!sourceNames.includes(source)) { + delete sourceCode.sources[source]; + } + } + } + const verifyInfo = { address: exState.result.address, compilerVersion: buildInfo.solcLongVersion.startsWith("v") ? buildInfo.solcLongVersion : `v${buildInfo.solcLongVersion}`, - sourceCode: prepareInputBasedOn(buildInfo, artifact, libraries), + sourceCode: JSON.stringify(sourceCode), name: `${artifact.sourceName}:${contractName}`, args: encodeDeploymentArguments(artifact, constructorArgs), }; @@ -121,20 +163,20 @@ function prepareInputBasedOn( buildInfo: BuildInfo, artifact: Artifact, libraries: Record -): string { +): CompilerInput { const sourceToLibraryAddresses = resolveLibraryInfoForArtifact( artifact, libraries ); if (sourceToLibraryAddresses === null) { - return JSON.stringify(buildInfo.input); + return buildInfo.input; } const { input } = buildInfo; input.settings.libraries = sourceToLibraryAddresses; - return JSON.stringify(input); + return input; } function resolveLibraryInfoForArtifact( diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.dbg.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.dbg.json new file mode 100644 index 000000000..73e30e381 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/5a5467b3a2cddf6ce0f79584095e02d2.json" +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.json new file mode 100644 index 000000000..9bf91a293 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestA.json @@ -0,0 +1,49 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestA", + "sourceName": "contracts/TestA.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_b", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161025c38038061025c833981810160405281019061003291906100f6565b8173__$9fa3a4b36eea03935ac7879fed7cda438e$__63cad0899b9091836040518363ffffffff1660e01b815260040161006d929190610145565b602060405180830381865af415801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae919061016e565b600081905550505061019b565b600080fd5b6000819050919050565b6100d3816100c0565b81146100de57600080fd5b50565b6000815190506100f0816100ca565b92915050565b6000806040838503121561010d5761010c6100bb565b5b600061011b858286016100e1565b925050602061012c858286016100e1565b9150509250929050565b61013f816100c0565b82525050565b600060408201905061015a6000830185610136565b6101676020830184610136565b9392505050565b600060208284031215610184576101836100bb565b5b6000610192848285016100e1565b91505092915050565b60b3806101a96000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063853255cc14602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005481565b6000819050919050565b605e81604d565b82525050565b6000602082019050607760008301846057565b9291505056fea2646970667358221220ed8950fa3d7184d2692eb6136b1815845d0f7c330e78b5948e12f2e35fd9b24564736f6c63430008130033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063853255cc14602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005481565b6000819050919050565b605e81604d565b82525050565b6000602082019050607760008301846057565b9291505056fea2646970667358221220ed8950fa3d7184d2692eb6136b1815845d0f7c330e78b5948e12f2e35fd9b24564736f6c63430008130033", + "linkReferences": { + "contracts/TestB.sol": { + "TestB": [ + { + "length": 20, + "start": 53 + } + ] + } + }, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.dbg.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.dbg.json new file mode 100644 index 000000000..73e30e381 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/5a5467b3a2cddf6ce0f79584095e02d2.json" +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.json new file mode 100644 index 000000000..83d7b1f6b --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestB.json @@ -0,0 +1,69 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestB", + "sourceName": "contracts/TestB.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x6102ad610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906101a2565b61006a565b60405161006191906101f1565b60405180910390f35b600073__$a77b74ebd34224ac3c3a582e4bc24622f4$__63cad0899b8473__$3fa06892d414312f70326060dfc06e0087$__63cad0899b87876040518363ffffffff1660e01b81526004016100c092919061020c565b602060405180830381865af41580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061024a565b6040518363ffffffff1660e01b815260040161011e92919061020c565b602060405180830381865af415801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f919061024a565b905092915050565b600080fd5b6000819050919050565b61017f8161016c565b811461018a57600080fd5b50565b60008135905061019c81610176565b92915050565b600080604083850312156101b9576101b8610167565b5b60006101c78582860161018d565b92505060206101d88582860161018d565b9150509250929050565b6101eb8161016c565b82525050565b600060208201905061020660008301846101e2565b92915050565b600060408201905061022160008301856101e2565b61022e60208301846101e2565b9392505050565b60008151905061024481610176565b92915050565b6000602082840312156102605761025f610167565b5b600061026e84828501610235565b9150509291505056fea264697066735822122056e067cbff0f6f4b44115fa7c682e899221992ed439b30cd21e26a9ad4faac2664736f6c63430008130033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906101a2565b61006a565b60405161006191906101f1565b60405180910390f35b600073__$a77b74ebd34224ac3c3a582e4bc24622f4$__63cad0899b8473__$3fa06892d414312f70326060dfc06e0087$__63cad0899b87876040518363ffffffff1660e01b81526004016100c092919061020c565b602060405180830381865af41580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061024a565b6040518363ffffffff1660e01b815260040161011e92919061020c565b602060405180830381865af415801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f919061024a565b905092915050565b600080fd5b6000819050919050565b61017f8161016c565b811461018a57600080fd5b50565b60008135905061019c81610176565b92915050565b600080604083850312156101b9576101b8610167565b5b60006101c78582860161018d565b92505060206101d88582860161018d565b9150509250929050565b6101eb8161016c565b82525050565b600060208201905061020660008301846101e2565b92915050565b600060408201905061022160008301856101e2565b61022e60208301846101e2565b9392505050565b60008151905061024481610176565b92915050565b6000602082840312156102605761025f610167565b5b600061026e84828501610235565b9150509291505056fea264697066735822122056e067cbff0f6f4b44115fa7c682e899221992ed439b30cd21e26a9ad4faac2664736f6c63430008130033", + "linkReferences": { + "contracts/TestC.sol": { + "TestC": [ + { + "length": 20, + "start": 193 + } + ] + }, + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 220 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/TestC.sol": { + "TestC": [ + { + "length": 20, + "start": 110 + } + ] + }, + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 137 + } + ] + } + } +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.dbg.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.dbg.json new file mode 100644 index 000000000..73e30e381 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/5a5467b3a2cddf6ce0f79584095e02d2.json" +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.json new file mode 100644 index 000000000..77824bb07 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestC.json @@ -0,0 +1,53 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestC", + "sourceName": "contracts/TestC.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x610234610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f9190610129565b61006a565b6040516100619190610178565b60405180910390f35b600073__$3fa06892d414312f70326060dfc06e0087$__63cad0899b84846040518363ffffffff1660e01b81526004016100a5929190610193565b602060405180830381865af41580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101d1565b905092915050565b600080fd5b6000819050919050565b610106816100f3565b811461011157600080fd5b50565b600081359050610123816100fd565b92915050565b600080604083850312156101405761013f6100ee565b5b600061014e85828601610114565b925050602061015f85828601610114565b9150509250929050565b610172816100f3565b82525050565b600060208201905061018d6000830184610169565b92915050565b60006040820190506101a86000830185610169565b6101b56020830184610169565b9392505050565b6000815190506101cb816100fd565b92915050565b6000602082840312156101e7576101e66100ee565b5b60006101f5848285016101bc565b9150509291505056fea264697066735822122024415ac821281eba4a04ac4443e09eab95a2381de7e62a3a62fe726c54e8a3d764736f6c63430008130033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f9190610129565b61006a565b6040516100619190610178565b60405180910390f35b600073__$3fa06892d414312f70326060dfc06e0087$__63cad0899b84846040518363ffffffff1660e01b81526004016100a5929190610193565b602060405180830381865af41580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101d1565b905092915050565b600080fd5b6000819050919050565b610106816100f3565b811461011157600080fd5b50565b600081359050610123816100fd565b92915050565b600080604083850312156101405761013f6100ee565b5b600061014e85828601610114565b925050602061015f85828601610114565b9150509250929050565b610172816100f3565b82525050565b600060208201905061018d6000830184610169565b92915050565b60006040820190506101a86000830185610169565b6101b56020830184610169565b9392505050565b6000815190506101cb816100fd565b92915050565b6000602082840312156101e7576101e66100ee565b5b60006101f5848285016101bc565b9150509291505056fea264697066735822122024415ac821281eba4a04ac4443e09eab95a2381de7e62a3a62fe726c54e8a3d764736f6c63430008130033", + "linkReferences": { + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 193 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 110 + } + ] + } + } +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.dbg.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.dbg.json new file mode 100644 index 000000000..73e30e381 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/5a5467b3a2cddf6ce0f79584095e02d2.json" +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.json b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.json new file mode 100644 index 000000000..bc8c268b2 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/artifacts/LockModule#TestD.json @@ -0,0 +1,35 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestD", + "sourceName": "contracts/TestD.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x6101be610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b925082820190508082111561018257610181610125565b5b9291505056fea2646970667358221220132f489f22fe1764834a50b94361c88c1986db1d16da50230adbb6f8364226fe64736f6c63430008130033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b925082820190508082111561018257610181610125565b5b9291505056fea2646970667358221220132f489f22fe1764834a50b94361c88c1986db1d16da50230adbb6f8364226fe64736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/build-info/5a5467b3a2cddf6ce0f79584095e02d2.json b/packages/core/test/mocks/verify/min-input/build-info/5a5467b3a2cddf6ce0f79584095e02d2.json new file mode 100644 index 000000000..9d81c4d15 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/build-info/5a5467b3a2cddf6ce0f79584095e02d2.json @@ -0,0 +1,6447 @@ +{ + "id": "5a5467b3a2cddf6ce0f79584095e02d2", + "_format": "hh-sol-build-info-1", + "solcVersion": "0.8.19", + "solcLongVersion": "0.8.19+commit.7dd6d404", + "input": { + "language": "Solidity", + "sources": { + "contracts/TestA.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\n// a;slkdjfalfdsa\npragma solidity ^0.8.9;\n\nimport \"./TestB.sol\";\n\nusing TestB for uint;\n\ncontract TestA {\n uint public sum;\n\n constructor(uint _a, uint _b) {\n sum = _a.sum(_b);\n }\n}\n" + }, + "contracts/TestB.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\n// asdffdsa\npragma solidity ^0.8.9;\n\nimport \"./TestC.sol\";\nimport \"./TestD.sol\";\n\nlibrary TestB {\n function sum(uint a, uint b) public pure returns (uint) {\n return TestC.sum(a, TestD.sum(a, b));\n }\n}\n" + }, + "contracts/TestC.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.9;\n\nimport \"./TestD.sol\";\n\nlibrary TestC {\n function sum(uint a, uint b) public pure returns (uint) {\n return TestD.sum(a, b);\n }\n}\n" + }, + "contracts/TestD.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.9;\n\nlibrary TestD {\n function sum(uint a, uint b) public pure returns (uint) {\n return a + b;\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "output": { + "sources": { + "contracts/TestA.sol": { + "ast": { + "absolutePath": "contracts/TestA.sol", + "exportedSymbols": { + "TestA": [ + 23 + ], + "TestB": [ + 48 + ], + "TestC": [ + 68 + ], + "TestD": [ + 85 + ] + }, + "id": 24, + "license": "UNLICENSED", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.8", + ".9" + ], + "nodeType": "PragmaDirective", + "src": "57:23:0" + }, + { + "absolutePath": "contracts/TestB.sol", + "file": "./TestB.sol", + "id": 2, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 24, + "sourceUnit": 49, + "src": "82:21:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "global": false, + "id": 5, + "libraryName": { + "id": 3, + "name": "TestB", + "nameLocations": [ + "111:5:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48, + "src": "111:5:0" + }, + "nodeType": "UsingForDirective", + "src": "105:21:0", + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "121:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "TestA", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 23, + "linearizedBaseContracts": [ + 23 + ], + "name": "TestA", + "nameLocation": "137:5:0", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "functionSelector": "853255cc", + "id": 7, + "mutability": "mutable", + "name": "sum", + "nameLocation": "159:3:0", + "nodeType": "VariableDeclaration", + "scope": 23, + "src": "147:15:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "147:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "body": { + "id": 21, + "nodeType": "Block", + "src": "197:27:0", + "statements": [ + { + "expression": { + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "203:3:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 17, + "name": "_b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11, + "src": "216:2:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15, + "name": "_a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9, + "src": "209:2:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "212:3:0", + "memberName": "sum", + "nodeType": "MemberAccess", + "referencedDeclaration": 47, + "src": "209:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 18, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "209:10:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "203:16:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 20, + "nodeType": "ExpressionStatement", + "src": "203:16:0" + } + ] + }, + "id": 22, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9, + "mutability": "mutable", + "name": "_a", + "nameLocation": "184:2:0", + "nodeType": "VariableDeclaration", + "scope": 22, + "src": "179:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "179:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11, + "mutability": "mutable", + "name": "_b", + "nameLocation": "193:2:0", + "nodeType": "VariableDeclaration", + "scope": 22, + "src": "188:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "188:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "178:18:0" + }, + "returnParameters": { + "id": 13, + "nodeType": "ParameterList", + "parameters": [], + "src": "197:0:0" + }, + "scope": 23, + "src": "167:57:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 24, + "src": "128:98:0", + "usedErrors": [] + } + ], + "src": "57:170:0" + }, + "id": 0 + }, + "contracts/TestB.sol": { + "ast": { + "absolutePath": "contracts/TestB.sol", + "exportedSymbols": { + "TestB": [ + 48 + ], + "TestC": [ + 68 + ], + "TestD": [ + 85 + ] + }, + "id": 49, + "license": "UNLICENSED", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 25, + "literals": [ + "solidity", + "^", + "0.8", + ".9" + ], + "nodeType": "PragmaDirective", + "src": "51:23:1" + }, + { + "absolutePath": "contracts/TestC.sol", + "file": "./TestC.sol", + "id": 26, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 49, + "sourceUnit": 69, + "src": "76:21:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/TestD.sol", + "file": "./TestD.sol", + "id": 27, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 49, + "sourceUnit": 86, + "src": "98:21:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "TestB", + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 48, + "linearizedBaseContracts": [ + 48 + ], + "name": "TestB", + "nameLocation": "129:5:1", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 46, + "nodeType": "Block", + "src": "195:47:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 38, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 29, + "src": "218:1:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 41, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 29, + "src": "231:1:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 42, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 31, + "src": "234:1:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 39, + "name": "TestD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "221:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TestD_$85_$", + "typeString": "type(library TestD)" + } + }, + "id": 40, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "227:3:1", + "memberName": "sum", + "nodeType": "MemberAccess", + "referencedDeclaration": 84, + "src": "221:9:1", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 43, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "221:15:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 36, + "name": "TestC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "208:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TestC_$68_$", + "typeString": "type(library TestC)" + } + }, + "id": 37, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "214:3:1", + "memberName": "sum", + "nodeType": "MemberAccess", + "referencedDeclaration": 67, + "src": "208:9:1", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 44, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "208:29:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 35, + "id": 45, + "nodeType": "Return", + "src": "201:36:1" + } + ] + }, + "functionSelector": "cad0899b", + "id": 47, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sum", + "nameLocation": "148:3:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 32, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 29, + "mutability": "mutable", + "name": "a", + "nameLocation": "157:1:1", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "152:6:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 28, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "152:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 31, + "mutability": "mutable", + "name": "b", + "nameLocation": "165:1:1", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "160:6:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 30, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "160:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "151:16:1" + }, + "returnParameters": { + "id": 35, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 34, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "189:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 33, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "189:4:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "188:6:1" + }, + "scope": 48, + "src": "139:103:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "scope": 49, + "src": "121:123:1", + "usedErrors": [] + } + ], + "src": "51:194:1" + }, + "id": 1 + }, + "contracts/TestC.sol": { + "ast": { + "absolutePath": "contracts/TestC.sol", + "exportedSymbols": { + "TestC": [ + 68 + ], + "TestD": [ + 85 + ] + }, + "id": 69, + "license": "UNLICENSED", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 50, + "literals": [ + "solidity", + "^", + "0.8", + ".9" + ], + "nodeType": "PragmaDirective", + "src": "39:23:2" + }, + { + "absolutePath": "contracts/TestD.sol", + "file": "./TestD.sol", + "id": 51, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 69, + "sourceUnit": 86, + "src": "64:21:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "TestC", + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 68, + "linearizedBaseContracts": [ + 68 + ], + "name": "TestC", + "nameLocation": "95:5:2", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 66, + "nodeType": "Block", + "src": "161:33:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53, + "src": "184:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 55, + "src": "187:1:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60, + "name": "TestD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "174:5:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TestD_$85_$", + "typeString": "type(library TestD)" + } + }, + "id": 61, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "180:3:2", + "memberName": "sum", + "nodeType": "MemberAccess", + "referencedDeclaration": 84, + "src": "174:9:2", + "typeDescriptions": { + "typeIdentifier": "t_function_delegatecall_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 64, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "174:15:2", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 59, + "id": 65, + "nodeType": "Return", + "src": "167:22:2" + } + ] + }, + "functionSelector": "cad0899b", + "id": 67, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sum", + "nameLocation": "114:3:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 56, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 53, + "mutability": "mutable", + "name": "a", + "nameLocation": "123:1:2", + "nodeType": "VariableDeclaration", + "scope": 67, + "src": "118:6:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 52, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "118:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 55, + "mutability": "mutable", + "name": "b", + "nameLocation": "131:1:2", + "nodeType": "VariableDeclaration", + "scope": 67, + "src": "126:6:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 54, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "126:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "117:16:2" + }, + "returnParameters": { + "id": 59, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 67, + "src": "155:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "155:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "154:6:2" + }, + "scope": 68, + "src": "105:89:2", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "scope": 69, + "src": "87:109:2", + "usedErrors": [] + } + ], + "src": "39:158:2" + }, + "id": 2 + }, + "contracts/TestD.sol": { + "ast": { + "absolutePath": "contracts/TestD.sol", + "exportedSymbols": { + "TestD": [ + 85 + ] + }, + "id": 86, + "license": "UNLICENSED", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 70, + "literals": [ + "solidity", + "^", + "0.8", + ".9" + ], + "nodeType": "PragmaDirective", + "src": "39:23:3" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "TestD", + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 85, + "linearizedBaseContracts": [ + 85 + ], + "name": "TestD", + "nameLocation": "72:5:3", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 83, + "nodeType": "Block", + "src": "138:23:3", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 81, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 79, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 72, + "src": "151:1:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 80, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "155:1:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "151:5:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 78, + "id": 82, + "nodeType": "Return", + "src": "144:12:3" + } + ] + }, + "functionSelector": "cad0899b", + "id": 84, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sum", + "nameLocation": "91:3:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 75, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 72, + "mutability": "mutable", + "name": "a", + "nameLocation": "100:1:3", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "95:6:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 71, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "95:4:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 74, + "mutability": "mutable", + "name": "b", + "nameLocation": "108:1:3", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "103:6:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 73, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "103:4:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "94:16:3" + }, + "returnParameters": { + "id": 78, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 77, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "132:4:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 76, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "132:4:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "131:6:3" + }, + "scope": 85, + "src": "82:79:3", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "scope": 86, + "src": "64:99:3", + "usedErrors": [] + } + ], + "src": "39:125:3" + }, + "id": 3 + } + }, + "contracts": { + "contracts/TestA.sol": { + "TestA": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_b", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_22": { + "entryPoint": null, + "id": 22, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 225, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 366, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256_fromMemory": { + "entryPoint": 246, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack_library": { + "entryPoint": 310, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed": { + "entryPoint": 325, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 192, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 187, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 202, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2055:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:4", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:4" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:4" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:4", + "type": "" + } + ], + "src": "7:75:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:4" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:4" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:4", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:4" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:4" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:4", + "type": "" + } + ], + "src": "334:77:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:4" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:4" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:4" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:4" + }, + "nodeType": "YulIf", + "src": "470:63:4" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:4", + "type": "" + } + ], + "src": "417:122:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "608:80:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "618:22:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "633:6:4" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "627:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "627:13:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "618:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "676:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "649:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "649:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "649:33:4" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "586:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "594:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "602:5:4", + "type": "" + } + ], + "src": "545:143:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "788:413:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "834:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "836:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "836:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "836:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "809:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "818:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "805:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "805:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "830:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "801:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "801:32:4" + }, + "nodeType": "YulIf", + "src": "798:119:4" + }, + { + "nodeType": "YulBlock", + "src": "927:128:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "942:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "956:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "946:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "971:74:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1017:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1028:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1013:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1013:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1037:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "981:31:4" + }, + "nodeType": "YulFunctionCall", + "src": "981:64:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "971:6:4" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1065:129:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1080:16:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1094:2:4", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1084:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1110:74:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1156:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1167:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1152:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1152:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1176:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "1120:31:4" + }, + "nodeType": "YulFunctionCall", + "src": "1120:64:4" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1110:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "750:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "761:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "773:6:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "781:6:4", + "type": "" + } + ], + "src": "694:507:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1280:53:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1297:3:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1320:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1302:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1302:24:4" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1290:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1290:37:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1290:37:4" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1268:5:4", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1275:3:4", + "type": "" + } + ], + "src": "1207:126:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1473:222:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1483:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1495:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1506:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1491:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1491:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1483:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1571:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1584:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1595:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1580:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1580:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1519:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1519:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1519:79:4" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1660:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1673:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1684:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1669:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1669:18:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1608:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1608:80:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1608:80:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1437:9:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1449:6:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1457:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1468:4:4", + "type": "" + } + ], + "src": "1339:356:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1778:274:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1824:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1826:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "1826:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1826:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1799:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1808:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1795:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1795:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1820:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1791:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1791:32:4" + }, + "nodeType": "YulIf", + "src": "1788:119:4" + }, + { + "nodeType": "YulBlock", + "src": "1917:128:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1932:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1946:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1936:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1961:74:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2007:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2018:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2003:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2003:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2027:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "1971:31:4" + }, + "nodeType": "YulFunctionCall", + "src": "1971:64:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1961:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1748:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1759:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1771:6:4", + "type": "" + } + ], + "src": "1701:351:4" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\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 function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 4, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": { + "contracts/TestB.sol": { + "TestB": [ + { + "length": 20, + "start": 53 + } + ] + } + }, + "object": "608060405234801561001057600080fd5b5060405161025c38038061025c833981810160405281019061003291906100f6565b8173__$9fa3a4b36eea03935ac7879fed7cda438e$__63cad0899b9091836040518363ffffffff1660e01b815260040161006d929190610145565b602060405180830381865af415801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae919061016e565b600081905550505061019b565b600080fd5b6000819050919050565b6100d3816100c0565b81146100de57600080fd5b50565b6000815190506100f0816100ca565b92915050565b6000806040838503121561010d5761010c6100bb565b5b600061011b858286016100e1565b925050602061012c858286016100e1565b9150509250929050565b61013f816100c0565b82525050565b600060408201905061015a6000830185610136565b6101676020830184610136565b9392505050565b600060208284031215610184576101836100bb565b5b6000610192848285016100e1565b91505092915050565b60b3806101a96000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063853255cc14602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005481565b6000819050919050565b605e81604d565b82525050565b6000602082019050607760008301846057565b9291505056fea2646970667358221220ed8950fa3d7184d2692eb6136b1815845d0f7c330e78b5948e12f2e35fd9b24564736f6c63430008130033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x25C CODESIZE SUB DUP1 PUSH2 0x25C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0xF6 JUMP JUMPDEST DUP2 PUSH20 0x0 PUSH4 0xCAD0899B SWAP1 SWAP2 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6D SWAP3 SWAP2 SWAP1 PUSH2 0x145 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x16E JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP POP PUSH2 0x19B JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD3 DUP2 PUSH2 0xC0 JUMP JUMPDEST DUP2 EQ PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xF0 DUP2 PUSH2 0xCA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10D JUMPI PUSH2 0x10C PUSH2 0xBB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x11B DUP6 DUP3 DUP7 ADD PUSH2 0xE1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x12C DUP6 DUP3 DUP7 ADD PUSH2 0xE1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x13F DUP2 PUSH2 0xC0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x15A PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x136 JUMP JUMPDEST PUSH2 0x167 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x136 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x184 JUMPI PUSH2 0x183 PUSH2 0xBB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x192 DUP5 DUP3 DUP6 ADD PUSH2 0xE1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xB3 DUP1 PUSH2 0x1A9 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 0x853255CC 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 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x4D 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 INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xED DUP10 POP STATICCALL RETURNDATASIZE PUSH18 0x84D2692EB6136B1815845D0F7C330E78B594 DUP15 SLT CALLCODE 0xE3 0x5F 0xD9 0xB2 GASLIMIT PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "128:98:0:-:0;;;167:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;209:2;:6;;;;216:2;209:10;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;203:3;:16;;;;167:57;;128:98;;88:117:4;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:143::-;602:5;633:6;627:13;618:22;;649:33;676:5;649:33;:::i;:::-;545:143;;;;:::o;694:507::-;773:6;781;830:2;818:9;809:7;805:23;801:32;798:119;;;836:79;;:::i;:::-;798:119;956:1;981:64;1037:7;1028:6;1017:9;1013:22;981:64;:::i;:::-;971:74;;927:128;1094:2;1120:64;1176:7;1167:6;1156:9;1152:22;1120:64;:::i;:::-;1110:74;;1065:129;694:507;;;;;:::o;1207:126::-;1302:24;1320:5;1302:24;:::i;:::-;1297:3;1290:37;1207:126;;:::o;1339:356::-;1468:4;1506:2;1495:9;1491:18;1483:26;;1519:79;1595:1;1584:9;1580:17;1571:6;1519:79;:::i;:::-;1608:80;1684:2;1673:9;1669:18;1660:6;1608:80;:::i;:::-;1339:356;;;;;:::o;1701:351::-;1771:6;1820:2;1808:9;1799:7;1795:23;1791:32;1788:119;;;1826:79;;:::i;:::-;1788:119;1946:1;1971:64;2027:7;2018:6;2007:9;2003:22;1971:64;:::i;:::-;1961:74;;1917:128;1701:351;;;;:::o;128:98:0:-;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@sum_7": { + "entryPoint": 71, + "id": 7, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 87, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 100, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 77, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:439:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:4", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:4" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:4" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:4", + "type": "" + } + ], + "src": "7:77:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:4" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:4" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:4" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:4", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:4", + "type": "" + } + ], + "src": "90:118:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:4" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:4" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:4", + "type": "" + } + ], + "src": "214:222:4" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\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}\n", + "id": 4, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c8063853255cc14602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005481565b6000819050919050565b605e81604d565b82525050565b6000602082019050607760008301846057565b9291505056fea2646970667358221220ed8950fa3d7184d2692eb6136b1815845d0f7c330e78b5948e12f2e35fd9b24564736f6c63430008130033", + "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 0x853255CC 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 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x4D 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 INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xED DUP10 POP STATICCALL RETURNDATASIZE PUSH18 0x84D2692EB6136B1815845D0F7C330E78B594 DUP15 SLT CALLCODE 0xE3 0x5F 0xD9 0xB2 GASLIMIT PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "128:98:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;147:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;7:77:4:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o" + }, + "methodIdentifiers": { + "sum()": "853255cc" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"sum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestA.sol\":\"TestA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/TestA.sol\":{\"keccak256\":\"0xb9f1f96829ed58dccc198684fbb7e8cb3ba3864b439865c7f8a21355411c2da1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b0d7f353c4377bf8113ec3fb253199a754aa58490bd22f7bff6161f5d86d2e8a\",\"dweb:/ipfs/QmbuV1wTgMGX7thFEovLF4WEdXNjcdiLr7F9XKV77kJpoj\"]},\"contracts/TestB.sol\":{\"keccak256\":\"0xf5b6e17af4867c11f2f48e4e929d091d4156f3c8cdeb1151384efbdb8d3e389e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b3f4989676b428bc34b5d9431863dfdca25d19a5618014c7d3151b71f88e5a9c\",\"dweb:/ipfs/QmZ6BeYewmMFQX9qcKAwGiEuhTfdg2fssetfLjQy6jESF7\"]},\"contracts/TestC.sol\":{\"keccak256\":\"0xf84c6d15c887fe13a516c2340833e6a8497ddac6413cc753f704edad7a71f2da\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c1bb19fd6492da1b51993000a81a494996529770c9b405950bf7232cdeeab3ac\",\"dweb:/ipfs/QmSvJwVzejz25FavVs4L5txVzCXWf2vt214nVpwfUbMu6Z\"]},\"contracts/TestD.sol\":{\"keccak256\":\"0xad7dc40523312bd056b30ab7adbf5f78e6eba0e74bb8e3db7fd87bd1781bb3fa\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://71e154e92c1374772171d59e553514cbed1b8983d65f7726d63f43b02b62e524\",\"dweb:/ipfs/QmbkH6yVP2fg9ZXhz7k48JwbUmM5yWUguGdNx1JMz1h4wN\"]}},\"version\":1}" + } + }, + "contracts/TestB.sol": { + "TestB": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": { + "contracts/TestC.sol": { + "TestC": [ + { + "length": 20, + "start": 193 + } + ] + }, + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 220 + } + ] + } + }, + "object": "6102ad610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906101a2565b61006a565b60405161006191906101f1565b60405180910390f35b600073__$a77b74ebd34224ac3c3a582e4bc24622f4$__63cad0899b8473__$3fa06892d414312f70326060dfc06e0087$__63cad0899b87876040518363ffffffff1660e01b81526004016100c092919061020c565b602060405180830381865af41580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061024a565b6040518363ffffffff1660e01b815260040161011e92919061020c565b602060405180830381865af415801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f919061024a565b905092915050565b600080fd5b6000819050919050565b61017f8161016c565b811461018a57600080fd5b50565b60008135905061019c81610176565b92915050565b600080604083850312156101b9576101b8610167565b5b60006101c78582860161018d565b92505060206101d88582860161018d565b9150509250929050565b6101eb8161016c565b82525050565b600060208201905061020660008301846101e2565b92915050565b600060408201905061022160008301856101e2565b61022e60208301846101e2565b9392505050565b60008151905061024481610176565b92915050565b6000602082840312156102605761025f610167565b5b600061026e84828501610235565b9150509291505056fea264697066735822122056e067cbff0f6f4b44115fa7c682e899221992ed439b30cd21e26a9ad4faac2664736f6c63430008130033", + "opcodes": "PUSH2 0x2AD PUSH2 0x53 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x46 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0x1A2 JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x1F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0xCAD0899B DUP5 PUSH20 0x0 PUSH4 0xCAD0899B DUP8 DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC0 SWAP3 SWAP2 SWAP1 PUSH2 0x20C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x101 SWAP2 SWAP1 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11E SWAP3 SWAP2 SWAP1 PUSH2 0x20C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x13B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15F SWAP2 SWAP1 PUSH2 0x24A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x17F DUP2 PUSH2 0x16C JUMP JUMPDEST DUP2 EQ PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x19C DUP2 PUSH2 0x176 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B9 JUMPI PUSH2 0x1B8 PUSH2 0x167 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C7 DUP6 DUP3 DUP7 ADD PUSH2 0x18D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1D8 DUP6 DUP3 DUP7 ADD PUSH2 0x18D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1EB DUP2 PUSH2 0x16C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x206 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1E2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x221 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x22E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x244 DUP2 PUSH2 0x176 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x260 JUMPI PUSH2 0x25F PUSH2 0x167 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x26E DUP5 DUP3 DUP6 ADD PUSH2 0x235 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP 0xE0 PUSH8 0xCBFF0F6F4B44115F 0xA7 0xC6 DUP3 0xE8 SWAP10 0x22 NOT SWAP3 0xED NUMBER SWAP12 ADDRESS 0xCD 0x21 0xE2 PUSH11 0x9AD4FAAC2664736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "121:123:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@sum_47": { + "entryPoint": 106, + "id": 47, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 397, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 565, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 586, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256": { + "entryPoint": 418, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack_library": { + "entryPoint": 482, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed": { + "entryPoint": 497, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed": { + "entryPoint": 524, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 364, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 359, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 374, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2411:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:4", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:4" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:4" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:4", + "type": "" + } + ], + "src": "7:75:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:4" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:4" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:4", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:4" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:4" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:4", + "type": "" + } + ], + "src": "334:77:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:4" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:4" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:4" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:4" + }, + "nodeType": "YulIf", + "src": "470:63:4" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:4", + "type": "" + } + ], + "src": "417:122:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:4" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:4" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:4" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:4", + "type": "" + } + ], + "src": "545:139:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "773:391:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "819:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "821:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "821:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "821:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "794:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "803:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "790:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "790:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "815:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "786:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "786:32:4" + }, + "nodeType": "YulIf", + "src": "783:119:4" + }, + { + "nodeType": "YulBlock", + "src": "912:117:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "927:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "941:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "931:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "956:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "991:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1002:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "987:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "987:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1011:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "966:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "966:53:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "956:6:4" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1039:118:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1054:16:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1068:2:4", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1058:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1084:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1119:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1130:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1115:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1115:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1139:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1094:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "1094:53:4" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1084:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "735:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "746:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "758:6:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "766:6:4", + "type": "" + } + ], + "src": "690:474:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1243:53:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1260:3:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1283:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1265:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1265:24:4" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1253:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1253:37:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1253:37:4" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1231:5:4", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1238:3:4", + "type": "" + } + ], + "src": "1170:126:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1408:132:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1418:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1430:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1441:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1426:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1426:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1418:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1506:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1519:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1530:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1515:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1515:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1454:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1454:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1454:79:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1380:9:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1392:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1403:4:4", + "type": "" + } + ], + "src": "1302:238:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1680:222:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1690:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1702:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1713:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1698:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1698:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1690:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1778:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1791:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1802:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1787:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1787:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1726:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1726:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1726:79:4" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1867:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1880:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1891:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1876:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1876:18:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1815:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1815:80:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1815:80:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1644:9:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1656:6:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1664:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1675:4:4", + "type": "" + } + ], + "src": "1546:356:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1971:80:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1981:22:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1996:6:4" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1990:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "1990:13:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1981:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2039:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "2012:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "2012:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "2012:33:4" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1949:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1957:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1965:5:4", + "type": "" + } + ], + "src": "1908:143:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2134:274:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2180:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2182:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "2182:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "2182:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2155:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2164:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2151:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2151:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2176:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2147:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2147:32:4" + }, + "nodeType": "YulIf", + "src": "2144:119:4" + }, + { + "nodeType": "YulBlock", + "src": "2273:128:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2288:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2302:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2292:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2317:74:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2363:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2374:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2359:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2359:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2383:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "2327:31:4" + }, + "nodeType": "YulFunctionCall", + "src": "2327:64:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2317:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2104:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2115:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2127:6:4", + "type": "" + } + ], + "src": "2057:351:4" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\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 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_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\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 function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 4, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": { + "contracts/TestC.sol": { + "TestC": [ + { + "length": 20, + "start": 110 + } + ] + }, + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 137 + } + ] + } + }, + "object": "73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906101a2565b61006a565b60405161006191906101f1565b60405180910390f35b600073__$a77b74ebd34224ac3c3a582e4bc24622f4$__63cad0899b8473__$3fa06892d414312f70326060dfc06e0087$__63cad0899b87876040518363ffffffff1660e01b81526004016100c092919061020c565b602060405180830381865af41580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061024a565b6040518363ffffffff1660e01b815260040161011e92919061020c565b602060405180830381865af415801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f919061024a565b905092915050565b600080fd5b6000819050919050565b61017f8161016c565b811461018a57600080fd5b50565b60008135905061019c81610176565b92915050565b600080604083850312156101b9576101b8610167565b5b60006101c78582860161018d565b92505060206101d88582860161018d565b9150509250929050565b6101eb8161016c565b82525050565b600060208201905061020660008301846101e2565b92915050565b600060408201905061022160008301856101e2565b61022e60208301846101e2565b9392505050565b60008151905061024481610176565b92915050565b6000602082840312156102605761025f610167565b5b600061026e84828501610235565b9150509291505056fea264697066735822122056e067cbff0f6f4b44115fa7c682e899221992ed439b30cd21e26a9ad4faac2664736f6c63430008130033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0x1A2 JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x1F1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0xCAD0899B DUP5 PUSH20 0x0 PUSH4 0xCAD0899B DUP8 DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC0 SWAP3 SWAP2 SWAP1 PUSH2 0x20C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x101 SWAP2 SWAP1 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11E SWAP3 SWAP2 SWAP1 PUSH2 0x20C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x13B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15F SWAP2 SWAP1 PUSH2 0x24A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x17F DUP2 PUSH2 0x16C JUMP JUMPDEST DUP2 EQ PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x19C DUP2 PUSH2 0x176 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B9 JUMPI PUSH2 0x1B8 PUSH2 0x167 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C7 DUP6 DUP3 DUP7 ADD PUSH2 0x18D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1D8 DUP6 DUP3 DUP7 ADD PUSH2 0x18D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1EB DUP2 PUSH2 0x16C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x206 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1E2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x221 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x22E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x244 DUP2 PUSH2 0x176 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x260 JUMPI PUSH2 0x25F PUSH2 0x167 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x26E DUP5 DUP3 DUP6 ADD PUSH2 0x235 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP 0xE0 PUSH8 0xCBFF0F6F4B44115F 0xA7 0xC6 DUP3 0xE8 SWAP10 0x22 NOT SWAP3 0xED NUMBER SWAP12 ADDRESS 0xCD 0x21 0xE2 PUSH11 0x9AD4FAAC2664736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "121:123:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;139:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;189:4;208:5;:9;218:1;221:5;:9;231:1;234;221:15;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;208:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;201:36;;139:103;;;;:::o;88:117:4:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:356::-;1675:4;1713:2;1702:9;1698:18;1690:26;;1726:79;1802:1;1791:9;1787:17;1778:6;1726:79;:::i;:::-;1815:80;1891:2;1880:9;1876:18;1867:6;1815:80;:::i;:::-;1546:356;;;;;:::o;1908:143::-;1965:5;1996:6;1990:13;1981:22;;2012:33;2039:5;2012:33;:::i;:::-;1908:143;;;;:::o;2057:351::-;2127:6;2176:2;2164:9;2155:7;2151:23;2147:32;2144:119;;;2182:79;;:::i;:::-;2144:119;2302:1;2327:64;2383:7;2374:6;2363:9;2359:22;2327:64;:::i;:::-;2317:74;;2273:128;2057:351;;;;:::o" + }, + "methodIdentifiers": { + "sum(uint256,uint256)": "cad0899b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"sum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestB.sol\":\"TestB\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/TestB.sol\":{\"keccak256\":\"0xf5b6e17af4867c11f2f48e4e929d091d4156f3c8cdeb1151384efbdb8d3e389e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b3f4989676b428bc34b5d9431863dfdca25d19a5618014c7d3151b71f88e5a9c\",\"dweb:/ipfs/QmZ6BeYewmMFQX9qcKAwGiEuhTfdg2fssetfLjQy6jESF7\"]},\"contracts/TestC.sol\":{\"keccak256\":\"0xf84c6d15c887fe13a516c2340833e6a8497ddac6413cc753f704edad7a71f2da\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c1bb19fd6492da1b51993000a81a494996529770c9b405950bf7232cdeeab3ac\",\"dweb:/ipfs/QmSvJwVzejz25FavVs4L5txVzCXWf2vt214nVpwfUbMu6Z\"]},\"contracts/TestD.sol\":{\"keccak256\":\"0xad7dc40523312bd056b30ab7adbf5f78e6eba0e74bb8e3db7fd87bd1781bb3fa\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://71e154e92c1374772171d59e553514cbed1b8983d65f7726d63f43b02b62e524\",\"dweb:/ipfs/QmbkH6yVP2fg9ZXhz7k48JwbUmM5yWUguGdNx1JMz1h4wN\"]}},\"version\":1}" + } + }, + "contracts/TestC.sol": { + "TestC": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": { + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 193 + } + ] + } + }, + "object": "610234610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f9190610129565b61006a565b6040516100619190610178565b60405180910390f35b600073__$3fa06892d414312f70326060dfc06e0087$__63cad0899b84846040518363ffffffff1660e01b81526004016100a5929190610193565b602060405180830381865af41580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101d1565b905092915050565b600080fd5b6000819050919050565b610106816100f3565b811461011157600080fd5b50565b600081359050610123816100fd565b92915050565b600080604083850312156101405761013f6100ee565b5b600061014e85828601610114565b925050602061015f85828601610114565b9150509250929050565b610172816100f3565b82525050565b600060208201905061018d6000830184610169565b92915050565b60006040820190506101a86000830185610169565b6101b56020830184610169565b9392505050565b6000815190506101cb816100fd565b92915050565b6000602082840312156101e7576101e66100ee565b5b60006101f5848285016101bc565b9150509291505056fea264697066735822122024415ac821281eba4a04ac4443e09eab95a2381de7e62a3a62fe726c54e8a3d764736f6c63430008130033", + "opcodes": "PUSH2 0x234 PUSH2 0x53 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x46 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0x129 JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x178 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0xCAD0899B DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA5 SWAP3 SWAP2 SWAP1 PUSH2 0x193 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x106 DUP2 PUSH2 0xF3 JUMP JUMPDEST DUP2 EQ PUSH2 0x111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x123 DUP2 PUSH2 0xFD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x140 JUMPI PUSH2 0x13F PUSH2 0xEE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x14E DUP6 DUP3 DUP7 ADD PUSH2 0x114 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x15F DUP6 DUP3 DUP7 ADD PUSH2 0x114 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x172 DUP2 PUSH2 0xF3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x18D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x169 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1A8 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x169 JUMP JUMPDEST PUSH2 0x1B5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x169 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1CB DUP2 PUSH2 0xFD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E7 JUMPI PUSH2 0x1E6 PUSH2 0xEE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1F5 DUP5 DUP3 DUP6 ADD PUSH2 0x1BC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 COINBASE GAS 0xC8 0x21 0x28 0x1E 0xBA 0x4A DIV 0xAC PREVRANDAO NUMBER 0xE0 SWAP15 0xAB SWAP6 LOG2 CODESIZE SAR 0xE7 0xE6 0x2A GASPRICE PUSH3 0xFE726C SLOAD 0xE8 LOG3 0xD7 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "87:109:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@sum_67": { + "entryPoint": 106, + "id": 67, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 276, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 444, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 465, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256": { + "entryPoint": 297, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack_library": { + "entryPoint": 361, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed": { + "entryPoint": 376, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed": { + "entryPoint": 403, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 243, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 238, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 253, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2411:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:4", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:4" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:4" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:4", + "type": "" + } + ], + "src": "7:75:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:4" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:4" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:4", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:4" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:4" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:4", + "type": "" + } + ], + "src": "334:77:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:4" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:4" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:4" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:4" + }, + "nodeType": "YulIf", + "src": "470:63:4" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:4", + "type": "" + } + ], + "src": "417:122:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:4" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:4" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:4" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:4", + "type": "" + } + ], + "src": "545:139:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "773:391:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "819:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "821:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "821:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "821:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "794:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "803:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "790:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "790:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "815:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "786:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "786:32:4" + }, + "nodeType": "YulIf", + "src": "783:119:4" + }, + { + "nodeType": "YulBlock", + "src": "912:117:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "927:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "941:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "931:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "956:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "991:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1002:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "987:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "987:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1011:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "966:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "966:53:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "956:6:4" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1039:118:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1054:16:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1068:2:4", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1058:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1084:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1119:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1130:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1115:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1115:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1139:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1094:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "1094:53:4" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1084:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "735:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "746:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "758:6:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "766:6:4", + "type": "" + } + ], + "src": "690:474:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1243:53:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1260:3:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1283:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1265:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1265:24:4" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1253:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1253:37:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1253:37:4" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1231:5:4", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1238:3:4", + "type": "" + } + ], + "src": "1170:126:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1408:132:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1418:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1430:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1441:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1426:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1426:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1418:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1506:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1519:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1530:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1515:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1515:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1454:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1454:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1454:79:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1380:9:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1392:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1403:4:4", + "type": "" + } + ], + "src": "1302:238:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1680:222:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1690:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1702:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1713:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1698:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1698:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1690:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1778:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1791:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1802:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1787:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1787:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1726:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1726:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1726:79:4" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1867:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1880:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1891:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1876:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1876:18:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1815:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1815:80:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1815:80:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1644:9:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1656:6:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1664:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1675:4:4", + "type": "" + } + ], + "src": "1546:356:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1971:80:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1981:22:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1996:6:4" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1990:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "1990:13:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1981:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2039:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "2012:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "2012:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "2012:33:4" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1949:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1957:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1965:5:4", + "type": "" + } + ], + "src": "1908:143:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2134:274:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2180:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2182:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "2182:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "2182:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2155:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2164:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2151:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2151:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2176:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2147:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2147:32:4" + }, + "nodeType": "YulIf", + "src": "2144:119:4" + }, + { + "nodeType": "YulBlock", + "src": "2273:128:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2288:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2302:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2292:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2317:74:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2363:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2374:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2359:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "2359:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2383:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "2327:31:4" + }, + "nodeType": "YulFunctionCall", + "src": "2327:64:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2317:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2104:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2115:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2127:6:4", + "type": "" + } + ], + "src": "2057:351:4" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\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 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_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\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 function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value1, add(headStart, 32))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 4, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": { + "contracts/TestD.sol": { + "TestD": [ + { + "length": 20, + "start": 110 + } + ] + } + }, + "object": "73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f9190610129565b61006a565b6040516100619190610178565b60405180910390f35b600073__$3fa06892d414312f70326060dfc06e0087$__63cad0899b84846040518363ffffffff1660e01b81526004016100a5929190610193565b602060405180830381865af41580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101d1565b905092915050565b600080fd5b6000819050919050565b610106816100f3565b811461011157600080fd5b50565b600081359050610123816100fd565b92915050565b600080604083850312156101405761013f6100ee565b5b600061014e85828601610114565b925050602061015f85828601610114565b9150509250929050565b610172816100f3565b82525050565b600060208201905061018d6000830184610169565b92915050565b60006040820190506101a86000830185610169565b6101b56020830184610169565b9392505050565b6000815190506101cb816100fd565b92915050565b6000602082840312156101e7576101e66100ee565b5b60006101f5848285016101bc565b9150509291505056fea264697066735822122024415ac821281eba4a04ac4443e09eab95a2381de7e62a3a62fe726c54e8a3d764736f6c63430008130033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0x129 JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x178 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0xCAD0899B DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA5 SWAP3 SWAP2 SWAP1 PUSH2 0x193 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x106 DUP2 PUSH2 0xF3 JUMP JUMPDEST DUP2 EQ PUSH2 0x111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x123 DUP2 PUSH2 0xFD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x140 JUMPI PUSH2 0x13F PUSH2 0xEE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x14E DUP6 DUP3 DUP7 ADD PUSH2 0x114 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x15F DUP6 DUP3 DUP7 ADD PUSH2 0x114 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x172 DUP2 PUSH2 0xF3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x18D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x169 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1A8 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x169 JUMP JUMPDEST PUSH2 0x1B5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x169 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1CB DUP2 PUSH2 0xFD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E7 JUMPI PUSH2 0x1E6 PUSH2 0xEE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1F5 DUP5 DUP3 DUP6 ADD PUSH2 0x1BC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 COINBASE GAS 0xC8 0x21 0x28 0x1E 0xBA 0x4A DIV 0xAC PREVRANDAO NUMBER 0xE0 SWAP15 0xAB SWAP6 LOG2 CODESIZE SAR 0xE7 0xE6 0x2A GASPRICE PUSH3 0xFE726C SLOAD 0xE8 LOG3 0xD7 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "87:109:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;105:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;155:4;174:5;:9;184:1;187;174:15;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;167:22;;105:89;;;;:::o;88:117:4:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:356::-;1675:4;1713:2;1702:9;1698:18;1690:26;;1726:79;1802:1;1791:9;1787:17;1778:6;1726:79;:::i;:::-;1815:80;1891:2;1880:9;1876:18;1867:6;1815:80;:::i;:::-;1546:356;;;;;:::o;1908:143::-;1965:5;1996:6;1990:13;1981:22;;2012:33;2039:5;2012:33;:::i;:::-;1908:143;;;;:::o;2057:351::-;2127:6;2176:2;2164:9;2155:7;2151:23;2147:32;2144:119;;;2182:79;;:::i;:::-;2144:119;2302:1;2327:64;2383:7;2374:6;2363:9;2359:22;2327:64;:::i;:::-;2317:74;;2273:128;2057:351;;;;:::o" + }, + "methodIdentifiers": { + "sum(uint256,uint256)": "cad0899b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"sum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestC.sol\":\"TestC\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/TestC.sol\":{\"keccak256\":\"0xf84c6d15c887fe13a516c2340833e6a8497ddac6413cc753f704edad7a71f2da\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c1bb19fd6492da1b51993000a81a494996529770c9b405950bf7232cdeeab3ac\",\"dweb:/ipfs/QmSvJwVzejz25FavVs4L5txVzCXWf2vt214nVpwfUbMu6Z\"]},\"contracts/TestD.sol\":{\"keccak256\":\"0xad7dc40523312bd056b30ab7adbf5f78e6eba0e74bb8e3db7fd87bd1781bb3fa\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://71e154e92c1374772171d59e553514cbed1b8983d65f7726d63f43b02b62e524\",\"dweb:/ipfs/QmbkH6yVP2fg9ZXhz7k48JwbUmM5yWUguGdNx1JMz1h4wN\"]}},\"version\":1}" + } + }, + "contracts/TestD.sol": { + "TestD": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "sum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "6101be610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b925082820190508082111561018257610181610125565b5b9291505056fea2646970667358221220132f489f22fe1764834a50b94361c88c1986db1d16da50230adbb6f8364226fe64736f6c63430008130033", + "opcodes": "PUSH2 0x1BE PUSH2 0x53 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x46 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0xBB JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x10A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x78 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x98 DUP2 PUSH2 0x85 JUMP JUMPDEST DUP2 EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xB5 DUP2 PUSH2 0x8F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD2 JUMPI PUSH2 0xD1 PUSH2 0x80 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE0 DUP6 DUP3 DUP7 ADD PUSH2 0xA6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xF1 DUP6 DUP3 DUP7 ADD PUSH2 0xA6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x104 DUP2 PUSH2 0x85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x11F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15F DUP3 PUSH2 0x85 JUMP JUMPDEST SWAP2 POP PUSH2 0x16A DUP4 PUSH2 0x85 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x182 JUMPI PUSH2 0x181 PUSH2 0x125 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT 0x2F BASEFEE SWAP16 0x22 INVALID OR PUSH5 0x834A50B943 PUSH2 0xC88C NOT DUP7 0xDB SAR AND 0xDA POP 0x23 EXP 0xDB 0xB6 0xF8 CALLDATASIZE TIMESTAMP 0x26 INVALID PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "64:99:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@sum_84": { + "entryPoint": 106, + "id": 84, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 166, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256": { + "entryPoint": 187, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack_library": { + "entryPoint": 251, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed": { + "entryPoint": 266, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 340, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 133, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 293, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 128, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 143, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1926:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:4", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:4" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:4" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:4" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:4", + "type": "" + } + ], + "src": "7:75:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:4" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:4" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:4", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:4" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:4" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:4", + "type": "" + } + ], + "src": "334:77:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:4" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:4" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:4" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:4" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:4" + }, + "nodeType": "YulIf", + "src": "470:63:4" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:4", + "type": "" + } + ], + "src": "417:122:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:4", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:4" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:4" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:4" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:4" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:4" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:4" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:4" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:4", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:4", + "type": "" + } + ], + "src": "545:139:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "773:391:4", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "819:83:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "821:77:4" + }, + "nodeType": "YulFunctionCall", + "src": "821:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "821:79:4" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "794:7:4" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "803:9:4" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "790:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "790:23:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "815:2:4", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "786:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "786:32:4" + }, + "nodeType": "YulIf", + "src": "783:119:4" + }, + { + "nodeType": "YulBlock", + "src": "912:117:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "927:15:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "941:1:4", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "931:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "956:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "991:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1002:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "987:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "987:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1011:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "966:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "966:53:4" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "956:6:4" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1039:118:4", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1054:16:4", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1068:2:4", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1058:6:4", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1084:63:4", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1119:9:4" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1130:6:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1115:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1115:22:4" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1139:7:4" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1094:20:4" + }, + "nodeType": "YulFunctionCall", + "src": "1094:53:4" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1084:6:4" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "735:9:4", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "746:7:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "758:6:4", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "766:6:4", + "type": "" + } + ], + "src": "690:474:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1243:53:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1260:3:4" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1283:5:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1265:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1265:24:4" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1253:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1253:37:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1253:37:4" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1231:5:4", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1238:3:4", + "type": "" + } + ], + "src": "1170:126:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1408:132:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1418:26:4", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1430:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1441:2:4", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1426:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1426:18:4" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1418:4:4" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1506:6:4" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1519:9:4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1530:1:4", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1515:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1515:17:4" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack_library", + "nodeType": "YulIdentifier", + "src": "1454:51:4" + }, + "nodeType": "YulFunctionCall", + "src": "1454:79:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1454:79:4" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1380:9:4", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1392:6:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1403:4:4", + "type": "" + } + ], + "src": "1302:238:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1574:152:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1591:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1594:77:4", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1584:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1584:88:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1584:88:4" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1688:1:4", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1691:4:4", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1681:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1681:15:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1681:15:4" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1712:1:4", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1715:4:4", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1705:6:4" + }, + "nodeType": "YulFunctionCall", + "src": "1705:15:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1705:15:4" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1546:180:4" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1776:147:4", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1786:25:4", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1809:1:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1791:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1791:20:4" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1786:1:4" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1820:25:4", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1843:1:4" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1825:17:4" + }, + "nodeType": "YulFunctionCall", + "src": "1825:20:4" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1820:1:4" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1854:16:4", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1865:1:4" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1868:1:4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1861:3:4" + }, + "nodeType": "YulFunctionCall", + "src": "1861:9:4" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1854:3:4" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1894:22:4", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1896:16:4" + }, + "nodeType": "YulFunctionCall", + "src": "1896:18:4" + }, + "nodeType": "YulExpressionStatement", + "src": "1896:18:4" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1886:1:4" + }, + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1889:3:4" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1883:2:4" + }, + "nodeType": "YulFunctionCall", + "src": "1883:10:4" + }, + "nodeType": "YulIf", + "src": "1880:36:4" + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1763:1:4", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1766:1:4", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "1772:3:4", + "type": "" + } + ], + "src": "1732:191:4" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\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 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_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\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 function abi_encode_t_uint256_to_t_uint256_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack_library(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n }\n\n}\n", + "id": 4, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b925082820190508082111561018257610181610125565b5b9291505056fea2646970667358221220132f489f22fe1764834a50b94361c88c1986db1d16da50230adbb6f8364226fe64736f6c63430008130033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCAD0899B EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x54 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4F SWAP2 SWAP1 PUSH2 0xBB JUMP JUMPDEST PUSH2 0x6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x61 SWAP2 SWAP1 PUSH2 0x10A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x78 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x98 DUP2 PUSH2 0x85 JUMP JUMPDEST DUP2 EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xB5 DUP2 PUSH2 0x8F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD2 JUMPI PUSH2 0xD1 PUSH2 0x80 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE0 DUP6 DUP3 DUP7 ADD PUSH2 0xA6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xF1 DUP6 DUP3 DUP7 ADD PUSH2 0xA6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x104 DUP2 PUSH2 0x85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x11F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15F DUP3 PUSH2 0x85 JUMP JUMPDEST SWAP2 POP PUSH2 0x16A DUP4 PUSH2 0x85 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x182 JUMPI PUSH2 0x181 PUSH2 0x125 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT 0x2F BASEFEE SWAP16 0x22 INVALID OR PUSH5 0x834A50B943 PUSH2 0xC88C NOT DUP7 0xDB SAR AND 0xDA POP 0x23 EXP 0xDB 0xB6 0xF8 CALLDATASIZE TIMESTAMP 0x26 INVALID PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ", + "sourceMap": "64:99:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;82:79;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;132:4;155:1;151;:5;;;;:::i;:::-;144:12;;82:79;;;;:::o;88:117:4:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1265:24;1283:5;1265:24;:::i;:::-;1260:3;1253:37;1170:126;;:::o;1302:238::-;1403:4;1441:2;1430:9;1426:18;1418:26;;1454:79;1530:1;1519:9;1515:17;1506:6;1454:79;:::i;:::-;1302:238;;;;:::o;1546:180::-;1594:77;1591:1;1584:88;1691:4;1688:1;1681:15;1715:4;1712:1;1705:15;1732:191;1772:3;1791:20;1809:1;1791:20;:::i;:::-;1786:25;;1825:20;1843:1;1825:20;:::i;:::-;1820:25;;1868:1;1865;1861:9;1854:16;;1889:3;1886:1;1883:10;1880:36;;;1896:18;;:::i;:::-;1880:36;1732:191;;;;:::o" + }, + "methodIdentifiers": { + "sum(uint256,uint256)": "cad0899b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"sum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TestD.sol\":\"TestD\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/TestD.sol\":{\"keccak256\":\"0xad7dc40523312bd056b30ab7adbf5f78e6eba0e74bb8e3db7fd87bd1781bb3fa\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://71e154e92c1374772171d59e553514cbed1b8983d65f7726d63f43b02b62e524\",\"dweb:/ipfs/QmbkH6yVP2fg9ZXhz7k48JwbUmM5yWUguGdNx1JMz1h4wN\"]}},\"version\":1}" + } + } + } + } +} \ No newline at end of file diff --git a/packages/core/test/mocks/verify/min-input/deployed_addresses.json b/packages/core/test/mocks/verify/min-input/deployed_addresses.json new file mode 100644 index 000000000..919f5ad45 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/deployed_addresses.json @@ -0,0 +1,6 @@ +{ + "LockModule#TestD": "0x738809124dB267FD8fa305C208C3Afdb50733b09", + "LockModule#TestC": "0xA1304b2f49DAE40c0400b65dBaFcdBf8af611b84", + "LockModule#TestB": "0x533Ef80A69aE060b8624a2BcD803C61045Cc3EBE", + "LockModule#TestA": "0x113455b0B095f860c17A7aB2C366AE427623d7cE" +} diff --git a/packages/core/test/mocks/verify/min-input/journal.jsonl b/packages/core/test/mocks/verify/min-input/journal.jsonl new file mode 100644 index 000000000..2f07a3962 --- /dev/null +++ b/packages/core/test/mocks/verify/min-input/journal.jsonl @@ -0,0 +1,22 @@ + +{"chainId":11155111,"type":"DEPLOYMENT_INITIALIZE"} +{"artifactId":"LockModule#TestD","constructorArgs":[],"contractName":"TestD","dependencies":[],"from":"0x224e16b1b84a3c79552dbbc37070c348cacd1197","futureId":"LockModule#TestD","futureType":"NAMED_ARTIFACT_LIBRARY_DEPLOYMENT","libraries":{},"strategy":"basic","type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"LockModule#TestD","networkInteraction":{"data":"0x6101be610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906100bb565b61006a565b604051610061919061010a565b60405180910390f35b600081836100789190610154565b905092915050565b600080fd5b6000819050919050565b61009881610085565b81146100a357600080fd5b50565b6000813590506100b58161008f565b92915050565b600080604083850312156100d2576100d1610080565b5b60006100e0858286016100a6565b92505060206100f1858286016100a6565b9150509250929050565b61010481610085565b82525050565b600060208201905061011f60008301846100fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061015f82610085565b915061016a83610085565b925082820190508082111561018257610181610125565b5b9291505056fea2646970667358221220132f489f22fe1764834a50b94361c88c1986db1d16da50230adbb6f8364226fe64736f6c63430008130033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"LockModule#TestD","networkInteractionId":1,"nonce":35,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"1231723314"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"1000000000"}},"hash":"0x51a5a511faf2ef4a4e1e341d037f73648375f6479c972c13bfc2d7c112e48a88"},"type":"TRANSACTION_SEND"} +{"futureId":"LockModule#TestD","hash":"0x51a5a511faf2ef4a4e1e341d037f73648375f6479c972c13bfc2d7c112e48a88","networkInteractionId":1,"receipt":{"blockHash":"0xa0bbbd38a11ebda720b9796d8e12e9a4eeb598c9c94788abc2d2ec01319b4610","blockNumber":5468207,"contractAddress":"0x738809124dB267FD8fa305C208C3Afdb50733b09","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"LockModule#TestD","result":{"address":"0x738809124dB267FD8fa305C208C3Afdb50733b09","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"LockModule#TestC","constructorArgs":[],"contractName":"TestC","dependencies":["LockModule#TestD"],"from":"0x224e16b1b84a3c79552dbbc37070c348cacd1197","futureId":"LockModule#TestC","futureType":"NAMED_ARTIFACT_LIBRARY_DEPLOYMENT","libraries":{"TestD":"0x738809124dB267FD8fa305C208C3Afdb50733b09"},"strategy":"basic","type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"LockModule#TestC","networkInteraction":{"data":"0x610234610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f9190610129565b61006a565b6040516100619190610178565b60405180910390f35b600073738809124dB267FD8fa305C208C3Afdb50733b0963cad0899b84846040518363ffffffff1660e01b81526004016100a5929190610193565b602060405180830381865af41580156100c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e691906101d1565b905092915050565b600080fd5b6000819050919050565b610106816100f3565b811461011157600080fd5b50565b600081359050610123816100fd565b92915050565b600080604083850312156101405761013f6100ee565b5b600061014e85828601610114565b925050602061015f85828601610114565b9150509250929050565b610172816100f3565b82525050565b600060208201905061018d6000830184610169565b92915050565b60006040820190506101a86000830185610169565b6101b56020830184610169565b9392505050565b6000815190506101cb816100fd565b92915050565b6000602082840312156101e7576101e66100ee565b5b60006101f5848285016101bc565b9150509291505056fea264697066735822122024415ac821281eba4a04ac4443e09eab95a2381de7e62a3a62fe726c54e8a3d764736f6c63430008130033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"LockModule#TestC","networkInteractionId":1,"nonce":36,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"1234723462"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"1000000000"}},"hash":"0x0bc7cfa4b5500d808ad8f734300d59c9b7e9c5e1a3aa2ac14568fa1c8901ba12"},"type":"TRANSACTION_SEND"} +{"futureId":"LockModule#TestC","hash":"0x0bc7cfa4b5500d808ad8f734300d59c9b7e9c5e1a3aa2ac14568fa1c8901ba12","networkInteractionId":1,"receipt":{"blockHash":"0xfaddf2e1ed7e4be907a578b2bec8927e37e6e710620fe93df2dc4631231b468a","blockNumber":5468212,"contractAddress":"0xA1304b2f49DAE40c0400b65dBaFcdBf8af611b84","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"LockModule#TestC","result":{"address":"0xA1304b2f49DAE40c0400b65dBaFcdBf8af611b84","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"LockModule#TestB","constructorArgs":[],"contractName":"TestB","dependencies":["LockModule#TestC","LockModule#TestD"],"from":"0x224e16b1b84a3c79552dbbc37070c348cacd1197","futureId":"LockModule#TestB","futureType":"NAMED_ARTIFACT_LIBRARY_DEPLOYMENT","libraries":{"TestC":"0xA1304b2f49DAE40c0400b65dBaFcdBf8af611b84","TestD":"0x738809124dB267FD8fa305C208C3Afdb50733b09"},"strategy":"basic","type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"LockModule#TestB","networkInteraction":{"data":"0x6102ad610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063cad0899b1461003a575b600080fd5b610054600480360381019061004f91906101a2565b61006a565b60405161006191906101f1565b60405180910390f35b600073A1304b2f49DAE40c0400b65dBaFcdBf8af611b8463cad0899b8473738809124dB267FD8fa305C208C3Afdb50733b0963cad0899b87876040518363ffffffff1660e01b81526004016100c092919061020c565b602060405180830381865af41580156100dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610101919061024a565b6040518363ffffffff1660e01b815260040161011e92919061020c565b602060405180830381865af415801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f919061024a565b905092915050565b600080fd5b6000819050919050565b61017f8161016c565b811461018a57600080fd5b50565b60008135905061019c81610176565b92915050565b600080604083850312156101b9576101b8610167565b5b60006101c78582860161018d565b92505060206101d88582860161018d565b9150509250929050565b6101eb8161016c565b82525050565b600060208201905061020660008301846101e2565b92915050565b600060408201905061022160008301856101e2565b61022e60208301846101e2565b9392505050565b60008151905061024481610176565b92915050565b6000602082840312156102605761025f610167565b5b600061026e84828501610235565b9150509291505056fea264697066735822122056e067cbff0f6f4b44115fa7c682e899221992ed439b30cd21e26a9ad4faac2664736f6c63430008130033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"LockModule#TestB","networkInteractionId":1,"nonce":37,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"1240595674"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"1000000000"}},"hash":"0xd6cda71da77a8b6f7526d5c667d791670d2ec648cc400e4ee24997520581c8a8"},"type":"TRANSACTION_SEND"} +{"futureId":"LockModule#TestB","hash":"0xd6cda71da77a8b6f7526d5c667d791670d2ec648cc400e4ee24997520581c8a8","networkInteractionId":1,"receipt":{"blockHash":"0xa93f0c4066297c30a0d33af789b41dfe8eedc08eaff642eed13d6f6f1eeb0103","blockNumber":5468217,"contractAddress":"0x533Ef80A69aE060b8624a2BcD803C61045Cc3EBE","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"LockModule#TestB","result":{"address":"0x533Ef80A69aE060b8624a2BcD803C61045Cc3EBE","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"LockModule#TestA","constructorArgs":[1,2],"contractName":"TestA","dependencies":["LockModule#TestB"],"from":"0x224e16b1b84a3c79552dbbc37070c348cacd1197","futureId":"LockModule#TestA","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{"TestB":"0x533Ef80A69aE060b8624a2BcD803C61045Cc3EBE"},"strategy":"basic","type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"LockModule#TestA","networkInteraction":{"data":"0x608060405234801561001057600080fd5b5060405161025c38038061025c833981810160405281019061003291906100f6565b8173533Ef80A69aE060b8624a2BcD803C61045Cc3EBE63cad0899b9091836040518363ffffffff1660e01b815260040161006d929190610145565b602060405180830381865af415801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae919061016e565b600081905550505061019b565b600080fd5b6000819050919050565b6100d3816100c0565b81146100de57600080fd5b50565b6000815190506100f0816100ca565b92915050565b6000806040838503121561010d5761010c6100bb565b5b600061011b858286016100e1565b925050602061012c858286016100e1565b9150509250929050565b61013f816100c0565b82525050565b600060408201905061015a6000830185610136565b6101676020830184610136565b9392505050565b600060208284031215610184576101836100bb565b5b6000610192848285016100e1565b91505092915050565b60b3806101a96000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063853255cc14602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005481565b6000819050919050565b605e81604d565b82525050565b6000602082019050607760008301846057565b9291505056fea2646970667358221220ed8950fa3d7184d2692eb6136b1815845d0f7c330e78b5948e12f2e35fd9b24564736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"LockModule#TestA","networkInteractionId":1,"nonce":38,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"1236779328"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"1000000000"}},"hash":"0xe4229f0fda2b192f5b007c9b7cff48fa630417c7399257f3c66ed8ac70ef0533"},"type":"TRANSACTION_SEND"} +{"futureId":"LockModule#TestA","hash":"0xe4229f0fda2b192f5b007c9b7cff48fa630417c7399257f3c66ed8ac70ef0533","networkInteractionId":1,"receipt":{"blockHash":"0x48d62854c2b42ef021a9d745a0435dbc6fd1b5c3ceb1c192f70c62ff1bbf8a7b","blockNumber":5468222,"contractAddress":"0x113455b0B095f860c17A7aB2C366AE427623d7cE","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"LockModule#TestA","result":{"address":"0x113455b0B095f860c17A7aB2C366AE427623d7cE","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} \ No newline at end of file diff --git a/packages/core/test/verify.ts b/packages/core/test/verify.ts index ee59ad52e..e70e75f92 100644 --- a/packages/core/test/verify.ts +++ b/packages/core/test/verify.ts @@ -125,4 +125,80 @@ describe("verify", () => { assert.isTrue(success); }); + + // The build info for the mock used in this test contains compilation info for "Lock.sol" as well, + // which was not part of the deployment. + // This test ensures that it is not included in the verification info, as well as that the other + // contracts in the deployment are not sent if they are not needed for the requested contract. + it("should yield a verify result containing only the requested contract", async () => { + const expectedResultMap: { [k: string]: string[] } = { + "contracts/TestA.sol:TestA": [ + "contracts/TestA.sol", + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestB.sol:TestB": [ + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestC.sol:TestC": [ + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestD.sol:TestD": ["contracts/TestD.sol"], + }; + + const deploymentDir = path.join(__dirname, "mocks", "verify", "min-input"); + + for await (const [, info] of getVerificationInformation(deploymentDir)) { + const expectedSources = expectedResultMap[info.name]; + const actualSources = Object.keys(JSON.parse(info.sourceCode).sources); + + assert.deepEqual(actualSources, expectedSources); + } + }); + + it("should yield a verify result containing all available contracts when `includeUnrelatedContracts` is enabled", async () => { + const expectedResultMap: { [k: string]: string[] } = { + "contracts/TestA.sol:TestA": [ + "contracts/TestA.sol", + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestB.sol:TestB": [ + "contracts/TestA.sol", + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestC.sol:TestC": [ + "contracts/TestA.sol", + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + "contracts/TestD.sol:TestD": [ + "contracts/TestA.sol", + "contracts/TestB.sol", + "contracts/TestC.sol", + "contracts/TestD.sol", + ], + }; + + const deploymentDir = path.join(__dirname, "mocks", "verify", "min-input"); + + for await (const [, info] of getVerificationInformation( + deploymentDir, + undefined, + true + )) { + const expectedSources = expectedResultMap[info.name]; + const actualSources = Object.keys(JSON.parse(info.sourceCode).sources); + + assert.deepEqual(actualSources, expectedSources); + } + }); }); diff --git a/packages/hardhat-plugin/src/index.ts b/packages/hardhat-plugin/src/index.ts index 7f15b9e9b..83338842e 100644 --- a/packages/hardhat-plugin/src/index.ts +++ b/packages/hardhat-plugin/src/index.ts @@ -472,82 +472,106 @@ ignitionScope ignitionScope .task("verify") + .addFlag( + "includeUnrelatedContracts", + "Include all compiled contracts in the verification" + ) .addPositionalParam("deploymentId", "The id of the deployment to verify") .setDescription( "Verify contracts from a deployment against the configured block explorers" ) - .setAction(async ({ deploymentId }: { deploymentId: string }, hre) => { - const { getVerificationInformation } = await import( - "@nomicfoundation/ignition-core" - ); - - const deploymentDir = path.join( - hre.config.paths.ignition, - "deployments", - deploymentId - ); + .setAction( + async ( + { + deploymentId, + includeUnrelatedContracts = false, + }: { deploymentId: string; includeUnrelatedContracts: boolean }, + hre + ) => { + const { getVerificationInformation } = await import( + "@nomicfoundation/ignition-core" + ); - if ( - hre.config.etherscan === undefined || - hre.config.etherscan.apiKey === undefined || - hre.config.etherscan.apiKey === "" - ) { - throw new NomicLabsHardhatPluginError( - "@nomicfoundation/hardhat-ignition", - "No etherscan API key configured" + const deploymentDir = path.join( + hre.config.paths.ignition, + "deployments", + deploymentId ); - } - try { - for await (const [ - chainConfig, - contractInfo, - ] of getVerificationInformation( - deploymentDir, - hre.config.etherscan.customChains - )) { - const apiKeyAndUrls = getApiKeyAndUrls( - hre.config.etherscan.apiKey, - chainConfig + if ( + hre.config.etherscan === undefined || + hre.config.etherscan.apiKey === undefined || + hre.config.etherscan.apiKey === "" + ) { + throw new NomicLabsHardhatPluginError( + "@nomicfoundation/hardhat-ignition", + "No etherscan API key configured" ); + } - const instance = new Etherscan(...apiKeyAndUrls); - - console.log( - `Verifying contract "${contractInfo.name}" for network ${chainConfig.network}...` - ); + try { + for await (const [ + chainConfig, + contractInfo, + ] of getVerificationInformation( + deploymentDir, + hre.config.etherscan.customChains, + includeUnrelatedContracts + )) { + const apiKeyAndUrls = getApiKeyAndUrls( + hre.config.etherscan.apiKey, + chainConfig + ); - const result = await verifyEtherscanContract(instance, contractInfo); + const instance = new Etherscan(...apiKeyAndUrls); - if (result.type === "success") { console.log( - `Successfully verified contract "${contractInfo.name}" for network ${chainConfig.network}:\n - ${result.contractURL}` + `Verifying contract "${contractInfo.name}" for network ${chainConfig.network}...` ); - console.log(""); - } else { - if (/already verified/gi.test(result.reason.message)) { - const contractURL = instance.getContractUrl(contractInfo.address); + + const result = await verifyEtherscanContract(instance, contractInfo); + + if (result.type === "success") { console.log( - `Contract ${contractInfo.name} already verified on network ${chainConfig.network}:\n - ${contractURL}` + `Successfully verified contract "${contractInfo.name}" for network ${chainConfig.network}:\n - ${result.contractURL}` ); console.log(""); - continue; } else { - throw new NomicLabsHardhatPluginError( - "hardhat-ignition", - result.reason.message - ); + if (/already verified/gi.test(result.reason.message)) { + const contractURL = instance.getContractUrl(contractInfo.address); + console.log( + `Contract ${contractInfo.name} already verified on network ${chainConfig.network}:\n - ${contractURL}` + ); + console.log(""); + continue; + } else { + if (!includeUnrelatedContracts) { + throw new NomicLabsHardhatPluginError( + "hardhat-ignition", + `Verification failed. Please run \`hardhat ignition verify ${deploymentId} --include-unrelated-contracts\` to attempt verifying all contracts.` + ); + } else { + throw new NomicLabsHardhatPluginError( + "hardhat-ignition", + result.reason.message + ); + } + } } } - } - } catch (e) { - if (e instanceof IgnitionError && shouldBeHardhatPluginError(e)) { - throw new NomicLabsHardhatPluginError("hardhat-ignition", e.message, e); - } + } catch (e) { + if (e instanceof IgnitionError && shouldBeHardhatPluginError(e)) { + throw new NomicLabsHardhatPluginError( + "hardhat-ignition", + e.message, + e + ); + } - throw e; + throw e; + } } - }); + ); async function resolveParametersFromModuleName( moduleName: string,