diff --git a/README.md b/README.md index 1774aee..aa752b9 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,11 @@ Dojang is a service that issues offchain information (outside the blockchain) as onchain attestations on the GIWA chain. It plays an important role in linking onchain wallet addresses with offchain information. This allows users to hold an onchain identity without revealing Personally Identifiable Information (PII) from their wallet. -Dojang aims to establish the trust layer of the Giwa ecosystem by leveraging Ethereum Attestation Service (EAS). +Dojang aims to establish the trust layer of the GIWA ecosystem by leveraging Ethereum Attestation Service (EAS). ## Contracts -### Giwa Testnet (Sepolia) +### GIWA Testnet (Sepolia) - Schemas @@ -16,7 +16,7 @@ Dojang aims to establish the trust layer of the Giwa ecosystem by leveraging Eth | Verified Address | Wallet address which is verified by a trusted issuer | `bool isVerified` | `0x568eb581cdf80b03d3bdfa414f3203bfdcc4bba4e66355612bd0e879da812f06` | `0x072d75e18b2be4f89a13a7147240477481c4b526d5795802acba59046b426e08` | | Balance Root | Root of a Merkle tree of balances | `uint256 coinType,uint64 snapshotAt,uint192 leafCount,uint256 totalAmount,bytes32 root` | `0xf09c1384d860519bb4ea5bb2a45ab64b00a8d900d47fb79203663be6da21e06c` | `0x369faa9c2cd261c45be3db5e230b585f5f1abecf8e12be575bb543e917e6db52` | | Verified Balance | User's balance verified by a trusted issuer | `uint256 balance,bytes32 salt,bytes32[] proofs` | `0x06c3bd846f5ea60b0b6f5a835ef85fd8253b53f67917d6c690be628d032f841b` | `0x77bf88ca262cc63e1b185dccd870aacc5320b8987ef6c7169920f265fe6ab5e9` | - +| Verified Code | Authentication code verified by a trusted issuer | `bytes32 codeHash,string domain` | `0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b` | `0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280` | - Contracts @@ -30,7 +30,8 @@ Dojang aims to establish the trust layer of the Giwa ecosystem by leveraging Eth | AddressDojangResolver | Triggered on issuance or revocation of a Verified Address attestation | [`0x692009FE206C3F897867F6BF7B5B45506B747F9e`](https://sepolia-explorer.giwa.io/address/0x692009FE206C3F897867F6BF7B5B45506B747F9e) | v0.2.0 | | BalanceRootDojangResolver | Triggered on issuance or revocation of a Balance Root attestation | [`0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0`](https://sepolia-explorer.giwa.io/address/0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0) | v0.4.0 | | BalanceDojangResolver | Triggered on issuance or revocation of a Verified Balance attestation | [`0x6FFa7ABc1E380Bb967C78D5E648EF804e1fE6dAd`](https://sepolia-explorer.giwa.io/address/0x6FFa7ABc1E380Bb967C78D5E648EF804e1fE6dAd) | v0.4.0 | -| DojangScroll | Provides convenient read access to Dojang data | [`0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9`](https://sepolia-explorer.giwa.io/address/0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9) | v0.4.0 | +| VerifyCodeDojangResolver | Triggered on issuance or revocation of a Verified Code attestation | [`0x843fF433f7657901118fF3E2Eca915abb9BC12Df`](https://sepolia-explorer.giwa.io/address/0x843fF433f7657901118fF3E2Eca915abb9BC12Df) | v0.5.0 | +| DojangScroll | Provides convenient read access to Dojang data | [`0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9`](https://sepolia-explorer.giwa.io/address/0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9) | v0.5.0 | ## Usage diff --git a/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-1764576757886.json b/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-1764576757886.json new file mode 100644 index 0000000..dc52578 --- /dev/null +++ b/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-1764576757886.json @@ -0,0 +1,397 @@ +{ + "transactions": [ + { + "hash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionType": "CREATE", + "contractName": "VerifyCodeDojangResolver", + "contractAddress": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "function": null, + "arguments": null, + "transaction": { + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "gas": "0x20ddab", + "value": "0x0", + "input": "0x60a080604052346100c257306080525f516020611d7b5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051611cb490816100c78239608051818181610a1e0152610b100152f35b6001600160401b0319166001600160401b039081175f516020611d7b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610042575b50361561001a575f80fd5b7f1574f9f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c90816301ffc9a71461112d57508063248a9ca3146110bd5780632f2ff15d1461104257806336568abe14610fba5780633b431e9214610e4b5780634f1ef28614610a9657806352d1902d146109d957806354fd4d501461095c578063723275531461082f57806388e5b2d91461078257806391d14854146106ee57806391db0b7e146106cf578063a217fddf14610257578063ad3cb1cc1461064e578063c4d66de8146103ba578063cc78fef11461028f578063ce46e04614610257578063d547741f146101d5578063e49617e1146101b8578063e60c3505146101915763f72c0d8b14610135575f61000f565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206040517f94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce8152f35b5f80fd5b60206101ae61019f366113f1565b6101a7611930565b3490611975565b6040519015158152f35b6101c1366113f1565b506101ca611930565b602060405160018152f35b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576102556004356102126111e9565b9061025061024b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6115a9565b611828565b005b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206040515f8152f35b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff6102db61120c565b6102e3611541565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f2054161561038f57805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f368846ed588a2fb12b4fabffde520ad537df26ea80ad789b60afc37c5cc7fe6b5f80a2005b7fd5c40fc8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576103f161120c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff811680159081610646575b600114908161063c575b159081610633575b5061060b578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556105b6575b5073ffffffffffffffffffffffffffffffffffffffff81161561058e576104f4906104bf611b8e565b6104c7611b8e565b6104cf611b8e565b6104d7611b8e565b6104df611b8e565b6104e7611b8e565b6104ef611b8e565b61162f565b506104fb57005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005582610496565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610443565b303b15915061043b565b849150610431565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576106cb60405161068d60408261122f565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061130d565b0390f35b60206101ae6106dd36611381565b926106e9929192611930565b6114de565b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576107256111e9565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b61078b36611381565b610796929192611930565b808203610807575f90345b8383106107b45760405160018152602090f35b6107bf838387611461565b358181116107df576001916107d585878a61149e565b50039201916107a1565b7f11011294000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f947d5a84000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff61087b61120c565b610883611541565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f20541661093157805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f84c8e535ea2c772fdcaab7fd1c78efb11d06931c5d61fd4b75fbff891da9cc005f80a2005b7f797f004b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576106cb60405161099b60408261122f565b600581527f302e352e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061130d565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a6e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57610ac861120c565b60243567ffffffffffffffff811161018d573660238201121561018d57610af99036906024816004013591016112d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610e09575b50610a6e57335f9081527fed9de58436e9b79560facccca83f680a3a081e23309a653efa5857ae98e58c0d602052604090205460ff1615610db95773ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181610d85575b50610bf657837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc859203610d5a5750813b15610d2f57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610cfe575f8083602061025595519101845af43d15610cf6573d91610cda8361129d565b92610ce8604051948561122f565b83523d5f602085013e611be5565b606091611be5565b505034610d0757005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610db1575b81610da16020938361122f565b8101031261018d57519085610bc5565b3d9150610d94565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce60245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610b3b565b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff610e9761120c565b610e9f611541565b1680158015610f7a575b610f525773ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70055167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70054168114610ea9565b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57610ff16111e9565b3373ffffffffffffffffffffffffffffffffffffffff82160361101a5761025590600435611828565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5761025560043561107f6111e9565b906110b861024b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611716565b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206111256004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361018d57817f7965db0b00000000000000000000000000000000000000000000000000000000602093149081156111bf575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836111b8565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018d57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018d57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761127057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161127057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926112e38261129d565b916112f1604051938461122f565b82948184528183011161018d578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561018d5782359167ffffffffffffffff831161018d576020808501948460051b01011161018d57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261018d5760043567ffffffffffffffff811161018d57816113ca91600401611350565b929092916024359067ffffffffffffffff821161018d576113ed91600401611350565b9091565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261018d576004359067ffffffffffffffff821161018d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc826101409203011261018d5760040190565b91908110156114715760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156114715760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18136030182121561018d570190565b919290818103610807575f91345b8284106114fe57505050505050600190565b611509848388611461565b358181116107df576115258161152087878a61149e565b611975565b1561153657600191039301926114ec565b505050505050505f90565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561157957565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156116005750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166117115773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f1461182257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f1461182257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b734200000000000000000000000000000000000021330361194d57565b7f4ca88867000000000000000000000000000000000000000000000000000000005f5260045ffd5b905060e081013573ffffffffffffffffffffffffffffffffffffffff811680910361018d575f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f20541690816119d2575090565b90506101208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561018d57810180359067ffffffffffffffff821161018d576020810191803603831361018d5781019060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083818601950301011261018d5760408101359067ffffffffffffffff821161018d57019080603f8301121561018d57611a98611ae2918360406020611ab696013591016112d7565b6040519283916020830195358652604080840152606083019061130d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261122f565b51902073ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba700541691823b1561018d5760445f928360405195869485937f9b1a175f00000000000000000000000000000000000000000000000000000000855260048501523560248401525af18015611b8357611b73575b50600190565b5f611b7d9161122f565b5f611b6d565b6040513d5f823e3d90fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611bbd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611c225750805115611bfa57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611c75575b611c33575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611c2b56fea26469706673582212204f7c15078280def2a08206be38486d69785e21b8ed40af04ac3387918c7682d064736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "nonce": "0x1c", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": [ + "0x091dfe62D70FE2425621Bf06f7e71Ff0FdB06CCa", + "0xc4d66de8000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "transaction": { + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "gas": "0x35e5a", + "value": "0x0", + "input": "0x60806040526102a88038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b604051608d908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea264697066735822122000320d7070954ef1f15ac866cb97560066819462543386348d27b1d5c7bfe5c564736f6c634300081d0033000000000000000000000000091dfe62d70fe2425621bf06f7e71ff0fdb06cca00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d4595800000000000000000000000000000000000000000000000000000000", + "nonce": "0x1d", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": null, + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "gas": "0x12d66", + "value": "0x0", + "input": "0x2f2ff15d94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce000000000000000000000000d72b48ed00b67d756408a140435d8ef101f4a377", + "nonce": "0x1f", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": null, + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "gas": "0x12c0d", + "value": "0x0", + "input": "0x3b431e920000000000000000000000009c9bf29880448ab39795a11b669e22a0f1d790ec", + "nonce": "0x20", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x4200000000000000000000000000000000000020", + "function": "register(string,address,bool)", + "arguments": [ + "bytes32 codeHash,string domain", + "0x843fF433f7657901118fF3E2Eca915abb9BC12Df", + "true" + ], + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x4200000000000000000000000000000000000020", + "gas": "0x218a4", + "value": "0x0", + "input": "0x60d7a2780000000000000000000000000000000000000000000000000000000000000060000000000000000000000000843ff433f7657901118ff3e2eca915abb9bc12df0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e6279746573333220636f6465486173682c737472696e6720646f6d61696e0000", + "nonce": "0x21", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "function": "register(bytes32,bytes32)", + "arguments": [ + "0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280" + ], + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "gas": "0x18e14", + "value": "0x0", + "input": "0x2f92673268053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280", + "nonce": "0x22", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2c3d8a", + "logs": [ + { + "address": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x502fe8226c2dbc8c55a3de6254efcffc986c4c6bea62f6484d185c030c8c4a23", + "blockNumber": "0xab616c", + "blockTimestamp": "0x692d4dc8", + "transactionHash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionIndex": "0x4", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000180000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionIndex": "0x4", + "blockHash": "0x502fe8226c2dbc8c55a3de6254efcffc986c4c6bea62f6484d185c030c8c4a23", + "blockNumber": "0xab616c", + "gasUsed": "0x19480e", + "effectiveGasPrice": "0xf42bd", + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "to": null, + "contractAddress": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0xb67", + "l1GasPrice": "0x9", + "l1GasUsed": "0xb50e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x34b69", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000091dfe62d70fe2425621bf06f7e71ff0fdb06cca" + ], + "data": "0x", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958", + "0x0000000000000000000000000027b0882c92a1a86c5885fed632667e81e49e5f" + ], + "data": "0x", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000004040000000000000000000000400000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000000010000008000000002000000000000000000000000000000000000000000020000000000000000000800000000000000000000002000000000000000010000000000000800000000000000000000000080010008000000000000000000000000000000000000000000000000000000400000001000000000000000000020000000000000000000000000002000000004000100000000000020000000000000000000000000000000000000000000000000000000000100000000", + "type": "0x2", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "gasUsed": "0x29759", + "effectiveGasPrice": "0xf42bd", + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "to": null, + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x251", + "l1GasPrice": "0x9", + "l1GasUsed": "0x24cf" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3c597", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce", + "0x000000000000000000000000d72b48ed00b67d756408a140435d8ef101f4a377", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "data": "0x", + "blockHash": "0xddfd230636fea35ff62126359f4b3800f2b1ab5aaf59cc1650e22582d134ddde", + "blockNumber": "0xab6171", + "blockTimestamp": "0x692d4dcd", + "transactionHash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionIndex": "0x3", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000004040000000000000000000000000000000000000000000000200000000008000000000000000000000000000000100000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000008000000000000000000000000020000000001000000000000000000000000000000000000000000000002000000000000100000000000000000000000000000000000000000000000000000000000000000000001100000000", + "type": "0x2", + "transactionHash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionIndex": "0x3", + "blockHash": "0xddfd230636fea35ff62126359f4b3800f2b1ab5aaf59cc1650e22582d134ddde", + "blockNumber": "0xab6171", + "gasUsed": "0xda36", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x6b", + "l1GasPrice": "0x9", + "l1GasUsed": "0x6a4" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x624e9", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009c9bf29880448ab39795a11b669e22a0f1d790ec" + ], + "data": "0x", + "blockHash": "0xbd7a372d635036fc06d719b87325d50de9e04ddeb5b64a5d37c4baca6fe5e500", + "blockNumber": "0xab6174", + "blockTimestamp": "0x692d4dd0", + "transactionHash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionIndex": "0x4", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000000040000000000000000000000000000000000000100000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000400000000020000000000000000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020020000000000000000000000000000000000000000000000000000001100000000", + "type": "0x2", + "transactionHash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionIndex": "0x4", + "blockHash": "0xbd7a372d635036fc06d719b87325d50de9e04ddeb5b64a5d37c4baca6fe5e500", + "blockNumber": "0xab6174", + "gasUsed": "0xcd2a", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x64", + "l1GasPrice": "0x9", + "l1GasUsed": "0x640" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x32e20", + "logs": [ + { + "address": "0x4200000000000000000000000000000000000020", + "topics": [ + "0xd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002055ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280000000000000000000000000843ff433f7657901118ff3e2eca915abb9bc12df00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e6279746573333220636f6465486173682c737472696e6720646f6d61696e0000", + "blockHash": "0x87f7e2436a04a06f7a324439994f9760f27b2c944bbb1bd7c9f1a30834929c5a", + "blockNumber": "0xab6177", + "blockTimestamp": "0x692d4dd3", + "transactionHash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionIndex": "0x2", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000810000000000000000004000040000000010000000000000000000000000000800000000000000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionIndex": "0x2", + "blockHash": "0x87f7e2436a04a06f7a324439994f9760f27b2c944bbb1bd7c9f1a30834929c5a", + "blockNumber": "0xab6177", + "gasUsed": "0x18485", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x4200000000000000000000000000000000000020", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x73", + "l1GasPrice": "0x9", + "l1GasUsed": "0x72a" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1c441", + "logs": [ + { + "address": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "topics": [ + "0x563ebecbb9df1c7112240e62907d4eb34dce7d568194f648e126e148bd9f275b", + "0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280" + ], + "data": "0x", + "blockHash": "0xc0bb5c88c9ac1c85c92075d92146eb0590b7bff0005dcb79c23a5dd078a3ebe4", + "blockNumber": "0xab617a", + "blockTimestamp": "0x692d4dd6", + "transactionHash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000010020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000004200000000000000000000000000000000000000400800000000000000000000000000000200000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionIndex": "0x1", + "blockHash": "0xc0bb5c88c9ac1c85c92075d92146eb0590b7bff0005dcb79c23a5dd078a3ebe4", + "blockNumber": "0xab617a", + "gasUsed": "0x11031", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x71", + "l1GasPrice": "0x9", + "l1GasUsed": "0x710" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1764576757886, + "chain": 91342, + "commit": "6d96f64" +} \ No newline at end of file diff --git a/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-latest.json b/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-latest.json new file mode 100644 index 0000000..dc52578 --- /dev/null +++ b/broadcast/03-DeployVerifyCodeDojang.s.sol/91342/run-latest.json @@ -0,0 +1,397 @@ +{ + "transactions": [ + { + "hash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionType": "CREATE", + "contractName": "VerifyCodeDojangResolver", + "contractAddress": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "function": null, + "arguments": null, + "transaction": { + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "gas": "0x20ddab", + "value": "0x0", + "input": "0x60a080604052346100c257306080525f516020611d7b5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b604051611cb490816100c78239608051818181610a1e0152610b100152f35b6001600160401b0319166001600160401b039081175f516020611d7b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610042575b50361561001a575f80fd5b7f1574f9f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c90816301ffc9a71461112d57508063248a9ca3146110bd5780632f2ff15d1461104257806336568abe14610fba5780633b431e9214610e4b5780634f1ef28614610a9657806352d1902d146109d957806354fd4d501461095c578063723275531461082f57806388e5b2d91461078257806391d14854146106ee57806391db0b7e146106cf578063a217fddf14610257578063ad3cb1cc1461064e578063c4d66de8146103ba578063cc78fef11461028f578063ce46e04614610257578063d547741f146101d5578063e49617e1146101b8578063e60c3505146101915763f72c0d8b14610135575f61000f565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206040517f94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce8152f35b5f80fd5b60206101ae61019f366113f1565b6101a7611930565b3490611975565b6040519015158152f35b6101c1366113f1565b506101ca611930565b602060405160018152f35b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576102556004356102126111e9565b9061025061024b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6115a9565b611828565b005b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206040515f8152f35b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff6102db61120c565b6102e3611541565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f2054161561038f57805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f368846ed588a2fb12b4fabffde520ad537df26ea80ad789b60afc37c5cc7fe6b5f80a2005b7fd5c40fc8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576103f161120c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff811680159081610646575b600114908161063c575b159081610633575b5061060b578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556105b6575b5073ffffffffffffffffffffffffffffffffffffffff81161561058e576104f4906104bf611b8e565b6104c7611b8e565b6104cf611b8e565b6104d7611b8e565b6104df611b8e565b6104e7611b8e565b6104ef611b8e565b61162f565b506104fb57005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005582610496565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610443565b303b15915061043b565b849150610431565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576106cb60405161068d60408261122f565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061130d565b0390f35b60206101ae6106dd36611381565b926106e9929192611930565b6114de565b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576107256111e9565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b61078b36611381565b610796929192611930565b808203610807575f90345b8383106107b45760405160018152602090f35b6107bf838387611461565b358181116107df576001916107d585878a61149e565b50039201916107a1565b7f11011294000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f947d5a84000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff61087b61120c565b610883611541565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f20541661093157805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f84c8e535ea2c772fdcaab7fd1c78efb11d06931c5d61fd4b75fbff891da9cc005f80a2005b7f797f004b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576106cb60405161099b60408261122f565b600581527f302e352e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061130d565b3461018d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a6e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57610ac861120c565b60243567ffffffffffffffff811161018d573660238201121561018d57610af99036906024816004013591016112d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610e09575b50610a6e57335f9081527fed9de58436e9b79560facccca83f680a3a081e23309a653efa5857ae98e58c0d602052604090205460ff1615610db95773ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181610d85575b50610bf657837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc859203610d5a5750813b15610d2f57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610cfe575f8083602061025595519101845af43d15610cf6573d91610cda8361129d565b92610ce8604051948561122f565b83523d5f602085013e611be5565b606091611be5565b505034610d0757005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610db1575b81610da16020938361122f565b8101031261018d57519085610bc5565b3d9150610d94565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce60245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610b3b565b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5773ffffffffffffffffffffffffffffffffffffffff610e9761120c565b610e9f611541565b1680158015610f7a575b610f525773ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70055167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba70054168114610ea9565b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57610ff16111e9565b3373ffffffffffffffffffffffffffffffffffffffff82160361101a5761025590600435611828565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5761025560043561107f6111e9565b906110b861024b825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611716565b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760206111256004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b3461018d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361018d57817f7965db0b00000000000000000000000000000000000000000000000000000000602093149081156111bf575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836111b8565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018d57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018d57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761127057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161127057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926112e38261129d565b916112f1604051938461122f565b82948184528183011161018d578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561018d5782359167ffffffffffffffff831161018d576020808501948460051b01011161018d57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261018d5760043567ffffffffffffffff811161018d57816113ca91600401611350565b929092916024359067ffffffffffffffff821161018d576113ed91600401611350565b9091565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261018d576004359067ffffffffffffffff821161018d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc826101409203011261018d5760040190565b91908110156114715760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156114715760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18136030182121561018d570190565b919290818103610807575f91345b8284106114fe57505050505050600190565b611509848388611461565b358181116107df576115258161152087878a61149e565b611975565b1561153657600191039301926114ec565b505050505050505f90565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561157957565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156116005750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166117115773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f1461182257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f1461182257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b734200000000000000000000000000000000000021330361194d57565b7f4ca88867000000000000000000000000000000000000000000000000000000005f5260045ffd5b905060e081013573ffffffffffffffffffffffffffffffffffffffff811680910361018d575f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f20541690816119d2575090565b90506101208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561018d57810180359067ffffffffffffffff821161018d576020810191803603831361018d5781019060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083818601950301011261018d5760408101359067ffffffffffffffff821161018d57019080603f8301121561018d57611a98611ae2918360406020611ab696013591016112d7565b6040519283916020830195358652604080840152606083019061130d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261122f565b51902073ffffffffffffffffffffffffffffffffffffffff7f56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba700541691823b1561018d5760445f928360405195869485937f9b1a175f00000000000000000000000000000000000000000000000000000000855260048501523560248401525af18015611b8357611b73575b50600190565b5f611b7d9161122f565b5f611b6d565b6040513d5f823e3d90fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611bbd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611c225750805115611bfa57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611c75575b611c33575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611c2b56fea26469706673582212204f7c15078280def2a08206be38486d69785e21b8ed40af04ac3387918c7682d064736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "nonce": "0x1c", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": [ + "0x091dfe62D70FE2425621Bf06f7e71Ff0FdB06CCa", + "0xc4d66de8000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "transaction": { + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "gas": "0x35e5a", + "value": "0x0", + "input": "0x60806040526102a88038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b604051608d908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea264697066735822122000320d7070954ef1f15ac866cb97560066819462543386348d27b1d5c7bfe5c564736f6c634300081d0033000000000000000000000000091dfe62d70fe2425621bf06f7e71ff0fdb06cca00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d4595800000000000000000000000000000000000000000000000000000000", + "nonce": "0x1d", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": null, + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "gas": "0x12d66", + "value": "0x0", + "input": "0x2f2ff15d94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce000000000000000000000000d72b48ed00b67d756408a140435d8ef101f4a377", + "nonce": "0x1f", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "function": null, + "arguments": null, + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "gas": "0x12c0d", + "value": "0x0", + "input": "0x3b431e920000000000000000000000009c9bf29880448ab39795a11b669e22a0f1d790ec", + "nonce": "0x20", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x4200000000000000000000000000000000000020", + "function": "register(string,address,bool)", + "arguments": [ + "bytes32 codeHash,string domain", + "0x843fF433f7657901118fF3E2Eca915abb9BC12Df", + "true" + ], + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x4200000000000000000000000000000000000020", + "gas": "0x218a4", + "value": "0x0", + "input": "0x60d7a2780000000000000000000000000000000000000000000000000000000000000060000000000000000000000000843ff433f7657901118ff3e2eca915abb9bc12df0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e6279746573333220636f6465486173682c737472696e6720646f6d61696e0000", + "nonce": "0x21", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "function": "register(bytes32,bytes32)", + "arguments": [ + "0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280" + ], + "transaction": { + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "gas": "0x18e14", + "value": "0x0", + "input": "0x2f92673268053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280", + "nonce": "0x22", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2c3d8a", + "logs": [ + { + "address": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x502fe8226c2dbc8c55a3de6254efcffc986c4c6bea62f6484d185c030c8c4a23", + "blockNumber": "0xab616c", + "blockTimestamp": "0x692d4dc8", + "transactionHash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionIndex": "0x4", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000180000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdc35b3373f70f6be5f6cc722d03dc635ea8df86ecf4bca956692e959586ed409", + "transactionIndex": "0x4", + "blockHash": "0x502fe8226c2dbc8c55a3de6254efcffc986c4c6bea62f6484d185c030c8c4a23", + "blockNumber": "0xab616c", + "gasUsed": "0x19480e", + "effectiveGasPrice": "0xf42bd", + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "to": null, + "contractAddress": "0x091dfe62d70fe2425621bf06f7e71ff0fdb06cca", + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0xb67", + "l1GasPrice": "0x9", + "l1GasUsed": "0xb50e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x34b69", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000091dfe62d70fe2425621bf06f7e71ff0fdb06cca" + ], + "data": "0x", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958", + "0x0000000000000000000000000027b0882c92a1a86c5885fed632667e81e49e5f" + ], + "data": "0x", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "blockTimestamp": "0x692d4dcb", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000004040000000000000000000000400000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000000010000008000000002000000000000000000000000000000000000000000020000000000000000000800000000000000000000002000000000000000010000000000000800000000000000000000000080010008000000000000000000000000000000000000000000000000000000400000001000000000000000000020000000000000000000000000002000000004000100000000000020000000000000000000000000000000000000000000000000000000000100000000", + "type": "0x2", + "transactionHash": "0x13def499d4b8708699c7c023ad48433accf6c091cb9123cc419e1c1db293cf45", + "transactionIndex": "0x1", + "blockHash": "0x70543e1b89b27c199c48dca5faf690033d43cfb908ecb22f698e8f7b4145968e", + "blockNumber": "0xab616f", + "gasUsed": "0x29759", + "effectiveGasPrice": "0xf42bd", + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "to": null, + "contractAddress": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x251", + "l1GasPrice": "0x9", + "l1GasUsed": "0x24cf" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3c597", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce", + "0x000000000000000000000000d72b48ed00b67d756408a140435d8ef101f4a377", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "data": "0x", + "blockHash": "0xddfd230636fea35ff62126359f4b3800f2b1ab5aaf59cc1650e22582d134ddde", + "blockNumber": "0xab6171", + "blockTimestamp": "0x692d4dcd", + "transactionHash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionIndex": "0x3", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000004040000000000000000000000000000000000000000000000200000000008000000000000000000000000000000100000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000008000000000000000000000000020000000001000000000000000000000000000000000000000000000002000000000000100000000000000000000000000000000000000000000000000000000000000000000001100000000", + "type": "0x2", + "transactionHash": "0x06014a564051230d85f94713d042cd2463990ab476a9197771de18f7cdbd97d9", + "transactionIndex": "0x3", + "blockHash": "0xddfd230636fea35ff62126359f4b3800f2b1ab5aaf59cc1650e22582d134ddde", + "blockNumber": "0xab6171", + "gasUsed": "0xda36", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x6b", + "l1GasPrice": "0x9", + "l1GasUsed": "0x6a4" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x624e9", + "logs": [ + { + "address": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "topics": [ + "0xdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009c9bf29880448ab39795a11b669e22a0f1d790ec" + ], + "data": "0x", + "blockHash": "0xbd7a372d635036fc06d719b87325d50de9e04ddeb5b64a5d37c4baca6fe5e500", + "blockNumber": "0xab6174", + "blockTimestamp": "0x692d4dd0", + "transactionHash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionIndex": "0x4", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00000000040000000000000000000000000000000000000100000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000400000000020000000000000000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020020000000000000000000000000000000000000000000000000000001100000000", + "type": "0x2", + "transactionHash": "0xfab288b93c47b5cb72c03e8d0772c2694b7d3cb1859cfe5fa90301d528755010", + "transactionIndex": "0x4", + "blockHash": "0xbd7a372d635036fc06d719b87325d50de9e04ddeb5b64a5d37c4baca6fe5e500", + "blockNumber": "0xab6174", + "gasUsed": "0xcd2a", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x843ff433f7657901118ff3e2eca915abb9bc12df", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x64", + "l1GasPrice": "0x9", + "l1GasUsed": "0x640" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x32e20", + "logs": [ + { + "address": "0x4200000000000000000000000000000000000020", + "topics": [ + "0xd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280", + "0x000000000000000000000000e3fd5228ac2d2c15856959f9e27a4671c5d45958" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002055ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280000000000000000000000000843ff433f7657901118ff3e2eca915abb9bc12df00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001e6279746573333220636f6465486173682c737472696e6720646f6d61696e0000", + "blockHash": "0x87f7e2436a04a06f7a324439994f9760f27b2c944bbb1bd7c9f1a30834929c5a", + "blockNumber": "0xab6177", + "blockTimestamp": "0x692d4dd3", + "transactionHash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionIndex": "0x2", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000810000000000000000004000040000000010000000000000000000000000000800000000000000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x32ec7a003dff7d016ef33637483b0565bc883e778289df90987116961eedebe1", + "transactionIndex": "0x2", + "blockHash": "0x87f7e2436a04a06f7a324439994f9760f27b2c944bbb1bd7c9f1a30834929c5a", + "blockNumber": "0xab6177", + "gasUsed": "0x18485", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x4200000000000000000000000000000000000020", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x73", + "l1GasPrice": "0x9", + "l1GasUsed": "0x72a" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1c441", + "logs": [ + { + "address": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "topics": [ + "0x563ebecbb9df1c7112240e62907d4eb34dce7d568194f648e126e148bd9f275b", + "0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b", + "0x55ac1369dac97522d062b89ffdc4e752b48fbeba86915fdb956c7c2d0501d280" + ], + "data": "0x", + "blockHash": "0xc0bb5c88c9ac1c85c92075d92146eb0590b7bff0005dcb79c23a5dd078a3ebe4", + "blockNumber": "0xab617a", + "blockTimestamp": "0x692d4dd6", + "transactionHash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000010020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000004200000000000000000000000000000000000000400800000000000000000000000000000200000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5c83df6813bcba7f26bc26bd2bccad8d70e562b785c83b009d6187eeb210621a", + "transactionIndex": "0x1", + "blockHash": "0xc0bb5c88c9ac1c85c92075d92146eb0590b7bff0005dcb79c23a5dd078a3ebe4", + "blockNumber": "0xab617a", + "gasUsed": "0x11031", + "effectiveGasPrice": "0xf42bd", + "from": "0xe3fd5228ac2d2c15856959f9e27a4671c5d45958", + "to": "0x78cbb3413fbb6af05ef1d21e646440e56bae3ad6", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x71", + "l1GasPrice": "0x9", + "l1GasUsed": "0x710" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1764576757886, + "chain": 91342, + "commit": "6d96f64" +} \ No newline at end of file diff --git a/broadcast/Upgrade.s.sol/91342/run-1764577197151.json b/broadcast/Upgrade.s.sol/91342/run-1764577197151.json new file mode 100644 index 0000000..49c21e5 --- /dev/null +++ b/broadcast/Upgrade.s.sol/91342/run-1764577197151.json @@ -0,0 +1,127 @@ +{ + "transactions": [ + { + "hash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", + "transactionType": "CREATE", + "contractName": "DojangScroll", + "contractAddress": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "gas": "0x2d52f1", + "value": "0x0", + "input": "0x60a080604052346100c257306080525f5160206128e95f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161282290816100c78239608051818181610c0b0152610cfd0152f35b6001600160401b0319166001600160401b039081175f5160206128e95f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146113e85750806305d434d5146113cf57806314c444421461137e578063248a9ca31461130e5780632984d5a6146112b95780632f2ff15d1461123e57806336568abe146111b65780633b431e92146110a45780633d391035146110885780634ab3fd64146110385780634f1ef28614610c8357806352d1902d14610bc657806354fd4d5014610b495780636bee807b1461090e57806380abce10146108e857806386e3c7c61461089757806391d1485414610803578063a217fddf146107cb578063ad3cb1cc1461074a578063ba03e205146106fc578063c4d66de814610490578063d547741f1461040e578063d5fe8b63146102ff578063ec3a1e20146102a8578063f72c0d8b146102505763fddb843b1461013a575f80fd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff61018661153d565b61018e611e0b565b168015801561022b575b6102035773ffffffffffffffffffffffffffffffffffffffff600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f56a88b858fc673d2ba943657de48abe642ad371325825e357fa28413cdbbcdfc5f80a3005b7f97c39864000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff600154168114610198565b5f80fd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040517f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f8152f35b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206102ed6102e461153d565b60243590612476565b6102f681611d33565b51604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff61034b61153d565b610353611e0b565b16801580156103ee575b6103c65773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f65c0d85604294186a63b32cc4a5a76ea89245daaff1c29065ea588c5fc9196fd5f80a3005b7f69aaebdb000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5416811461035d565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761048e60043561044b61151a565b90610489610484825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611e73565b6120ed565b005b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576104c761153d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff8116801590816106f4575b60011490816106ea575b1590816106e1575b506106b9578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610664575b5073ffffffffffffffffffffffffffffffffffffffff81161561063c576105a2906105956126fc565b61059d6126fc565b611ef9565b506105a957005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558261056c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610519565b303b159150610511565b849150610507565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602061074061073b6102e461153d565b611b7f565b6040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576107c76040516107896040826115e7565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611698565b0390f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040515f8152f35b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761083a61151a565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461024c5760206102ed6109086108fe366114a4565b9391903691611662565b90611876565b3461024c5761091c36611560565b9261094061092f858486859796976121f5565b9461093986611d33565b8484611b94565b9361094a85611d33565b6101208501519060a08280518101031261024c576020820151916060610972604083016116db565b91015177ffffffffffffffffffffffffffffffffffffffffffffffff81160361024c5761012082015196875188016060896020830192031261024c5760208901519860608101519067ffffffffffffffff821161024c570181603f8201121561024c5760208101519067ffffffffffffffff8211610b1c57602080808460051b9460405190610a03838801836115e7565b815201938301010192831161024c579060408994939201905b828210610b09575050505160a08401511493841594610afe575b50508215610ae6575b508115610aab575b50610a5757602084604051908152f35b67ffffffffffffffff935073ffffffffffffffffffffffffffffffffffffffff907f33fcb907000000000000000000000000000000000000000000000000000000005f52166004526024521660445260645ffd5b73ffffffffffffffffffffffffffffffffffffffff915060c001511673ffffffffffffffffffffffffffffffffffffffff8216141585610a47565b67ffffffffffffffff86811691161415915086610a3f565b141592508488610a36565b8151815289945060209182019101610a1c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576107c7604051610b886040826115e7565b600581527f302e352e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611698565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c5b5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57610cb561153d565b60243567ffffffffffffffff811161024c573660238201121561024c57610ce6903690602481600401359101611662565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610ff6575b50610c5b57335f9081527fb13845a86f7d916157cb690bfc11ef193afbec43de99a66b9b7ec445b813a050602052604090205460ff1615610fa65773ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181610f72575b50610de357837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc859203610f475750813b15610f1c57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610eeb575f8083602061048e95519101845af43d15610ee3573d91610ec783611628565b92610ed560405194856115e7565b83523d5f602085013e612753565b606091612753565b505034610ef457005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610f9e575b81610f8e602093836115e7565b8101031261024c57519085610db2565b3d9150610f81565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f60245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610d28565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461024c5760206102ed61109b36611560565b929190916121f5565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff6110f061153d565b6110f8611e0b565b1680158015611195575b61116d5773ffffffffffffffffffffffffffffffffffffffff600254827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600255167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff600254168114611102565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576111ed61151a565b3373ffffffffffffffffffffffffffffffffffffffff8216036112165761048e906004356120ed565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761048e60043561127b61151a565b906112b4610484825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611fdb565b3461024c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760243567ffffffffffffffff8116810361024c576102ed60209160443590600435611b94565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206113766004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461024c57602061074061073b6109086108fe366114a4565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361024c57817f7965db0b000000000000000000000000000000000000000000000000000000006020931490811561147a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611473565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261024c576004359160243567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060443590565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc608091011261024c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361024c57906024359060443567ffffffffffffffff8116810361024c579060643590565b610140810190811067ffffffffffffffff821117610b1c57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b1c57604052565b67ffffffffffffffff8111610b1c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261166e82611628565b9161167c60405193846115e7565b82948184528183011161024c578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b519067ffffffffffffffff8216820361024c57565b604051906116fd826115ca565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b519073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b60208183031261024c5780519067ffffffffffffffff821161024c5701906101408282031261024c5760405191611791836115ca565b80518352602081015160208401526117ab604082016116db565b60408401526117bc606082016116db565b60608401526117cd608082016116db565b608084015260a081015160a08401526117e860c0820161173a565b60c08401526117f960e0820161173a565b60e0840152610100810151801515810361024c576101008401526101208101519067ffffffffffffffff821161024c570181601f8201121561024c5780519061184182611628565b9261184f60405194856115e7565b8284526020838301011161024c57815f9260208093018386015e8301015261012082015290565b91906024906118836116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b60048301525afa918215611ac0575f92611b4b575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93611afd575b5090611a35936119886119b4602095946040519283918883019586526040808401526060830190611698565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826115e7565b5190209173ffffffffffffffffffffffffffffffffffffffff6002541691604051958694859384937f23b9b7560000000000000000000000000000000000000000000000000000000085526004850173ffffffffffffffffffffffffffffffffffffffff606092959493608083019683521660208201525f60408201520152565b03915afa908115611ac0575f91611acb575b50604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b611abd91503d805f833e611ab581836115e7565b81019061175b565b90565b6040513d5f823e3d90fd5b90506020813d602011611af5575b81611ae6602093836115e7565b8101031261024c57515f611a47565b3d9150611ad9565b9250906020833d602011611b43575b81611b19602093836115e7565b8101031261024c57611a35936119886119b4611b3660209661173a565b955050509391909161195c565b3d9150611b0c565b9091506020813d602011611b77575b81611b67602093836115e7565b8101031261024c5751905f6118fe565b3d9150611b5a565b805115611b8f57611abd906126ae565b505f90565b9190602490611ba16116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527ff09c1384d860519bb4ea5bb2a45ab64b00a8d900d47fb79203663be6da21e06c60048301525afa918215611ac0575f92611cff575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93611cb1575b5090611a35936119886119b460209594604051928391888301958690929167ffffffffffffffff6020916040840195845216910152565b9250906020833d602011611cf7575b81611ccd602093836115e7565b8101031261024c57611a35936119886119b4611cea60209661173a565b9550505093919091611c7a565b3d9150611cc0565b9091506020813d602011611d2b575b81611d1b602093836115e7565b8101031261024c5751905f611c1c565b3d9150611d0e565b805115611de35767ffffffffffffffff60608201511680151580611dcf575b611d9f575067ffffffffffffffff6080820151169081611d70575050565b517f0b64def1000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90517f8a1b950b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5067ffffffffffffffff4216811115611d52565b7f6e7910da000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611e4357565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615611eca5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611b8f5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f146120e757805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f146120e757805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b9291906024916122036116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051948580927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f06c3bd846f5ea60b0b6f5a835ef85fd8253b53f67917d6c690be628d032f841b60048301525afa928315611ac0575f93612442575b50602073ffffffffffffffffffffffffffffffffffffffff60015416946024604051809781937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa938415611ac0575f946123dc575b509173ffffffffffffffffffffffffffffffffffffffff94608492611988612328602097966040519283918a8301958690929167ffffffffffffffff6020916040840195845216910152565b5190208680600254169260405198899788967f23b9b756000000000000000000000000000000000000000000000000000000008852600488015216602486015216604484015260648301525afa908115611ac0575f91611acb5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b919350916020823d60201161243a575b816123f9602093836115e7565b8101031261024c5773ffffffffffffffffffffffffffffffffffffffff9460209461198861232861242b60849661173a565b975050509250949290926122dc565b3d91506123ec565b9092506020813d60201161246e575b8161245e602093836115e7565b8101031261024c5751915f61227e565b3d9150612451565b6024906124816116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f568eb581cdf80b03d3bdfa414f3203bfdcc4bba4e66355612bd0e879da812f0660048301525afa918215611ac0575f9261267a575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93612623575b5091606460209273ffffffffffffffffffffffffffffffffffffffff948580600254169160405197889687957ff20f03bc00000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa908115611ac0575f91611acb5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b92506020833d602011612672575b8161263e602093836115e7565b8101031261024c57606460209261266973ffffffffffffffffffffffffffffffffffffffff9561173a565b9450925061255a565b3d9150612631565b9091506020813d6020116126a6575b81612696602093836115e7565b8101031261024c5751905f6124fc565b3d9150612689565b67ffffffffffffffff60608201511680151590816126e7575b50611b8f576080015167ffffffffffffffff166126e357600190565b5f90565b905067ffffffffffffffff421610155f6126c7565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561272b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612790575080511561276857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806127e3575b6127a1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561279956fea264697066735822122015af1bcc7bb6052080eb14e90fe726c860f6b152f5745a35c2724b334920ec7264736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "nonce": "0x1e", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", + "function": "upgradeToAndCall(address,bytes)", + "arguments": [ + "0x96dEC25E32dE5A4c0fbCbDc341f66e7C173773A5", + "0x" + ], + "transaction": { + "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", + "to": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", + "gas": "0xc8dc", + "value": "0x0", + "input": "0x4f1ef28600000000000000000000000096dec25e32de5a4c0fbcbdc341f66e7c173773a500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x8", + "chainId": "0x164ce" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x239167", + "logs": [ + { + "address": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xa1fe42f1fdb41b23a6bfd14d04c006b837f7ed052a05e9127f712ec4437f72f5", + "blockNumber": "0xab633f", + "blockTimestamp": "0x692d4f9b", + "transactionHash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000010000000000000000000000000", + "type": "0x2", + "transactionHash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", + "transactionIndex": "0x1", + "blockHash": "0xa1fe42f1fdb41b23a6bfd14d04c006b837f7ed052a05e9127f712ec4437f72f5", + "blockNumber": "0xab633f", + "gasUsed": "0x22dd57", + "effectiveGasPrice": "0xf433b", + "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", + "to": null, + "contractAddress": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x10aa", + "l1GasPrice": "0xb", + "l1GasUsed": "0xfd84" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1457c", + "logs": [ + { + "address": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000096dec25e32de5a4c0fbcbdc341f66e7c173773a5" + ], + "data": "0x", + "blockHash": "0xa678a735ccd6d8017aab91a7cb4a8704ad9c73de587571a66943cedf42fb0b29", + "blockNumber": "0xab6341", + "blockTimestamp": "0x692d4f9d", + "transactionHash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x20000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000020000000008000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", + "transactionIndex": "0x1", + "blockHash": "0xa678a735ccd6d8017aab91a7cb4a8704ad9c73de587571a66943cedf42fb0b29", + "blockNumber": "0xab6341", + "gasUsed": "0x916c", + "effectiveGasPrice": "0xf433b", + "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", + "to": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", + "contractAddress": null, + "l1BaseFeeScalar": "0x558", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xc5fc5", + "l1Fee": "0x69", + "l1GasPrice": "0xb", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1764577197151, + "chain": 91342, + "commit": "6d96f64" +} \ No newline at end of file diff --git a/broadcast/Upgrade.s.sol/91342/run-latest.json b/broadcast/Upgrade.s.sol/91342/run-latest.json index ad5b692..49c21e5 100644 --- a/broadcast/Upgrade.s.sol/91342/run-latest.json +++ b/broadcast/Upgrade.s.sol/91342/run-latest.json @@ -1,80 +1,40 @@ { "transactions": [ { - "hash": "0x8aac8ef2f4de78d5787013cb36507596211feaeb81ce1ef0e0077257a8fa5e81", - "transactionType": "CREATE", - "contractName": "BalanceDojangResolver", - "contractAddress": "0xf6c4eda48027b2e86c396e9be4052eb46c4cf553", - "function": null, - "arguments": null, - "transaction": { - "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", - "gas": "0x277e58", - "value": "0x0", - "input": "0x60a080604052346100c257306080525f5160206123915f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b6040516122ca90816100c78239608051818181610ace0152610bed0152f35b6001600160401b0319166001600160401b039081175f5160206123915f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610042575b50361561001a575f80fd5b7f1574f9f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c90816301ffc9a71461120857508063248a9ca3146111985780632f2ff15d1461111d57806336568abe146110955780633b431e9214610f265780634f1ef28614610b4657806352d1902d14610a8957806354fd4d5014610a1457806372327553146108e757806388e5b2d91461083a57806391d14854146107a657806391db0b7e14610787578063a217fddf14610262578063a344bbe8146106e2578063ad3cb1cc14610669578063c4d66de8146103c5578063cc78fef11461029a578063ce46e04614610262578063d547741f146101e0578063e49617e1146101c3578063e60c35051461019c5763f72c0d8b14610140575f61000f565b34610198575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985760206040517f8421c86537ca8724814af8dd9a3536c8129b6f4ebed2c873a3cb4c7f1ef851b18152f35b5f80fd5b60206101b96101aa3661149b565b6101b26119da565b3490611a1f565b6040519015158152f35b6101cc3661149b565b506101d56119da565b602060405160018152f35b346101985760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985761026060043561021d6112c4565b9061025b610256825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611653565b6118d2565b005b34610198575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985760206040515f8152f35b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985773ffffffffffffffffffffffffffffffffffffffff6102e66112e7565b6102ee6115eb565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f2054161561039a57805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f368846ed588a2fb12b4fabffde520ad537df26ea80ad789b60afc37c5cc7fe6b5f80a2005b7fd5c40fc8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610198576103fc6112e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff811680159081610661575b6001149081610657575b15908161064e575b50610626578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556105d1575b5073ffffffffffffffffffffffffffffffffffffffff8116156105a95761050f906104ca6121a4565b6104d26121a4565b6104da6121a4565b6104e26121a4565b6104ea6121a4565b6104f26121a4565b6104fa6121a4565b6105026121a4565b61050a6121a4565b6116d9565b5061051657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055826104a1565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158461044e565b303b159150610446565b84915061043c565b34610198575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610198576106de6040516106a860408261130a565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291826113b2565b0390f35b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985760043561071c6115eb565b807f2a69b9ad7364f276a616f7187fc857f1063f993b4c2cf91bd2106690bff73100547f1d1068e1bdc899d4e2fb3ecfb15c3ca2b054770397d926d2e40a3c0c57ceb9ce5f80a37f2a69b9ad7364f276a616f7187fc857f1063f993b4c2cf91bd2106690bff7310055005b60206101b96107953661142b565b926107a19291926119da565b611588565b346101985760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610198576107dd6112c4565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b6108433661142b565b61084e9291926119da565b8082036108bf575f90345b83831061086c5760405160018152602090f35b61087783838761150b565b358181116108975760019161088d85878a611548565b5003920191610859565b7f11011294000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f947d5a84000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985773ffffffffffffffffffffffffffffffffffffffff6109336112e7565b61093b6115eb565b16805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f2054166109e957805f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f84c8e535ea2c772fdcaab7fd1c78efb11d06931c5d61fd4b75fbff891da9cc005f80a2005b7f797f004b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610198575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610198576106de604051610a5360408261130a565b600581527f302e342e300000000000000000000000000000000000000000000000000000006020820152604051918291826113b2565b34610198575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b1e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019857610b786112e7565b6024359067ffffffffffffffff8211610198573660238301121561019857816004013590610ba582611378565b91610bb3604051938461130a565b8083526020830193366024838301011161019857815f9260246020930187378401015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610ee4575b50610b1e57335f9081527fa59e0aacf128413a4d5ffa6c6412cdf840f3602520f22c756745e1611cc38f2e602052604090205460ff1615610e945773ffffffffffffffffffffffffffffffffffffffff8116926040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181610e60575b50610cd357847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc869203610e355750823b15610e0a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115610dd8575f8091610260945190845af43d15610dd0573d91610db483611378565b92610dc2604051948561130a565b83523d5f602085013e6121fb565b6060916121fb565b50505034610de257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610e8c575b81610e7c6020938361130a565b8101031261019857519086610ca2565b3d9150610e6f565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f8421c86537ca8724814af8dd9a3536c8129b6f4ebed2c873a3cb4c7f1ef851b160245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141584610c18565b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985773ffffffffffffffffffffffffffffffffffffffff610f726112e7565b610f7a6115eb565b1680158015611055575b61102d5773ffffffffffffffffffffffffffffffffffffffff7f1daeb03bc251932f84305b1d992090c50f663b400469e848b99f0e227fbdb20054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f1daeb03bc251932f84305b1d992090c50f663b400469e848b99f0e227fbdb20055167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f1daeb03bc251932f84305b1d992090c50f663b400469e848b99f0e227fbdb20054168114610f84565b346101985760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610198576110cc6112c4565b3373ffffffffffffffffffffffffffffffffffffffff8216036110f557610260906004356118d2565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101985760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985761026060043561115a6112c4565b90611193610256825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6117c0565b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101985760206112006004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b346101985760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019857600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361019857817f7965db0b000000000000000000000000000000000000000000000000000000006020931490811561129a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611293565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361019857565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019857565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761134b57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161134b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9181601f840112156101985782359167ffffffffffffffff8311610198576020808501948460051b01011161019857565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101985760043567ffffffffffffffff81116101985781611474916004016113fa565b929092916024359067ffffffffffffffff821161019857611497916004016113fa565b9091565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610198576004359067ffffffffffffffff8211610198577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82610140920301126101985760040190565b919081101561151b5760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b919081101561151b5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec181360301821215610198570190565b9192908181036108bf575f91345b8284106115a857505050505050600190565b6115b384838861150b565b35818111610897576115cf816115ca87878a611548565b611a1f565b156115e05760019103930192611596565b505050505050505f90565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561162357565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156116aa5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166117bb5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f146118cc57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f146118cc57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b73420000000000000000000000000000000000002133036119f757565b7f4ca88867000000000000000000000000000000000000000000000000000000005f5260045ffd5b91905060a0820135916040517fa3112a640000000000000000000000000000000000000000000000000000000081528360048201525f816024817342000000000000000000000000000000000000215afa908115611e29575f91611fb7575b507f2a69b9ad7364f276a616f7187fc857f1063f993b4c2cf91bd2106690bff7310054815115611f8f5767ffffffffffffffff60608301511680151580611f7b575b611f4b575067ffffffffffffffff60808301511680611f1b575073ffffffffffffffffffffffffffffffffffffffff60c08301511680611eec57506020820151818103611ebe575050610120611b2191015160208082518301019101612134565b9593505050506101208201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112156101985782019384359467ffffffffffffffff861161019857602081019580360387136101985781019560607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084818b019a0301011261019857606082013567ffffffffffffffff81116101985782019680603f890112156101985760208801359767ffffffffffffffff891161134b578860051b9060405199611bfe602084018c61130a565b8a52602080808c01938301010192831161019857604001905b828210611eae575050506040611c2f60c08701612183565b9281519273ffffffffffffffffffffffffffffffffffffffff602085019516855235828401520135606082015260608152611c6b60808261130a565b5190206040516020810191825260208152611c8760408261130a565b519020925f935b8651851015611cd05760208560051b88010151908181105f14611cbf575f52602052600160405f205b940193611c8e565b905f52602052600160405f20611cb7565b91949295509250149182611e56575b82611ce957505090565b909150604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611e2957611d5c91610120915f91611e34575b50015160208082518301019101612134565b50505067ffffffffffffffff604051916020830193845216604082015260408152611d8860608261130a565b51902073ffffffffffffffffffffffffffffffffffffffff7f1daeb03bc251932f84305b1d992090c50f663b400469e848b99f0e227fbdb200541691823b156101985760445f928360405195869485937f9b1a175f00000000000000000000000000000000000000000000000000000000855260048501523560248401525af18015611e2957611e19575b50600190565b5f611e239161130a565b5f611e13565b6040513d5f823e3d90fd5b611e5091503d805f833e611e48818361130a565b810190612007565b5f611d4a565b915073ffffffffffffffffffffffffffffffffffffffff611e7960e08301612183565b165f527fd852276f09be10fac28953842991572f8a5e8e0a6613bca011479db2d659a50060205260ff60405f20541691611cdf565b8135815260209182019101611c17565b7f2f9119e8000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7fd1089f58000000000000000000000000000000000000000000000000000000005f526004525f60245260445ffd5b82517f0b64def1000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b82517f8a1b950b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5067ffffffffffffffff4216811115611ac0565b7f6e7910da000000000000000000000000000000000000000000000000000000005f5260045ffd5b611fcb91503d805f833e611e48818361130a565b5f611a7e565b519067ffffffffffffffff8216820361019857565b519073ffffffffffffffffffffffffffffffffffffffff8216820361019857565b6020818303126101985780519067ffffffffffffffff8211610198570190610140828203126101985760405191610140830183811067ffffffffffffffff82111761134b57604052805183526020810151602084015261206960408201611fd1565b604084015261207a60608201611fd1565b606084015261208b60808201611fd1565b608084015260a081015160a08401526120a660c08201611fe6565b60c08401526120b760e08201611fe6565b60e08401526101008101518015158103610198576101008401526101208101519067ffffffffffffffff8211610198570181601f82011215610198578051906120ff82611378565b9261210d604051948561130a565b8284526020838301011161019857815f9260208093018386015e8301015261012082015290565b908160a09103126101985780519161214e60208301611fd1565b91604081015177ffffffffffffffffffffffffffffffffffffffffffffffff8116810361019857916080606083015192015190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101985790565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156121d357565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612238575080511561221057805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061228b575b612249575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561224156fea26469706673582212200c8ea378325c508b7c0fb3658796338e937db7514660889886280de220623d6664736f6c634300081e0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", - "nonce": "0x18", - "chainId": "0x164ce" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0x8b177fdac6c22fcfe16a1696da3d509af13488a8716417503735881b62b8f919", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x6ffa7abc1e380bb967c78d5e648ef804e1fe6dad", - "function": "upgradeToAndCall(address,bytes)", - "arguments": [ - "0xF6C4Eda48027b2E86c396e9BE4052Eb46C4cf553", - "0x" - ], - "transaction": { - "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", - "to": "0x6ffa7abc1e380bb967c78d5e648ef804e1fe6dad", - "gas": "0xc7cb", - "value": "0x0", - "input": "0x4f1ef286000000000000000000000000f6c4eda48027b2e86c396e9be4052eb46c4cf55300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x6", - "chainId": "0x164ce" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0x6626aeff2c1cd20ff7fcfff20f258dd3eb0c4557adf4abc1a33fcd0f630231d3", + "hash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", "transactionType": "CREATE", "contractName": "DojangScroll", - "contractAddress": "0x42c8025fc691edeab5846989dc4bd1c95daeb4a9", + "contractAddress": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", "function": null, "arguments": null, "transaction": { "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", - "gas": "0x2a8c66", + "gas": "0x2d52f1", "value": "0x0", - "input": "0x60a080604052346100c257306080525f51602061265f5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161259890816100c78239608051818181610bbf0152610cde0152f35b6001600160401b0319166001600160401b039081175f51602061265f5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146113ae5750806314c444421461135d578063248a9ca3146112ed5780632984d5a6146112985780632f2ff15d1461121d57806336568abe146111955780633b431e92146110835780633d391035146110675780634ab3fd64146110175780634f1ef28614610c3757806352d1902d14610b7a57806354fd4d5014610b055780636bee807b146108ca57806386e3c7c61461087957806391d14854146107e5578063a217fddf146107ad578063ad3cb1cc14610734578063ba03e205146106e6578063c4d66de81461047a578063d547741f146103f8578063d5fe8b63146102e9578063ec3a1e2014610292578063f72c0d8b1461023a5763fddb843b14610124575f80fd5b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365773ffffffffffffffffffffffffffffffffffffffff61017061148d565b610178611b71565b1680158015610215575b6101ed5773ffffffffffffffffffffffffffffffffffffffff600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f56a88b858fc673d2ba943657de48abe642ad371325825e357fa28413cdbbcdfc5f80a3005b7f97c39864000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff600154168114610182565b5f80fd5b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365760206040517f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f8152f35b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365760206102d76102ce61148d565b602435906121e1565b6102e081611a99565b51604051908152f35b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365773ffffffffffffffffffffffffffffffffffffffff61033561148d565b61033d611b71565b16801580156103d8575b6103b05773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f65c0d85604294186a63b32cc4a5a76ea89245daaff1c29065ea588c5fc9196fd5f80a3005b7f69aaebdb000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f54168114610347565b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365761047860043561043561146a565b9061047361046e825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611bd9565b611e58565b005b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610236576104b161148d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff8116801590816106de575b60011490816106d4575b1590816106cb575b506106a3578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561064e575b5073ffffffffffffffffffffffffffffffffffffffff8116156106265761058c9061057f612472565b610587612472565b611c5f565b5061059357005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005582610556565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610503565b303b1591506104fb565b8491506104f1565b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657602061072a6107256102ce61148d565b612419565b6040519015158152f35b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610236576107a9604051610773604082611537565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291826115b2565b0390f35b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365760206040515f8152f35b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365761081c61146a565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610236576108d8366114b0565b926108fc6108eb85848685979697611f60565b946108f586611a99565b8484611795565b9361090685611a99565b6101208501519060a08280518101031261023657602082015191606061092e604083016115fa565b91015177ffffffffffffffffffffffffffffffffffffffffffffffff811603610236576101208201519687518801606089602083019203126102365760208901519860608101519067ffffffffffffffff8211610236570181603f820112156102365760208101519067ffffffffffffffff8211610ad857602080808460051b94604051906109bf83880183611537565b8152019383010101928311610236579060408994939201905b828210610ac5575050505160a08401511493841594610aba575b50508215610aa2575b508115610a67575b50610a1357602084604051908152f35b67ffffffffffffffff935073ffffffffffffffffffffffffffffffffffffffff907f33fcb907000000000000000000000000000000000000000000000000000000005f52166004526024521660445260645ffd5b73ffffffffffffffffffffffffffffffffffffffff915060c001511673ffffffffffffffffffffffffffffffffffffffff8216141585610a03565b67ffffffffffffffff868116911614159150866109fb565b1415925084886109f2565b81518152899450602091820191016109d8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610236576107a9604051610b44604082611537565b600581527f302e342e300000000000000000000000000000000000000000000000000000006020820152604051918291826115b2565b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c0f5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657610c6961148d565b6024359067ffffffffffffffff8211610236573660238301121561023657816004013590610c9682611578565b91610ca46040519384611537565b8083526020830193366024838301011161023657815f9260246020930187378401015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610fd5575b50610c0f57335f9081527fb13845a86f7d916157cb690bfc11ef193afbec43de99a66b9b7ec445b813a050602052604090205460ff1615610f855773ffffffffffffffffffffffffffffffffffffffff8116926040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181610f51575b50610dc457847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc869203610f265750823b15610efb57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115610ec9575f8091610478945190845af43d15610ec1573d91610ea583611578565b92610eb36040519485611537565b83523d5f602085013e6124c9565b6060916124c9565b50505034610ed357005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610f7d575b81610f6d60209383611537565b8101031261023657519086610d93565b3d9150610f60565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f60245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141584610d09565b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346102365760206102d761107a366114b0565b92919091611f60565b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365773ffffffffffffffffffffffffffffffffffffffff6110cf61148d565b6110d7611b71565b1680158015611174575b61114c5773ffffffffffffffffffffffffffffffffffffffff600254827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600255167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff6002541681146110e1565b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610236576111cc61146a565b3373ffffffffffffffffffffffffffffffffffffffff8216036111f55761047890600435611e58565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102365760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365761047860043561125a61146a565b9061129361046e825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611d46565b346102365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365760243567ffffffffffffffff81168103610236576102d760209160443590600435611795565b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102365760206113556004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b34610236575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102365760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023657600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361023657817f7965db0b0000000000000000000000000000000000000000000000000000000060209314908115611440575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611439565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361023657565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361023657565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60809101126102365760043573ffffffffffffffffffffffffffffffffffffffff8116810361023657906024359060443567ffffffffffffffff81168103610236579060643590565b610140810190811067ffffffffffffffff821117610ad857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ad857604052565b67ffffffffffffffff8111610ad857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b519067ffffffffffffffff8216820361023657565b6040519061161c8261151a565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b519073ffffffffffffffffffffffffffffffffffffffff8216820361023657565b6020818303126102365780519067ffffffffffffffff82116102365701906101408282031261023657604051916116b08361151a565b80518352602081015160208401526116ca604082016115fa565b60408401526116db606082016115fa565b60608401526116ec608082016115fa565b608084015260a081015160a084015261170760c08201611659565b60c084015261171860e08201611659565b60e08401526101008101518015158103610236576101008401526101208101519067ffffffffffffffff8211610236570181601f820112156102365780519061176082611578565b9261176e6040519485611537565b8284526020838301011161023657815f9260208093018386015e8301015261012082015290565b602492916117a161160f565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051958680927f54d4f9db0000000000000000000000000000000000000000000000000000000082527ff09c1384d860519bb4ea5bb2a45ab64b00a8d900d47fb79203663be6da21e06c60048301525afa9384156119c4575f94611a65575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa9283156119c4575f93611a01575b5073ffffffffffffffffffffffffffffffffffffffff93602093926118c56118f1608494604051928391898301958690929167ffffffffffffffff6020916040840195845216910152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611537565b51902085600254169060405196879586947f23b9b75600000000000000000000000000000000000000000000000000000000865260048601521660248401525f604484015260648301525afa9081156119c4575f916119cf575b50604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa9081156119c4575f916119a5575090565b6119c191503d805f833e6119b98183611537565b81019061167a565b90565b6040513d5f823e3d90fd5b90506020813d6020116119f9575b816119ea60209383611537565b8101031261023657515f61194b565b3d91506119dd565b909192506020813d602011611a5d575b81611a1e60209383611537565b810103126102365773ffffffffffffffffffffffffffffffffffffffff936020936118c56118f1611a50608495611659565b965050509291509361187a565b3d9150611a11565b9093506020813d602011611a91575b81611a8160209383611537565b810103126102365751925f61181c565b3d9150611a74565b805115611b495767ffffffffffffffff60608201511680151580611b35575b611b05575067ffffffffffffffff6080820151169081611ad6575050565b517f0b64def1000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90517f8a1b950b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5067ffffffffffffffff4216811115611ab8565b7f6e7910da000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611ba957565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615611c305750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611d415773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f14611e5257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f14611e5257805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b929190602491611f6e61160f565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051948580927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f06c3bd846f5ea60b0b6f5a835ef85fd8253b53f67917d6c690be628d032f841b60048301525afa9283156119c4575f936121ad575b50602073ffffffffffffffffffffffffffffffffffffffff60015416946024604051809781937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa9384156119c4575f94612147575b509173ffffffffffffffffffffffffffffffffffffffff946084926118c5612093602097966040519283918a8301958690929167ffffffffffffffff6020916040840195845216910152565b5190208680600254169260405198899788967f23b9b756000000000000000000000000000000000000000000000000000000008852600488015216602486015216604484015260648301525afa9081156119c4575f916119cf5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa9081156119c4575f916119a5575090565b919350916020823d6020116121a5575b8161216460209383611537565b810103126102365773ffffffffffffffffffffffffffffffffffffffff946020946118c5612093612196608496611659565b97505050925094929092612047565b3d9150612157565b9092506020813d6020116121d9575b816121c960209383611537565b810103126102365751915f611fe9565b3d91506121bc565b6024906121ec61160f565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f568eb581cdf80b03d3bdfa414f3203bfdcc4bba4e66355612bd0e879da812f0660048301525afa9182156119c4575f926123e5575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa9283156119c4575f9361238e575b5091606460209273ffffffffffffffffffffffffffffffffffffffff948580600254169160405197889687957ff20f03bc00000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa9081156119c4575f916119cf5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa9081156119c4575f916119a5575090565b92506020833d6020116123dd575b816123a960209383611537565b810103126102365760646020926123d473ffffffffffffffffffffffffffffffffffffffff95611659565b945092506122c5565b3d915061239c565b9091506020813d602011612411575b8161240160209383611537565b810103126102365751905f612267565b3d91506123f4565b805115611d41576119c19067ffffffffffffffff606082015116801515908161245d575b50611d41576080015167ffffffffffffffff1661245957600190565b5f90565b905067ffffffffffffffff421610155f61243d565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156124a157565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061250657508051156124de57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612559575b612517575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561250f56fea26469706673582212205526856034df3da23769cb5b7945750c55e9407aa7bdcde21dadeb46a590c95764736f6c634300081e0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", - "nonce": "0x19", + "input": "0x60a080604052346100c257306080525f5160206128e95f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161282290816100c78239608051818181610c0b0152610cfd0152f35b6001600160401b0319166001600160401b039081175f5160206128e95f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146113e85750806305d434d5146113cf57806314c444421461137e578063248a9ca31461130e5780632984d5a6146112b95780632f2ff15d1461123e57806336568abe146111b65780633b431e92146110a45780633d391035146110885780634ab3fd64146110385780634f1ef28614610c8357806352d1902d14610bc657806354fd4d5014610b495780636bee807b1461090e57806380abce10146108e857806386e3c7c61461089757806391d1485414610803578063a217fddf146107cb578063ad3cb1cc1461074a578063ba03e205146106fc578063c4d66de814610490578063d547741f1461040e578063d5fe8b63146102ff578063ec3a1e20146102a8578063f72c0d8b146102505763fddb843b1461013a575f80fd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff61018661153d565b61018e611e0b565b168015801561022b575b6102035773ffffffffffffffffffffffffffffffffffffffff600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f56a88b858fc673d2ba943657de48abe642ad371325825e357fa28413cdbbcdfc5f80a3005b7f97c39864000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff600154168114610198565b5f80fd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040517f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f8152f35b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206102ed6102e461153d565b60243590612476565b6102f681611d33565b51604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff61034b61153d565b610353611e0b565b16801580156103ee575b6103c65773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f65c0d85604294186a63b32cc4a5a76ea89245daaff1c29065ea588c5fc9196fd5f80a3005b7f69aaebdb000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5416811461035d565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761048e60043561044b61151a565b90610489610484825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611e73565b6120ed565b005b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576104c761153d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff8116801590816106f4575b60011490816106ea575b1590816106e1575b506106b9578260017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610664575b5073ffffffffffffffffffffffffffffffffffffffff81161561063c576105a2906105956126fc565b61059d6126fc565b611ef9565b506105a957005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558261056c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610519565b303b159150610511565b849150610507565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602061074061073b6102e461153d565b611b7f565b6040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576107c76040516107896040826115e7565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611698565b0390f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040515f8152f35b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761083a61151a565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461024c5760206102ed6109086108fe366114a4565b9391903691611662565b90611876565b3461024c5761091c36611560565b9261094061092f858486859796976121f5565b9461093986611d33565b8484611b94565b9361094a85611d33565b6101208501519060a08280518101031261024c576020820151916060610972604083016116db565b91015177ffffffffffffffffffffffffffffffffffffffffffffffff81160361024c5761012082015196875188016060896020830192031261024c5760208901519860608101519067ffffffffffffffff821161024c570181603f8201121561024c5760208101519067ffffffffffffffff8211610b1c57602080808460051b9460405190610a03838801836115e7565b815201938301010192831161024c579060408994939201905b828210610b09575050505160a08401511493841594610afe575b50508215610ae6575b508115610aab575b50610a5757602084604051908152f35b67ffffffffffffffff935073ffffffffffffffffffffffffffffffffffffffff907f33fcb907000000000000000000000000000000000000000000000000000000005f52166004526024521660445260645ffd5b73ffffffffffffffffffffffffffffffffffffffff915060c001511673ffffffffffffffffffffffffffffffffffffffff8216141585610a47565b67ffffffffffffffff86811691161415915086610a3f565b141592508488610a36565b8151815289945060209182019101610a1c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576107c7604051610b886040826115e7565b600581527f302e352e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611698565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c5b5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57610cb561153d565b60243567ffffffffffffffff811161024c573660238201121561024c57610ce6903690602481600401359101611662565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610ff6575b50610c5b57335f9081527fb13845a86f7d916157cb690bfc11ef193afbec43de99a66b9b7ec445b813a050602052604090205460ff1615610fa65773ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181610f72575b50610de357837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc859203610f475750813b15610f1c57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610eeb575f8083602061048e95519101845af43d15610ee3573d91610ec783611628565b92610ed560405194856115e7565b83523d5f602085013e612753565b606091612753565b505034610ef457005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610f9e575b81610f8e602093836115e7565b8101031261024c57519085610db2565b3d9150610f81565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f780d9af2547ff489e27e4d081cfe787295973a1c8d1b8ee9585d9bfa2fb9258f60245260445ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610d28565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461024c5760206102ed61109b36611560565b929190916121f5565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff6110f061153d565b6110f8611e0b565b1680158015611195575b61116d5773ffffffffffffffffffffffffffffffffffffffff600254827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600255167fdf6a4c0e90a44c131ffe0dbf3a01863d23b8d807746d5342bf774d7bbf92207c5f80a3005b7fddee2104000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff600254168114611102565b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576111ed61151a565b3373ffffffffffffffffffffffffffffffffffffffff8216036112165761048e906004356120ed565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761048e60043561127b61151a565b906112b4610484825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b611fdb565b3461024c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760243567ffffffffffffffff8116810361024c576102ed60209160443590600435611b94565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206113766004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461024c57602061074061073b6109086108fe366114a4565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361024c57817f7965db0b000000000000000000000000000000000000000000000000000000006020931490811561147a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611473565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261024c576004359160243567ffffffffffffffff811161024c578260238201121561024c5780600401359267ffffffffffffffff841161024c576024848301011161024c57602401919060443590565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc608091011261024c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361024c57906024359060443567ffffffffffffffff8116810361024c579060643590565b610140810190811067ffffffffffffffff821117610b1c57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610b1c57604052565b67ffffffffffffffff8111610b1c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261166e82611628565b9161167c60405193846115e7565b82948184528183011161024c578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b519067ffffffffffffffff8216820361024c57565b604051906116fd826115ca565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b519073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b60208183031261024c5780519067ffffffffffffffff821161024c5701906101408282031261024c5760405191611791836115ca565b80518352602081015160208401526117ab604082016116db565b60408401526117bc606082016116db565b60608401526117cd608082016116db565b608084015260a081015160a08401526117e860c0820161173a565b60c08401526117f960e0820161173a565b60e0840152610100810151801515810361024c576101008401526101208101519067ffffffffffffffff821161024c570181601f8201121561024c5780519061184182611628565b9261184f60405194856115e7565b8284526020838301011161024c57815f9260208093018386015e8301015261012082015290565b91906024906118836116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b60048301525afa918215611ac0575f92611b4b575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93611afd575b5090611a35936119886119b4602095946040519283918883019586526040808401526060830190611698565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826115e7565b5190209173ffffffffffffffffffffffffffffffffffffffff6002541691604051958694859384937f23b9b7560000000000000000000000000000000000000000000000000000000085526004850173ffffffffffffffffffffffffffffffffffffffff606092959493608083019683521660208201525f60408201520152565b03915afa908115611ac0575f91611acb575b50604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b611abd91503d805f833e611ab581836115e7565b81019061175b565b90565b6040513d5f823e3d90fd5b90506020813d602011611af5575b81611ae6602093836115e7565b8101031261024c57515f611a47565b3d9150611ad9565b9250906020833d602011611b43575b81611b19602093836115e7565b8101031261024c57611a35936119886119b4611b3660209661173a565b955050509391909161195c565b3d9150611b0c565b9091506020813d602011611b77575b81611b67602093836115e7565b8101031261024c5751905f6118fe565b3d9150611b5a565b805115611b8f57611abd906126ae565b505f90565b9190602490611ba16116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527ff09c1384d860519bb4ea5bb2a45ab64b00a8d900d47fb79203663be6da21e06c60048301525afa918215611ac0575f92611cff575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93611cb1575b5090611a35936119886119b460209594604051928391888301958690929167ffffffffffffffff6020916040840195845216910152565b9250906020833d602011611cf7575b81611ccd602093836115e7565b8101031261024c57611a35936119886119b4611cea60209661173a565b9550505093919091611c7a565b3d9150611cc0565b9091506020813d602011611d2b575b81611d1b602093836115e7565b8101031261024c5751905f611c1c565b3d9150611d0e565b805115611de35767ffffffffffffffff60608201511680151580611dcf575b611d9f575067ffffffffffffffff6080820151169081611d70575050565b517f0b64def1000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90517f8a1b950b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5067ffffffffffffffff4216811115611d52565b7f6e7910da000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611e4357565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f20541615611eca5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611b8f5773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f146120e757805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f146120e757805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b9291906024916122036116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051948580927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f06c3bd846f5ea60b0b6f5a835ef85fd8253b53f67917d6c690be628d032f841b60048301525afa928315611ac0575f93612442575b50602073ffffffffffffffffffffffffffffffffffffffff60015416946024604051809781937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa938415611ac0575f946123dc575b509173ffffffffffffffffffffffffffffffffffffffff94608492611988612328602097966040519283918a8301958690929167ffffffffffffffff6020916040840195845216910152565b5190208680600254169260405198899788967f23b9b756000000000000000000000000000000000000000000000000000000008852600488015216602486015216604484015260648301525afa908115611ac0575f91611acb5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b919350916020823d60201161243a575b816123f9602093836115e7565b8101031261024c5773ffffffffffffffffffffffffffffffffffffffff9460209461198861232861242b60849661173a565b975050509250949290926122dc565b3d91506123ec565b9092506020813d60201161246e575b8161245e602093836115e7565b8101031261024c5751915f61227e565b3d9150612451565b6024906124816116f0565b50602073ffffffffffffffffffffffffffffffffffffffff5f5416604051938480927f54d4f9db0000000000000000000000000000000000000000000000000000000082527f568eb581cdf80b03d3bdfa414f3203bfdcc4bba4e66355612bd0e879da812f0660048301525afa918215611ac0575f9261267a575b50602073ffffffffffffffffffffffffffffffffffffffff60015416936024604051809681937f10d736d500000000000000000000000000000000000000000000000000000000835260048301525afa928315611ac0575f93612623575b5091606460209273ffffffffffffffffffffffffffffffffffffffff948580600254169160405197889687957ff20f03bc00000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa908115611ac0575f91611acb5750604051907fa3112a6400000000000000000000000000000000000000000000000000000000825260048201525f816024817342000000000000000000000000000000000000215afa908115611ac0575f91611aa1575090565b92506020833d602011612672575b8161263e602093836115e7565b8101031261024c57606460209261266973ffffffffffffffffffffffffffffffffffffffff9561173a565b9450925061255a565b3d9150612631565b9091506020813d6020116126a6575b81612696602093836115e7565b8101031261024c5751905f6124fc565b3d9150612689565b67ffffffffffffffff60608201511680151590816126e7575b50611b8f576080015167ffffffffffffffff166126e357600190565b5f90565b905067ffffffffffffffff421610155f6126c7565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561272b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612790575080511561276857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806127e3575b6127a1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561279956fea264697066735822122015af1bcc7bb6052080eb14e90fe726c860f6b152f5745a35c2724b334920ec7264736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00", + "nonce": "0x1e", "chainId": "0x164ce" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xe008aa8289b8a7ca3f8c50d40358b9e10e8c82c9f2831ce09bb8ed0f5f783093", + "hash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", "transactionType": "CALL", "contractName": null, "contractAddress": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", "function": "upgradeToAndCall(address,bytes)", "arguments": [ - "0x42C8025fC691edEaB5846989Dc4bD1C95DaEB4A9", + "0x96dEC25E32dE5A4c0fbCbDc341f66e7C173773A5", "0x" ], "transaction": { "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", "to": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", - "gas": "0xc8a0", + "gas": "0xc8dc", "value": "0x0", - "input": "0x4f1ef28600000000000000000000000042c8025fc691edeab5846989dc4bd1c95daeb4a900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x7", + "input": "0x4f1ef28600000000000000000000000096dec25e32de5a4c0fbcbdc341f66e7c173773a500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x8", "chainId": "0x164ce" }, "additionalContracts": [], @@ -84,143 +44,68 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x212bc4", + "cumulativeGasUsed": "0x239167", "logs": [ { - "address": "0xf6c4eda48027b2e86c396e9be4052eb46c4cf553", + "address": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "blockHash": "0x49abee9cfc3050c407df888fd73135aa7e70b34c73a43ea2c212f11e33918b68", - "blockNumber": "0xa24886", - "blockTimestamp": "0x692434e2", - "transactionHash": "0x8aac8ef2f4de78d5787013cb36507596211feaeb81ce1ef0e0077257a8fa5e81", - "transactionIndex": "0x3", - "logIndex": "0x8", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000002000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x8aac8ef2f4de78d5787013cb36507596211feaeb81ce1ef0e0077257a8fa5e81", - "transactionIndex": "0x3", - "blockHash": "0x49abee9cfc3050c407df888fd73135aa7e70b34c73a43ea2c212f11e33918b68", - "blockNumber": "0xa24886", - "gasUsed": "0x1e6130", - "effectiveGasPrice": "0xf433b", - "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", - "to": null, - "contractAddress": "0xf6c4eda48027b2e86c396e9be4052eb46c4cf553", - "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x1", - "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0xea5", - "l1GasPrice": "0xa", - "l1GasUsed": "0xe388" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x28595", - "logs": [ - { - "address": "0x6ffa7abc1e380bb967c78d5e648ef804e1fe6dad", - "topics": [ - "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000f6c4eda48027b2e86c396e9be4052eb46c4cf553" - ], - "data": "0x", - "blockHash": "0xc0a12047fda15b4b64b9726b4acde98914c36ca4959412c6b9d189a745898001", - "blockNumber": "0xa24888", - "blockTimestamp": "0x692434e4", - "transactionHash": "0x8b177fdac6c22fcfe16a1696da3d509af13488a8716417503735881b62b8f919", - "transactionIndex": "0x2", + "blockHash": "0xa1fe42f1fdb41b23a6bfd14d04c006b837f7ed052a05e9127f712ec4437f72f5", + "blockNumber": "0xab633f", + "blockTimestamp": "0x692d4f9b", + "transactionHash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", + "transactionIndex": "0x1", "logIndex": "0x0", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000400000000800000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x8b177fdac6c22fcfe16a1696da3d509af13488a8716417503735881b62b8f919", - "transactionIndex": "0x2", - "blockHash": "0xc0a12047fda15b4b64b9726b4acde98914c36ca4959412c6b9d189a745898001", - "blockNumber": "0xa24888", - "gasUsed": "0x90a6", - "effectiveGasPrice": "0xf433b", - "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", - "to": "0x6ffa7abc1e380bb967c78d5e648ef804e1fe6dad", - "contractAddress": null, - "l1BaseFeeScalar": "0x558", - "l1BlobBaseFee": "0x1", - "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x66", - "l1GasPrice": "0xa", - "l1GasUsed": "0x640" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x238dbf", - "logs": [ - { - "address": "0x42c8025fc691edeab5846989dc4bd1c95daeb4a9", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "blockHash": "0x271373187214de4f24717bbe8b73e64308b58fe2170367fa4095a7985f8a0ff0", - "blockNumber": "0xa2488a", - "blockTimestamp": "0x692434e6", - "transactionHash": "0x6626aeff2c1cd20ff7fcfff20f258dd3eb0c4557adf4abc1a33fcd0f630231d3", - "transactionIndex": "0x2", - "logIndex": "0x3", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000010000000000000000000000000", "type": "0x2", - "transactionHash": "0x6626aeff2c1cd20ff7fcfff20f258dd3eb0c4557adf4abc1a33fcd0f630231d3", - "transactionIndex": "0x2", - "blockHash": "0x271373187214de4f24717bbe8b73e64308b58fe2170367fa4095a7985f8a0ff0", - "blockNumber": "0xa2488a", - "gasUsed": "0x20bac5", + "transactionHash": "0x92e9bef3794bd990b04780e15dc630754652a8e57b3f7b3c4dd9bb6541a59ee2", + "transactionIndex": "0x1", + "blockHash": "0xa1fe42f1fdb41b23a6bfd14d04c006b837f7ed052a05e9127f712ec4437f72f5", + "blockNumber": "0xab633f", + "gasUsed": "0x22dd57", "effectiveGasPrice": "0xf433b", "from": "0x0027b0882c92a1a86c5885fed632667e81e49e5f", "to": null, - "contractAddress": "0x42c8025fc691edeab5846989dc4bd1c95daeb4a9", + "contractAddress": "0x96dec25e32de5a4c0fbcbdc341f66e7c173773a5", "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0xf59", - "l1GasPrice": "0xa", - "l1GasUsed": "0xee75" + "l1Fee": "0x10aa", + "l1GasPrice": "0xb", + "l1GasUsed": "0xfd84" }, { "status": "0x1", - "cumulativeGasUsed": "0x14550", + "cumulativeGasUsed": "0x1457c", "logs": [ { "address": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000042c8025fc691edeab5846989dc4bd1c95daeb4a9" + "0x00000000000000000000000096dec25e32de5a4c0fbcbdc341f66e7c173773a5" ], "data": "0x", - "blockHash": "0xac09a0d34db78ebd612878a2e5da171054d443f1d0a768f940929d7b0ddfbbb2", - "blockNumber": "0xa2488c", - "blockTimestamp": "0x692434e8", - "transactionHash": "0xe008aa8289b8a7ca3f8c50d40358b9e10e8c82c9f2831ce09bb8ed0f5f783093", + "blockHash": "0xa678a735ccd6d8017aab91a7cb4a8704ad9c73de587571a66943cedf42fb0b29", + "blockNumber": "0xab6341", + "blockTimestamp": "0x692d4f9d", + "transactionHash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", "transactionIndex": "0x1", "logIndex": "0x0", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000040400000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x20000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000020000000008000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xe008aa8289b8a7ca3f8c50d40358b9e10e8c82c9f2831ce09bb8ed0f5f783093", + "transactionHash": "0x43f06b1a2c181965299a54542be0a306dbdbf9d95038377f8cd06c2dbfa68634", "transactionIndex": "0x1", - "blockHash": "0xac09a0d34db78ebd612878a2e5da171054d443f1d0a768f940929d7b0ddfbbb2", - "blockNumber": "0xa2488c", - "gasUsed": "0x9140", + "blockHash": "0xa678a735ccd6d8017aab91a7cb4a8704ad9c73de587571a66943cedf42fb0b29", + "blockNumber": "0xab6341", + "gasUsed": "0x916c", "effectiveGasPrice": "0xf433b", "from": "0xd72b48ed00b67d756408a140435d8ef101f4a377", "to": "0xd5077b67dcb56cac8b270c7788fc3e6ee03f17b9", @@ -228,15 +113,15 @@ "l1BaseFeeScalar": "0x558", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xc5fc5", - "l1Fee": "0x66", - "l1GasPrice": "0xa", + "l1Fee": "0x69", + "l1GasPrice": "0xb", "l1GasUsed": "0x640" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1763980552469, + "timestamp": 1764577197151, "chain": 91342, - "commit": "ad68526" + "commit": "6d96f64" } \ No newline at end of file diff --git a/deploy-config/91342.json b/deploy-config/91342.json index 777712c..eb65582 100644 --- a/deploy-config/91342.json +++ b/deploy-config/91342.json @@ -5,5 +5,6 @@ "DojangAttesterBook": "0xDA282E89244424E297Ce8e78089B54D043FB28B6", "DojangScroll": "0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9", "SchemaBook": "0x78cBb3413FBb6aF05EF1D21e646440e56baE3AD6", - "BalanceRootDojangResolver": "0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0" + "BalanceRootDojangResolver": "0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0", + "VerifyCodeDojangResolver": "0x843fF433f7657901118fF3E2Eca915abb9BC12Df" } diff --git a/deployments/91342-deploy.json b/deployments/91342-deploy.json index 777712c..eb65582 100644 --- a/deployments/91342-deploy.json +++ b/deployments/91342-deploy.json @@ -5,5 +5,6 @@ "DojangAttesterBook": "0xDA282E89244424E297Ce8e78089B54D043FB28B6", "DojangScroll": "0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9", "SchemaBook": "0x78cBb3413FBb6aF05EF1D21e646440e56baE3AD6", - "BalanceRootDojangResolver": "0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0" + "BalanceRootDojangResolver": "0xD90a964aB65bc02397De1E7fcBd230803bC1bEd0", + "VerifyCodeDojangResolver": "0x843fF433f7657901118fF3E2Eca915abb9BC12Df" } diff --git a/offchain-specs/README.md b/offchain-specs/README.md new file mode 100644 index 0000000..5f75e48 --- /dev/null +++ b/offchain-specs/README.md @@ -0,0 +1,4 @@ +# Dojang Off-chain Specs + +This directory contains **reference implementations** and **formal specs** +for off-chain logic that must be consistent across all issuers and verifiers. diff --git a/offchain-specs/verify-code/VerifyCodeSpec.sol b/offchain-specs/verify-code/VerifyCodeSpec.sol new file mode 100644 index 0000000..2e4b430 --- /dev/null +++ b/offchain-specs/verify-code/VerifyCodeSpec.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +/// @notice Off-chain reference implementation for VerifyCode Dojang. +/// @dev This contract is NEVER deployed on-chain. It exists solely as a spec. +library VerifyCodeSpec { + /// @notice Computes the codeHash from a user-facing code string. + /// @dev Rule: codeHash = keccak256(bytes(code)) + function computeCodeHash(string memory code) internal pure returns (bytes32) { + return keccak256(bytes(code)); + } + + /// @notice Canonicalizes a domain string for VerifyCode usage. + /// @dev Rule: trim leading/trailing spaces, remove all internal spaces (0x20), + /// and lowercase ASCII characters only. Non-ASCII (e.g., Korean) characters are preserved as-is. + function canonicalizeDomain(string memory domain) internal pure returns (string memory) { + bytes memory b = bytes(domain); + uint256 start = 0; + uint256 end = b.length; + + // trim leading/trailing spaces (0x20) + while (start < end && b[start] == 0x20) start++; + while (end > start && b[end - 1] == 0x20) end--; + + // build canonicalized output: remove all spaces and lowercase ASCII + bytes memory out = new bytes(end - start); + uint256 n = 0; + for (uint256 i = start; i < end; i++) { + bytes1 c = b[i]; + // skip any whitespace (0x20) + if (c == 0x20) continue; + // lowercase ASCII only + if (c >= 0x41 && c <= 0x5A) { + c = bytes1(uint8(c) + 32); + } + out[n++] = c; + } + assembly { mstore(out, n) } + return string(out); + } +} diff --git a/package.json b/package.json index 59c5935..7a8881b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dojang", - "version": "0.4.0", + "version": "0.5.0", "description": "Contracts for Dojang Service", "engines": { "node": ">=22.0.0" diff --git a/script/deploy/01-Deploy.s.sol b/script/deploy/01-Deploy.s.sol index a075bb1..e8174df 100644 --- a/script/deploy/01-Deploy.s.sol +++ b/script/deploy/01-Deploy.s.sol @@ -14,6 +14,7 @@ import {AddressDojangResolver} from "src/AddressDojangResolver.sol"; import {DojangScroll} from "src/DojangScroll.sol"; import {BalanceDojangResolver} from "../../src/BalanceDojangResolver.sol"; import {BalanceRootDojangResolver} from "../../src/BalanceRootDojangResolver.sol"; +import {VerifyCodeDojangResolver} from "../../src/VerifyCodeDojangResolver.sol"; contract Deploy is Script, Artifacts { uint256 internal deployerKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); @@ -32,6 +33,7 @@ contract Deploy is Script, Artifacts { string internal constant BALANCE_ROOT_DOJANG_SCHEMA = "uint256 coinType,uint64 snapshotAt,uint192 leafCount,uint256 totalAmount,bytes32 root"; string internal constant BALANCE_DOJANG_SCHEMA = "uint256 balance,bytes32 salt,bytes32[] proofs"; + string internal constant VERIFY_CODE_DOJANG_SCHEMA = "bytes32 codeHash,string domain"; ISchemaRegistry internal schemaRegistry = ISchemaRegistry(Predeploys.SCHEMA_REGISTRY); IEAS internal eas = IEAS(Predeploys.EAS); @@ -96,6 +98,13 @@ contract Deploy is Script, Artifacts { save("BalanceRootDojangResolver", proxy); } + function deployVerifyCodeDojangResolver() public broadcast(deployerKey) { + address proxy = Upgrades.deployUUPSProxy( + "VerifyCodeDojangResolver.sol", abi.encodeCall(VerifyCodeDojangResolver.initialize, admin) + ); + save("VerifyCodeDojangResolver", proxy); + } + function deployBalanceDojangResolver() public broadcast(deployerKey) { address proxy = Upgrades.deployUUPSProxy( "BalanceDojangResolver.sol", abi.encodeCall(BalanceDojangResolver.initialize, admin) @@ -145,6 +154,12 @@ contract Deploy is Script, Artifacts { balanceRootDojangResolver.grantRole(balanceRootDojangResolver.UPGRADER_ROLE(), upgrader); } + function grantRoleVerifyCodeDojangResolver() public broadcast(adminKey) { + VerifyCodeDojangResolver verifyCodeDojangResolver = + VerifyCodeDojangResolver(mustGetAddress("VerifyCodeDojangResolver")); + verifyCodeDojangResolver.grantRole(verifyCodeDojangResolver.UPGRADER_ROLE(), upgrader); + } + function grantRoleDojangScroll() public broadcast(adminKey) { DojangScroll dojangScroll = DojangScroll(mustGetAddress("DojangScroll")); dojangScroll.grantRole(dojangScroll.UPGRADER_ROLE(), upgrader); @@ -158,11 +173,14 @@ contract Deploy is Script, Artifacts { BalanceDojangResolver balanceDojangResolver = BalanceDojangResolver(mustGetAddress("BalanceDojangResolver")); BalanceRootDojangResolver balanceRootDojangResolver = BalanceRootDojangResolver(mustGetAddress("BalanceRootDojangResolver")); + VerifyCodeDojangResolver verifyCodeDojangResolver = + VerifyCodeDojangResolver(mustGetAddress("VerifyCodeDojangResolver")); DojangScroll dojangScroll = DojangScroll(mustGetAddress("DojangScroll")); addressDojangResolver.setIndexer(address(attestationIndexer)); balanceDojangResolver.setIndexer(address(attestationIndexer)); balanceRootDojangResolver.setIndexer(address(attestationIndexer)); + verifyCodeDojangResolver.setIndexer(address(attestationIndexer)); dojangScroll.setSchemaBook(address(schemaBook)); dojangScroll.setDojangAttesterBook(address(dojangAttesterBook)); @@ -177,7 +195,9 @@ contract Deploy is Script, Artifacts { bytes32 balanceRootSchemaUid = schemaRegistry.register(BALANCE_ROOT_DOJANG_SCHEMA, balanceRootDojangResolver, true); schemaBook.register(DojangSchemaIds.BALANCE_ROOT_DOJANG, balanceRootSchemaUid); - balanceDojangResolver.setBalanceRootSchemaUID(balanceRootSchemaUid); + + bytes32 verifyCodeSchemaUid = schemaRegistry.register(VERIFY_CODE_DOJANG_SCHEMA, verifyCodeDojangResolver, true); + schemaBook.register(DojangSchemaIds.VERIFY_CODE_DOJANG, verifyCodeSchemaUid); } } diff --git a/script/deploy/03-DeployVerifyCodeDojang.s.sol b/script/deploy/03-DeployVerifyCodeDojang.s.sol new file mode 100644 index 0000000..41539b3 --- /dev/null +++ b/script/deploy/03-DeployVerifyCodeDojang.s.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Script} from "forge-std/Script.sol"; +import {Artifacts} from "../utils/Artifacts.s.sol"; +import {DeployConfig} from "../utils/DeployConfig.s.sol"; +import {ISchemaRegistry} from "../../dependencies/@eas-contracts-1.4.0/contracts/ISchemaRegistry.sol"; +import {IEAS} from "@eas-contracts/contracts/IEAS.sol"; +import {Predeploys, DojangSchemaIds} from "../../src/libraries/Types.sol"; +import {VerifyCodeDojangResolver} from "../../src/VerifyCodeDojangResolver.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/src/Upgrades.sol"; +import {SchemaBook} from "../../src/SchemaBook.sol"; +import {AttestationIndexer} from "../../src/AttestationIndexer.sol"; + +contract DeployVerifyCodeDojang is Script, Artifacts, DeployConfig { + uint256 internal deployerKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + address internal deployer = vm.addr(deployerKey); + + uint256 internal adminKey = vm.envUint("ADMIN_PRIVATE_KEY"); + address internal admin = vm.addr(adminKey); + + uint256 internal upgraderKey = vm.envUint("UPGRADER_PRIVATE_KEY"); + address internal upgrader = vm.addr(upgraderKey); + + uint256 internal pauserKey = vm.envUint("PAUSER_PRIVATE_KEY"); + address internal pauser = vm.addr(pauserKey); + + string internal constant VERIFY_CODE_DOJANG_SCHEMA = "bytes32 codeHash,string domain"; + + ISchemaRegistry internal schemaRegistry = ISchemaRegistry(Predeploys.SCHEMA_REGISTRY); + IEAS internal eas = IEAS(Predeploys.EAS); + + modifier broadcast(uint256 privateKey) { + vm.startBroadcast(privateKey); + _; + vm.stopBroadcast(); + } + + function setUp() public override(Artifacts, DeployConfig) { + Artifacts.setUp(); + DeployConfig.setUp(); + } + + function run() public { + deployVerifyCodeDojangResolver(); + grantRoleVerifyCodeDojangResolver(); + configure(); + } + + function deployVerifyCodeDojangResolver() public broadcast(deployerKey) { + address proxy = Upgrades.deployUUPSProxy( + "VerifyCodeDojangResolver.sol", abi.encodeCall(VerifyCodeDojangResolver.initialize, admin) + ); + save("VerifyCodeDojangResolver", proxy); + } + + function grantRoleVerifyCodeDojangResolver() public broadcast(adminKey) { + VerifyCodeDojangResolver verifyCodeDojangResolver = + VerifyCodeDojangResolver(mustGetAddress("VerifyCodeDojangResolver")); + verifyCodeDojangResolver.grantRole(verifyCodeDojangResolver.UPGRADER_ROLE(), upgrader); + } + + function configure() public broadcast(adminKey) { + SchemaBook schemaBook = SchemaBook(getAddress(".SchemaBook")); + AttestationIndexer attestationIndexer = AttestationIndexer(getAddress(".AttestationIndexer")); + VerifyCodeDojangResolver verifyCodeDojangResolver = + VerifyCodeDojangResolver(mustGetAddress("VerifyCodeDojangResolver")); + + verifyCodeDojangResolver.setIndexer(address(attestationIndexer)); + + bytes32 verifyCodeSchemaUid = schemaRegistry.register(VERIFY_CODE_DOJANG_SCHEMA, verifyCodeDojangResolver, true); + schemaBook.register(DojangSchemaIds.VERIFY_CODE_DOJANG, verifyCodeSchemaUid); + } +} diff --git a/script/upgrade/Upgrade.s.sol b/script/upgrade/Upgrade.s.sol index bfa8b9a..0669e85 100644 --- a/script/upgrade/Upgrade.s.sol +++ b/script/upgrade/Upgrade.s.sol @@ -26,11 +26,12 @@ contract Upgrade is Script, DeployConfig { upgradeUUPSContract( getAddress(".BalanceDojangResolver"), "BalanceDojangResolver.sol", new bytes(0), new bytes(0) ); - if (keyExists(".BalanceRootDojangResolver")) { - upgradeUUPSContract( - getAddress(".BalanceRootDojangResolver"), "BalanceRootDojangResolver.sol", new bytes(0), new bytes(0) - ); - } + upgradeUUPSContract( + getAddress(".BalanceRootDojangResolver"), "BalanceRootDojangResolver.sol", new bytes(0), new bytes(0) + ); + upgradeUUPSContract( + getAddress(".VerifyCodeDojangResolver"), "VerifyCodeDojangResolver.sol", new bytes(0), new bytes(0) + ); upgradeUUPSContract(getAddress(".DojangScroll"), "DojangScroll.sol", new bytes(0), new bytes(0)); } diff --git a/src/DojangScroll.sol b/src/DojangScroll.sol index 0a7aab1..6e34730 100644 --- a/src/DojangScroll.sol +++ b/src/DojangScroll.sol @@ -182,6 +182,38 @@ contract DojangScroll is UUPSUpgradeable, AccessControlUpgradeable, IDojangScrol return attestation.uid; } + /** + * @inheritdoc IDojangScroll + */ + function isVerifiedCode( + bytes32 codeHash, + string calldata domain, + DojangAttesterId attesterId + ) + external + view + returns (bool) + { + return _getVerifyCodeAttestation(codeHash, domain, attesterId).isVerified(); + } + + /** + * @inheritdoc IDojangScroll + */ + function getVerifyCodeAttestationUid( + bytes32 codeHash, + string calldata domain, + DojangAttesterId attesterId + ) + external + view + returns (bytes32) + { + Attestation memory attestation = _getVerifyCodeAttestation(codeHash, domain, attesterId); + attestation.verify(); + return attestation.uid; + } + /** * @dev Initializes the contract * @param admin The address to be granted with the default admin Role @@ -198,9 +230,9 @@ contract DojangScroll is UUPSUpgradeable, AccessControlUpgradeable, IDojangScrol } /// @notice Semantic version. - /// @custom:semver 0.4.0 + /// @custom:semver 0.5.0 function version() public pure virtual returns (string memory) { - return "0.4.0"; + return "0.5.0"; } /** @@ -284,4 +316,29 @@ contract DojangScroll is UUPSUpgradeable, AccessControlUpgradeable, IDojangScrol bytes32 attestationUid = _indexer.getAttestationUid(easSchemaUid, attesterAddress, recipient, key); return _EAS.getAttestation(attestationUid); } + + /** + * @notice Returns the verify-code attestation for the given codeHash and domain. + * @dev This function does not verify the existence or validity of the attestation. + * @param codeHash The hashed verification code + * @param domain The domain string associated with the verification code; should be canonicalized + * @param attesterId The attester identifier + * @return The verify-code attestation + */ + function _getVerifyCodeAttestation( + bytes32 codeHash, + string memory domain, + DojangAttesterId attesterId + ) + internal + view + returns (Attestation memory) + { + bytes32 easSchemaUid = _schemaBook.getSchemaUid(DojangSchemaIds.VERIFY_CODE_DOJANG); + address attesterAddress = _dojangAttesterBook.getAttester(attesterId); + + bytes32 key = keccak256(abi.encode(codeHash, domain)); + bytes32 attestationUid = _indexer.getAttestationUid(easSchemaUid, attesterAddress, address(0), key); + return _EAS.getAttestation(attestationUid); + } } diff --git a/src/VerifyCodeDojangResolver.sol b/src/VerifyCodeDojangResolver.sol new file mode 100644 index 0000000..323291a --- /dev/null +++ b/src/VerifyCodeDojangResolver.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {UUPSUpgradeable} from "@openzeppelin-contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin-contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import {SchemaResolverUpgradeable} from "./abstract/SchemaResolverUpgradeable.sol"; +import {AllowlistResolverUpgradeable} from "./abstract/AllowlistResolverUpgradeable.sol"; +import {VerifyCodeIndexingResolverUpgradeable} from "./abstract/VerifyCodeIndexingResolverUpgradeable.sol"; +import {Attestation} from "@eas-contracts/contracts/IEAS.sol"; +import {ZeroAddress} from "./libraries/Common.sol"; + +contract VerifyCodeDojangResolver is + UUPSUpgradeable, + AccessControlUpgradeable, + SchemaResolverUpgradeable, + AllowlistResolverUpgradeable, + VerifyCodeIndexingResolverUpgradeable +{ + // 0x94aec555c41b62ae70fe2e3ed4effcc448a64811ba9fc0cd20a136196e28c0ce + bytes32 public constant UPGRADER_ROLE = keccak256("dojang.verifycodedojangresolver.upgrader"); + + /** + * @dev Locks the contract, preventing any future reinitialization. This + * implementation contract was designed to be called through proxies. + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } + + /** + * @notice Allows a new attester. + * @param attester The address of the attester to be added to allowlist. + */ + function allowAttester(address attester) external onlyRole(AccessControlUpgradeable.DEFAULT_ADMIN_ROLE) { + _allowAttester(attester); + } + + /** + * @notice Removes an existing allowed attester. + * @param attester The address of the attester to be removed from allowlist. + */ + function removeAttester(address attester) external onlyRole(AccessControlUpgradeable.DEFAULT_ADMIN_ROLE) { + _removeAttester(attester); + } + + /** + * @notice Updates the indexer contract used to index attestations + * @param indexer The address of the new IAttestationIndexer + */ + function setIndexer(address indexer) external onlyRole(AccessControlUpgradeable.DEFAULT_ADMIN_ROLE) { + _setIndexer(indexer); + } + + /** + * @dev Initializes the contract + * @param admin The address to be granted with the default admin Role + */ + function initialize(address admin) public initializer { + if (admin == address(0)) { + revert ZeroAddress(); + } + + __UUPSUpgradeable_init(); + __AccessControl_init(); + + __SchemaResolver_init(); + __AllowlistResolver_init(); + __VerifyCodeIndexingResolver_init(); + + _grantRole(AccessControlUpgradeable.DEFAULT_ADMIN_ROLE, admin); + } + + /// @notice Semantic version. + /// @custom:semver 0.5.0 + function version() public pure virtual returns (string memory) { + return "0.5.0"; + } + + /// @inheritdoc SchemaResolverUpgradeable + /// @dev See {AllowlistResolverUpgradeable-onAttest}, and + /// {VerifyCodeIndexingResolverUpgradeable-onAttest}. + function onAttest( + Attestation calldata attestation, + uint256 value + ) + internal + override(SchemaResolverUpgradeable, AllowlistResolverUpgradeable, VerifyCodeIndexingResolverUpgradeable) + returns (bool) + { + return AllowlistResolverUpgradeable.onAttest(attestation, value) + && VerifyCodeIndexingResolverUpgradeable.onAttest(attestation, value); + } + + /// @inheritdoc SchemaResolverUpgradeable + /// @dev See {AllowlistResolverUpgradeable-onRevoke}, and + /// {VerifyCodeIndexingResolverUpgradeable-onRevoke}. + function onRevoke( + Attestation calldata attestation, + uint256 value + ) + internal + override(SchemaResolverUpgradeable, AllowlistResolverUpgradeable, VerifyCodeIndexingResolverUpgradeable) + returns (bool) + { + return AllowlistResolverUpgradeable.onRevoke(attestation, value) + && VerifyCodeIndexingResolverUpgradeable.onRevoke(attestation, value); + } + + /** + * @notice Authorizes the upgrade of the contract. + * @dev Only those with the UPGRADER_ROLE can call this. + * @inheritdoc UUPSUpgradeable + */ + // solhint-disable-next-line no-empty-blocks + function _authorizeUpgrade(address) internal override onlyRole(UPGRADER_ROLE) {} +} diff --git a/src/abstract/VerifyCodeIndexingResolverUpgradeable.sol b/src/abstract/VerifyCodeIndexingResolverUpgradeable.sol new file mode 100644 index 0000000..9bcdd95 --- /dev/null +++ b/src/abstract/VerifyCodeIndexingResolverUpgradeable.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Initializable} from "@openzeppelin-contracts-upgradeable/proxy/utils/Initializable.sol"; +import {SchemaResolverUpgradeable} from "./SchemaResolverUpgradeable.sol"; +import {IAttestationIndexer} from "../interfaces/IAttestationIndexer.sol"; +import {Attestation} from "@eas-contracts/contracts/IEAS.sol"; +import {IndexerUpdated, InvalidIndexer} from "../libraries/Common.sol"; + +abstract contract VerifyCodeIndexingResolverUpgradeable is Initializable, SchemaResolverUpgradeable { + /// @custom:storage-location erc7201:dojang.storage.VerifyCodeIndexingResolverUpgradeable + struct VerifyCodeIndexingResolverStorage { + /// @notice Address of the attestation indexer contract + IAttestationIndexer indexer; + } + + /// @notice + /// keccak256(abi.encode(uint256(keccak256("dojang.storage.VerifyCodeIndexingResolverUpgradeable")) + /// - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant VERIFY_CODE_INDEXING_RESOLVER_STORAGE_LOCATION = + 0x56479d54c8a270d052194a471b8a16cca9486bd3897b44aa281df9412faba700; + + function __VerifyCodeIndexingResolver_init() internal onlyInitializing { + __VerifyCodeIndexingResolver_init_unchained(); + } + + // solhint-disable-next-line no-empty-blocks + function __VerifyCodeIndexingResolver_init_unchained() internal onlyInitializing {} + + /** + * @dev Indexes the given attestation via the external indexer. + * See {SchemaResolverUpgradeable-onAttest}. + * + * @param attestation The new attestation to be indexed. + * @return bool True if the attestation was indexed successfully without + * reverting. + */ + function onAttest(Attestation calldata attestation, uint256) internal virtual override returns (bool) { + VerifyCodeIndexingResolverStorage storage $ = _getVerifyCodeIndexingResolverStorage(); + (bytes32 codeHash, string memory domain) = abi.decode(attestation.data, (bytes32, string)); + + bytes32 key = keccak256(abi.encode(codeHash, domain)); + $.indexer.index(key, attestation.uid); + return true; + } + + /** + * @dev Not implemented as indexing on revocation is not necessary. + * See {SchemaResolverUpgradeable-onRevoke}. + * + * Attestations should always be verified upon usage. + * The indexer should not be relied upon as the source of truth or + * for an attestation's liveness. + * + * @return bool Always true since this functionality is not implemented. + */ + function onRevoke(Attestation calldata, uint256) internal virtual override returns (bool) { + return true; + } + + /** + * @dev Updates the indexer contract + * @param indexer The address of the new IAttestationIndexer + */ + function _setIndexer(address indexer) internal { + VerifyCodeIndexingResolverStorage storage $ = _getVerifyCodeIndexingResolverStorage(); + + if (indexer == address(0) || indexer == address($.indexer)) { + revert InvalidIndexer(); + } + address prevIndexer = address($.indexer); + $.indexer = IAttestationIndexer(indexer); + emit IndexerUpdated(prevIndexer, address($.indexer)); + } + + function _getVerifyCodeIndexingResolverStorage() + private + pure + returns (VerifyCodeIndexingResolverStorage storage $) + { + assembly { + $.slot := VERIFY_CODE_INDEXING_RESOLVER_STORAGE_LOCATION + } + } +} diff --git a/src/interfaces/IDojangScroll.sol b/src/interfaces/IDojangScroll.sol index 8f5294b..631ab50 100644 --- a/src/interfaces/IDojangScroll.sol +++ b/src/interfaces/IDojangScroll.sol @@ -97,4 +97,43 @@ interface IDojangScroll { external view returns (bytes32); + + /** + * @notice Checks whether the given codeHash and domain pair has a verified attestation from the specified attester + * @dev Returns true if a verified attestation exists for the (codeHash, domain, attester) combination. + * The codeHash and domain MUST be derived off-chain according to the VerifyCodeSpec + * (see `offchain-specs/verify-code/VerifyCodeSpec.sol`) so that issuers and verifiers + * use a consistent hashing and canonicalization rule. + * @param codeHash The hashed verification code + * @param domain The domain string associated with the verification code; should be canonicalized before lookup + * @param attesterId The attester identifier + * @return Whether the verification code-domain pair is verified by the given attester + */ + function isVerifiedCode( + bytes32 codeHash, + string calldata domain, + DojangAttesterId attesterId + ) + external + view + returns (bool); + + /** + * @notice Returns the verified code attestation uid for the given codeHash-domain pair and attester + * @dev Reverts if no verified attestation exists for the given combination. + * The caller MUST derive codeHash and canonicalized domain off-chain according to the VerifyCodeSpec + * (see `offchain-specs/verify-code/VerifyCodeSpec.sol`) to ensure consistent lookup semantics. + * @param codeHash The hashed verification code + * @param domain The domain string associated with the verification code; should be canonicalized before lookup + * @param attesterId The attester identifier + * @return The verify-code attestation uid + */ + function getVerifyCodeAttestationUid( + bytes32 codeHash, + string calldata domain, + DojangAttesterId attesterId + ) + external + view + returns (bytes32); } diff --git a/src/libraries/Types.sol b/src/libraries/Types.sol index abeeac8..69af54a 100644 --- a/src/libraries/Types.sol +++ b/src/libraries/Types.sol @@ -166,6 +166,9 @@ library DojangSchemaIds { // 0xf09c1384d860519bb4ea5bb2a45ab64b00a8d900d47fb79203663be6da21e06c bytes32 public constant BALANCE_ROOT_DOJANG = keccak256("dojang.dojangschemaids.balanceroot"); + + // 0x68053e055c01ce9b3577f3162b36324bb195ebcb574c48e823480d205f06af9b + bytes32 public constant VERIFY_CODE_DOJANG = keccak256("dojang.dojangschemaids.verifycode"); } /** diff --git a/test/DojangScroll.t.sol b/test/DojangScroll.t.sol index 4462898..31e5f7f 100644 --- a/test/DojangScroll.t.sol +++ b/test/DojangScroll.t.sol @@ -80,7 +80,7 @@ contract DojangScroll_Upgrade is DojangScroll_Base { } function test_upgrade_succeeds_by_upgrader() public { - assertEq(dojangScroll.version(), "0.4.0"); + assertEq(dojangScroll.version(), "0.5.0"); address newImpl = address(new DojangScrollV2()); @@ -182,12 +182,14 @@ contract DojangScroll_Test is DojangScroll_Base { Attestation internal addressAttestation; Attestation internal balanceRootAttestation; Attestation internal balanceAttestation; + Attestation internal verifyCodeAttestation; address internal constant SCHEMA_BOOK = address(0x0011); address internal constant DOJANG_ATTESTER_BOOK = address(0x0022); bytes32 internal constant ADDRESS_DOJANG_SCHEMA_UID = bytes32("address_dojang"); bytes32 internal constant BALANCE_ROOT_DOJANG_SCHEMA_UID = bytes32("balance_root_dojang"); bytes32 internal constant BALANCE_DOJANG_SCHEMA_UID = bytes32("balance_dojang"); + bytes32 internal constant VERIFY_CODE_DOJANG_SCHEMA_UID = bytes32("verify_code_dojang"); address internal attester; @@ -198,11 +200,14 @@ contract DojangScroll_Test is DojangScroll_Base { bytes32 internal constant ADDRESS_ATTESTATION_UID = bytes32("address"); bytes32 internal constant BALANCE_ROOT_ATTESTATION_UID = bytes32("balance_root"); bytes32 internal constant BALANCE_ATTESTATION_UID = bytes32("balance"); + bytes32 internal constant VERIFY_CODE_ATTESTATION_UID = bytes32("verify_code"); uint256 internal constant SOLANA_COIN_TYPE = 0x3000000000000000000000000000000000000000000000000000000004c4f53; uint64 internal constant SNAPSHOT_AT = 1_700_000_000 - 5 minutes; uint256 internal constant BALANCE = 10_000_000_000_000_000_000; + bytes32 internal constant CODE_HASH = keccak256(bytes("rawcode")); + string internal constant DOMAIN = "foo.bar"; function setUp() public override { super.setUp(); @@ -255,6 +260,19 @@ contract DojangScroll_Test is DojangScroll_Base { data: abi.encode(BALANCE, bytes32(0), proofs), revocable: true }); + + verifyCodeAttestation = Attestation({ + uid: VERIFY_CODE_ATTESTATION_UID, + schema: VERIFY_CODE_DOJANG_SCHEMA_UID, + recipient: address(0), + attester: attester, + time: uint64(block.timestamp), + expirationTime: uint64(block.timestamp) + 12, + revocationTime: 0, + refUID: bytes32(0), + data: abi.encode(CODE_HASH, DOMAIN), + revocable: true + }); } function mockGetAddressAttestation(Attestation memory attestation) internal { @@ -343,6 +361,35 @@ contract DojangScroll_Test is DojangScroll_Base { ); } + function mockGetVerifyCodeAttestation(Attestation memory attestation) internal { + vm.mockCall( + SCHEMA_BOOK, + abi.encodeWithSelector(SchemaBook.getSchemaUid.selector, DojangSchemaIds.VERIFY_CODE_DOJANG), + abi.encode(VERIFY_CODE_DOJANG_SCHEMA_UID) + ); + vm.mockCall( + DOJANG_ATTESTER_BOOK, + abi.encodeWithSelector(DojangAttesterBook.getAttester.selector, DojangAttesterIds.UPBIT_KOREA), + abi.encode(attester) + ); + vm.mockCall( + INDEXER, + abi.encodeWithSelector( + bytes4(keccak256("getAttestationUid(bytes32,address,address,bytes32)")), + VERIFY_CODE_DOJANG_SCHEMA_UID, + attester, + address(0), + keccak256(abi.encode(CODE_HASH, DOMAIN)) + ), + abi.encode(attestation.uid) + ); + vm.mockCall( + Predeploys.EAS, + abi.encodeWithSelector(IEAS.getAttestation.selector, attestation.uid), + abi.encode(attestation) + ); + } + function test_isVerified_false_when_notExistAttestation() public { Attestation memory zeroAttestation; mockGetAddressAttestation(zeroAttestation); @@ -561,4 +608,75 @@ contract DojangScroll_Test is DojangScroll_Base { ); assertEq(attestationUid, BALANCE_ATTESTATION_UID); } + + function test_isVerifiedCode_false_when_notExistAttestation() public { + Attestation memory zeroAttestation; + mockGetVerifyCodeAttestation(zeroAttestation); + + vm.assertFalse(dojangScroll.isVerifiedCode(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA)); + } + + function test_isVerifiedCode_false_when_expiredAttestation() public { + verifyCodeAttestation.expirationTime = uint64(block.timestamp) - 5 minutes; + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + vm.assertFalse(dojangScroll.isVerifiedCode(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA)); + } + + function test_isVerifiedCode_false_when_revokedAttestation() public { + verifyCodeAttestation.revocationTime = uint64(block.timestamp) - 5 minutes; + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + vm.assertFalse(dojangScroll.isVerifiedCode(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA)); + } + + function test_isVerifiedCode_true() public { + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + vm.assertTrue(dojangScroll.isVerifiedCode(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA)); + } + + function test_getVerifyCodeAttestationUid_revert_when_notExistAttestation() public { + Attestation memory zeroAttestation; + mockGetVerifyCodeAttestation(zeroAttestation); + + vm.expectRevert(AttestationVerifier.ZeroUid.selector); + dojangScroll.getVerifyCodeAttestationUid(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA); + } + + function test_getVerifyCodeAttestationUid_revert_when_expiredAttestation() public { + verifyCodeAttestation.expirationTime = uint64(block.timestamp) - 5 minutes; + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + vm.expectRevert( + abi.encodeWithSelector( + AttestationVerifier.ExpiredAttestation.selector, + VERIFY_CODE_ATTESTATION_UID, + uint64(block.timestamp) - 5 minutes + ) + ); + dojangScroll.getVerifyCodeAttestationUid(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA); + } + + function test_getVerifyCodeAttestationUid_revert_when_revokedAttestation() public { + verifyCodeAttestation.revocationTime = uint64(block.timestamp) - 5 minutes; + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + vm.expectRevert( + abi.encodeWithSelector( + AttestationVerifier.RevokedAttestation.selector, + VERIFY_CODE_ATTESTATION_UID, + uint64(block.timestamp) - 5 minutes + ) + ); + dojangScroll.getVerifyCodeAttestationUid(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA); + } + + function test_getVerifyCodeAttestationUid_succeeds() public { + mockGetVerifyCodeAttestation(verifyCodeAttestation); + + bytes32 attestationUid = + dojangScroll.getVerifyCodeAttestationUid(CODE_HASH, DOMAIN, DojangAttesterIds.UPBIT_KOREA); + assertEq(attestationUid, VERIFY_CODE_ATTESTATION_UID); + } } diff --git a/test/VerifyCodeDojangResolver.t.sol b/test/VerifyCodeDojangResolver.t.sol new file mode 100644 index 0000000..102a35c --- /dev/null +++ b/test/VerifyCodeDojangResolver.t.sol @@ -0,0 +1,284 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {IndexerUpdated, ZeroAddress} from "../src/libraries/Common.sol"; +import {VerifyCodeDojangResolver} from "../src/VerifyCodeDojangResolver.sol"; +import {ERC1967Proxy} from "@openzeppelin-contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {IAccessControl} from "@openzeppelin-contracts/access/IAccessControl.sol"; +import {Initializable} from "@openzeppelin-contracts-upgradeable/proxy/utils/Initializable.sol"; +import {AllowlistResolverUpgradeable} from "../src/abstract/AllowlistResolverUpgradeable.sol"; +import { + AttestationRequest, + AttestationRequestData, + RevocationRequest, + RevocationRequestData +} from "@eas-contracts/contracts/IEAS.sol"; +import {SchemaRegistry} from "@eas-contracts/contracts/SchemaRegistry.sol"; +import {EAS} from "@eas-contracts/contracts/EAS.sol"; +import {Predeploys} from "../src/libraries/Types.sol"; + +contract VerifyCodeDojangResolver_Base is Test { + VerifyCodeDojangResolver public verifyCodeDojangResolver; + address internal admin; + address internal upgrader; + address internal alice; + + function setUp() public virtual { + admin = makeAddr("admin"); + upgrader = makeAddr("upgrader"); + alice = makeAddr("alice"); + + address impl = address(new VerifyCodeDojangResolver()); + bytes memory initData = abi.encodeCall(VerifyCodeDojangResolver.initialize, admin); + address proxy = address(new ERC1967Proxy(impl, initData)); + + verifyCodeDojangResolver = VerifyCodeDojangResolver(payable(proxy)); + + vm.startPrank(admin); + verifyCodeDojangResolver.grantRole(verifyCodeDojangResolver.UPGRADER_ROLE(), upgrader); + vm.stopPrank(); + } +} + +contract VerifyCodeDojangResolver_Init is VerifyCodeDojangResolver_Base { + function test_initialize_revert_for_reinitialize() public { + vm.expectRevert(Initializable.InvalidInitialization.selector); + verifyCodeDojangResolver.initialize(alice); + } + + function test_initialize_revert_for_invalidAdmin() public { + address impl = address(new VerifyCodeDojangResolver()); + bytes memory initData = abi.encodeCall(VerifyCodeDojangResolver.initialize, address(0)); + + vm.expectRevert(ZeroAddress.selector); + new ERC1967Proxy(impl, initData); + } +} + +contract VerifyCodeDojangResolverV2 is VerifyCodeDojangResolver { + function v2Function() public pure returns (bool) { + return true; + } +} + +contract VerifyCodeDojangResolver_Upgrade is VerifyCodeDojangResolver_Base { + function test_upgrade_revert_by_notUpgrader() public { + address newImpl = address(new VerifyCodeDojangResolverV2()); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + alice, + verifyCodeDojangResolver.UPGRADER_ROLE() + ) + ); + vm.prank(alice); + verifyCodeDojangResolver.upgradeToAndCall(newImpl, bytes("")); + } + + function test_upgrade_succeeds_by_upgrader() public { + address newImpl = address(new VerifyCodeDojangResolverV2()); + + vm.prank(upgrader); + verifyCodeDojangResolver.upgradeToAndCall(newImpl, bytes("")); + VerifyCodeDojangResolverV2 newVerifyCodeDojangResolver = + VerifyCodeDojangResolverV2(payable(address(verifyCodeDojangResolver))); + + assertTrue(newVerifyCodeDojangResolver.v2Function()); + } +} + +contract VerifyCodeDojangResolver_Configure is VerifyCodeDojangResolver_Base { + function test_allowAttester_succeeds() public { + address attester = vm.randomAddress(); + + vm.expectEmit(true, true, true, true); + emit AllowlistResolverUpgradeable.AttesterAllowed(attester); + + vm.prank(admin); + verifyCodeDojangResolver.allowAttester(attester); + } + + function test_removeAttester_succeeds() public { + address attester = vm.randomAddress(); + vm.prank(admin); + verifyCodeDojangResolver.allowAttester(attester); + + vm.expectEmit(true, true, true, true); + emit AllowlistResolverUpgradeable.AttesterRemoved(attester); + + vm.prank(admin); + verifyCodeDojangResolver.removeAttester(attester); + } + + function test_setIndexer_succeeds() public { + address indexer = vm.randomAddress(); + + vm.expectEmit(true, true, true, true); + emit IndexerUpdated(address(0), indexer); + + vm.prank(admin); + verifyCodeDojangResolver.setIndexer(indexer); + } + + function test_version() public view { + assertEq(verifyCodeDojangResolver.version(), "0.5.0"); + } +} + +contract VerifyCodeDojangResolver_Test is VerifyCodeDojangResolver_Base { + SchemaRegistry internal schemaRegistry; + EAS internal eas; + + address internal attester; + address internal constant INDEXER = address(0x1234); + + bytes32 internal schemaUid; + AttestationRequest internal attestationRequest; + + // example verify-code payload + bytes32 internal constant CODE_HASH = keccak256(bytes("rawcode")); + string internal constant DOMAIN = "foo.bar"; + + function setUp() public override { + super.setUp(); + vm.warp(1_700_000_000); + + schemaRegistry = new SchemaRegistry(); + EAS tempEas = new EAS(schemaRegistry); + vm.etch(Predeploys.EAS, address(tempEas).code); + eas = EAS(Predeploys.EAS); + + attester = makeAddr("attester"); + + vm.startPrank(admin); + verifyCodeDojangResolver.allowAttester(attester); + verifyCodeDojangResolver.setIndexer(INDEXER); + vm.stopPrank(); + + // VerifyCode schema: (bytes32 codeHash, string domain) + schemaUid = schemaRegistry.register("bytes32 codeHash,string domain", verifyCodeDojangResolver, true); + + attestationRequest = AttestationRequest({ + schema: schemaUid, + data: AttestationRequestData({ + recipient: address(0), + expirationTime: uint64(block.timestamp) + 12, + revocable: true, + refUID: 0x0, + data: abi.encode(CODE_HASH, DOMAIN), + value: 0 + }) + }); + } + + function test_onAttest_false_when_notAllowedAttester() public { + vm.expectRevert(EAS.InvalidAttestation.selector); + + vm.prank(alice); + eas.attest(attestationRequest); + } + + function test_onAttest_false_when_indexingFailed() public { + bytes32 expectedKey = keccak256(abi.encode(CODE_HASH, DOMAIN)); + + vm.mockCallRevert( + INDEXER, + abi.encodeWithSelector( + bytes4(keccak256("index(bytes32,bytes32)")), + expectedKey, + keccak256( + abi.encodePacked( + attestationRequest.schema, + attestationRequest.data.recipient, + attester, + uint64(block.timestamp), + attestationRequest.data.expirationTime, + attestationRequest.data.revocable, + attestationRequest.data.refUID, + attestationRequest.data.data, + uint32(0) + ) + ) + ), + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + address(verifyCodeDojangResolver), + bytes32(0x12871cff13e82f1629feba448a7c66e21bef7c90d20deb75fea29020b75d749a) + ) + ); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + address(verifyCodeDojangResolver), + bytes32(0x12871cff13e82f1629feba448a7c66e21bef7c90d20deb75fea29020b75d749a) + ) + ); + + vm.prank(attester); + eas.attest(attestationRequest); + } + + function test_onAttest_true() public { + bytes32 expectedKey = keccak256(abi.encode(CODE_HASH, DOMAIN)); + + vm.mockCall( + INDEXER, + abi.encodeWithSelector( + bytes4(keccak256("index(bytes32,bytes32)")), + expectedKey, + keccak256( + abi.encodePacked( + attestationRequest.schema, + attestationRequest.data.recipient, + attester, + uint64(block.timestamp), + attestationRequest.data.expirationTime, + attestationRequest.data.revocable, + attestationRequest.data.refUID, + attestationRequest.data.data, + uint32(0) + ) + ) + ), + bytes("") + ); + + vm.prank(attester); + eas.attest(attestationRequest); + } + + function test_onRevoke_true() public { + bytes32 expectedKey = keccak256(abi.encode(CODE_HASH, DOMAIN)); + + vm.mockCall( + INDEXER, + abi.encodeWithSelector( + bytes4(keccak256("index(bytes32,bytes32)")), + expectedKey, + keccak256( + abi.encodePacked( + attestationRequest.schema, + attestationRequest.data.recipient, + attester, + uint64(block.timestamp), + attestationRequest.data.expirationTime, + attestationRequest.data.revocable, + attestationRequest.data.refUID, + attestationRequest.data.data, + uint32(0) + ) + ) + ), + bytes("") + ); + + vm.prank(attester); + bytes32 attestationUid = eas.attest(attestationRequest); + + vm.prank(attester); + eas.revoke(RevocationRequest({schema: schemaUid, data: RevocationRequestData({uid: attestationUid, value: 0})})); + } +} diff --git a/test/abstract/VerifyCodeIndexingResolverUpgradeable.t.sol b/test/abstract/VerifyCodeIndexingResolverUpgradeable.t.sol new file mode 100644 index 0000000..c55b166 --- /dev/null +++ b/test/abstract/VerifyCodeIndexingResolverUpgradeable.t.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {Attestation} from "@eas-contracts/contracts/IEAS.sol"; +import {IndexerUpdated, InvalidIndexer} from "../../src/libraries/Common.sol"; +import {VerifyCodeIndexingResolverUpgradeable} from "../../src/abstract/VerifyCodeIndexingResolverUpgradeable.sol"; + +contract MockVerifyCodeIndexingResolver is VerifyCodeIndexingResolverUpgradeable { + function initialize() public initializer { + __SchemaResolver_init(); + __VerifyCodeIndexingResolver_init(); + } + + function version() external pure returns (string memory) { + return "99.0.0"; + } + + function setIndexer(address indexer) external { + _setIndexer(indexer); + } + + function mockAttest(Attestation calldata attestation) external payable returns (bool) { + return onAttest(attestation, msg.value); + } + + function mockRevoke(Attestation calldata attestation) external payable returns (bool) { + return onRevoke(attestation, msg.value); + } +} + +contract VerifyCodeIndexingResolver_Base is Test { + MockVerifyCodeIndexingResolver public mockVerifyCodeIndexingResolver; + + address internal constant INDEXER = address(0x1234); + + function setUp() public virtual { + mockVerifyCodeIndexingResolver = new MockVerifyCodeIndexingResolver(); + mockVerifyCodeIndexingResolver.initialize(); + } +} + +contract VerifyCodeIndexingResolver_Configure is VerifyCodeIndexingResolver_Base { + function test_version() public view { + assertEq(mockVerifyCodeIndexingResolver.version(), "99.0.0"); + } + + function test_setIndexer_revert_when_zeroAddress() public { + vm.expectRevert(InvalidIndexer.selector); + mockVerifyCodeIndexingResolver.setIndexer(address(0)); + } + + function test_setIndexer_revert_when_sameAddress() public { + mockVerifyCodeIndexingResolver.setIndexer(INDEXER); + + vm.expectRevert(InvalidIndexer.selector); + mockVerifyCodeIndexingResolver.setIndexer(INDEXER); + } + + function test_setIndexer_succeeds() public { + mockVerifyCodeIndexingResolver.setIndexer(INDEXER); + + address newIndexer = vm.randomAddress(); + + vm.expectEmit(true, true, true, true); + emit IndexerUpdated(INDEXER, newIndexer); + + mockVerifyCodeIndexingResolver.setIndexer(newIndexer); + } +} + +contract VerifyCodeIndexingResolver_Test is VerifyCodeIndexingResolver_Base { + function setUp() public override { + super.setUp(); + mockVerifyCodeIndexingResolver.setIndexer(INDEXER); + } + + function test_onAttest_true_and_indexesWithExpectedKey() public { + bytes32 uid = bytes32("uid"); + bytes32 codeHash = keccak256(bytes("rawcode")); + string memory domain = "foo.bar"; + + Attestation memory attestation; + attestation.uid = uid; + attestation.data = abi.encode(codeHash, domain); + + bytes32 expectedKey = keccak256(abi.encode(codeHash, domain)); + bytes memory expectedCalldata = + abi.encodeWithSelector(bytes4(keccak256("index(bytes32,bytes32)")), expectedKey, uid); + + vm.mockCall(INDEXER, expectedCalldata, bytes("")); + + assertTrue(mockVerifyCodeIndexingResolver.mockAttest(attestation)); + } + + function testFuzz_onRevoke_alwaysTrue(Attestation memory attestation) public { + assertTrue(mockVerifyCodeIndexingResolver.mockRevoke(attestation)); + } +}