Contract Address Details

0x0000000000000000000000000000000000000308

Contract Name
Gen 2 Migration Contract
Creator
Energi Governance Smart Contract
Balance
2.21M NRG
Tokens
Fetching tokens...
Transactions
66,573 Transactions
Transfers
0 Transfers
Gas Used
8,122,327,551
Last Balance Update
2165631
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Gen 2 Migration Contract




Optimization enabled
true
Compiler version
v0.5.16+commit.9c3226ce




Optimization runs
200
EVM Version
petersburg




Verified at
2021-08-20 08:19:32.297044Z

Constructor Arguments

00000000000000000000000000000000000000000000000000000000000003070000000000000000000000000000000000000000000000000000000000009b75000000000000000000000000ac34a2555de08384cd7960f35d3ab048fcf9f83a

Arg [0] (address) : 0x0000000000000000000000000000000000000307
Arg [1] (uint256) : 39797
Arg [2] (address) : 0xac34a2555de08384cd7960f35d3ab048fcf9f83a

              

Contract source code

// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
pragma solidity 0.5.16;
//pragma experimental SMTChecker;
interface IProposal {
function parent() external view returns(address);
function created_block() external view returns(uint);
function deadline() external view returns(uint);
function fee_payer() external view returns(address payable);
function fee_amount() external view returns(uint);
function accepted_weight() external view returns(uint);
function rejected_weight() external view returns(uint);
function total_weight() external view returns(uint);
function quorum_weight() external view returns(uint);
function isFinished() external view returns(bool);
function isAccepted() external view returns(bool);
function withdraw() external;
function destroy() external;
function collect() external;
function voteAccept() external;
function voteReject() external;
function setFee() external payable;
function canVote(address owner) external view returns(bool);
}
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
/**
* Genesis version of GovernedContract interface.
*
* Base Consensus interface for upgradable contracts.
* Unlike common approach, the implementation is NOT expected to be
* called through delegatecall() to minimize risks of shared storage.
*
* NOTE: it MUST NOT change after blockchain launch!
*/
interface IGovernedContract {
// Return actual proxy address for secure validation
function proxy() external returns(address);
// It must check that the caller is the proxy
// and copy all required data from the old address.
function migrate(IGovernedContract _oldImpl) external;
// It must check that the caller is the proxy
// and self destruct to the new address.
function destroy(IGovernedContract _newImpl) external;
function () external payable;
}
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
/**
* Global constants with no storage space.
* NOTE: it could be a library, but Solidity does not support such case.
*/
contract GlobalConstants {
address payable constant internal TREASURY = address(0x301);
address payable constant internal MASTERNODE_REGISTRY = address(0x302);
address payable constant internal STAKE_REWARD = address(0x303);
address payable constant internal BACKBONE_REWARD = address(0x304);
address payable constant internal SPORK_REGISTRY = address(0x305);
address payable constant internal CHECKPOINT_REGISTRY = address(0x306);
address payable constant internal BLACKLIST_REGISTRY = address(0x307);
address constant internal MIGRATION_CONTRACT = address(0x308);
address payable constant internal MASTERNODE_TOKEN = address(0x309);
address constant internal SYSTEM_FAUCET = address(0x310);
uint constant internal FEE_UPGRADE_V1 = 10000 ether;
uint constant internal FEE_BUDGET_V1 = 100 ether;
uint constant internal FEE_CHECKPOINT_V1 = 1000 ether;
uint constant internal FEE_BLACKLIST_V1 = 1000 ether;
uint constant internal FEE_BLACKLIST_REVOKE_V1 = 100 ether;
uint constant internal FEE_BLACKLIST_DRAIN_V1 = 100 ether;
uint constant internal PERIOD_UPGRADE_MIN = 2 weeks;
uint constant internal PERIOD_UPGRADE_MAX = 365 days;
uint constant internal PERIOD_BUDGET_MIN = 2 weeks;
uint constant internal PERIOD_BUDGET_MAX = 30 days;
uint constant internal PERIOD_CHECKPOINT = 1 weeks;
uint constant internal PERIOD_BLACKLIST = 1 weeks;
uint8 constant internal QUORUM_MIN = 1;
uint8 constant internal QUORUM_MAJORITY = 51;
uint8 constant internal QUORUM_MAX = 100;
uint constant internal REWARD_STAKER_V1 = 2.28 ether;
uint constant internal REWARD_BACKBONE_V1 = 2.28 ether;
uint constant internal REWARD_MASTERNODE_V1 = 9.14 ether;
uint constant internal REWARD_TREASURY_V1 = 184000 ether;
uint constant internal MN_COLLATERAL_MIN = 10000 ether;
uint constant internal MN_COLLATERAL_MAX = 100000 ether;
uint constant internal MN_HEARTBEAT_INTERVAL = 60 minutes;
uint constant internal MN_HEARTBEAT_INTERVAL_MIN = MN_HEARTBEAT_INTERVAL / 2;
uint constant internal MN_HEARTBEAT_INTERVAL_MAX = MN_HEARTBEAT_INTERVAL * 2;
uint constant internal MN_HEARTBEAT_PAST_BLOCKS = 10;
uint constant internal BUDGET_AMOUNT_MIN = FEE_BUDGET_V1;
uint constant internal BUDGET_AMOUNT_MAX = REWARD_TREASURY_V1;
uint constant internal BUDGET_PROPOSAL_MAX = 100;
}
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
/**
* Genesis version of DelegatedPoS interface.
*
* Base Consensus interface for contracts which which allow another address
* to stake on behalf of them.
*
* NOTE: it MUST NOT change after blockchain launch!
*/
interface IDelegatedPoS {
function signerAddress() external view returns(address);
}
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
/**
* Interface of UpgradeProposal
*/
contract IUpgradeProposal is IProposal {
function impl() external view returns(IGovernedContract);
}
/**
* Genesis version of IGovernedProxy interface.
*
* Base Consensus interface for upgradable contracts proxy.
* Unlike common approach, the implementation is NOT expected to be
* called through delegatecall() to minimize risks of shared storage.
*
* NOTE: it MUST NOT change after blockchain launch!
*/
interface IGovernedProxy {
event UpgradeProposal(
IGovernedContract indexed impl,
IUpgradeProposal proposal
);
event Upgraded(
IGovernedContract indexed impl,
IUpgradeProposal proposal
);
function impl() external view returns(IGovernedContract);
function proposeUpgrade(IGovernedContract _newImpl, uint _period)
external payable returns(IUpgradeProposal);
function upgrade(IUpgradeProposal _proposal) external;
function upgradeProposalImpl(IUpgradeProposal _proposal) external view returns(IGovernedContract new_impl);
function listUpgradeProposals() external view returns(IUpgradeProposal[] memory proposals);
function collectUpgradeProposal(IUpgradeProposal _proposal) external;
function () external payable;
}
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
// Copyright 2019 The Energi Core Authors
// This file is part of Energi Core.
//
// Energi Core is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Energi Core is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Energi Core. If not, see <http://www.gnu.org/licenses/>.
// Energi Governance system is the fundamental part of Energi Core.
// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.
//pragma experimental SMTChecker;
/**
* Interface of BudgetProposal
*/
contract IBudgetProposal is IProposal {
function payout_address() external view returns(address payable);
function proposed_amount() external view returns(uint);
function paid_amount() external view returns(uint);
function ref_uuid() external view returns(uint);
function distributePayout() external payable;
function budgetStatus() external view returns(
uint _ref_uuid,
bool _is_accepted,
bool _is_finished,
uint _unpaid);
}
/**
* Interface for the Treasury
*/
interface ITreasury {
event BudgetProposal(
uint indexed ref_uuid,
IBudgetProposal proposal,
address payout_address,
uint amount,
uint deadline
);
event Contribution(
address from,
uint amount
);
event Payout(
uint indexed ref_uuid,
IBudgetProposal proposal,
uint amount
);
function uuid_proposal(uint _ref_uuid) external view returns(IBudgetProposal);
function proposal_uuid(IBudgetProposal proposal) external view returns(uint);
function propose(uint _amount, uint _ref_uuid, uint _period)
external payable returns(IBudgetProposal proposal);
function listProposals() external view returns(IBudgetProposal[] memory proposals);
function isSuperblock(uint _blockNumber) external view returns(bool);
function contribute() external payable;
function balance() external view returns(uint amount);
}
/**
* Interface of BlacklistProposal
*/
contract IBlacklistProposal is IProposal {
function isObeyed() external view returns(bool);
}
/**
* Genesis version of BlacklistRegistry interface.
*
* Base Consensus interface for blocking outgoing transactions from
* blacklisted accounts.
*
* NOTE: it MUST NOT change after blockchain launch!
*/
interface IBlacklistRegistry {
event BlacklistProposal(
address indexed target,
IBlacklistProposal proposal
);
event WhitelistProposal(
address indexed target,
IBlacklistProposal proposal
);
event DrainProposal(
address indexed target,
IBlacklistProposal proposal
);
function compensation_fund() external view returns(ITreasury);
function EBI_signer() external view returns(address);
function proposals(address) external view returns(
IBlacklistProposal enforce,
IBlacklistProposal revoke,
IBlacklistProposal drain);
function propose(address) external payable returns(IBlacklistProposal);
function proposeRevoke(address) external payable returns(IBlacklistProposal);
function proposeDrain(address) external payable returns(IBlacklistProposal);
function isBlacklisted(address) external view returns(bool);
function isDrainable(address) external view returns(bool);
function collect(address) external;
function drainMigration(uint item_id, bytes20 owner) external;
function enumerateAll() external view returns(address[] memory addresses);
function enumerateBlocked() external view returns(address[] memory addresses);
function enumerateDrainable() external view returns(address[] memory addresses);
function onDrain(address) external;
}
/**
* Genesis hardcoded version of Gen 2 Migration
*
* NOTE: it MUST NOT change after blockchain launch!
*/
contract Gen2Migration is
GlobalConstants,
IDelegatedPoS
{
struct UnspentCoins {
bytes20 owner; // Gen 2 P2PKH
uint amount;
}
event Migrated(
uint item_id,
address destination,
uint amount
);
IGovernedProxy public blacklist_proxy;
uint public chain_id;
address public signerAddress; // IDelegatedPoS
uint public totalAmount;
UnspentCoins[] public coins;
mapping(bytes20 => bool) hard_blacklist;
// NOTE: this c-tor is used during testing
constructor(IGovernedProxy _blacklist_proxy, uint _chain_id, address _signer) public {
blacklist_proxy = _blacklist_proxy;
chain_id = _chain_id;
signerAddress = _signer;
}
function setSnapshot(
bytes20[] calldata _owners,
uint[] calldata _amounts,
bytes20[] calldata _blacklist
) external {
require(coins.length == 0, "Already set");
require(msg.sender == signerAddress, "Invalid sender");
require(_owners.length == _amounts.length, "match length");
require(_owners.length > 0, "has data");
coins.length = _owners.length;
uint total;
for (uint i = _owners.length; i-- > 0;) {
coins[i].owner = _owners[i];
coins[i].amount = _amounts[i];
total += _amounts[i];
}
totalAmount = total;
// NOTE: there is a special consensus procedure to setup account balance based on
// totalAmount().
for (uint i = _blacklist.length; i-- > 0;) {
hard_blacklist[_blacklist[i]] = true;
}
}
function itemCount() external view returns(uint) {
return coins.length;
}
function hashToSign(address payable _destination)
public view
returns(bytes32)
{
return keccak256(
abi.encodePacked(
_destination,
"||Energi Gen 2 migration claim||",
chain_id
)
);
}
function verifyClaim(uint _item_id, address payable _destination, uint8 sig_v, bytes32 sig_r, bytes32 sig_s)
public view
returns(uint amount)
{
// Check ID
require(_item_id < coins.length, "Invalid ID");
// Recover owner
bytes32 hash = hashToSign(_destination);
bytes20 owner = bytes20(ecrecover(hash, sig_v, sig_r, sig_s));
// Validate Owner
require(coins[_item_id].owner == owner, "Invalid signature");
// Check if blacklisted
IBlacklistRegistry blacklist = IBlacklistRegistry(address(blacklist_proxy.impl()));
require(!blacklist.isBlacklisted(address(owner)), "Owner is blacklisted");
require(!hard_blacklist[owner], "Owner is hard blacklisted");
// Validate amount
amount = coins[_item_id].amount;
}
function claim(uint _item_id, address payable _destination, uint8 sig_v, bytes32 sig_r, bytes32 sig_s)
external
{
uint amount = verifyClaim(_item_id, _destination, sig_v, sig_r, sig_s);
require(amount > 0, "Already spent");
// Spend
coins[_item_id].amount = 0;
emit Migrated(
_item_id,
_destination,
amount
);
_destination.transfer(amount);
}
// SECURITY: emergency drain procedure has to be implemented as blacklist
// followed by consensus-level drain to Blacklist registry.
function blacklistClaim(uint _item_id, bytes20 _owner) external {
require(_item_id < coins.length, "Invalid ID");
uint amount = coins[_item_id].amount;
require(amount > 0, "Already spent");
require(coins[_item_id].owner == _owner, "Invalid Owner");
IBlacklistRegistry blacklist = IBlacklistRegistry(address(blacklist_proxy.impl()));
require(msg.sender == address(blacklist), "Not blacklist registry");
// Spend
coins[_item_id].amount = 0;
blacklist.compensation_fund().contribute.value(amount)();
}
// Safety
//---------------------------------
function () external payable {
revert("Not supported");
}
}

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_blacklist_proxy","internalType":"contractIGovernedProxy"},{"type":"uint256","name":"_chain_id","internalType":"uint256"},{"type":"address","name":"_signer","internalType":"address"}]},{"type":"event","name":"Migrated","inputs":[{"type":"uint256","name":"item_id","internalType":"uint256","indexed":false},{"type":"address","name":"destination","internalType":"address","indexed":false},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"blacklistClaim","inputs":[{"type":"uint256","name":"_item_id","internalType":"uint256"},{"type":"bytes20","name":"_owner","internalType":"bytes20"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"contractIGovernedProxy"}],"name":"blacklist_proxy","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"chain_id","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"claim","inputs":[{"type":"uint256","name":"_item_id","internalType":"uint256"},{"type":"address","name":"_destination","internalType":"addresspayable"},{"type":"uint8","name":"sig_v","internalType":"uint8"},{"type":"bytes32","name":"sig_r","internalType":"bytes32"},{"type":"bytes32","name":"sig_s","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes20","name":"owner","internalType":"bytes20"},{"type":"uint256","name":"amount","internalType":"uint256"}],"name":"coins","inputs":[{"type":"uint256","name":"","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"hashToSign","inputs":[{"type":"address","name":"_destination","internalType":"addresspayable"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"itemCount","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setSnapshot","inputs":[{"type":"bytes20[]","name":"_owners","internalType":"bytes20[]"},{"type":"uint256[]","name":"_amounts","internalType":"uint256[]"},{"type":"bytes20[]","name":"_blacklist","internalType":"bytes20[]"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"signerAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalAmount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"amount","internalType":"uint256"}],"name":"verifyClaim","inputs":[{"type":"uint256","name":"_item_id","internalType":"uint256"},{"type":"address","name":"_destination","internalType":"addresspayable"},{"type":"uint8","name":"sig_v","internalType":"uint8"},{"type":"bytes32","name":"sig_r","internalType":"bytes32"},{"type":"bytes32","name":"sig_s","internalType":"bytes32"}],"constant":true}]
            

Deployed ByteCode

0x36303830363034303532333438303135363130303130353736303030383066643562353036303430353136313066303233383033383036313066303238333339383138313031363034303532363036303831313031353631303033333537363030303830666435623530383035313630323038323031353136303430393039323031353136303030383035343630303136303031363061303162303339333834313636303031363030313630613031623033313939313832313631373930393135353630303139333930393335353630303238303534393239303931313639313930393231363137393035353631306537653830363130303834363030303339363030306633666536303830363034303532363030343336313036313030396335373630303033353630653031633830363335623736333364303131363130303634353738303633356237363333643031343631303163373537383036333562393837666339313436313031646335373830363336626662306430313134363130326666353738303633613732336233356131343631303331343537383036336336363130363537313436313033346535373830363366373132313439303134363130333963353736313030396335363562383036333061393663623439313436313030643935373830363331613339643865663134363130313165353738303633336166393733623131343631303133333537383036333437366365306333313436313031343835373830363335363235346661323134363130313936353735623630343038303531363234363162636436306535316238313532363032303630303438323031353236303064363032343832303135323663313339626464303831636464356331633162646339643139353936303961316236303434383230313532393035313930383139303033363036343031393066643562333438303135363130306535353736303030383066643562353036313031306336303034383033363033363032303831313031353631303066633537363030303830666435623530333536303031363030313630613031623033313636313033656135363562363034303830353139313832353235313930383139303033363032303031393066333562333438303135363130313261353736303030383066643562353036313031306336313034353235363562333438303135363130313366353736303030383066643562353036313031306336313034353835363562333438303135363130313534353736303030383066643562353036313031306336303034383033363033363061303831313031353631303136623537363030303830666435623530383033353930363030313630303136306130316230333630323038323031333531363930363066663630343038323031333531363930363036303831303133353930363038303031333536313034356535363562333438303135363130316132353736303030383066643562353036313031616236313037373535363562363034303830353136303031363030313630613031623033393039323136383235323531393038313930303336303230303139306633356233343830313536313031643335373630303038306664356235303631303161623631303738343536356233343830313536313031653835373630303038306664356235303631303266643630303438303336303336303630383131303135363130316666353736303030383066643562383130313930363032303831303138313335363430313030303030303030383131313135363130323161353736303030383066643562383230313833363032303832303131313135363130323263353736303030383066643562383033353930363032303031393138343630323038333032383430313131363430313030303030303030383331313137313536313032346535373630303038306664356239313933393039323930393136303230383130313930333536343031303030303030303038313131313536313032366335373630303038306664356238323031383336303230383230313131313536313032376535373630303038306664356238303335393036303230303139313834363032303833303238343031313136343031303030303030303038333131313731353631303261303537363030303830666435623931393339303932393039313630323038313031393033353634303130303030303030303831313131353631303262653537363030303830666435623832303138333630323038323031313131353631303264303537363030303830666435623830333539303630323030313931383436303230383330323834303131313634303130303030303030303833313131373135363130326632353736303030383066643562353039303932353039303530363130373933353635623030356233343830313536313033306235373630303038306664356235303631303130633631303963623536356233343830313536313033323035373630303038306664356235303631303266643630303438303336303336303430383131303135363130333337353736303030383066643562353038303335393036303230303133353630303136303031363036303162303331393136363130396432353635623334383031353631303335613537363030303830666435623530363130333738363030343830333630333630323038313130313536313033373135373630303038306664356235303335363130636234353635623630343038303531363030313630303136303630316230333139393039333136383335323630323038333031393139303931353238303531393138323930303330313930663335623334383031353631303361383537363030303830666435623530363130326664363030343830333630333630613038313130313536313033626635373630303038306664356235303830333539303630303136303031363061303162303336303230383230313335313639303630666636303430383230313335313639303630363038313031333539303630383030313335363130636534353635623630303135343630343038303531363036303933393039333162363030313630303136303630316230333139313636303230383038353031393139303931353237663763376334353665363537323637363932303437363536653230333232303664363936373732363137343639366636653230363336633631363936643763376336303334383530313532363035343830383530313933393039333532383135313830383530333930393330313833353236303734393039333031393035323830353139313031323039303536356236303033353438313536356236303031353438313536356236303034353436303030393038363130363130346134353736303430383035313632343631626364363065353162383135323630323036303034383230313532363030613630323438323031353236393132356239643938356231613539303831323531363062323162363034343832303135323930353139303831393030333630363430313930666435623630303036313034616638363631303365613536356239303530363030303630303138323837383738373630343035313630303038313532363032303031363034303532363034303531383038353831353236303230303138343630666631363630666631363831353236303230303138333831353236303230303138323831353236303230303139343530353035303530353036303230363034303531363032303831303339303830383430333930383535616661313538303135363130353130353733643630303038303365336436303030666435623530353035303630323036303430353130333531363036303162393035303830363030313630303136303630316230333139313636303034383938313534383131303631303533373537666535623630303039313832353236303230393039313230363030323930393130323031353436303630316236303031363030313630363031623033313931363134363130353962353736303430383035313632343631626364363065353162383135323630323036303034383230313532363031313630323438323031353237303439366537363631366336393634323037333639363736653631373437353732363536303738316236303434383230313532393035313930383139303033363036343031393066643562363030303830363030303930353439303631303130303061393030343630303136303031363061303162303331363630303136303031363061303162303331363633386162663630373736303430353138313633666666666666666631363630653031623831353236303034303136303230363034303531383038333033383138363830336231353830313536313035656135373630303038306664356235303561666131353830313536313035666535373364363030303830336533643630303066643562353035303530353036303430353133643630323038313130313536313036313435373630303038306664356235303531363034303830353136336665353735613837363065303162383135323630363038353930316336303034383230313532393035313931393235303630303136303031363061303162303338333136393136336665353735613837393136303234383038323031393236303230393239303931393038323930303330313831383638303362313538303135363130363634353736303030383066643562353035616661313538303135363130363738353733643630303038303365336436303030666435623530353035303530363034303531336436303230383131303135363130363865353736303030383066643562353035313135363130366439353736303430383035313632343631626364363065353162383135323630323036303034383230313532363031343630323438323031353237333133646464623939356338383161356363383138396231383538646164623161356364643139353936303632316236303434383230313532393035313930383139303033363036343031393066643562363030313630303136303630316230333139383231363630303039303831353236303035363032303532363034303930323035343630666631363135363130373438353736303430383035313632343631626364363065353162383135323630323036303034383230313532363031393630323438323031353237663466373736653635373232303639373332303638363137323634323036323663363136333662366336393733373436353634303030303030303030303030303036303434383230313532393035313930383139303033363036343031393066643562363030343839383135343831313036313037353535376665356239303630303035323630323036303030323039303630303230323031363030313031353439333530353035303530393539343530353035303530353035363562363030303534363030313630303136306130316230333136383135363562363030323534363030313630303136306130316230333136383135363562363030343534313536313037643635373630343038303531363234363162636436306535316238313532363032303630303438323031353236303062363032343832303135323661313035623163393935383539316534383163643935643630616131623630343438323031353239303531393038313930303336303634303139306664356236303032353436303031363030313630613031623033313633333134363130383236353736303430383035313632343631626364363065353162383135323630323036303034383230313532363030653630323438323031353236643234623733623330623633346232313033396232623733323332623936303931316236303434383230313532393035313930383139303033363036343031393066643562383438333134363130383639353736303430383035313632343631626364363065353162383135323630323036303034383230313532363030633630323438323031353236623064616332653863366430343064386361646363656538643630613331623630343438323031353239303531393038313930303336303634303139306664356238343631303861363537363034303830353136323436316263643630653531623831353236303230363030343832303135323630303836303234383230313532363736383631373332303634363137343631363063303162363034343832303135323930353139303831393030333630363430313930666435623834363130386232363030343832363130646539353635623530363030303835356236303030313938313031393031353631303936353537383738373832383138313130363130386365353766653562393035303630323030323031333536303031363030313630363031623033313931363630303438323831353438313130363130386563353766653562363030303931383235323630323039303931323036303032393039313032303138303534363030313630303136306130316230333139313636303630393239303932316339313930393131373930353538353835383238313831313036313039323035376665356239303530363032303032303133353630303438323831353438313130363130393334353766653562393036303030353236303230363030303230393036303032303230313630303130313831393035353530383538353832383138313130363130393535353766653562393035303630323030323031333538323031393135303631303862373536356235303630303338313930353538313562363030303139383130313930313536313039633135373630303136303035363030303836383638353831383131303631303938613537666535623630323039303831303239323930393230313335363030313630303136303630316230333139313638333532353038313031393139303931353236303430303136303030323038303534363066663139313639313135313539313930393131373930353536313039366435363562353035303530353035303530353035303536356236303034353435623930353635623630303435343832313036313061313535373630343038303531363234363162636436306535316238313532363032303630303438323031353236303061363032343832303135323639313235623964393835623161353930383132353136306232316236303434383230313532393035313930383139303033363036343031393066643562363030303630303438333831353438313130363130613234353766653562393036303030353236303230363030303230393036303032303230313630303130313534393035303630303038313131363130613764353736303430383035313632343631626364363065353162383135323630323036303034383230313532363030643630323438323031353236633130356231633939353835393165343831636463313935623964363039613162363034343832303135323930353139303831393030333630363430313930666435623831363030313630303136303630316230333139313636303034383438313534383131303631306139353537666535623630303039313832353236303230393039313230363030323930393130323031353436303630316236303031363030313630363031623033313931363134363130616635353736303430383035313632343631626364363065353162383135323630323036303034383230313532363030643630323438323031353236633234623733623330623633346232313032376262623733326239363039393162363034343832303135323930353139303831393030333630363430313930666435623630303038303630303039303534393036313031303030613930303436303031363030313630613031623033313636303031363030313630613031623033313636333861626636303737363034303531383136336666666666666666313636306530316238313532363030343031363032303630343035313830383330333831383638303362313538303135363130623434353736303030383066643562353035616661313538303135363130623538353733643630303038303365336436303030666435623530353035303530363034303531336436303230383131303135363130623665353736303030383066643562353035313930353033333630303136303031363061303162303338323136313436313062633835373630343038303531363234363162636436306535316238313532363032303630303438323031353236303136363032343832303135323735346536663734323036323663363136333662366336393733373432303732363536373639373337343732373936303530316236303434383230313532393035313930383139303033363036343031393066643562363030303630303438353831353438313130363130626437353766653562393036303030353236303230363030303230393036303032303230313630303130313831393035353530383036303031363030313630613031623033313636336634343431313532363034303531383136336666666666666666313636306530316238313532363030343031363032303630343035313830383330333831383638303362313538303135363130633235353736303030383066643562353035616661313538303135363130633339353733643630303038303365336436303030666435623530353035303530363034303531336436303230383131303135363130633466353736303030383066643562353035313630343038303531363336626464636364643630653131623831353239303531363030313630303136306130316230333930393231363931363364376262393962613931383539313630303438303833303139323630303039323931393038323930303330313831383538383830336231353830313536313063393535373630303038306664356235303561663131353830313536313063613935373364363030303830336533643630303066643562353035303530353035303530353035303530353635623630303438313831353438313130363130636331353766653562363030303931383235323630323039303931323036303032393039313032303138303534363030313930393130313534363036303931393039313162393135303832353635623630303036313063663338363836383638363836363130343565353635623930353036303030383131313631306433613537363034303830353136323436316263643630653531623831353236303230363030343832303135323630306436303234383230313532366331303562316339393538353931653438316364633139356239643630396131623630343438323031353239303531393038313930303336303634303139306664356236303030363030343837383135343831313036313064343935376665356236303030393138323532363032303931383239303230363030313630303239303932303230313031393139303931353536303430383035313838383135323630303136303031363061303162303338383136393238313031393239303932353238313831303138333930353235313766666439306630373461353735636439333336383530663739616663613165383966356361316266343334643832613231636135643664346138376137323461343931383139303033363036303031393061313630343035313630303136303031363061303162303338363136393038323135363130386663303239303833393036303030383138313831383538383838663139333530353035303530313538303135363130646530353733643630303038303365336436303030666435623530353035303530353035303530353635623831353438313833353538313831313131353631306531353537363030323032383136303032303238333630303035323630323036303030323039313832303139313031363130653135393139303631306531613536356235303530353035363562363130396366393139303562383038323131313536313065343535373830353436303031363030313630613031623033313931363831353536303030363030313832303135353630303230313631306532303536356235303930353666656132363536323761376137323331353832303062396133333663303261623037366530646531653634316437343239343933353662323337383137626130386262323835326436376134386364356539333336343733366636633633343330303035313030303332