Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x61012060 | 16091303 | 651 days ago | IN | 0 ETH | 0.00573348 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AdvancedStakeRewardAdviserAndMsgSender
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: Copyright 2021-22 Panther Ventures Limited Gibraltar pragma solidity 0.8.16; import "./actions/AdvancedStakingBridgedDataCoder.sol"; import "./actions/Constants.sol"; import "./interfaces/IActionMsgReceiver.sol"; import "./interfaces/IFxStateSender.sol"; import "./StakeZeroRewardAdviser.sol"; /*** * @title AdvancedStakeRewardAdviserAndMsgSender * @notice The "zero reward adviser" for the `RewardMaster` that sends `STAKE` action messages over * the PoS bridge to the STAKE_MSG_RECEIVER. * @dev It is assumed to run on the mainnet/Goerli and be authorized with the `RewardMaster` on the * same network as the "Reward Adviser" for "advanced" stakes. * As the "Reward Adviser" it gets called `getRewardAdvice` by the `RewardMaster` every time a user * creates or withdraws an "advanced" stake. It returns the "zero" advices, i.e. the `Advice` data * structure with zero `sharesToCreate` and `sharesToRedeem`. * On "zero" advices, the RewardMaster skips creating/redeeming "treasure shares" for/to stakers. * If the `getRewardAdvice` is called w/ the action STAKE (i.e. a new stake is being created), this * contract sends the STAKE message over the "Fx-Portal" (the PoS bridge run by the Polygon team) * to the STAKE_MSG_RECEIVER on the Polygon/Mumbai. The STAKE_MSG_RECEIVER is supposed to be the * `AdvancedStakeActionMsgRelayer` contract that processes the bridged messages, rewarding stakers * on the Polygon/Mumbai. */ contract AdvancedStakeRewardAdviserAndMsgSender is StakeZeroRewardAdviser, AdvancedStakingBridgedDataCoder { event StakeMsgBridged(uint256 _nonce, bytes data); // solhint-disable var-name-mixedcase /// @notice Address of the `FxRoot` contract on the mainnet/Goerli network /// @dev `FxRoot` is the contract of the "Fx-Portal" on the mainnet/Goerli. address public immutable FX_ROOT; /// @notice Address of the RewardMaster contract on the mainnet/Goerli address public immutable REWARD_MASTER; /// @notice Address on the AdvancedStakeActionMsgRelayer on the Polygon/Mumbai address public immutable ACTION_MSG_RECEIVER; // solhint-enable var-name-mixedcase /// @notice Message nonce (i.e. sequential number of the latest message) uint256 public nonce; /// @param _rewardMaster Address of the RewardMaster contract on the mainnet/Goerli /// @param _actionMsgReceiver Address of the AdvancedStakeActionMsgRelayer on Polygon/Mumbai /// @param _fxRoot Address of the `FxRoot` (PoS Bridge) contract on mainnet/Goerli constructor( // slither-disable-next-line similar-names address _rewardMaster, address _actionMsgReceiver, address _fxRoot ) StakeZeroRewardAdviser(ADVANCED_STAKE, ADVANCED_UNSTAKE) { require( _fxRoot != address(0) && _actionMsgReceiver != address(0) && _rewardMaster != address(0), "AMS:E01" ); FX_ROOT = _fxRoot; REWARD_MASTER = _rewardMaster; ACTION_MSG_RECEIVER = _actionMsgReceiver; } // It is called withing the `function getRewardAdvice` function _onRequest(bytes4 action, bytes memory message) internal override { // Ignore other messages except the STAKE if (action != STAKE) return; // Overflow ignored as the nonce is unexpected ever be that big uint24 _nonce = uint24(nonce + 1); nonce = uint256(_nonce); bytes memory content = _encodeBridgedData(_nonce, action, message); // known contract call - no need in reentrancy guard // slither-disable-next-line reentrancy-benign,reentrancy-events IFxStateSender(FX_ROOT).sendMessageToChild( ACTION_MSG_RECEIVER, content ); emit StakeMsgBridged(_nonce, content); } }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: Copyright 2021-22 Panther Ventures Limited Gibraltar pragma solidity ^0.8.16; import "./actions/StakingMsgProcessor.sol"; import "./interfaces/IRewardAdviser.sol"; /** * @title StakeZeroRewardAdviser * @notice The "reward adviser" for the `RewardMaster` that returns the "zero reward advice" only. * @dev The "zero" reward advice is the `Advice` with zero `sharesToCreate` and `sharesToRedeem`. * On "zero" advices, the RewardMaster skips creating/redeeming "treasure shares" for/to stakers. */ abstract contract StakeZeroRewardAdviser is StakingMsgProcessor, IRewardAdviser { // solhint-disable var-name-mixedcase // `stakeAction` for the STAKE bytes4 internal immutable STAKE; // `stakeAction` for the UNSTAKE bytes4 internal immutable UNSTAKE; // solhint-enable var-name-mixedcase /// @param stakeAction The STAKE action type (see StakingMsgProcessor::_encodeStakeActionType) /// @param unstakeAction The UNSTAKE action type (see StakingMsgProcessor::_encodeUNstakeActionType) constructor(bytes4 stakeAction, bytes4 unstakeAction) { require( stakeAction != bytes4(0) && unstakeAction != bytes4(0), "ZRA:E1" ); STAKE = stakeAction; UNSTAKE = unstakeAction; } /// @dev It is assumed to be called by the RewardMaster contract. /// It returns the "zero" reward advises, no matter who calls it. function getRewardAdvice(bytes4 action, bytes memory message) external override returns (Advice memory) { require( action == STAKE || action == UNSTAKE, "ZRA: unsupported action" ); _onRequest(action, message); // Return the "zero" advice return Advice( address(0), // createSharesFor 0, // sharesToCreate address(0), // redeemSharesFrom 0, // sharesToRedeem address(0) // sendRewardTo ); } // solhint-disable no-empty-blocks // slither-disable-next-line dead-code function _onRequest(bytes4 action, bytes memory message) internal virtual { // Child contracts may re-define it } // solhint-enable no-empty-blocks }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: Copyright 2021-22 Panther Ventures Limited Gibraltar pragma solidity ^0.8.16; /*** * @title AdvancedStakingBridgedDataDecoder * @dev It encode (pack) and decodes (unpack) messages for bridging them between networks */ abstract contract AdvancedStakingBridgedDataCoder { function _encodeBridgedData( uint24 _nonce, bytes4 action, bytes memory message ) internal pure returns (bytes memory content) { content = abi.encodePacked(_nonce, action, message); } // For efficiency we use "packed" (rather than "ABI") encoding. // It results in shorter data, but requires custom unpack function. function _decodeBridgedData(bytes memory content) internal pure returns ( uint256 _nonce, bytes4 action, bytes memory message ) { require(content.length >= 7, "ABD:WRONG_LENGTH"); _nonce = (uint256(uint8(content[0])) << 16) | (uint256(uint8(content[1])) << 8) | uint256(uint8(content[2])); action = bytes4( uint32( (uint256(uint8(content[3])) << 24) | (uint256(uint8(content[4])) << 16) | (uint256(uint8(content[5])) << 8) | uint256(uint8(content[6])) ) ); uint256 curPos = 7; uint256 msgLength = content.length - curPos; message = new bytes(msgLength); if (msgLength > 0) { uint256 i = 0; while (i < msgLength) { message[i++] = content[curPos++]; } } } }
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: Copyright 2021-22 Panther Ventures Limited Gibraltar // slither-disable-next-line solc-version pragma solidity ^0.8.4; // solhint-disable var-name-mixedcase // The "stake type" for the "classic staking" // bytes4(keccak256("classic")) bytes4 constant CLASSIC_STAKE_TYPE = 0x4ab0941a; // STAKE "action type" for the "classic staking" // bytes4(keccak256(abi.encodePacked(bytes4(keccak256("stake"), CLASSIC_STAKE_TYPE))) bytes4 constant CLASSIC_STAKE = 0x1e4d02b5; // UNSTAKE "action type" for the "classic staking" // bytes4(keccak256(abi.encodePacked(bytes4(keccak256("unstake"), CLASSIC_STAKE_TYPE))) bytes4 constant CLASSIC_UNSTAKE = 0x493bdf45; // The "stake type" for the "advance staking" // bytes4(keccak256("advanced")) bytes4 constant ADVANCED_STAKE_TYPE = 0x7ec13a06; // STAKE "action type" for the "advanced staking" // bytes4(keccak256(abi.encodePacked(bytes4(keccak256("stake"), ADVANCED_STAKE_TYPE))) bytes4 constant ADVANCED_STAKE = 0xcc995ce8; // UNSTAKE "action type" for the "advanced staking" // bytes4(keccak256(abi.encodePacked(bytes4(keccak256("unstake"), ADVANCED_STAKE_TYPE))) bytes4 constant ADVANCED_UNSTAKE = 0xb8372e55; // PRP grant type for the "advanced" stake // bytes4(keccak256("forAdvancedStakeGrant")) bytes4 constant FOR_ADVANCED_STAKE_GRANT = 0x31a180d4; // solhint-enable var-name-mixedcase
// SPDX-License-Identifier: BUSL-1.1 // SPDX-FileCopyrightText: Copyright 2021-22 Panther Ventures Limited Gibraltar // slither-disable-next-line solc-version pragma solidity ^0.8.4; import "../interfaces/IStakingTypes.sol"; abstract contract StakingMsgProcessor { bytes4 internal constant STAKE_ACTION = bytes4(keccak256("stake")); bytes4 internal constant UNSTAKE_ACTION = bytes4(keccak256("unstake")); function _encodeStakeActionType(bytes4 stakeType) internal pure returns (bytes4) { return bytes4(keccak256(abi.encodePacked(STAKE_ACTION, stakeType))); } function _encodeUnstakeActionType(bytes4 stakeType) internal pure returns (bytes4) { return bytes4(keccak256(abi.encodePacked(UNSTAKE_ACTION, stakeType))); } function _packStakingActionMsg( address staker, IStakingTypes.Stake memory stake, bytes calldata data ) internal pure returns (bytes memory) { return abi.encodePacked( staker, // address stake.amount, // uint96 stake.id, // uint32 stake.stakedAt, // uint32 stake.lockedTill, // uint32 stake.claimedAt, // uint32 data // bytes ); } // For efficiency we use "packed" (rather than "ABI") encoding. // It results in shorter data, but requires custom unpack function. function _unpackStakingActionMsg(bytes memory message) internal pure returns ( address staker, uint96 amount, uint32 id, uint32 stakedAt, uint32 lockedTill, uint32 claimedAt, bytes memory data ) { // staker, amount, id and 3 timestamps occupy exactly 48 bytes // (`data` may be of zero length) require(message.length >= 48, "SMP: unexpected msg length"); uint256 stakerAndAmount; uint256 idAndStamps; // solhint-disable no-inline-assembly // slither-disable-next-line assembly assembly { // the 1st word (32 bytes) contains the `message.length` // we need the (entire) 2nd word .. stakerAndAmount := mload(add(message, 0x20)) // .. and (16 bytes of) the 3rd word idAndStamps := mload(add(message, 0x40)) } // solhint-enable no-inline-assembly staker = address(uint160(stakerAndAmount >> 96)); amount = uint96(stakerAndAmount & 0xFFFFFFFFFFFFFFFFFFFFFFFF); id = uint32((idAndStamps >> 224) & 0xFFFFFFFF); stakedAt = uint32((idAndStamps >> 192) & 0xFFFFFFFF); lockedTill = uint32((idAndStamps >> 160) & 0xFFFFFFFF); claimedAt = uint32((idAndStamps >> 128) & 0xFFFFFFFF); uint256 dataLength = message.length - 48; data = new bytes(dataLength); for (uint256 i = 0; i < dataLength; i++) { data[i] = message[i + 48]; } } }
// SPDX-License-Identifier: MIT // slither-disable-next-line solc-version pragma solidity ^0.8.4; interface IActionMsgReceiver { function onAction(bytes4 action, bytes memory message) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; /*** * @dev An interface of the `FxRoot` contract * `FxRoot` is the contract of the "Fx-Portal" (a PoS bridge run by the Polygon team) on the * mainnet/Goerli network. It passes data to s user-defined contract on the Polygon/Mumbai. * See https://docs.polygon.technology/docs/develop/l1-l2-communication/fx-portal */ interface IFxStateSender { function sendMessageToChild(address _receiver, bytes calldata _data) external; }
// SPDX-License-Identifier: MIT // slither-disable-next-line solc-version pragma solidity ^0.8.4; interface IRewardAdviser { struct Advice { // advice on new "shares" (in the reward pool) to create address createSharesFor; uint96 sharesToCreate; // advice on "shares" to redeem address redeemSharesFrom; uint96 sharesToRedeem; // advice on address the reward against redeemed shares to send to address sendRewardTo; } function getRewardAdvice(bytes4 action, bytes memory message) external returns (Advice memory); }
// SPDX-License-Identifier: MIT // slither-disable-next-line solc-version pragma solidity ^0.8.4; interface IStakingTypes { // Stake type terms struct Terms { // if stakes of this kind allowed bool isEnabled; // if messages on stakes to be sent to the {RewardMaster} bool isRewarded; // limit on the minimum amount staked, no limit if zero uint32 minAmountScaled; // limit on the maximum amount staked, no limit if zero uint32 maxAmountScaled; // Stakes not accepted before this time, has no effect if zero uint32 allowedSince; // Stakes not accepted after this time, has no effect if zero uint32 allowedTill; // One (at least) of the following three params must be non-zero // if non-zero, overrides both `exactLockPeriod` and `minLockPeriod` uint32 lockedTill; // ignored if non-zero `lockedTill` defined, overrides `minLockPeriod` uint32 exactLockPeriod; // has effect only if both `lockedTill` and `exactLockPeriod` are zero uint32 minLockPeriod; } struct Stake { // index in the `Stake[]` array of `stakes` uint32 id; // defines Terms bytes4 stakeType; // time this stake was created at uint32 stakedAt; // time this stake can be claimed at uint32 lockedTill; // time this stake was claimed at (unclaimed if 0) uint32 claimedAt; // amount of tokens on this stake (assumed to be less 1e27) uint96 amount; // address stake voting power is delegated to address delegatee; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 800 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_rewardMaster","type":"address"},{"internalType":"address","name":"_actionMsgReceiver","type":"address"},{"internalType":"address","name":"_fxRoot","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"StakeMsgBridged","type":"event"},{"inputs":[],"name":"ACTION_MSG_RECEIVER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FX_ROOT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_MASTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"action","type":"bytes4"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getRewardAdvice","outputs":[{"components":[{"internalType":"address","name":"createSharesFor","type":"address"},{"internalType":"uint96","name":"sharesToCreate","type":"uint96"},{"internalType":"address","name":"redeemSharesFrom","type":"address"},{"internalType":"uint96","name":"sharesToRedeem","type":"uint96"},{"internalType":"address","name":"sendRewardTo","type":"address"}],"internalType":"struct IRewardAdviser.Advice","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61012060405234801561001157600080fd5b5060405161080b38038061080b83398101604081905261003091610105565b6319932b9d60e31b63b8372e5560e01b61004e565b60405180910390fd5b6001600160e01b03199182166080521660a0526001600160a01b0381161580159061008157506001600160a01b03821615155b801561009557506001600160a01b03831615155b6100cb5760405162461bcd60e51b8152602060048201526007602482015266414d533a45303160c81b6044820152606401610045565b6001600160a01b0390811660c05291821660e0521661010052610148565b80516001600160a01b038116811461010057600080fd5b919050565b60008060006060848603121561011a57600080fd5b610123846100e9565b9250610131602085016100e9565b915061013f604085016100e9565b90509250925092565b60805160a05160c05160e0516101005161066d61019e6000396000818160b501526103680152600060dc0152600081816071015261033b015260006101f70152600081816101ba01526102bc015261066d6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063576eadd211610050578063576eadd2146100d7578063affed0e0146100fe578063e9cb03241461011557600080fd5b806329c9e0581461006c578063479169c4146100b0575b600080fd5b6100937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100937f000000000000000000000000000000000000000000000000000000000000000081565b6100937f000000000000000000000000000000000000000000000000000000000000000081565b61010760005481565b6040519081526020016100a7565b610128610123366004610448565b61018d565b6040516100a79190600060a0820190506001600160a01b0380845116835260208401516bffffffffffffffffffffffff808216602086015282604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160e01b031916836001600160e01b031916148061022d57507f00000000000000000000000000000000000000000000000000000000000000006001600160e01b031916836001600160e01b031916145b61027d5760405162461bcd60e51b815260206004820152601760248201527f5a52413a20756e737570706f7274656420616374696f6e000000000000000000604482015260640160405180910390fd5b61028783836102ba565b506040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525b92915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160e01b031916826001600160e01b031916146102f9575050565b60008054610308906001610531565b62ffffff81166000908155909150610321828585610403565b60405163b472047760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b472047790610392907f00000000000000000000000000000000000000000000000000000000000000009085906004016105a2565b600060405180830381600087803b1580156103ac57600080fd5b505af11580156103c0573d6000803e3d6000fd5b505050507f572041cd38e1e969e2595e37f964dff9c8ff6352e81996136313b838c3873d3a82826040516103f59291906105cc565b60405180910390a150505050565b606083838360405160200161041a939291906105ea565b60405160208183030381529060405290509392505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561045b57600080fd5b82357fffffffff000000000000000000000000000000000000000000000000000000008116811461048b57600080fd5b9150602083013567ffffffffffffffff808211156104a857600080fd5b818501915085601f8301126104bc57600080fd5b8135818111156104ce576104ce610432565b604051601f8201601f19908116603f011681019083821181831017156104f6576104f6610432565b8160405282815288602084870101111561050f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b808201808211156102b457634e487b7160e01b600052601160045260246000fd5b60005b8381101561056d578181015183820152602001610555565b50506000910152565b6000815180845261058e816020860160208601610552565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006105c46040830184610576565b949350505050565b62ffffff831681526040602082015260006105c46040830184610576565b60e884901b7fffffff00000000000000000000000000000000000000000000000000000000001681527fffffffff00000000000000000000000000000000000000000000000000000000831660038201528151600090610651816007850160208701610552565b9190910160070194935050505056fea164736f6c6343000810000a000000000000000000000000347a58878d04951588741d4d16d54b742c7f60fc00000000000000000000000047374fbe2289c0442f33a388590385a0b32a20ff000000000000000000000000fe5e5d361b2ad62c541bab87c45a0b9b018389a2
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100675760003560e01c8063576eadd211610050578063576eadd2146100d7578063affed0e0146100fe578063e9cb03241461011557600080fd5b806329c9e0581461006c578063479169c4146100b0575b600080fd5b6100937f000000000000000000000000fe5e5d361b2ad62c541bab87c45a0b9b018389a281565b6040516001600160a01b0390911681526020015b60405180910390f35b6100937f00000000000000000000000047374fbe2289c0442f33a388590385a0b32a20ff81565b6100937f000000000000000000000000347a58878d04951588741d4d16d54b742c7f60fc81565b61010760005481565b6040519081526020016100a7565b610128610123366004610448565b61018d565b6040516100a79190600060a0820190506001600160a01b0380845116835260208401516bffffffffffffffffffffffff808216602086015282604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527fcc995ce8000000000000000000000000000000000000000000000000000000006001600160e01b031916836001600160e01b031916148061022d57507fb8372e55000000000000000000000000000000000000000000000000000000006001600160e01b031916836001600160e01b031916145b61027d5760405162461bcd60e51b815260206004820152601760248201527f5a52413a20756e737570706f7274656420616374696f6e000000000000000000604482015260640160405180910390fd5b61028783836102ba565b506040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525b92915050565b7fcc995ce8000000000000000000000000000000000000000000000000000000006001600160e01b031916826001600160e01b031916146102f9575050565b60008054610308906001610531565b62ffffff81166000908155909150610321828585610403565b60405163b472047760e01b81529091506001600160a01b037f000000000000000000000000fe5e5d361b2ad62c541bab87c45a0b9b018389a2169063b472047790610392907f00000000000000000000000047374fbe2289c0442f33a388590385a0b32a20ff9085906004016105a2565b600060405180830381600087803b1580156103ac57600080fd5b505af11580156103c0573d6000803e3d6000fd5b505050507f572041cd38e1e969e2595e37f964dff9c8ff6352e81996136313b838c3873d3a82826040516103f59291906105cc565b60405180910390a150505050565b606083838360405160200161041a939291906105ea565b60405160208183030381529060405290509392505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561045b57600080fd5b82357fffffffff000000000000000000000000000000000000000000000000000000008116811461048b57600080fd5b9150602083013567ffffffffffffffff808211156104a857600080fd5b818501915085601f8301126104bc57600080fd5b8135818111156104ce576104ce610432565b604051601f8201601f19908116603f011681019083821181831017156104f6576104f6610432565b8160405282815288602084870101111561050f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b808201808211156102b457634e487b7160e01b600052601160045260246000fd5b60005b8381101561056d578181015183820152602001610555565b50506000910152565b6000815180845261058e816020860160208601610552565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006105c46040830184610576565b949350505050565b62ffffff831681526040602082015260006105c46040830184610576565b60e884901b7fffffff00000000000000000000000000000000000000000000000000000000001681527fffffffff00000000000000000000000000000000000000000000000000000000831660038201528151600090610651816007850160208701610552565b9190910160070194935050505056fea164736f6c6343000810000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000347a58878d04951588741d4d16d54b742c7f60fc00000000000000000000000047374fbe2289c0442f33a388590385a0b32a20ff000000000000000000000000fe5e5d361b2ad62c541bab87c45a0b9b018389a2
-----Decoded View---------------
Arg [0] : _rewardMaster (address): 0x347a58878D04951588741d4d16d54B742c7f60fC
Arg [1] : _actionMsgReceiver (address): 0x47374FBE2289c0442f33a388590385A0b32a20Ff
Arg [2] : _fxRoot (address): 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000347a58878d04951588741d4d16d54b742c7f60fc
Arg [1] : 00000000000000000000000047374fbe2289c0442f33a388590385a0b32a20ff
Arg [2] : 000000000000000000000000fe5e5d361b2ad62c541bab87c45a0b9b018389a2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.