Contract Details
Overview
COOK BALANCE
Loading…TOKEN NAME
EVM ContractTOTAL SUPPLY
Not availableMore Info
CONTRACT ADDRESS
0xa917805a53969e7bf63063da512351ec750646ddCONTRACT 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
- 0xa917805a53969e7bf63063da512351ec750646dd
- Verification
- Verified
Token metadata is read from the contract. Market valuations and multichain holdings are not currently indexed.
Verified Solidity Source
Compiler: 0.8.26+commit.8a97fa7a.Emscripten.clang · Contract: CookchainValidatorStaking.sol:CookchainValidatorStaking · Creation bytecode: matched
CookchainValidatorStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
/// @notice Native COOK collateral and controlled QBFT validator admission.
/// @dev No automatic rewards, delegation or slashing. Consensus activation is a separate network operation.
contract CookchainValidatorStaking {
uint256 public constant MINIMUM_STAKE = 100 ether;
uint256 public constant WITHDRAWAL_DELAY = 14 days;
uint256 public constant MIN_VALIDATORS = 4;
uint256 public constant MAX_VALIDATORS = 32;
uint256 private constant HALF_ORDER = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0;
address public governor;
address public pendingGovernor;
struct Position { address operator; uint256 amount; uint256 unlockAt; bool exiting; }
mapping(address => Position) public positions;
mapping(address => uint256) private activeIndex;
address[] private validators;
bool private entered;
event Registered(address indexed validator, address indexed operator, uint256 amount);
event ValidatorActivated(address indexed validator);
event ValidatorDeactivated(address indexed validator, uint256 unlockAt);
event ExitRequested(address indexed validator, uint256 unlockAt);
event Withdrawn(address indexed validator, address indexed operator, uint256 amount);
event GovernorProposed(address indexed next);
event GovernorChanged(address indexed next);
modifier onlyGovernor(){require(msg.sender==governor,"Governor only");_;}
modifier nonReentrant(){require(!entered,"Reentrant");entered=true;_;entered=false;}
constructor(address owner,address[] memory initialValidators) payable {
require(owner!=address(0),"Zero governor");
require(initialValidators.length>=MIN_VALIDATORS&&initialValidators.length<=MAX_VALIDATORS,"Validator count");
require(msg.value==MINIMUM_STAKE*initialValidators.length,"Initial collateral");
governor=owner;
for(uint256 i;i<initialValidators.length;i++){
address v=initialValidators[i];require(v!=address(0)&&positions[v].operator==address(0),"Invalid validator");
positions[v]=Position(owner,MINIMUM_STAKE,0,false);
validators.push(v);activeIndex[v]=validators.length;
emit Registered(v,owner,MINIMUM_STAKE);emit ValidatorActivated(v);
}
}
function getValidators() external view returns(address[] memory){return validators;}
function isActive(address v) public view returns(bool){return activeIndex[v]!=0;}
function consentDigest(address operator) public view returns(bytes32){
return keccak256(abi.encode("Cookchain validator registration",block.chainid,address(this),operator));
}
/// @notice The validator node key signs consentDigest(operator) using EIP-191 personal_sign.
function register(address validator,bytes calldata signature) external payable {
require(validator!=address(0)&&positions[validator].operator==address(0),"Already registered");
require(msg.value>=MINIMUM_STAKE,"Minimum 100 COOK");
if(msg.sender!=validator){
require(signature.length==65,"Validator consent required");
bytes32 r;bytes32 s;uint8 v;
assembly {r:=calldataload(signature.offset) s:=calldataload(add(signature.offset,32)) v:=byte(0,calldataload(add(signature.offset,64)))}
require(uint256(s)<=HALF_ORDER&&(v==27||v==28),"Invalid signature");
bytes32 digest=keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32",consentDigest(msg.sender)));
require(ecrecover(digest,v,r,s)==validator,"Wrong validator consent");
}
positions[validator]=Position(msg.sender,msg.value,0,false);
emit Registered(validator,msg.sender,msg.value);
}
function approveValidator(address v) external onlyGovernor {
Position storage p=positions[v];
require(p.amount>=MINIMUM_STAKE&&!p.exiting&&!isActive(v),"Not eligible");
require(validators.length<MAX_VALIDATORS,"Validator capacity");
validators.push(v);activeIndex[v]=validators.length;emit ValidatorActivated(v);
}
function deactivateValidator(address v) external onlyGovernor {_deactivate(v);}
function _deactivate(address v) private {
uint256 index=activeIndex[v];require(index!=0,"Not active");
require(validators.length>MIN_VALIDATORS,"Keep at least four validators");
address last=validators[validators.length-1];validators[index-1]=last;activeIndex[last]=index;
validators.pop();delete activeIndex[v];
Position storage p=positions[v];p.exiting=true;p.unlockAt=block.timestamp+WITHDRAWAL_DELAY;
emit ValidatorDeactivated(v,p.unlockAt);
}
function requestExit(address v) external {
Position storage p=positions[v];require(p.operator==msg.sender,"Operator only");
if(isActive(v))_deactivate(v);
else if(!p.exiting){p.exiting=true;p.unlockAt=block.timestamp+WITHDRAWAL_DELAY;}
emit ExitRequested(v,p.unlockAt);
}
function cancelExit(address v) external {
Position storage p=positions[v];require(p.operator==msg.sender,"Operator only");
p.exiting=false;p.unlockAt=0;
}
function withdraw(address v) external nonReentrant {
Position memory p=positions[v];require(p.operator==msg.sender,"Operator only");
require(!isActive(v)&&p.exiting&&block.timestamp>=p.unlockAt,"Withdrawal locked");
delete positions[v];(bool ok,)=payable(msg.sender).call{value:p.amount}("");require(ok,"Transfer failed");
emit Withdrawn(v,msg.sender,p.amount);
}
function proposeGovernor(address next) external onlyGovernor {require(next!=address(0),"Zero governor");pendingGovernor=next;emit GovernorProposed(next);}
function acceptGovernor() external {require(msg.sender==pendingGovernor,"Pending governor only");governor=msg.sender;pendingGovernor=address(0);emit GovernorChanged(msg.sender);}
}
Contract ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address[]",
"name": "initialValidators",
"type": "address[]"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ExitRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorProposed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Registered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
}
],
"name": "ValidatorActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ValidatorDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "MAX_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MINIMUM_STAKE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WITHDRAWAL_DELAY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "approveValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "cancelExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "consentDigest",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "deactivateValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getValidators",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "governor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingGovernor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "positions",
"outputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
},
{
"internalType": "bool",
"name": "exiting",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "proposeGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "register",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "requestExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]Raw Contract Data · JSON
{
"id": "0xa917805a53969e7bf63063da512351ec750646dd",
"contract": "0xa917805a53969e7bf63063da512351ec750646dd",
"name": "EVM Contract",
"type": "contract",
"bytecode": "0x608060405260043610610105575f3560e01c80635ed1f96311610092578063b7ab4db511610062578063b7ab4db51461031d578063ba50b8791461033e578063dbd9a0311461035d578063e3056a341461037c578063e58bb6391461039b575f80fd5b80635ed1f96314610290578063714897df146102a457806395c48bd5146102b85780639f8a13d7146102d7575f80fd5b8063280e2d2b116100d8578063280e2d2b1461019957806328cb1e38146101b85780634d7209e6146101d757806351cff8d9146101f657806355f5751014610215575f80fd5b806308dbbb03146101095780630c340a24146101385780630ebb172a1461016e57806324b8fbf614610184575b5f80fd5b348015610114575f80fd5b5061012568056bc75e2d6310000081565b6040519081526020015b60405180910390f35b348015610143575f80fd5b505f54610156906001600160a01b031681565b6040516001600160a01b03909116815260200161012f565b348015610179575f80fd5b506101256212750081565b6101976101923660046110a3565b6103af565b005b3480156101a4575f80fd5b506101976101b3366004611121565b610720565b3480156101c3575f80fd5b506101976101d2366004611121565b610771565b3480156101e2575f80fd5b506101256101f1366004611121565b610850565b348015610201575f80fd5b50610197610210366004611121565b6108ca565b348015610220575f80fd5b5061026461022f366004611121565b600260208190525f918252604090912080546001820154928201546003909201546001600160a01b0390911692919060ff1684565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161012f565b34801561029b575f80fd5b50610125600481565b3480156102af575f80fd5b50610125602081565b3480156102c3575f80fd5b506101976102d2366004611121565b610b26565b3480156102e2575f80fd5b5061030d6102f1366004611121565b6001600160a01b03165f90815260036020526040902054151590565b604051901515815260200161012f565b348015610328575f80fd5b50610331610bde565b60405161012f9190611141565b348015610349575f80fd5b50610197610358366004611121565b610c3e565b348015610368575f80fd5b50610197610377366004611121565b610c73565b348015610387575f80fd5b50600154610156906001600160a01b031681565b3480156103a6575f80fd5b50610197610dfe565b6001600160a01b038316158015906103de57506001600160a01b038381165f9081526002602052604090205416155b6104245760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064015b60405180910390fd5b68056bc75e2d631000003410156104705760405162461bcd60e51b815260206004820152601060248201526f4d696e696d756d2031303020434f4f4b60801b604482015260640161041b565b336001600160a01b0384161461067157604181146104d05760405162461bcd60e51b815260206004820152601a60248201527f56616c696461746f7220636f6e73656e74207265717569726564000000000000604482015260640161041b565b8135602083013560408401355f1a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821180159061051e57508060ff16601b148061051e57508060ff16601c145b61055e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161041b565b5f61056833610850565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c0160408051601f1981840301815282825280516020918201205f845290830180835281905260ff851691830191909152606082018690526080820185905291506001600160a01b0388169060019060a0016020604051602081039080840390855afa15801561060c573d5f803e3d5ffd5b505050602060405103516001600160a01b03161461066c5760405162461bcd60e51b815260206004820152601760248201527f57726f6e672076616c696461746f7220636f6e73656e74000000000000000000604482015260640161041b565b505050505b60408051608081018252338082523460208084018281525f858701818152606087018281526001600160a01b038c81168085526002808852948b902099518a546001600160a01b031916921691909117895593516001890155905191870191909155516003909501805460ff191695151595909517909455935190815290927f199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7910160405180910390a3505050565b6001600160a01b038082165f9081526002602052604090208054909116331461075b5760405162461bcd60e51b815260040161041b9061118c565b60038101805460ff191690555f60029091015550565b6001600160a01b038082165f908152600260205260409020805490911633146107ac5760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f90815260036020526040902054156107d7576107d282610e98565b610805565b600381015460ff166108055760038101805460ff191660011790556107ff62127500426111c7565b60028201555b816001600160a01b03167fd9217a461a0f7f84171a8866118c3d92e943ba7c1ba89b819371f729b5cabcbc826002015460405161084491815260200190565b60405180910390a25050565b604080516080602080830182905260a08301527f436f6f6b636861696e2076616c696461746f7220726567697374726174696f6e60c083015246928201929092523060608201526001600160a01b038316918101919091525f9060e001604051602081830303815290604052805190602001209050919050565b60055460ff16156109095760405162461bcd60e51b81526020600482015260096024820152681499595b9d1c985b9d60ba1b604482015260640161041b565b6005805460ff191660019081179091556001600160a01b038083165f9081526002602081815260409283902083516080810185528154909516808652958101549185019190915290810154918301919091526003015460ff16151560608201529033146109885760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f908152600360205260409020541580156109ae575080606001515b80156109be575080604001514210155b6109fe5760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b081b1bd8dad959607a1b604482015260640161041b565b6001600160a01b0382165f90815260026020818152604080842080546001600160a01b0319168155600181018590559283018490556003909201805460ff1916905583015190513391908381818185875af1925050503d805f8114610a7e576040519150601f19603f3d011682016040523d82523d5f602084013e610a83565b606091505b5050905080610ac65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161041b565b336001600160a01b0316836001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460200151604051610b0f91815260200190565b60405180910390a350506005805460ff1916905550565b5f546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b038116610b955760405162461bcd60e51b815260206004820152600d60248201526c2d32b9379033b7bb32b93737b960991b604482015260640161041b565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fb2a7644827310967f47607793f9eef1226102dcafd1bfcf6c53ad8afe0dd4628905f90a250565b60606004805480602002602001604051908101604052809291908181526020018280548015610c3457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c16575b5050505050905090565b5f546001600160a01b03163314610c675760405162461bcd60e51b815260040161041b906111e0565b610c7081610e98565b50565b5f546001600160a01b03163314610c9c5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b0381165f908152600260205260409020600181015468056bc75e2d6310000011801590610cd55750600381015460ff16155b8015610cf657506001600160a01b0382165f90815260036020526040902054155b610d315760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420656c696769626c6560a01b604482015260640161041b565b600454602011610d785760405162461bcd60e51b815260206004820152601260248201527156616c696461746f7220636170616369747960701b604482015260640161041b565b600480546001810182557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03851690811790915590545f828152600360205260408082209290925590517fb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c89190a25050565b6001546001600160a01b03163314610e505760405162461bcd60e51b815260206004820152601560248201527450656e64696e6720676f7665726e6f72206f6e6c7960581b604482015260640161041b565b5f8054336001600160a01b0319918216811783556001805490921690915560405190917f5ffbefd23f1844198adf645535c8dce8d9f3f2f9f5e917bf4e3aa8fc90299a9091a2565b6001600160a01b0381165f9081526003602052604081205490819003610eed5760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b604482015260640161041b565b6004805411610f3e5760405162461bcd60e51b815260206004820152601d60248201527f4b656570206174206c6561737420666f75722076616c696461746f7273000000604482015260640161041b565b600480545f9190610f5190600190611207565b81548110610f6157610f6161121a565b5f918252602090912001546001600160a01b03169050806004610f85600185611207565b81548110610f9557610f9561121a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003909152604090208290556004805480610fde57610fde61122e565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03851682526003808252604080842084905560029092529120908101805460ff1916600117905561103d62127500426111c7565b600282018190556040519081526001600160a01b038516907f988e3402bf34325fbe597e20c00493d017ea71636ee463c3fd0daa8df2ad850d9060200160405180910390a250505050565b80356001600160a01b038116811461109e575f80fd5b919050565b5f805f604084860312156110b5575f80fd5b6110be84611088565b9250602084013567ffffffffffffffff8111156110d9575f80fd5b8401601f810186136110e9575f80fd5b803567ffffffffffffffff8111156110ff575f80fd5b866020828401011115611110575f80fd5b939660209190910195509293505050565b5f60208284031215611131575f80fd5b61113a82611088565b9392505050565b602080825282518282018190525f918401906040840190835b818110156111815783516001600160a01b031683526020938401939092019160010161115a565b509095945050505050565b6020808252600d908201526c4f70657261746f72206f6e6c7960981b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156111da576111da6111b3565b92915050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b818103818111156111da576111da6111b3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea264697066735822122059a56e31d2b2a92dd460b77feae4d3b47c74d4bacbb357b25fb27d22dcaf9e6564736f6c634300081a0033",
"is_contract": true,
"verified": true,
"verification": {
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"compiler": "0.8.26+commit.8a97fa7a.Emscripten.clang",
"contract": "CookchainValidatorStaking.sol:CookchainValidatorStaking",
"verified": true,
"match": "runtime-with-metadata",
"creation_verified": true,
"factory_deployment": null,
"constructor_arguments": "000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e",
"verified_at": "2026-10-03T20:18:00.837Z",
"chain_id": 20261001,
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address[]",
"name": "initialValidators",
"type": "address[]"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ExitRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorProposed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Registered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
}
],
"name": "ValidatorActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ValidatorDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "MAX_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MINIMUM_STAKE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WITHDRAWAL_DELAY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "approveValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "cancelExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "consentDigest",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "deactivateValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getValidators",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "governor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingGovernor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "positions",
"outputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
},
{
"internalType": "bool",
"name": "exiting",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "proposeGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "register",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "requestExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"input": {
"language": "Solidity",
"sources": {
"CookchainValidatorStaking.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\n/// @notice Native COOK collateral and controlled QBFT validator admission.\n/// @dev No automatic rewards, delegation or slashing. Consensus activation is a separate network operation.\ncontract CookchainValidatorStaking {\n uint256 public constant MINIMUM_STAKE = 100 ether;\n uint256 public constant WITHDRAWAL_DELAY = 14 days;\n uint256 public constant MIN_VALIDATORS = 4;\n uint256 public constant MAX_VALIDATORS = 32;\n uint256 private constant HALF_ORDER = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0;\n address public governor;\n address public pendingGovernor;\n struct Position { address operator; uint256 amount; uint256 unlockAt; bool exiting; }\n mapping(address => Position) public positions;\n mapping(address => uint256) private activeIndex;\n address[] private validators;\n bool private entered;\n event Registered(address indexed validator, address indexed operator, uint256 amount);\n event ValidatorActivated(address indexed validator);\n event ValidatorDeactivated(address indexed validator, uint256 unlockAt);\n event ExitRequested(address indexed validator, uint256 unlockAt);\n event Withdrawn(address indexed validator, address indexed operator, uint256 amount);\n event GovernorProposed(address indexed next);\n event GovernorChanged(address indexed next);\n modifier onlyGovernor(){require(msg.sender==governor,\"Governor only\");_;}\n modifier nonReentrant(){require(!entered,\"Reentrant\");entered=true;_;entered=false;}\n constructor(address owner,address[] memory initialValidators) payable {\n require(owner!=address(0),\"Zero governor\");\n require(initialValidators.length>=MIN_VALIDATORS&&initialValidators.length<=MAX_VALIDATORS,\"Validator count\");\n require(msg.value==MINIMUM_STAKE*initialValidators.length,\"Initial collateral\");\n governor=owner;\n for(uint256 i;i<initialValidators.length;i++){\n address v=initialValidators[i];require(v!=address(0)&&positions[v].operator==address(0),\"Invalid validator\");\n positions[v]=Position(owner,MINIMUM_STAKE,0,false);\n validators.push(v);activeIndex[v]=validators.length;\n emit Registered(v,owner,MINIMUM_STAKE);emit ValidatorActivated(v);\n }\n }\n function getValidators() external view returns(address[] memory){return validators;}\n function isActive(address v) public view returns(bool){return activeIndex[v]!=0;}\n function consentDigest(address operator) public view returns(bytes32){\n return keccak256(abi.encode(\"Cookchain validator registration\",block.chainid,address(this),operator));\n }\n /// @notice The validator node key signs consentDigest(operator) using EIP-191 personal_sign.\n function register(address validator,bytes calldata signature) external payable {\n require(validator!=address(0)&&positions[validator].operator==address(0),\"Already registered\");\n require(msg.value>=MINIMUM_STAKE,\"Minimum 100 COOK\");\n if(msg.sender!=validator){\n require(signature.length==65,\"Validator consent required\");\n bytes32 r;bytes32 s;uint8 v;\n assembly {r:=calldataload(signature.offset) s:=calldataload(add(signature.offset,32)) v:=byte(0,calldataload(add(signature.offset,64)))}\n require(uint256(s)<=HALF_ORDER&&(v==27||v==28),\"Invalid signature\");\n bytes32 digest=keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\",consentDigest(msg.sender)));\n require(ecrecover(digest,v,r,s)==validator,\"Wrong validator consent\");\n }\n positions[validator]=Position(msg.sender,msg.value,0,false);\n emit Registered(validator,msg.sender,msg.value);\n }\n function approveValidator(address v) external onlyGovernor {\n Position storage p=positions[v];\n require(p.amount>=MINIMUM_STAKE&&!p.exiting&&!isActive(v),\"Not eligible\");\n require(validators.length<MAX_VALIDATORS,\"Validator capacity\");\n validators.push(v);activeIndex[v]=validators.length;emit ValidatorActivated(v);\n }\n function deactivateValidator(address v) external onlyGovernor {_deactivate(v);}\n function _deactivate(address v) private {\n uint256 index=activeIndex[v];require(index!=0,\"Not active\");\n require(validators.length>MIN_VALIDATORS,\"Keep at least four validators\");\n address last=validators[validators.length-1];validators[index-1]=last;activeIndex[last]=index;\n validators.pop();delete activeIndex[v];\n Position storage p=positions[v];p.exiting=true;p.unlockAt=block.timestamp+WITHDRAWAL_DELAY;\n emit ValidatorDeactivated(v,p.unlockAt);\n }\n function requestExit(address v) external {\n Position storage p=positions[v];require(p.operator==msg.sender,\"Operator only\");\n if(isActive(v))_deactivate(v);\n else if(!p.exiting){p.exiting=true;p.unlockAt=block.timestamp+WITHDRAWAL_DELAY;}\n emit ExitRequested(v,p.unlockAt);\n }\n function cancelExit(address v) external {\n Position storage p=positions[v];require(p.operator==msg.sender,\"Operator only\");\n p.exiting=false;p.unlockAt=0;\n }\n function withdraw(address v) external nonReentrant {\n Position memory p=positions[v];require(p.operator==msg.sender,\"Operator only\");\n require(!isActive(v)&&p.exiting&&block.timestamp>=p.unlockAt,\"Withdrawal locked\");\n delete positions[v];(bool ok,)=payable(msg.sender).call{value:p.amount}(\"\");require(ok,\"Transfer failed\");\n emit Withdrawn(v,msg.sender,p.amount);\n }\n function proposeGovernor(address next) external onlyGovernor {require(next!=address(0),\"Zero governor\");pendingGovernor=next;emit GovernorProposed(next);}\n function acceptGovernor() external {require(msg.sender==pendingGovernor,\"Pending governor only\");governor=msg.sender;pendingGovernor=address(0);emit GovernorChanged(msg.sender);}\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "shanghai",
"outputSelection": {
"CookchainValidatorStaking.sol": {
"CookchainValidatorStaking": [
"abi",
"metadata",
"evm.bytecode",
"evm.deployedBytecode"
],
"": [
"ast"
]
}
}
}
},
"metadata": {
"compiler": {
"version": "0.8.26+commit.8a97fa7a"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address[]",
"name": "initialValidators",
"type": "address[]"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ExitRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "GovernorProposed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Registered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
}
],
"name": "ValidatorActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
}
],
"name": "ValidatorDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "MAX_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MINIMUM_STAKE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_VALIDATORS",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WITHDRAWAL_DELAY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "approveValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "cancelExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "consentDigest",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "deactivateValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getValidators",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "governor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingGovernor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "positions",
"outputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unlockAt",
"type": "uint256"
},
{
"internalType": "bool",
"name": "exiting",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "next",
"type": "address"
}
],
"name": "proposeGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "validator",
"type": "address"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"name": "register",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "requestExit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "v",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "No automatic rewards, delegation or slashing. Consensus activation is a separate network operation.",
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"register(address,bytes)": {
"notice": "The validator node key signs consentDigest(operator) using EIP-191 personal_sign."
}
},
"notice": "Native COOK collateral and controlled QBFT validator admission.",
"version": 1
}
},
"settings": {
"compilationTarget": {
"CookchainValidatorStaking.sol": "CookchainValidatorStaking"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"CookchainValidatorStaking.sol": {
"keccak256": "0xc5924e60a80c7d1562ff28e2450304c0195e660e2aea98f25ac983474221c008",
"license": "MIT",
"urls": [
"bzz-raw://bf9dd27955fbb3bd9ec8e58a505ff8d74c6280482f5b14b1f665ff1e104249b2",
"dweb:/ipfs/QmR7Z77cZa7TgNqqLaayDdXU6EAQZV78e9ks12oewEBbRu"
]
}
},
"version": 1
}
},
"deployment": {
"txid": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"hash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"sender": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"recipient": "0xa917805a53969e7bf63063da512351ec750646dd",
"amount_dec": "400",
"value_raw": "400000000000000000000",
"fee_dec": "0.00000001528381",
"fee_raw": "15283810000",
"asset": "COOK",
"timestamp_ms": 1791058348000,
"block": 73869,
"status": "Success",
"kind": "Contract creation",
"source": "EVM",
"nonce": 152,
"transaction_type": 2,
"gas_limit": "1541678",
"gas_used": "1528381",
"gas_price_wei": "10000",
"gas_price_gwei": "0.00001",
"data_hex": "0x60806040526040516116e13803806116e183398101604081905261002291610341565b6001600160a01b03821661006d5760405162461bcd60e51b815260206004820152600d60248201526c2d32b9379033b7bb32b93737b960991b60448201526064015b60405180910390fd5b600481511015801561008157506020815111155b6100bf5760405162461bcd60e51b815260206004820152600f60248201526e15985b1a59185d1bdc8818dbdd5b9d608a1b6044820152606401610064565b80516100d49068056bc75e2d6310000061041f565b34146101175760405162461bcd60e51b8152602060048201526012602482015271125b9a5d1a585b0818dbdb1b185d195c985b60721b6044820152606401610064565b5f80546001600160a01b0319166001600160a01b0384161781555b815181101561030a575f82828151811061014e5761014e610448565b602002602001015190505f6001600160a01b0316816001600160a01b03161415801561019157506001600160a01b038181165f9081526002602052604090205416155b6101d15760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103b30b634b230ba37b960791b6044820152606401610064565b604080516080810182526001600160a01b0386811680835268056bc75e2d6310000060208085018281525f868801818152606088018281528a881680845260028087528b85209a518b546001600160a01b031990811691909b16178b5594516001808c01919091559251948a0194909455516003988901805460ff19169115159190911790556004805491820181557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805490971683179096559454958252938690209490945593519384529290917f199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7910160405180910390a36040516001600160a01b038216907fb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8905f90a250600101610132565b50505061045c565b80516001600160a01b0381168114610328575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610352575f80fd5b61035b83610312565b60208401519092506001600160401b03811115610376575f80fd5b8301601f81018513610386575f80fd5b80516001600160401b0381111561039f5761039f61032d565b604051600582901b90603f8201601f191681016001600160401b03811182821017156103cd576103cd61032d565b6040529182526020818401810192908101888411156103ea575f80fd5b6020850194505b838510156104105761040285610312565b8152602094850194016103f1565b50809450505050509250929050565b808202811582820484141761044257634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b611278806104695f395ff3fe608060405260043610610105575f3560e01c80635ed1f96311610092578063b7ab4db511610062578063b7ab4db51461031d578063ba50b8791461033e578063dbd9a0311461035d578063e3056a341461037c578063e58bb6391461039b575f80fd5b80635ed1f96314610290578063714897df146102a457806395c48bd5146102b85780639f8a13d7146102d7575f80fd5b8063280e2d2b116100d8578063280e2d2b1461019957806328cb1e38146101b85780634d7209e6146101d757806351cff8d9146101f657806355f5751014610215575f80fd5b806308dbbb03146101095780630c340a24146101385780630ebb172a1461016e57806324b8fbf614610184575b5f80fd5b348015610114575f80fd5b5061012568056bc75e2d6310000081565b6040519081526020015b60405180910390f35b348015610143575f80fd5b505f54610156906001600160a01b031681565b6040516001600160a01b03909116815260200161012f565b348015610179575f80fd5b506101256212750081565b6101976101923660046110a3565b6103af565b005b3480156101a4575f80fd5b506101976101b3366004611121565b610720565b3480156101c3575f80fd5b506101976101d2366004611121565b610771565b3480156101e2575f80fd5b506101256101f1366004611121565b610850565b348015610201575f80fd5b50610197610210366004611121565b6108ca565b348015610220575f80fd5b5061026461022f366004611121565b600260208190525f918252604090912080546001820154928201546003909201546001600160a01b0390911692919060ff1684565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161012f565b34801561029b575f80fd5b50610125600481565b3480156102af575f80fd5b50610125602081565b3480156102c3575f80fd5b506101976102d2366004611121565b610b26565b3480156102e2575f80fd5b5061030d6102f1366004611121565b6001600160a01b03165f90815260036020526040902054151590565b604051901515815260200161012f565b348015610328575f80fd5b50610331610bde565b60405161012f9190611141565b348015610349575f80fd5b50610197610358366004611121565b610c3e565b348015610368575f80fd5b50610197610377366004611121565b610c73565b348015610387575f80fd5b50600154610156906001600160a01b031681565b3480156103a6575f80fd5b50610197610dfe565b6001600160a01b038316158015906103de57506001600160a01b038381165f9081526002602052604090205416155b6104245760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064015b60405180910390fd5b68056bc75e2d631000003410156104705760405162461bcd60e51b815260206004820152601060248201526f4d696e696d756d2031303020434f4f4b60801b604482015260640161041b565b336001600160a01b0384161461067157604181146104d05760405162461bcd60e51b815260206004820152601a60248201527f56616c696461746f7220636f6e73656e74207265717569726564000000000000604482015260640161041b565b8135602083013560408401355f1a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821180159061051e57508060ff16601b148061051e57508060ff16601c145b61055e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161041b565b5f61056833610850565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c0160408051601f1981840301815282825280516020918201205f845290830180835281905260ff851691830191909152606082018690526080820185905291506001600160a01b0388169060019060a0016020604051602081039080840390855afa15801561060c573d5f803e3d5ffd5b505050602060405103516001600160a01b03161461066c5760405162461bcd60e51b815260206004820152601760248201527f57726f6e672076616c696461746f7220636f6e73656e74000000000000000000604482015260640161041b565b505050505b60408051608081018252338082523460208084018281525f858701818152606087018281526001600160a01b038c81168085526002808852948b902099518a546001600160a01b031916921691909117895593516001890155905191870191909155516003909501805460ff191695151595909517909455935190815290927f199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7910160405180910390a3505050565b6001600160a01b038082165f9081526002602052604090208054909116331461075b5760405162461bcd60e51b815260040161041b9061118c565b60038101805460ff191690555f60029091015550565b6001600160a01b038082165f908152600260205260409020805490911633146107ac5760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f90815260036020526040902054156107d7576107d282610e98565b610805565b600381015460ff166108055760038101805460ff191660011790556107ff62127500426111c7565b60028201555b816001600160a01b03167fd9217a461a0f7f84171a8866118c3d92e943ba7c1ba89b819371f729b5cabcbc826002015460405161084491815260200190565b60405180910390a25050565b604080516080602080830182905260a08301527f436f6f6b636861696e2076616c696461746f7220726567697374726174696f6e60c083015246928201929092523060608201526001600160a01b038316918101919091525f9060e001604051602081830303815290604052805190602001209050919050565b60055460ff16156109095760405162461bcd60e51b81526020600482015260096024820152681499595b9d1c985b9d60ba1b604482015260640161041b565b6005805460ff191660019081179091556001600160a01b038083165f9081526002602081815260409283902083516080810185528154909516808652958101549185019190915290810154918301919091526003015460ff16151560608201529033146109885760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f908152600360205260409020541580156109ae575080606001515b80156109be575080604001514210155b6109fe5760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b081b1bd8dad959607a1b604482015260640161041b565b6001600160a01b0382165f90815260026020818152604080842080546001600160a01b0319168155600181018590559283018490556003909201805460ff1916905583015190513391908381818185875af1925050503d805f8114610a7e576040519150601f19603f3d011682016040523d82523d5f602084013e610a83565b606091505b5050905080610ac65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161041b565b336001600160a01b0316836001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460200151604051610b0f91815260200190565b60405180910390a350506005805460ff1916905550565b5f546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b038116610b955760405162461bcd60e51b815260206004820152600d60248201526c2d32b9379033b7bb32b93737b960991b604482015260640161041b565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fb2a7644827310967f47607793f9eef1226102dcafd1bfcf6c53ad8afe0dd4628905f90a250565b60606004805480602002602001604051908101604052809291908181526020018280548015610c3457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c16575b5050505050905090565b5f546001600160a01b03163314610c675760405162461bcd60e51b815260040161041b906111e0565b610c7081610e98565b50565b5f546001600160a01b03163314610c9c5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b0381165f908152600260205260409020600181015468056bc75e2d6310000011801590610cd55750600381015460ff16155b8015610cf657506001600160a01b0382165f90815260036020526040902054155b610d315760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420656c696769626c6560a01b604482015260640161041b565b600454602011610d785760405162461bcd60e51b815260206004820152601260248201527156616c696461746f7220636170616369747960701b604482015260640161041b565b600480546001810182557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03851690811790915590545f828152600360205260408082209290925590517fb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c89190a25050565b6001546001600160a01b03163314610e505760405162461bcd60e51b815260206004820152601560248201527450656e64696e6720676f7665726e6f72206f6e6c7960581b604482015260640161041b565b5f8054336001600160a01b0319918216811783556001805490921690915560405190917f5ffbefd23f1844198adf645535c8dce8d9f3f2f9f5e917bf4e3aa8fc90299a9091a2565b6001600160a01b0381165f9081526003602052604081205490819003610eed5760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b604482015260640161041b565b6004805411610f3e5760405162461bcd60e51b815260206004820152601d60248201527f4b656570206174206c6561737420666f75722076616c696461746f7273000000604482015260640161041b565b600480545f9190610f5190600190611207565b81548110610f6157610f6161121a565b5f918252602090912001546001600160a01b03169050806004610f85600185611207565b81548110610f9557610f9561121a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003909152604090208290556004805480610fde57610fde61122e565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03851682526003808252604080842084905560029092529120908101805460ff1916600117905561103d62127500426111c7565b600282018190556040519081526001600160a01b038516907f988e3402bf34325fbe597e20c00493d017ea71636ee463c3fd0daa8df2ad850d9060200160405180910390a250505050565b80356001600160a01b038116811461109e575f80fd5b919050565b5f805f604084860312156110b5575f80fd5b6110be84611088565b9250602084013567ffffffffffffffff8111156110d9575f80fd5b8401601f810186136110e9575f80fd5b803567ffffffffffffffff8111156110ff575f80fd5b866020828401011115611110575f80fd5b939660209190910195509293505050565b5f60208284031215611131575f80fd5b61113a82611088565b9392505050565b602080825282518282018190525f918401906040840190835b818110156111815783516001600160a01b031683526020938401939092019160010161115a565b509095945050505050565b6020808252600d908201526c4f70657261746f72206f6e6c7960981b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156111da576111da6111b3565b92915050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b818103818111156111da576111da6111b3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea264697066735822122059a56e31d2b2a92dd460b77feae4d3b47c74d4bacbb357b25fb27d22dcaf9e6564736f6c634300081a0033000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e",
"receipt": {
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockNumber": "0x1208d",
"contractAddress": "0xa917805a53969e7bf63063da512351ec750646dd",
"cumulativeGasUsed": "0x17523d",
"from": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"gasUsed": "0x17523d",
"effectiveGasPrice": "0x2710",
"logs": [
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x0",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x1",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x2",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x3",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x4",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x5",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x6",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x7",
"removed": false
}
],
"logsBloom": "0x00000000000000000002000000000000000000000000020000000000000000000000010000000000000000000000000000010000000000000000000003000000004000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000504120000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000008800000000000008000001000020000000000000020000000000000000000000201000000000000000000000",
"status": "0x1",
"to": null,
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"type": "0x2"
},
"logs": [
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x0",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x1",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x2",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x3",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x4",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x5",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0x199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7",
"0x000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e",
"0x000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d30"
],
"data": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x6",
"removed": false
},
{
"address": "0xa917805a53969e7bf63063da512351ec750646dd",
"topics": [
"0xb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8",
"0x000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e"
],
"data": "0x",
"blockNumber": "0x1208d",
"transactionHash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"transactionIndex": "0x0",
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockTimestamp": "0x6ac161ac",
"logIndex": "0x7",
"removed": false
}
],
"raw_transaction": {
"accessList": [],
"blockHash": "0x6a6205e46315db725126493beeef4da40c32648ef5f3ab3d53d4e5fcaabcb598",
"blockNumber": "0x1208d",
"blockTimestamp": "0x6ac161ac",
"chainId": "0x1352889",
"from": "0xdf6e7e94ed8c6fe335c28a8ec50381e9172f7d30",
"gas": "0x17862e",
"gasPrice": "0x2710",
"maxPriorityFeePerGas": "0x2710",
"maxFeePerGas": "0x2710",
"hash": "0x773291579fccbdb2a1ef9292b10a1bf44ca9bf8c781554b2a503c1d8a9a84124",
"input": "0x60806040526040516116e13803806116e183398101604081905261002291610341565b6001600160a01b03821661006d5760405162461bcd60e51b815260206004820152600d60248201526c2d32b9379033b7bb32b93737b960991b60448201526064015b60405180910390fd5b600481511015801561008157506020815111155b6100bf5760405162461bcd60e51b815260206004820152600f60248201526e15985b1a59185d1bdc8818dbdd5b9d608a1b6044820152606401610064565b80516100d49068056bc75e2d6310000061041f565b34146101175760405162461bcd60e51b8152602060048201526012602482015271125b9a5d1a585b0818dbdb1b185d195c985b60721b6044820152606401610064565b5f80546001600160a01b0319166001600160a01b0384161781555b815181101561030a575f82828151811061014e5761014e610448565b602002602001015190505f6001600160a01b0316816001600160a01b03161415801561019157506001600160a01b038181165f9081526002602052604090205416155b6101d15760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103b30b634b230ba37b960791b6044820152606401610064565b604080516080810182526001600160a01b0386811680835268056bc75e2d6310000060208085018281525f868801818152606088018281528a881680845260028087528b85209a518b546001600160a01b031990811691909b16178b5594516001808c01919091559251948a0194909455516003988901805460ff19169115159190911790556004805491820181557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805490971683179096559454958252938690209490945593519384529290917f199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7910160405180910390a36040516001600160a01b038216907fb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c8905f90a250600101610132565b50505061045c565b80516001600160a01b0381168114610328575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610352575f80fd5b61035b83610312565b60208401519092506001600160401b03811115610376575f80fd5b8301601f81018513610386575f80fd5b80516001600160401b0381111561039f5761039f61032d565b604051600582901b90603f8201601f191681016001600160401b03811182821017156103cd576103cd61032d565b6040529182526020818401810192908101888411156103ea575f80fd5b6020850194505b838510156104105761040285610312565b8152602094850194016103f1565b50809450505050509250929050565b808202811582820484141761044257634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b611278806104695f395ff3fe608060405260043610610105575f3560e01c80635ed1f96311610092578063b7ab4db511610062578063b7ab4db51461031d578063ba50b8791461033e578063dbd9a0311461035d578063e3056a341461037c578063e58bb6391461039b575f80fd5b80635ed1f96314610290578063714897df146102a457806395c48bd5146102b85780639f8a13d7146102d7575f80fd5b8063280e2d2b116100d8578063280e2d2b1461019957806328cb1e38146101b85780634d7209e6146101d757806351cff8d9146101f657806355f5751014610215575f80fd5b806308dbbb03146101095780630c340a24146101385780630ebb172a1461016e57806324b8fbf614610184575b5f80fd5b348015610114575f80fd5b5061012568056bc75e2d6310000081565b6040519081526020015b60405180910390f35b348015610143575f80fd5b505f54610156906001600160a01b031681565b6040516001600160a01b03909116815260200161012f565b348015610179575f80fd5b506101256212750081565b6101976101923660046110a3565b6103af565b005b3480156101a4575f80fd5b506101976101b3366004611121565b610720565b3480156101c3575f80fd5b506101976101d2366004611121565b610771565b3480156101e2575f80fd5b506101256101f1366004611121565b610850565b348015610201575f80fd5b50610197610210366004611121565b6108ca565b348015610220575f80fd5b5061026461022f366004611121565b600260208190525f918252604090912080546001820154928201546003909201546001600160a01b0390911692919060ff1684565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161012f565b34801561029b575f80fd5b50610125600481565b3480156102af575f80fd5b50610125602081565b3480156102c3575f80fd5b506101976102d2366004611121565b610b26565b3480156102e2575f80fd5b5061030d6102f1366004611121565b6001600160a01b03165f90815260036020526040902054151590565b604051901515815260200161012f565b348015610328575f80fd5b50610331610bde565b60405161012f9190611141565b348015610349575f80fd5b50610197610358366004611121565b610c3e565b348015610368575f80fd5b50610197610377366004611121565b610c73565b348015610387575f80fd5b50600154610156906001600160a01b031681565b3480156103a6575f80fd5b50610197610dfe565b6001600160a01b038316158015906103de57506001600160a01b038381165f9081526002602052604090205416155b6104245760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064015b60405180910390fd5b68056bc75e2d631000003410156104705760405162461bcd60e51b815260206004820152601060248201526f4d696e696d756d2031303020434f4f4b60801b604482015260640161041b565b336001600160a01b0384161461067157604181146104d05760405162461bcd60e51b815260206004820152601a60248201527f56616c696461746f7220636f6e73656e74207265717569726564000000000000604482015260640161041b565b8135602083013560408401355f1a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821180159061051e57508060ff16601b148061051e57508060ff16601c145b61055e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161041b565b5f61056833610850565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c0160408051601f1981840301815282825280516020918201205f845290830180835281905260ff851691830191909152606082018690526080820185905291506001600160a01b0388169060019060a0016020604051602081039080840390855afa15801561060c573d5f803e3d5ffd5b505050602060405103516001600160a01b03161461066c5760405162461bcd60e51b815260206004820152601760248201527f57726f6e672076616c696461746f7220636f6e73656e74000000000000000000604482015260640161041b565b505050505b60408051608081018252338082523460208084018281525f858701818152606087018281526001600160a01b038c81168085526002808852948b902099518a546001600160a01b031916921691909117895593516001890155905191870191909155516003909501805460ff191695151595909517909455935190815290927f199098452639b249bef6f727bc09ce903cece47ca72a8518bef9367ad39b6de7910160405180910390a3505050565b6001600160a01b038082165f9081526002602052604090208054909116331461075b5760405162461bcd60e51b815260040161041b9061118c565b60038101805460ff191690555f60029091015550565b6001600160a01b038082165f908152600260205260409020805490911633146107ac5760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f90815260036020526040902054156107d7576107d282610e98565b610805565b600381015460ff166108055760038101805460ff191660011790556107ff62127500426111c7565b60028201555b816001600160a01b03167fd9217a461a0f7f84171a8866118c3d92e943ba7c1ba89b819371f729b5cabcbc826002015460405161084491815260200190565b60405180910390a25050565b604080516080602080830182905260a08301527f436f6f6b636861696e2076616c696461746f7220726567697374726174696f6e60c083015246928201929092523060608201526001600160a01b038316918101919091525f9060e001604051602081830303815290604052805190602001209050919050565b60055460ff16156109095760405162461bcd60e51b81526020600482015260096024820152681499595b9d1c985b9d60ba1b604482015260640161041b565b6005805460ff191660019081179091556001600160a01b038083165f9081526002602081815260409283902083516080810185528154909516808652958101549185019190915290810154918301919091526003015460ff16151560608201529033146109885760405162461bcd60e51b815260040161041b9061118c565b6001600160a01b0382165f908152600360205260409020541580156109ae575080606001515b80156109be575080604001514210155b6109fe5760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b081b1bd8dad959607a1b604482015260640161041b565b6001600160a01b0382165f90815260026020818152604080842080546001600160a01b0319168155600181018590559283018490556003909201805460ff1916905583015190513391908381818185875af1925050503d805f8114610a7e576040519150601f19603f3d011682016040523d82523d5f602084013e610a83565b606091505b5050905080610ac65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161041b565b336001600160a01b0316836001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460200151604051610b0f91815260200190565b60405180910390a350506005805460ff1916905550565b5f546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b038116610b955760405162461bcd60e51b815260206004820152600d60248201526c2d32b9379033b7bb32b93737b960991b604482015260640161041b565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fb2a7644827310967f47607793f9eef1226102dcafd1bfcf6c53ad8afe0dd4628905f90a250565b60606004805480602002602001604051908101604052809291908181526020018280548015610c3457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c16575b5050505050905090565b5f546001600160a01b03163314610c675760405162461bcd60e51b815260040161041b906111e0565b610c7081610e98565b50565b5f546001600160a01b03163314610c9c5760405162461bcd60e51b815260040161041b906111e0565b6001600160a01b0381165f908152600260205260409020600181015468056bc75e2d6310000011801590610cd55750600381015460ff16155b8015610cf657506001600160a01b0382165f90815260036020526040902054155b610d315760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420656c696769626c6560a01b604482015260640161041b565b600454602011610d785760405162461bcd60e51b815260206004820152601260248201527156616c696461746f7220636170616369747960701b604482015260640161041b565b600480546001810182557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03851690811790915590545f828152600360205260408082209290925590517fb2b8c5f713f27009f7a78ec2167999c472e5ee8bc591102da17bc4a6551236c89190a25050565b6001546001600160a01b03163314610e505760405162461bcd60e51b815260206004820152601560248201527450656e64696e6720676f7665726e6f72206f6e6c7960581b604482015260640161041b565b5f8054336001600160a01b0319918216811783556001805490921690915560405190917f5ffbefd23f1844198adf645535c8dce8d9f3f2f9f5e917bf4e3aa8fc90299a9091a2565b6001600160a01b0381165f9081526003602052604081205490819003610eed5760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b604482015260640161041b565b6004805411610f3e5760405162461bcd60e51b815260206004820152601d60248201527f4b656570206174206c6561737420666f75722076616c696461746f7273000000604482015260640161041b565b600480545f9190610f5190600190611207565b81548110610f6157610f6161121a565b5f918252602090912001546001600160a01b03169050806004610f85600185611207565b81548110610f9557610f9561121a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003909152604090208290556004805480610fde57610fde61122e565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03851682526003808252604080842084905560029092529120908101805460ff1916600117905561103d62127500426111c7565b600282018190556040519081526001600160a01b038516907f988e3402bf34325fbe597e20c00493d017ea71636ee463c3fd0daa8df2ad850d9060200160405180910390a250505050565b80356001600160a01b038116811461109e575f80fd5b919050565b5f805f604084860312156110b5575f80fd5b6110be84611088565b9250602084013567ffffffffffffffff8111156110d9575f80fd5b8401601f810186136110e9575f80fd5b803567ffffffffffffffff8111156110ff575f80fd5b866020828401011115611110575f80fd5b939660209190910195509293505050565b5f60208284031215611131575f80fd5b61113a82611088565b9392505050565b602080825282518282018190525f918401906040840190835b818110156111815783516001600160a01b031683526020938401939092019160010161115a565b509095945050505050565b6020808252600d908201526c4f70657261746f72206f6e6c7960981b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156111da576111da6111b3565b92915050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b818103818111156111da576111da6111b3565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea264697066735822122059a56e31d2b2a92dd460b77feae4d3b47c74d4bacbb357b25fb27d22dcaf9e6564736f6c634300081a0033000000000000000000000000df6e7e94ed8c6fe335c28a8ec50381e9172f7d3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000100514b071ba3e0abf692dea2ab4cdc07d7d401a0000000000000000000000002eb5ba29f80d18913a01abb7647622da3f66f5d7000000000000000000000000b780e1ad00e4149bea43d331eaa6e537def30c79000000000000000000000000f96a5491ea2c0540be7b34cc3913fc2fc564cb1e",
"nonce": "0x98",
"to": null,
"transactionIndex": "0x0",
"type": "0x2",
"value": "0x15af1d78b58c400000",
"yParity": "0x1",
"v": "0x1",
"r": "0xdc4ff462db8e1870e8f60ebfc2aca9695768a3db32ad5d2033fde89b406a1cb2",
"s": "0x3fcc56db498e1433c9e8096ae59d879dd7f03592f215811795c3ca9e6b7f6e5"
}
}
}