Contract Details
Overview
COOK BALANCE
Loading…TOKEN NAME
EVM ContractTOTAL SUPPLY
Not availableMore Info
CONTRACT ADDRESS
0x7d9398ae4eed0a16c50032f201348105e694379eCONTRACT CREATOR
0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30Creation transaction
TOKEN TRACKER
Checking ERC-20 metadata…Contract Info
SOURCE CODE
✓ Verified
TOKEN DECIMALS
Not availableMarket and multichain values require verified data feeds.
Latest Contract Transactions
Loading indexed transactions…
| Transaction Hash | Action | Block | Age | From | To | Amount | Txn Fee |
|---|
Token Transfers
ERC-20 Transfer events from the latest indexed transactions involving this contract.
Loading receipt events…
Contract Events
Event logs emitted by this contract in the latest indexed contract transactions.
Loading receipt events…
Internal Transactions
Execution traces are not currently indexed. Internal calls cannot be reconstructed from receipts alone.
Token & Contract Information
- Network
- Cookchain · Chain ID 20261001
- Contract
- 0x7d9398ae4eed0a16c50032f201348105e694379e
- Verification
- Verified
Token metadata is read from the contract. Market valuations and multichain holdings are not currently indexed.
Verified Solidity Source
Compiler: 0.8.30+commit.73712a01.Emscripten.clang · Contract: contracts/TokenRouteDeployment.sol:TokenRouteDeployment · Creation bytecode: matched
contracts/AutomaticTokenRoutesV2Fresh.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
interface IAutoToken { function decimals() external view returns(uint8); function name() external view returns(string memory); function symbol() external view returns(string memory); }
interface IAutoCollateral {function initialize(address,address,address) external; function enrollRemoteRouter(uint32,bytes32) external;}
interface IAutoSynthetic {function initialize(uint256,string calldata,string calldata,address,address,address) external;}
interface ILegacyRoutes { function routers(bytes32) external view returns(address); function administrator() external view returns(address); }
contract AutomaticTokenRoutesV2Fresh {
struct Plan {uint32 origin; address asset; uint8 decimals; string name; string symbol; address localRouter; address remoteRouter;}
address public immutable administrator;
ILegacyRoutes public immutable legacyFactory;
uint32 public immutable remoteDomain;
address public immutable mailbox;
address public immutable hook;
address public immutable ism;
bytes32 public immutable collateralHash;
bytes32 public immutable syntheticHash;
address[4] public signers;
address public peer;
mapping(bytes32=>address) public routers;
mapping(bytes32=>bytes32) public approvedPlans;
event FactoryCreated(address indexed administrator);
event RouteRequested(uint32 indexed origin,address indexed asset,address requester);
event PeerConfigured(address peer);
event AutomaticRouteCreated(uint32 indexed origin,address indexed asset,address router,address remoteRouter,uint8 decimals,bytes32 digest);
constructor(address admin,uint32 remote,address m,address h,address i,bytes32 collateral,bytes32 synthetic,address[4] memory validators,address legacy) {
require(block.chainid<=type(uint32).max&&remote!=block.chainid&&remote!=0,"domain");
require(admin!=address(0)&&m.code.length>0&&h.code.length>0&&i.code.length>0,"core");
for(uint256 j;j<4;j++){require(validators[j]!=address(0),"signer");for(uint256 k;k<j;k++)require(validators[j]!=validators[k],"duplicate signer");}
require(legacy==address(0)||(legacy.code.length>0 && ILegacyRoutes(legacy).administrator()==admin),"legacy factory");legacyFactory=ILegacyRoutes(legacy);administrator=admin;remoteDomain=remote;mailbox=m;hook=h;ism=i;collateralHash=collateral;syntheticHash=synthetic;signers=validators;emit FactoryCreated(admin);
}
function configurePeer(address remoteFactory) external {require(msg.sender==administrator&&peer==address(0)&&remoteFactory!=address(0),"peer locked");peer=remoteFactory;emit PeerConfigured(remoteFactory);}
function requestRoute(address asset) external {require(peer!=address(0)&&asset.code.length>0,"not ready");require(routers[key(uint32(block.chainid),asset)]==address(0)&&legacyRouter(key(uint32(block.chainid),asset))==address(0),"route exists");IAutoToken t=IAutoToken(asset);require(t.decimals()<=18&&bytes(t.name()).length>0&&bytes(t.name()).length<=60&&bytes(t.symbol()).length>0&&bytes(t.symbol()).length<=24,"metadata");emit RouteRequested(uint32(block.chainid),asset,msg.sender);}
function legacyRouter(bytes32 k) private view returns(address){return address(legacyFactory)==address(0)?address(0):legacyFactory.routers(k);}
function bridgedName(string memory original,uint32 origin) public pure returns(string memory) {
string memory label;
if(origin==137)label="Polygon";else if(origin==143)label="Monad";else if(origin==43114)label="Avalanche";else if(origin==59144)label="Linea";else if(origin==146)label="Sonic";else if(origin==250)label="Fantom";else if(origin==42161)label="Arbitrum";else if(origin==56)label="BSC";else if(origin==8453)label="Base";else if(origin==4663)label="Robinhood";else if(origin==5042)label="Arc";else if(origin==20261001)label="Cookchain";
else {uint32 value=origin;bytes memory digits=new bytes(10);uint256 count;do{digits[count++]=bytes1(uint8(48+value%10));value/=10;}while(value>0);bytes memory result=new bytes(count);for(uint256 i;i<count;i++)result[i]=digits[count-1-i];label=string(result);}
return string.concat(original," (Bridged from ",label,")");
}
function key(uint32 origin,address asset) public pure returns(bytes32){return keccak256(abi.encode(origin,asset));}
function predict(uint32 origin,address asset,uint8 decimals,bytes calldata code) public view returns(address){bool original=origin==block.chainid;require(keccak256(code)==(original?collateralHash:syntheticHash),"code");bytes memory init=original?bytes.concat(code,abi.encode(asset,uint256(1),uint256(1),mailbox)):bytes.concat(code,abi.encode(decimals,uint256(1),uint256(1),mailbox));return address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xff),address(this),key(origin,asset),keccak256(init))))));}
function digest(Plan calldata p) public view returns(bytes32){require(peer!=address(0),"peer missing");bool first=block.chainid<remoteDomain;return keccak256(abi.encode("COOKCHAIN_AUTOROUTE_V2",first?uint32(block.chainid):remoteDomain,first?remoteDomain:uint32(block.chainid),first?address(this):peer,first?peer:address(this),p.origin,p.asset,p.decimals,p.name,p.symbol,first?p.localRouter:p.remoteRouter,first?p.remoteRouter:p.localRouter));}
function authorize(bytes32 hash,bytes[] calldata signatures) private view {require(signatures.length==3,"three signatures");bytes32 signed=keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32",hash));address previous;
for(uint256 j;j<3;j++){bytes calldata sig=signatures[j];require(sig.length==65,"signature length");bytes32 r;bytes32 s;uint8 v;assembly("memory-safe"){r:=calldataload(sig.offset) s:=calldataload(add(sig.offset,32)) v:=byte(0,calldataload(add(sig.offset,64)))}require(uint256(s)<=0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0&&(v==27||v==28),"signature encoding");address signer=ecrecover(signed,v,r,s);require(signer>previous,"signature order");bool enrolled;for(uint256 k;k<4;k++)if(signers[k]==signer)enrolled=true;require(enrolled,"unknown signer");previous=signer;}
}
function deployRoute(Plan calldata p,bytes[] calldata signatures,bytes calldata code) external returns(address router){require(p.origin==block.chainid||p.origin==remoteDomain,"origin");require(p.asset!=address(0)&&p.decimals<=18&&p.remoteRouter!=address(0),"plan");require(bytes(p.name).length>0&&bytes(p.name).length<=60&&bytes(p.symbol).length>0&&bytes(p.symbol).length<=24,"metadata");bytes32 hash=digest(p);authorize(hash,signatures);bytes32 salt=key(p.origin,p.asset);require(routers[salt]==address(0)&&legacyRouter(salt)==address(0),"route exists");require(p.localRouter==predict(p.origin,p.asset,p.decimals,code),"prediction");bool original=p.origin==block.chainid;if(original){require(p.asset.code.length>0,"asset");IAutoToken t=IAutoToken(p.asset);require(t.decimals()==p.decimals&&keccak256(bytes(t.name()))==keccak256(bytes(p.name))&&keccak256(bytes(t.symbol()))==keccak256(bytes(p.symbol)),"original metadata");}
bytes memory init=original?bytes.concat(code,abi.encode(p.asset,uint256(1),uint256(1),mailbox)):bytes.concat(code,abi.encode(p.decimals,uint256(1),uint256(1),mailbox));assembly("memory-safe"){router:=create2(0,add(init,32),mload(init),salt)}require(router==p.localRouter,"creation");routers[salt]=router;approvedPlans[salt]=hash;
if(original)IAutoCollateral(router).initialize(hook,ism,address(this));else IAutoSynthetic(router).initialize(0,bridgedName(p.name,p.origin),p.symbol,hook,ism,address(this));
IAutoCollateral(router).enrollRemoteRouter(remoteDomain,bytes32(uint256(uint160(p.remoteRouter))));emit AutomaticRouteCreated(p.origin,p.asset,router,p.remoteRouter,p.decimals,hash);
}
}
contracts/AtomicBridgeCoreDeploymentV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
interface ICoreMailbox {function initialize(address,address,address,address) external;}
interface ICoreSetFactory {function deploy(address[] calldata,uint8) external returns(address);}
/// Hash-pinned, atomic infrastructure deployment without issuing a token.
contract AtomicBridgeCoreDeploymentV2 {
address public immutable administrator;
uint32 public immutable remoteDomain;
bytes32[6] public codeHashes;
bytes32 public immutable factoryHash;
bytes32 public immutable collateralHash;
bytes32 public immutable syntheticHash;
address public factory;
bool private deployed;
event CoreCreated(uint32 indexed domain,address mailbox,address merkleTreeHook,address pause,address ism,address factory);
constructor(address admin,uint32 remote,bytes32[6] memory hashes,bytes32 autoHash,bytes32 collateral,bytes32 synthetic){
require(admin!=address(0)&&remote!=0&&remote!=block.chainid&&block.chainid<=type(uint32).max,"configuration");
administrator=admin;remoteDomain=remote;codeHashes=hashes;factoryHash=autoHash;collateralHash=collateral;syntheticHash=synthetic;
}
function create(bytes memory code) private returns(address result){assembly("memory-safe"){result:=create(0,add(code,32),mload(code))}require(result!=address(0),"creation failed");}
function deploy(bytes[6] calldata codes,bytes calldata automaticCode,address[4] calldata validators) external {
require(msg.sender==administrator&&!deployed,"administrator or already deployed");
for(uint256 j;j<6;j++)require(keccak256(codes[j])==codeHashes[j],"core code");
require(keccak256(automaticCode)==factoryHash,"factory code");
address[] memory members=new address[](4);
for(uint256 j;j<4;j++){require(validators[j]!=address(0)&&(j==0||validators[j]>validators[j-1]),"sorted distinct signers");members[j]=validators[j];}
deployed=true;
uint32 domain=uint32(block.chainid);
address mailbox=create(bytes.concat(codes[0],abi.encode(domain)));
address hook=create(bytes.concat(codes[1],abi.encode(mailbox)));
address fee=create(bytes.concat(codes[2],abi.encode(uint256(0),uint256(0),administrator,administrator)));
address pause=create(bytes.concat(codes[3],abi.encode(administrator)));
address multisigFactory=create(codes[4]);address aggregationFactory=create(codes[5]);
address multisig=ICoreSetFactory(multisigFactory).deploy(members,3);
address[] memory modules=new address[](2);modules[0]=multisig;modules[1]=pause;
address ism=ICoreSetFactory(aggregationFactory).deploy(modules,2);
ICoreMailbox(mailbox).initialize(administrator,ism,hook,fee);
factory=create(bytes.concat(automaticCode,abi.encode(administrator,remoteDomain,mailbox,hook,ism,collateralHash,syntheticHash,validators,address(0))));
emit CoreCreated(domain,mailbox,hook,pause,ism,factory);
}
}
contracts/TokenRouteDeployment.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
interface IRouteMetadata {function decimals() external view returns(uint8);}
interface IRouteCollateral {function initialize(address,address,address) external;}
interface IRouteSynthetic {function initialize(uint256,string calldata,string calldata,address,address,address) external;}
contract TokenRouteDeployment {
address public immutable owner;
bytes32 public immutable collateralHash;
bytes32 public immutable syntheticHash;
mapping(bytes32=>address) public routers;
event RouteCreated(uint32 indexed origin,address indexed asset,address router,uint8 decimals);
constructor(address admin,bytes32 collateral,bytes32 synthetic){require(admin!=address(0),"zero owner");owner=admin;collateralHash=collateral;syntheticHash=synthetic;}
function create(bytes memory code) private returns(address a){assembly("memory-safe"){a:=create(0,add(code,32),mload(code))}require(a!=address(0),"creation failed");}
function deploy(uint32 origin,address asset,uint8 decimals,string calldata name,string calldata symbol,address mailbox,address hook,address ism,bytes calldata code) external returns(address router){
require(msg.sender==owner,"owner only");require(asset!=address(0),"zero asset");require(decimals<=18,"unsupported decimals");require(mailbox.code.length>0&&hook.code.length>0&&ism.code.length>0,"missing core");bytes32 key=keccak256(abi.encode(origin,asset));require(routers[key]==address(0),"route exists");
if(block.chainid==origin){require(keccak256(code)==collateralHash,"unexpected code");require(asset.code.length>0&&IRouteMetadata(asset).decimals()==decimals,"wrong token");router=create(bytes.concat(code,abi.encode(asset,uint256(1),uint256(1),mailbox)));IRouteCollateral(router).initialize(hook,ism,owner);}
else{require(keccak256(code)==syntheticHash,"unexpected code");require(bytes(name).length>0&&bytes(name).length<=96&&bytes(symbol).length>0&&bytes(symbol).length<=24,"invalid metadata");router=create(bytes.concat(code,abi.encode(decimals,uint256(1),uint256(1),mailbox)));IRouteSynthetic(router).initialize(0,name,symbol,hook,ism,owner);}
routers[key]=router;emit RouteCreated(origin,asset,router,decimals);
}
}
Contract ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "bytes32",
"name": "collateral",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "synthetic",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"indexed": true,
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "router",
"type": "address"
},
{
"indexed": false,
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"name": "RouteCreated",
"type": "event"
},
{
"inputs": [],
"name": "collateralHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "address",
"name": "mailbox",
"type": "address"
},
{
"internalType": "address",
"name": "hook",
"type": "address"
},
{
"internalType": "address",
"name": "ism",
"type": "address"
},
{
"internalType": "bytes",
"name": "code",
"type": "bytes"
}
],
"name": "deploy",
"outputs": [
{
"internalType": "address",
"name": "router",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "routers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "syntheticHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
}
]Raw Contract Data · JSON
{
"id": "0x7d9398ae4eed0a16c50032f201348105e694379e",
"contract": "0x7d9398ae4eed0a16c50032f201348105e694379e",
"name": "EVM Contract",
"type": "contract",
"bytecode": "0x608080604052600436101561001357600080fd5b600090813560e01c9081632640c54614610147575080634178bb3b1461010c5780638da5cb5b146100c7578063aa1fce69146100955763c30aaad21461005857600080fd5b3461009257806003193601126100925760206040517fa958f9628dcbf52a103e4399714805811ed312515684ec4b1031599dd31071098152f35b80fd5b5034610092576020366003190112610092576020906004358152808252604060018060a01b0391205416604051908152f35b50346100925780600319360112610092576040517f000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d306001600160a01b03168152602090f35b503461009257806003193601126100925760206040517f80caa35bee32d9ad74dd17a5aa09bda24847b145200798eba26219e4133234288152f35b9050346107c9576101203660031901126107c9576004359063ffffffff82168092036107c157602435916001600160a01b038316918284036107bd576044359060ff821680920361042f5760643567ffffffffffffffff81116107b9576101b29036906004016107cd565b919060843567ffffffffffffffff81116107c5576101d49036906004016107cd565b909760a4356001600160a01b038116939290918b918584036107c15760c4356001600160a01b0381169c9095908d87036107bd5760e4356001600160a01b03811697908881036107b9576101043567ffffffffffffffff81116106435761023f9036906004016107cd565b7f000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d306001600160a01b03169c9099919850338d900361078a57508f156107585760128e1161071c573b15159182610711575b5081610706575b50156106d2578e998c8e60405190602082019283526040820152604081526102c0606082610800565b519020808c5260208c90526040909b20546001600160a01b031661069e57468d036104f457505050506103256102f7368585610838565b602081519101207f80caa35bee32d9ad74dd17a5aa09bda24847b145200798eba26219e4133234281461087f565b3b151580610475575b15610442578a936103739261036e92604051928c6020850152600160408501526001606085015260808401526080835261036960a084610800565b6108bd565b610939565b976001600160a01b03891690813b1561043e5783606492604051968795869463c0c53b8b60e01b86526004860152602485015260448401525af180156104335761041a575b507f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c91604060209781935b81528089522080546001600160a01b0319166001600160a01b039097169687179055815186815280880191909152a3604051908152f35b610425878092610800565b61042f57386103b8565b8580fd5b6040513d89823e3d90fd5b8380fd5b60405162461bcd60e51b815260206004820152600b60248201526a3bb937b733903a37b5b2b760a91b6044820152606490fd5b5060405163313ce56760e01b81526020816004818d5afa80156104e95788918d916104a5575b5060ff161461032e565b9150506020813d6020116104e1575b816104c160209383610800565b810103126104dd575160ff811681036104dd57879060ff61049b565b8b80fd5b3d91506104b4565b6040513d8e823e3d90fd5b929895919490935061053861050a368484610838565b602081519101207fa958f9628dcbf52a103e4399714805811ed312515684ec4b1031599dd31071091461087f565b82151580610693575b8061068a575b8061067f575b15610647578a8f989261036e9261058994604051936020850152600160408501526001606085015260808401526080835261036960a084610800565b9b6001600160a01b038d1694853b15610643576105d0966105e289956040519b8c9a8b998a9863e80a7c7960e01b8a528a60048b015260c060248b015260c48a0191610918565b87810360031901604489015291610918565b926064850152608484015260a483015203925af18015610433576040926020987f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c95938593610633575b50906103e3565b8161063d91610800565b3861062c565b8780fd5b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b50601889111561054d565b50881515610547565b506060831115610541565b60405162461bcd60e51b815260206004820152600c60248201526b726f7574652065786973747360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b6d697373696e6720636f726560a01b6044820152606490fd5b90503b151538610297565b3b1515915038610290565b60405162461bcd60e51b8152602060048201526014602482015273756e737570706f7274656420646563696d616c7360601b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152691e995c9bc8185cdcd95d60b21b6044820152606490fd5b62461bcd60e51b815260206004820152600a6024820152696f776e6572206f6e6c7960b01b6044820152606490fd5b8680fd5b8480fd5b8280fd5b8880fd5b5080fd5b9181601f840112156107fb5782359167ffffffffffffffff83116107fb57602083818601950101116107fb57565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761082257604052565b634e487b7160e01b600052604160045260246000fd5b92919267ffffffffffffffff82116108225760405191610862601f8201601f191660200184610800565b8294818452818301116107fb578281602093846000960137010152565b1561088657565b60405162461bcd60e51b815260206004820152600f60248201526e756e657870656374656420636f646560881b6044820152606490fd5b60405193929184918190602084013781016000602082015282519260005b8481106109015750506108ff9260209101016000815203601f198101845283610800565b565b6020828201810151848301820152879450016108db565b908060209392818452848401376000828201840152601f01601f1916010190565b6020815191016000f0906001600160a01b0382161561095457565b60405162461bcd60e51b815260206004820152600f60248201526e18dc99585d1a5bdb8819985a5b1959608a1b6044820152606490fdfea264697066735822122071dde2035fbd7194a0c4be267b1aac08f09f08d880a7bf8f556247f49b8869de64736f6c634300081e0033",
"is_contract": true,
"verified": true,
"verification": {
"address": "0x7d9398ae4eed0a16c50032f201348105e694379e",
"compiler": "0.8.30+commit.73712a01.Emscripten.clang",
"contract": "contracts/TokenRouteDeployment.sol:TokenRouteDeployment",
"verified": true,
"match": "runtime-with-metadata",
"creation_verified": true,
"factory_deployment": null,
"constructor_arguments": "000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3080caa35bee32d9ad74dd17a5aa09bda24847b145200798eba26219e413323428a958f9628dcbf52a103e4399714805811ed312515684ec4b1031599dd3107109",
"verified_at": "2026-10-03T15:17:26.509Z",
"chain_id": 20261001,
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "bytes32",
"name": "collateral",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "synthetic",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"indexed": true,
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "router",
"type": "address"
},
{
"indexed": false,
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"name": "RouteCreated",
"type": "event"
},
{
"inputs": [],
"name": "collateralHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "address",
"name": "mailbox",
"type": "address"
},
{
"internalType": "address",
"name": "hook",
"type": "address"
},
{
"internalType": "address",
"name": "ism",
"type": "address"
},
{
"internalType": "bytes",
"name": "code",
"type": "bytes"
}
],
"name": "deploy",
"outputs": [
{
"internalType": "address",
"name": "router",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "routers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "syntheticHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
}
],
"input": {
"language": "Solidity",
"sources": {
"contracts/AutomaticTokenRoutesV2Fresh.sol": {
"content": "// SPDX-License-Identifier: MIT\r\npragma solidity 0.8.30;\r\ninterface IAutoToken { function decimals() external view returns(uint8); function name() external view returns(string memory); function symbol() external view returns(string memory); }\r\ninterface IAutoCollateral {function initialize(address,address,address) external; function enrollRemoteRouter(uint32,bytes32) external;}\r\ninterface IAutoSynthetic {function initialize(uint256,string calldata,string calldata,address,address,address) external;}\r\ninterface ILegacyRoutes { function routers(bytes32) external view returns(address); function administrator() external view returns(address); }\ncontract AutomaticTokenRoutesV2Fresh {\r\n struct Plan {uint32 origin; address asset; uint8 decimals; string name; string symbol; address localRouter; address remoteRouter;}\r\n address public immutable administrator;\n ILegacyRoutes public immutable legacyFactory;\r\n uint32 public immutable remoteDomain;\r\n address public immutable mailbox;\r\n address public immutable hook;\r\n address public immutable ism;\r\n bytes32 public immutable collateralHash;\r\n bytes32 public immutable syntheticHash;\r\n address[4] public signers;\r\n address public peer;\r\n mapping(bytes32=>address) public routers;\r\n mapping(bytes32=>bytes32) public approvedPlans;\r\n event FactoryCreated(address indexed administrator);\r\n event RouteRequested(uint32 indexed origin,address indexed asset,address requester);\r\n event PeerConfigured(address peer);\r\n event AutomaticRouteCreated(uint32 indexed origin,address indexed asset,address router,address remoteRouter,uint8 decimals,bytes32 digest);\r\n constructor(address admin,uint32 remote,address m,address h,address i,bytes32 collateral,bytes32 synthetic,address[4] memory validators,address legacy) {\r\n require(block.chainid<=type(uint32).max&&remote!=block.chainid&&remote!=0,\"domain\");\r\n require(admin!=address(0)&&m.code.length>0&&h.code.length>0&&i.code.length>0,\"core\");\r\n for(uint256 j;j<4;j++){require(validators[j]!=address(0),\"signer\");for(uint256 k;k<j;k++)require(validators[j]!=validators[k],\"duplicate signer\");}\r\n require(legacy==address(0)||(legacy.code.length>0 && ILegacyRoutes(legacy).administrator()==admin),\"legacy factory\");legacyFactory=ILegacyRoutes(legacy);administrator=admin;remoteDomain=remote;mailbox=m;hook=h;ism=i;collateralHash=collateral;syntheticHash=synthetic;signers=validators;emit FactoryCreated(admin);\r\n }\r\n function configurePeer(address remoteFactory) external {require(msg.sender==administrator&&peer==address(0)&&remoteFactory!=address(0),\"peer locked\");peer=remoteFactory;emit PeerConfigured(remoteFactory);}\r\n function requestRoute(address asset) external {require(peer!=address(0)&&asset.code.length>0,\"not ready\");require(routers[key(uint32(block.chainid),asset)]==address(0)&&legacyRouter(key(uint32(block.chainid),asset))==address(0),\"route exists\");IAutoToken t=IAutoToken(asset);require(t.decimals()<=18&&bytes(t.name()).length>0&&bytes(t.name()).length<=60&&bytes(t.symbol()).length>0&&bytes(t.symbol()).length<=24,\"metadata\");emit RouteRequested(uint32(block.chainid),asset,msg.sender);}\r\n function legacyRouter(bytes32 k) private view returns(address){return address(legacyFactory)==address(0)?address(0):legacyFactory.routers(k);}\n function bridgedName(string memory original,uint32 origin) public pure returns(string memory) {\n string memory label;\n if(origin==137)label=\"Polygon\";else if(origin==143)label=\"Monad\";else if(origin==43114)label=\"Avalanche\";else if(origin==59144)label=\"Linea\";else if(origin==146)label=\"Sonic\";else if(origin==250)label=\"Fantom\";else if(origin==42161)label=\"Arbitrum\";else if(origin==56)label=\"BSC\";else if(origin==8453)label=\"Base\";else if(origin==4663)label=\"Robinhood\";else if(origin==5042)label=\"Arc\";else if(origin==20261001)label=\"Cookchain\";\n else {uint32 value=origin;bytes memory digits=new bytes(10);uint256 count;do{digits[count++]=bytes1(uint8(48+value%10));value/=10;}while(value>0);bytes memory result=new bytes(count);for(uint256 i;i<count;i++)result[i]=digits[count-1-i];label=string(result);}\n return string.concat(original,\" (Bridged from \",label,\")\");\n }\n function key(uint32 origin,address asset) public pure returns(bytes32){return keccak256(abi.encode(origin,asset));}\r\n function predict(uint32 origin,address asset,uint8 decimals,bytes calldata code) public view returns(address){bool original=origin==block.chainid;require(keccak256(code)==(original?collateralHash:syntheticHash),\"code\");bytes memory init=original?bytes.concat(code,abi.encode(asset,uint256(1),uint256(1),mailbox)):bytes.concat(code,abi.encode(decimals,uint256(1),uint256(1),mailbox));return address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xff),address(this),key(origin,asset),keccak256(init))))));}\r\n function digest(Plan calldata p) public view returns(bytes32){require(peer!=address(0),\"peer missing\");bool first=block.chainid<remoteDomain;return keccak256(abi.encode(\"COOKCHAIN_AUTOROUTE_V2\",first?uint32(block.chainid):remoteDomain,first?remoteDomain:uint32(block.chainid),first?address(this):peer,first?peer:address(this),p.origin,p.asset,p.decimals,p.name,p.symbol,first?p.localRouter:p.remoteRouter,first?p.remoteRouter:p.localRouter));}\r\n function authorize(bytes32 hash,bytes[] calldata signatures) private view {require(signatures.length==3,\"three signatures\");bytes32 signed=keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\",hash));address previous;\r\n for(uint256 j;j<3;j++){bytes calldata sig=signatures[j];require(sig.length==65,\"signature length\");bytes32 r;bytes32 s;uint8 v;assembly(\"memory-safe\"){r:=calldataload(sig.offset) s:=calldataload(add(sig.offset,32)) v:=byte(0,calldataload(add(sig.offset,64)))}require(uint256(s)<=0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0&&(v==27||v==28),\"signature encoding\");address signer=ecrecover(signed,v,r,s);require(signer>previous,\"signature order\");bool enrolled;for(uint256 k;k<4;k++)if(signers[k]==signer)enrolled=true;require(enrolled,\"unknown signer\");previous=signer;}\r\n }\r\n function deployRoute(Plan calldata p,bytes[] calldata signatures,bytes calldata code) external returns(address router){require(p.origin==block.chainid||p.origin==remoteDomain,\"origin\");require(p.asset!=address(0)&&p.decimals<=18&&p.remoteRouter!=address(0),\"plan\");require(bytes(p.name).length>0&&bytes(p.name).length<=60&&bytes(p.symbol).length>0&&bytes(p.symbol).length<=24,\"metadata\");bytes32 hash=digest(p);authorize(hash,signatures);bytes32 salt=key(p.origin,p.asset);require(routers[salt]==address(0)&&legacyRouter(salt)==address(0),\"route exists\");require(p.localRouter==predict(p.origin,p.asset,p.decimals,code),\"prediction\");bool original=p.origin==block.chainid;if(original){require(p.asset.code.length>0,\"asset\");IAutoToken t=IAutoToken(p.asset);require(t.decimals()==p.decimals&&keccak256(bytes(t.name()))==keccak256(bytes(p.name))&&keccak256(bytes(t.symbol()))==keccak256(bytes(p.symbol)),\"original metadata\");}\r\n bytes memory init=original?bytes.concat(code,abi.encode(p.asset,uint256(1),uint256(1),mailbox)):bytes.concat(code,abi.encode(p.decimals,uint256(1),uint256(1),mailbox));assembly(\"memory-safe\"){router:=create2(0,add(init,32),mload(init),salt)}require(router==p.localRouter,\"creation\");routers[salt]=router;approvedPlans[salt]=hash;\r\n if(original)IAutoCollateral(router).initialize(hook,ism,address(this));else IAutoSynthetic(router).initialize(0,bridgedName(p.name,p.origin),p.symbol,hook,ism,address(this));\r\n IAutoCollateral(router).enrollRemoteRouter(remoteDomain,bytes32(uint256(uint160(p.remoteRouter))));emit AutomaticRouteCreated(p.origin,p.asset,router,p.remoteRouter,p.decimals,hash);\r\n }\r\n}\r\n"
},
"contracts/AtomicBridgeCoreDeploymentV2.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.30;\ninterface ICoreMailbox {function initialize(address,address,address,address) external;}\ninterface ICoreSetFactory {function deploy(address[] calldata,uint8) external returns(address);}\n/// Hash-pinned, atomic infrastructure deployment without issuing a token.\ncontract AtomicBridgeCoreDeploymentV2 {\n address public immutable administrator;\n uint32 public immutable remoteDomain;\n bytes32[6] public codeHashes;\n bytes32 public immutable factoryHash;\n bytes32 public immutable collateralHash;\n bytes32 public immutable syntheticHash;\n address public factory;\n bool private deployed;\n event CoreCreated(uint32 indexed domain,address mailbox,address merkleTreeHook,address pause,address ism,address factory);\n constructor(address admin,uint32 remote,bytes32[6] memory hashes,bytes32 autoHash,bytes32 collateral,bytes32 synthetic){\n require(admin!=address(0)&&remote!=0&&remote!=block.chainid&&block.chainid<=type(uint32).max,\"configuration\");\n administrator=admin;remoteDomain=remote;codeHashes=hashes;factoryHash=autoHash;collateralHash=collateral;syntheticHash=synthetic;\n }\n function create(bytes memory code) private returns(address result){assembly(\"memory-safe\"){result:=create(0,add(code,32),mload(code))}require(result!=address(0),\"creation failed\");}\n function deploy(bytes[6] calldata codes,bytes calldata automaticCode,address[4] calldata validators) external {\n require(msg.sender==administrator&&!deployed,\"administrator or already deployed\");\n for(uint256 j;j<6;j++)require(keccak256(codes[j])==codeHashes[j],\"core code\");\n require(keccak256(automaticCode)==factoryHash,\"factory code\");\n address[] memory members=new address[](4);\n for(uint256 j;j<4;j++){require(validators[j]!=address(0)&&(j==0||validators[j]>validators[j-1]),\"sorted distinct signers\");members[j]=validators[j];}\n deployed=true;\n uint32 domain=uint32(block.chainid);\n address mailbox=create(bytes.concat(codes[0],abi.encode(domain)));\n address hook=create(bytes.concat(codes[1],abi.encode(mailbox)));\n address fee=create(bytes.concat(codes[2],abi.encode(uint256(0),uint256(0),administrator,administrator)));\n address pause=create(bytes.concat(codes[3],abi.encode(administrator)));\n address multisigFactory=create(codes[4]);address aggregationFactory=create(codes[5]);\n address multisig=ICoreSetFactory(multisigFactory).deploy(members,3);\n address[] memory modules=new address[](2);modules[0]=multisig;modules[1]=pause;\n address ism=ICoreSetFactory(aggregationFactory).deploy(modules,2);\n ICoreMailbox(mailbox).initialize(administrator,ism,hook,fee);\n factory=create(bytes.concat(automaticCode,abi.encode(administrator,remoteDomain,mailbox,hook,ism,collateralHash,syntheticHash,validators,address(0))));\n emit CoreCreated(domain,mailbox,hook,pause,ism,factory);\n }\n}\n"
},
"contracts/TokenRouteDeployment.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.30;\ninterface IRouteMetadata {function decimals() external view returns(uint8);}\ninterface IRouteCollateral {function initialize(address,address,address) external;}\ninterface IRouteSynthetic {function initialize(uint256,string calldata,string calldata,address,address,address) external;}\ncontract TokenRouteDeployment {\n address public immutable owner;\n bytes32 public immutable collateralHash;\n bytes32 public immutable syntheticHash;\n mapping(bytes32=>address) public routers;\n event RouteCreated(uint32 indexed origin,address indexed asset,address router,uint8 decimals);\n constructor(address admin,bytes32 collateral,bytes32 synthetic){require(admin!=address(0),\"zero owner\");owner=admin;collateralHash=collateral;syntheticHash=synthetic;}\n function create(bytes memory code) private returns(address a){assembly(\"memory-safe\"){a:=create(0,add(code,32),mload(code))}require(a!=address(0),\"creation failed\");}\n function deploy(uint32 origin,address asset,uint8 decimals,string calldata name,string calldata symbol,address mailbox,address hook,address ism,bytes calldata code) external returns(address router){\n require(msg.sender==owner,\"owner only\");require(asset!=address(0),\"zero asset\");require(decimals<=18,\"unsupported decimals\");require(mailbox.code.length>0&&hook.code.length>0&&ism.code.length>0,\"missing core\");bytes32 key=keccak256(abi.encode(origin,asset));require(routers[key]==address(0),\"route exists\");\n if(block.chainid==origin){require(keccak256(code)==collateralHash,\"unexpected code\");require(asset.code.length>0&&IRouteMetadata(asset).decimals()==decimals,\"wrong token\");router=create(bytes.concat(code,abi.encode(asset,uint256(1),uint256(1),mailbox)));IRouteCollateral(router).initialize(hook,ism,owner);}\n else{require(keccak256(code)==syntheticHash,\"unexpected code\");require(bytes(name).length>0&&bytes(name).length<=96&&bytes(symbol).length>0&&bytes(symbol).length<=24,\"invalid metadata\");router=create(bytes.concat(code,abi.encode(decimals,uint256(1),uint256(1),mailbox)));IRouteSynthetic(router).initialize(0,name,symbol,hook,ism,owner);}\n routers[key]=router;emit RouteCreated(origin,asset,router,decimals);\n }\n}\r\n"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"viaIR": true,
"evmVersion": "paris",
"outputSelection": {
"contracts/TokenRouteDeployment.sol": {
"TokenRouteDeployment": [
"abi",
"metadata",
"evm.bytecode",
"evm.deployedBytecode"
],
"": [
"ast"
]
}
}
}
},
"metadata": {
"compiler": {
"version": "0.8.30+commit.73712a01"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "bytes32",
"name": "collateral",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "synthetic",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"indexed": true,
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "router",
"type": "address"
},
{
"indexed": false,
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"name": "RouteCreated",
"type": "event"
},
{
"inputs": [],
"name": "collateralHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "origin",
"type": "uint32"
},
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "address",
"name": "mailbox",
"type": "address"
},
{
"internalType": "address",
"name": "hook",
"type": "address"
},
{
"internalType": "address",
"name": "ism",
"type": "address"
},
{
"internalType": "bytes",
"name": "code",
"type": "bytes"
}
],
"name": "deploy",
"outputs": [
{
"internalType": "address",
"name": "router",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "routers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "syntheticHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/TokenRouteDeployment.sol": "TokenRouteDeployment"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
},
"sources": {
"contracts/TokenRouteDeployment.sol": {
"keccak256": "0x7d4400592a624c2db0350aa4a9e2299bcb5f60ce72d571073dae0e7b64f9f707",
"license": "MIT",
"urls": [
"bzz-raw://2146cf92957f39375cf8744d711d23ee10af5082489bed35b60d5646be3b139b",
"dweb:/ipfs/QmaD2aJY3C5bufXfKGnQ792oEKpTvXByu3CMZ6Ek9v147Y"
]
}
},
"version": 1
}
},
"deployment": {
"txid": "0xc7fce3a848639b6adeae896f486275ee6fb0f6df1c3fa1c045f9729c5eed7dc7",
"hash": "0xc7fce3a848639b6adeae896f486275ee6fb0f6df1c3fa1c045f9729c5eed7dc7",
"sender": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"recipient": "0x7d9398ae4eed0a16c50032f201348105e694379e",
"amount_dec": "0",
"value_raw": "0",
"fee_dec": "0.000000005963861783",
"fee_raw": "5963861783",
"asset": "COOK",
"timestamp_ms": 1791040177000,
"block": 67812,
"status": "Success",
"kind": "Contract creation",
"source": "EVM",
"nonce": 136,
"transaction_type": 2,
"gas_limit": "722239",
"gas_used": "595969",
"gas_price_wei": "10007",
"gas_price_gwei": "0.000010007",
"data_hex": "0x60e0346100db57601f610ab838819003918201601f19168301916001600160401b038311848410176100e0578084926060946040528339810103126100db5780516001600160a01b03811691908281036100db576040602083015192015192156100a95760805260a05260c0526040516109c190816100f7823960805181818160dd0152610241015260a0518181816101240152610300015260c051818181606f01526105130152f35b60405162461bcd60e51b815260206004820152600a6024820152693d32b9379037bbb732b960b11b6044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c9081632640c54614610147575080634178bb3b1461010c5780638da5cb5b146100c7578063aa1fce69146100955763c30aaad21461005857600080fd5b3461009257806003193601126100925760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b80fd5b5034610092576020366003190112610092576020906004358152808252604060018060a01b0391205416604051908152f35b50346100925780600319360112610092576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461009257806003193601126100925760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050346107c9576101203660031901126107c9576004359063ffffffff82168092036107c157602435916001600160a01b038316918284036107bd576044359060ff821680920361042f5760643567ffffffffffffffff81116107b9576101b29036906004016107cd565b919060843567ffffffffffffffff81116107c5576101d49036906004016107cd565b909760a4356001600160a01b038116939290918b918584036107c15760c4356001600160a01b0381169c9095908d87036107bd5760e4356001600160a01b03811697908881036107b9576101043567ffffffffffffffff81116106435761023f9036906004016107cd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169c9099919850338d900361078a57508f156107585760128e1161071c573b15159182610711575b5081610706575b50156106d2578e998c8e60405190602082019283526040820152604081526102c0606082610800565b519020808c5260208c90526040909b20546001600160a01b031661069e57468d036104f457505050506103256102f7368585610838565b602081519101207f00000000000000000000000000000000000000000000000000000000000000001461087f565b3b151580610475575b15610442578a936103739261036e92604051928c6020850152600160408501526001606085015260808401526080835261036960a084610800565b6108bd565b610939565b976001600160a01b03891690813b1561043e5783606492604051968795869463c0c53b8b60e01b86526004860152602485015260448401525af180156104335761041a575b507f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c91604060209781935b81528089522080546001600160a01b0319166001600160a01b039097169687179055815186815280880191909152a3604051908152f35b610425878092610800565b61042f57386103b8565b8580fd5b6040513d89823e3d90fd5b8380fd5b60405162461bcd60e51b815260206004820152600b60248201526a3bb937b733903a37b5b2b760a91b6044820152606490fd5b5060405163313ce56760e01b81526020816004818d5afa80156104e95788918d916104a5575b5060ff161461032e565b9150506020813d6020116104e1575b816104c160209383610800565b810103126104dd575160ff811681036104dd57879060ff61049b565b8b80fd5b3d91506104b4565b6040513d8e823e3d90fd5b929895919490935061053861050a368484610838565b602081519101207f00000000000000000000000000000000000000000000000000000000000000001461087f565b82151580610693575b8061068a575b8061067f575b15610647578a8f989261036e9261058994604051936020850152600160408501526001606085015260808401526080835261036960a084610800565b9b6001600160a01b038d1694853b15610643576105d0966105e289956040519b8c9a8b998a9863e80a7c7960e01b8a528a60048b015260c060248b015260c48a0191610918565b87810360031901604489015291610918565b926064850152608484015260a483015203925af18015610433576040926020987f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c95938593610633575b50906103e3565b8161063d91610800565b3861062c565b8780fd5b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b50601889111561054d565b50881515610547565b506060831115610541565b60405162461bcd60e51b815260206004820152600c60248201526b726f7574652065786973747360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b6d697373696e6720636f726560a01b6044820152606490fd5b90503b151538610297565b3b1515915038610290565b60405162461bcd60e51b8152602060048201526014602482015273756e737570706f7274656420646563696d616c7360601b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152691e995c9bc8185cdcd95d60b21b6044820152606490fd5b62461bcd60e51b815260206004820152600a6024820152696f776e6572206f6e6c7960b01b6044820152606490fd5b8680fd5b8480fd5b8280fd5b8880fd5b5080fd5b9181601f840112156107fb5782359167ffffffffffffffff83116107fb57602083818601950101116107fb57565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761082257604052565b634e487b7160e01b600052604160045260246000fd5b92919267ffffffffffffffff82116108225760405191610862601f8201601f191660200184610800565b8294818452818301116107fb578281602093846000960137010152565b1561088657565b60405162461bcd60e51b815260206004820152600f60248201526e756e657870656374656420636f646560881b6044820152606490fd5b60405193929184918190602084013781016000602082015282519260005b8481106109015750506108ff9260209101016000815203601f198101845283610800565b565b6020828201810151848301820152879450016108db565b908060209392818452848401376000828201840152601f01601f1916010190565b6020815191016000f0906001600160a01b0382161561095457565b60405162461bcd60e51b815260206004820152600f60248201526e18dc99585d1a5bdb8819985a5b1959608a1b6044820152606490fdfea264697066735822122071dde2035fbd7194a0c4be267b1aac08f09f08d880a7bf8f556247f49b8869de64736f6c634300081e0033000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3080caa35bee32d9ad74dd17a5aa09bda24847b145200798eba26219e413323428a958f9628dcbf52a103e4399714805811ed312515684ec4b1031599dd3107109",
"receipt": {
"blockHash": "0x3f1e93cb9da77b96bcf8a0aff85b308f61954fa4b85c42550a289e4cde4eebca",
"blockNumber": "0x108e4",
"contractAddress": "0x7d9398ae4eed0a16c50032f201348105e694379e",
"cumulativeGasUsed": "0x9d644a",
"from": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"gasUsed": "0x91801",
"effectiveGasPrice": "0x2717",
"logs": [],
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"status": "0x1",
"to": null,
"transactionHash": "0xc7fce3a848639b6adeae896f486275ee6fb0f6df1c3fa1c045f9729c5eed7dc7",
"transactionIndex": "0x93",
"type": "0x2"
},
"logs": [],
"raw_transaction": {
"accessList": [],
"blockHash": "0x3f1e93cb9da77b96bcf8a0aff85b308f61954fa4b85c42550a289e4cde4eebca",
"blockNumber": "0x108e4",
"blockTimestamp": "0x6ac11ab1",
"chainId": "0x1352889",
"from": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"gas": "0xb053f",
"gasPrice": "0x2717",
"maxPriorityFeePerGas": "0x2717",
"maxFeePerGas": "0x2717",
"hash": "0xc7fce3a848639b6adeae896f486275ee6fb0f6df1c3fa1c045f9729c5eed7dc7",
"input": "0x60e0346100db57601f610ab838819003918201601f19168301916001600160401b038311848410176100e0578084926060946040528339810103126100db5780516001600160a01b03811691908281036100db576040602083015192015192156100a95760805260a05260c0526040516109c190816100f7823960805181818160dd0152610241015260a0518181816101240152610300015260c051818181606f01526105130152f35b60405162461bcd60e51b815260206004820152600a6024820152693d32b9379037bbb732b960b11b6044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c9081632640c54614610147575080634178bb3b1461010c5780638da5cb5b146100c7578063aa1fce69146100955763c30aaad21461005857600080fd5b3461009257806003193601126100925760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b80fd5b5034610092576020366003190112610092576020906004358152808252604060018060a01b0391205416604051908152f35b50346100925780600319360112610092576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461009257806003193601126100925760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050346107c9576101203660031901126107c9576004359063ffffffff82168092036107c157602435916001600160a01b038316918284036107bd576044359060ff821680920361042f5760643567ffffffffffffffff81116107b9576101b29036906004016107cd565b919060843567ffffffffffffffff81116107c5576101d49036906004016107cd565b909760a4356001600160a01b038116939290918b918584036107c15760c4356001600160a01b0381169c9095908d87036107bd5760e4356001600160a01b03811697908881036107b9576101043567ffffffffffffffff81116106435761023f9036906004016107cd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169c9099919850338d900361078a57508f156107585760128e1161071c573b15159182610711575b5081610706575b50156106d2578e998c8e60405190602082019283526040820152604081526102c0606082610800565b519020808c5260208c90526040909b20546001600160a01b031661069e57468d036104f457505050506103256102f7368585610838565b602081519101207f00000000000000000000000000000000000000000000000000000000000000001461087f565b3b151580610475575b15610442578a936103739261036e92604051928c6020850152600160408501526001606085015260808401526080835261036960a084610800565b6108bd565b610939565b976001600160a01b03891690813b1561043e5783606492604051968795869463c0c53b8b60e01b86526004860152602485015260448401525af180156104335761041a575b507f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c91604060209781935b81528089522080546001600160a01b0319166001600160a01b039097169687179055815186815280880191909152a3604051908152f35b610425878092610800565b61042f57386103b8565b8580fd5b6040513d89823e3d90fd5b8380fd5b60405162461bcd60e51b815260206004820152600b60248201526a3bb937b733903a37b5b2b760a91b6044820152606490fd5b5060405163313ce56760e01b81526020816004818d5afa80156104e95788918d916104a5575b5060ff161461032e565b9150506020813d6020116104e1575b816104c160209383610800565b810103126104dd575160ff811681036104dd57879060ff61049b565b8b80fd5b3d91506104b4565b6040513d8e823e3d90fd5b929895919490935061053861050a368484610838565b602081519101207f00000000000000000000000000000000000000000000000000000000000000001461087f565b82151580610693575b8061068a575b8061067f575b15610647578a8f989261036e9261058994604051936020850152600160408501526001606085015260808401526080835261036960a084610800565b9b6001600160a01b038d1694853b15610643576105d0966105e289956040519b8c9a8b998a9863e80a7c7960e01b8a528a60048b015260c060248b015260c48a0191610918565b87810360031901604489015291610918565b926064850152608484015260a483015203925af18015610433576040926020987f8bc7ccba34f9800ed74fc2b07a15952b8f4c513834ce9166e2e01bee6b030a7c95938593610633575b50906103e3565b8161063d91610800565b3861062c565b8780fd5b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b50601889111561054d565b50881515610547565b506060831115610541565b60405162461bcd60e51b815260206004820152600c60248201526b726f7574652065786973747360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b6d697373696e6720636f726560a01b6044820152606490fd5b90503b151538610297565b3b1515915038610290565b60405162461bcd60e51b8152602060048201526014602482015273756e737570706f7274656420646563696d616c7360601b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152691e995c9bc8185cdcd95d60b21b6044820152606490fd5b62461bcd60e51b815260206004820152600a6024820152696f776e6572206f6e6c7960b01b6044820152606490fd5b8680fd5b8480fd5b8280fd5b8880fd5b5080fd5b9181601f840112156107fb5782359167ffffffffffffffff83116107fb57602083818601950101116107fb57565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761082257604052565b634e487b7160e01b600052604160045260246000fd5b92919267ffffffffffffffff82116108225760405191610862601f8201601f191660200184610800565b8294818452818301116107fb578281602093846000960137010152565b1561088657565b60405162461bcd60e51b815260206004820152600f60248201526e756e657870656374656420636f646560881b6044820152606490fd5b60405193929184918190602084013781016000602082015282519260005b8481106109015750506108ff9260209101016000815203601f198101845283610800565b565b6020828201810151848301820152879450016108db565b908060209392818452848401376000828201840152601f01601f1916010190565b6020815191016000f0906001600160a01b0382161561095457565b60405162461bcd60e51b815260206004820152600f60248201526e18dc99585d1a5bdb8819985a5b1959608a1b6044820152606490fdfea264697066735822122071dde2035fbd7194a0c4be267b1aac08f09f08d880a7bf8f556247f49b8869de64736f6c634300081e0033000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3080caa35bee32d9ad74dd17a5aa09bda24847b145200798eba26219e413323428a958f9628dcbf52a103e4399714805811ed312515684ec4b1031599dd3107109",
"nonce": "0x88",
"to": null,
"transactionIndex": "0x93",
"type": "0x2",
"value": "0x0",
"yParity": "0x0",
"v": "0x0",
"r": "0xfe5c6f660465f61e68d4f111b7842d41ceb28379da5e42db68e6f93f68788f7",
"s": "0x5b4b9f9c2139dd1035751d0bdb739d6bded1d791f6ca0f44e3a41b026b3ecae5"
}
}
}