Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PermanentStorage
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.5;
import "./IPermanentStorage.sol";
import "./PSStorage.sol";
contract PermanentStorage is IPermanentStorage {
// Constants do not have storage slot.
bytes32 public constant curveTokenIndexStorageId = 0xf4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc; // keccak256("curveTokenIndex")
bytes32 public constant transactionSeenStorageId = 0x695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0; // keccak256("transactionSeen")
bytes32 public constant relayerValidStorageId = 0x2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61; // keccak256("relayerValid")
// Below are the variables which consume storage slots.
address public operator;
string public version; // Current version of the contract
mapping(bytes32 => mapping(address => bool)) private permission;
/************************************************************
* Access control and ownership management *
*************************************************************/
modifier onlyOperator() {
require(operator == msg.sender, "PermanentStorage: not the operator");
_;
}
modifier validRole(bool _enabled, address _role) {
if (_enabled) {
require(
(_role == operator) || (_role == ammWrapperAddr()) || (_role == pmmAddr()),
"PermanentStorage: not a valid role"
);
}
_;
}
modifier isPermitted(bytes32 _storageId, address _role) {
require(permission[_storageId][_role], "PermanentStorage: has no permission");
_;
}
function transferOwnership(address _newOperator) external onlyOperator {
require(_newOperator != address(0), "PermanentStorage: operator can not be zero address");
operator = _newOperator;
}
/// @dev Set permission for entity to write certain storage.
function setPermission(bytes32 _storageId, address _role, bool _enabled) external onlyOperator validRole(_enabled, _role) {
permission[_storageId][_role] = _enabled;
}
/************************************************************
* Constructor and init functions *
*************************************************************/
/// @dev Replacing constructor and initialize the contract. This function should only be called once.
function initialize(address _operator) external {
require(
keccak256(abi.encodePacked(version)) == keccak256(abi.encodePacked("")),
"PermanentStorage: not upgrading from default version"
);
version = "5.0.0";
operator = _operator;
}
/************************************************************
* Getter functions *
*************************************************************/
function hasPermission(bytes32 _storageId, address _role) external view returns (bool) {
return permission[_storageId][_role];
}
function ammWrapperAddr() public view returns (address) {
return PSStorage.getStorage().ammWrapperAddr;
}
function pmmAddr() public view returns (address) {
return PSStorage.getStorage().pmmAddr;
}
function wethAddr() override external view returns (address) {
return PSStorage.getStorage().wethAddr;
}
function getCurveTokenIndex(address _makerAddr, address _assetAddr) override external view returns (int128) {
return AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][_assetAddr];
}
function isTransactionSeen(bytes32 _transactionHash) override external view returns (bool) {
return AMMWrapperStorage.getStorage().transactionSeen[_transactionHash];
}
function isRelayerValid(address _relayer) override external view returns (bool) {
return AMMWrapperStorage.getStorage().relayerValid[_relayer];
}
/************************************************************
* Management functions for Operator *
*************************************************************/
/// @dev Update AMMWrapper contract address.
function upgradeAMMWrapper(address _newAMMWrapper) external onlyOperator {
PSStorage.getStorage().ammWrapperAddr = _newAMMWrapper;
}
/// @dev Update PMM contract address.
function upgradePMM(address _newPMM) external onlyOperator {
PSStorage.getStorage().pmmAddr = _newPMM;
}
/// @dev Update WETH contract address.
function upgradeWETH(address _newWETH) external onlyOperator {
PSStorage.getStorage().wethAddr = _newWETH;
}
/************************************************************
* External functions *
*************************************************************/
function setCurveTokenIndex(address _makerAddr, address[] calldata _assetAddrs) override external isPermitted(curveTokenIndexStorageId, msg.sender) {
int128 tokenLength = int128(_assetAddrs.length);
for (int128 i = 0 ; i < tokenLength; i++) {
address assetAddr = _assetAddrs[uint256(i)];
AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][assetAddr] = i;
}
}
function setTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) {
AMMWrapperStorage.getStorage().transactionSeen[_transactionHash] = true;
}
function setRelayersValid(address[] calldata _relayers, bool[] calldata _isValids) override external isPermitted(relayerValidStorageId, msg.sender) {
require(_relayers.length == _isValids.length, "PermanentStorage: inputs length mismatch");
for (uint256 i = 0; i < _relayers.length; i++) {
AMMWrapperStorage.getStorage().relayerValid[_relayers[i]] = _isValids[i];
}
}
}
pragma solidity ^0.6.0;
interface IPermanentStorage {
function wethAddr() external view returns (address);
function getCurveTokenIndex(address _makerAddr, address _assetAddr) external view returns (int128);
function setCurveTokenIndex(address _makerAddr, address[] calldata _assetAddrs) external;
function isTransactionSeen(bytes32 _transactionHash) external view returns (bool);
function isRelayerValid(address _relayer) external view returns (bool);
function setTransactionSeen(bytes32 _transactionHash) external;
function setRelayersValid(address[] memory _relayers, bool[] memory _isValids) external;
}pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;
library PSStorage {
bytes32 private constant STORAGE_SLOT = 0x92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba471;
struct Storage {
address ammWrapperAddr;
address pmmAddr;
address wethAddr;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.storage.storage")) - 1));
bytes32 slot = STORAGE_SLOT;
// Dip into assembly to change the slot pointed to by the local
// variable `stor`.
// See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
assembly { stor_slot := slot }
}
}
library AMMWrapperStorage {
bytes32 private constant STORAGE_SLOT = 0xd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e;
struct Storage {
mapping(bytes32 => bool) transactionSeen;
mapping(address => mapping(address => int128)) curveTokenIndexes;
mapping(address => bool) relayerValid;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.ammwrapper.storage")) - 1));
bytes32 slot = STORAGE_SLOT;
// Dip into assembly to change the slot pointed to by the local
// variable `stor`.
// See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
assembly { stor_slot := slot }
}
}
library PMMStorage {
bytes32 private constant STORAGE_SLOT = 0xf9faf013fe1696003dca3723ade1a1b88f21762ea39d9dfa2c55c5bd9c4ae6e9;
struct Storage {
mapping(bytes32 => address) transactions;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.pmm.storage")) - 1));
bytes32 slot = STORAGE_SLOT;
// Dip into assembly to change the slot pointed to by the local
// variable `stor`.
// See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
assembly { stor_slot := slot }
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"ammWrapperAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curveTokenIndexStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address","name":"_assetAddr","type":"address"}],"name":"getCurveTokenIndex","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"isRelayerValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmmAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relayerValidStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address[]","name":"_assetAddrs","type":"address[]"}],"name":"setCurveTokenIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_relayers","type":"address[]"},{"internalType":"bool[]","name":"_isValids","type":"bool[]"}],"name":"setRelayersValid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionSeenStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAMMWrapper","type":"address"}],"name":"upgradeAMMWrapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPMM","type":"address"}],"name":"upgradePMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWETH","type":"address"}],"name":"upgradeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50611133806100206000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80637ecb557a116100d8578063c4d66de81161008c578063e4e266e911610066578063e4e266e914610526578063e7cc2c8e1461052e578063f2fde38b1461055457610177565b8063c4d66de81461049e578063d1498b61146104c4578063d8dd97fb1461050957610177565b80639a69e734116100bd5780639a69e7341461040e578063a485736414610416578063b6f732ae1461049657610177565b80637ecb557a146103e05780638014bd971461040657610177565b8063570ca7351161012f578063676ff9cf11610114578063676ff9cf14610398578063723ca616146103be5780637d5aa5f4146103d857610177565b8063570ca73514610340578063599e4c701461036457610177565b806331f42f8e1161016057806331f42f8e146101e257806354f0bc79146101ff57806354fd4d50146102c357610177565b806328545c0d1461017c5780632feeea3a146101bc575b600080fd5b6101a86004803603604081101561019257600080fd5b50803590602001356001600160a01b031661057a565b604080519115158252519081900360200190f35b6101a8600480360360208110156101d257600080fd5b50356001600160a01b03166105a5565b6101a8600480360360208110156101f857600080fd5b50356105d4565b6102c16004803603604081101561021557600080fd5b81019060208101813564010000000081111561023057600080fd5b82018360208201111561024257600080fd5b8035906020019184602083028401116401000000008311171561026457600080fd5b91939092909160208101903564010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b5090925090506105f2565b005b6102cb61073b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103055781810151838201526020016102ed565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486107c8565b604080516001600160a01b039092168252519081900360200190f35b6102c16004803603606081101561037a57600080fd5b508035906001600160a01b03602082013516906040013515156107d7565b6102c1600480360360208110156103ae57600080fd5b50356001600160a01b03166108f1565b6103c6610967565b60408051918252519081900360200190f35b61034861098b565b6102c1600480360360208110156103f657600080fd5b50356001600160a01b03166109a7565b610348610a1a565b6103c6610a36565b6102c16004803603604081101561042c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561045757600080fd5b82018360208201111561046957600080fd5b8035906020019184602083028401116401000000008311171561048b57600080fd5b509092509050610a5a565b610348610b9e565b6102c1600480360360208110156104b457600080fd5b50356001600160a01b0316610bb7565b6104f2600480360360408110156104da57600080fd5b506001600160a01b0381358116916020013516610ceb565b60408051600f9290920b8252519081900360200190f35b6102c16004803603602081101561051f57600080fd5b5035610d28565b6103c6610de3565b6102c16004803603602081101561054457600080fd5b50356001600160a01b0316610e07565b6102c16004803603602081101561056a57600080fd5b50356001600160a01b0316610e7d565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006105af610f2d565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b60006105de610f2d565b600092835260205250604090205460ff1690565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166106825760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b8483146106c05760405162461bcd60e51b81526004018080602001828103825260288152602001806110096028913960400191505060405180910390fd5b60005b85811015610732578484828181106106d757fe5b9050602002013515156106e8610f2d565b60020160008989858181106106f957fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016106c3565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b031633146108205760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b808281156108ba576000546001600160a01b038281169116148061085c5750610847610b9e565b6001600160a01b0316816001600160a01b0316145b8061087f575061086a610a1a565b6001600160a01b0316816001600160a01b0316145b6108ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806110876022913960400191505060405180910390fd5b505060009283526002602090815260408085206001600160a01b039490941685529290529120805460ff1916911515919091179055565b6000546001600160a01b0316331461093a5760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b80610943610f51565b60020180546001600160a01b0319166001600160a01b039290921691909117905550565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b6000610995610f51565b600201546001600160a01b0316905090565b6000546001600160a01b031633146109f05760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b806109f9610f51565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610a24610f51565b600101546001600160a01b0316905090565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff16610aea5760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b8260005b81600f0b81600f0b1215610732576000868683600f0b818110610b0d57fe5b905060200201356001600160a01b0316905081610b28610f2d565b6001600160a01b03808b166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905501610aee565b6000610ba8610f51565b546001600160a01b0316905090565b6040805160008152602081018083528151902060018054919390920190819083906002600019610100838516150201909116048015610c2d5780601f10610c0b576101008083540402835291820191610c2d565b820191906000526020600020905b815481529060010190602001808311610c19575b50509150506040516020818303038152906040528051906020012014610c845760405162461bcd60e51b81526004018080602001828103825260348152602001806110316034913960400191505060405180910390fd5b6040805180820190915260058082527f352e302e300000000000000000000000000000000000000000000000000000006020909201918252610cc891600191610f75565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf5610f2d565b6001600160a01b0393841660009081526001919091016020908152604080832094909516825292909252502054600f0b90565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff16610db85760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b6001610dc2610f2d565b60009485526020526040909320805460ff1916931515939093179092555050565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314610e505760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b80610e59610f51565b60010180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b6001600160a01b038116610f0b5760405162461bcd60e51b81526004018080602001828103825260328152602001806110cc6032913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fb657805160ff1916838001178555610fe3565b82800160010185558215610fe3579182015b82811115610fe3578251825591602001919060010190610fc8565b50610fef929150610ff3565b5090565b5b80821115610fef5760008155600101610ff456fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d2064656661756c742076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a2646970667358221220e883adaf94028d45d769b50fa144f4912633bfc9465055968f00ed115493691064736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101775760003560e01c80637ecb557a116100d8578063c4d66de81161008c578063e4e266e911610066578063e4e266e914610526578063e7cc2c8e1461052e578063f2fde38b1461055457610177565b8063c4d66de81461049e578063d1498b61146104c4578063d8dd97fb1461050957610177565b80639a69e734116100bd5780639a69e7341461040e578063a485736414610416578063b6f732ae1461049657610177565b80637ecb557a146103e05780638014bd971461040657610177565b8063570ca7351161012f578063676ff9cf11610114578063676ff9cf14610398578063723ca616146103be5780637d5aa5f4146103d857610177565b8063570ca73514610340578063599e4c701461036457610177565b806331f42f8e1161016057806331f42f8e146101e257806354f0bc79146101ff57806354fd4d50146102c357610177565b806328545c0d1461017c5780632feeea3a146101bc575b600080fd5b6101a86004803603604081101561019257600080fd5b50803590602001356001600160a01b031661057a565b604080519115158252519081900360200190f35b6101a8600480360360208110156101d257600080fd5b50356001600160a01b03166105a5565b6101a8600480360360208110156101f857600080fd5b50356105d4565b6102c16004803603604081101561021557600080fd5b81019060208101813564010000000081111561023057600080fd5b82018360208201111561024257600080fd5b8035906020019184602083028401116401000000008311171561026457600080fd5b91939092909160208101903564010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b5090925090506105f2565b005b6102cb61073b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103055781810151838201526020016102ed565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103486107c8565b604080516001600160a01b039092168252519081900360200190f35b6102c16004803603606081101561037a57600080fd5b508035906001600160a01b03602082013516906040013515156107d7565b6102c1600480360360208110156103ae57600080fd5b50356001600160a01b03166108f1565b6103c6610967565b60408051918252519081900360200190f35b61034861098b565b6102c1600480360360208110156103f657600080fd5b50356001600160a01b03166109a7565b610348610a1a565b6103c6610a36565b6102c16004803603604081101561042c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561045757600080fd5b82018360208201111561046957600080fd5b8035906020019184602083028401116401000000008311171561048b57600080fd5b509092509050610a5a565b610348610b9e565b6102c1600480360360208110156104b457600080fd5b50356001600160a01b0316610bb7565b6104f2600480360360408110156104da57600080fd5b506001600160a01b0381358116916020013516610ceb565b60408051600f9290920b8252519081900360200190f35b6102c16004803603602081101561051f57600080fd5b5035610d28565b6103c6610de3565b6102c16004803603602081101561054457600080fd5b50356001600160a01b0316610e07565b6102c16004803603602081101561056a57600080fd5b50356001600160a01b0316610e7d565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006105af610f2d565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b60006105de610f2d565b600092835260205250604090205460ff1690565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166106825760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b8483146106c05760405162461bcd60e51b81526004018080602001828103825260288152602001806110096028913960400191505060405180910390fd5b60005b85811015610732578484828181106106d757fe5b9050602002013515156106e8610f2d565b60020160008989858181106106f957fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016106c3565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b031633146108205760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b808281156108ba576000546001600160a01b038281169116148061085c5750610847610b9e565b6001600160a01b0316816001600160a01b0316145b8061087f575061086a610a1a565b6001600160a01b0316816001600160a01b0316145b6108ba5760405162461bcd60e51b81526004018080602001828103825260228152602001806110876022913960400191505060405180910390fd5b505060009283526002602090815260408085206001600160a01b039490941685529290529120805460ff1916911515919091179055565b6000546001600160a01b0316331461093a5760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b80610943610f51565b60020180546001600160a01b0319166001600160a01b039290921691909117905550565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b6000610995610f51565b600201546001600160a01b0316905090565b6000546001600160a01b031633146109f05760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b806109f9610f51565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610a24610f51565b600101546001600160a01b0316905090565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff16610aea5760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b8260005b81600f0b81600f0b1215610732576000868683600f0b818110610b0d57fe5b905060200201356001600160a01b0316905081610b28610f2d565b6001600160a01b03808b166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905501610aee565b6000610ba8610f51565b546001600160a01b0316905090565b6040805160008152602081018083528151902060018054919390920190819083906002600019610100838516150201909116048015610c2d5780601f10610c0b576101008083540402835291820191610c2d565b820191906000526020600020905b815481529060010190602001808311610c19575b50509150506040516020818303038152906040528051906020012014610c845760405162461bcd60e51b81526004018080602001828103825260348152602001806110316034913960400191505060405180910390fd5b6040805180820190915260058082527f352e302e300000000000000000000000000000000000000000000000000000006020909201918252610cc891600191610f75565b50600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf5610f2d565b6001600160a01b0393841660009081526001919091016020908152604080832094909516825292909252502054600f0b90565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff16610db85760405162461bcd60e51b81526004018080602001828103825260238152602001806110a96023913960400191505060405180910390fd5b6001610dc2610f2d565b60009485526020526040909320805460ff1916931515939093179092555050565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314610e505760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b80610e59610f51565b60010180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314610ec65760405162461bcd60e51b81526004018080602001828103825260228152602001806110656022913960400191505060405180910390fd5b6001600160a01b038116610f0b5760405162461bcd60e51b81526004018080602001828103825260328152602001806110cc6032913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610fb657805160ff1916838001178555610fe3565b82800160010185558215610fe3579182015b82811115610fe3578251825591602001919060010190610fc8565b50610fef929150610ff3565b5090565b5b80821115610fef5760008155600101610ff456fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d2064656661756c742076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a2646970667358221220e883adaf94028d45d769b50fa144f4912633bfc9465055968f00ed115493691064736f6c634300060c0033
Deployed Bytecode Sourcemap
119:5876:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2954:140;;;;;;;;;;;;;;;;-1:-1:-1;2954:140:2;;;;;;-1:-1:-1;;;;;2954:140:2;;:::i;:::-;;;;;;;;;;;;;;;;;;3849:157;;;;;;;;;;;;;;;;-1:-1:-1;3849:157:2;-1:-1:-1;;;;;3849:157:2;;:::i;3664:179::-;;;;;;;;;;;;;;;;-1:-1:-1;3664:179:2;;:::i;5586:407::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5586:407:2;;-1:-1:-1;5586:407:2;-1:-1:-1;5586:407:2;:::i;:::-;;767:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;738:23;;;:::i;:::-;;;;-1:-1:-1;;;;;738:23:2;;;;;;;;;;;;;;1964:179;;;;;;;;;;;;;;;;-1:-1:-1;1964:179:2;;;-1:-1:-1;;;;;1964:179:2;;;;;;;;;;;;:::i;4618:120::-;;;;;;;;;;;;;;;;-1:-1:-1;4618:120:2;-1:-1:-1;;;;;4618:120:2;;:::i;527:114::-;;;:::i;:::-;;;;;;;;;;;;;;;;3332:116;;;:::i;4261:144::-;;;;;;;;;;;;;;;;-1:-1:-1;4261:144:2;-1:-1:-1;;;;;4261:144:2;;:::i;3223:103::-;;;:::i;371:117::-;;;:::i;4944:420::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4944:420:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4944:420:2;;-1:-1:-1;4944:420:2;-1:-1:-1;4944:420:2;:::i;3100:117::-;;;:::i;2455:293::-;;;;;;;;;;;;;;;;-1:-1:-1;2455:293:2;-1:-1:-1;;;;;2455:293:2;;:::i;3454:204::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3454:204:2;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;5370:210;;;;;;;;;;;;;;;;-1:-1:-1;5370:210:2;;:::i;216:117::-;;;:::i;4453:116::-;;;;;;;;;;;;;;;;-1:-1:-1;4453:116:2;-1:-1:-1;;;;;4453:116:2;;:::i;1683:210::-;;;;;;;;;;;;;;;;-1:-1:-1;1683:210:2;-1:-1:-1;;;;;1683:210:2;;:::i;2954:140::-;3035:4;3058:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;3058:29:2;;;;;;;;;;;;;;;2954:140::o;3849:157::-;3923:4;3946:30;:28;:30::i;:::-;-1:-1:-1;;;;;3946:53:2;;;;;;;;:43;;;;:53;;-1:-1:-1;3946:53:2;;;;;;;3849:157::o;3664:179::-;3749:4;3772:30;:28;:30::i;:::-;:46;:64;;;;;-1:-1:-1;3772:64:2;;;;;;;3664:179::o;5586:407::-;5722:10;5699:21;1589:29;;;:22;;:29;:22;:29;;;575:66;;5722:10;1589:29;;1581:77;;;;-1:-1:-1;;;1581:77:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5752:36;;::::1;5744:89;;;;-1:-1:-1::0;;;5744:89:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5848:9;5843:144;5863:20:::0;;::::1;5843:144;;;5964:9;;5974:1;5964:12;;;;;;;;;;;;;;;5904:30;:28;:30::i;:::-;:43;;:57;5948:9;;5958:1;5948:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;5948:12:2::1;5904:57:::0;;-1:-1:-1;5904:57:2;::::1;::::0;;;;;;-1:-1:-1;5904:57:2;:72;;-1:-1:-1;;5904:72:2::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;5885:3:2::1;5843:144;;;;5586:407:::0;;;;;;:::o;767:21::-;;;;;;;;;;;;;;;-1:-1:-1;;767:21:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;738:23::-;;;-1:-1:-1;;;;;738:23:2;;:::o;1964:179::-;1142:8;;-1:-1:-1;;;;;1142:8:2;1154:10;1142:22;1134:69;;;;-1:-1:-1;;;1134:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2069:8:::1;2079:5;1290:8;1286:206;;;1349:8;::::0;-1:-1:-1;;;;;1340:17:2;;::::1;1349:8:::0;::::1;1340:17;::::0;1339:50:::1;;;1372:16;:14;:16::i;:::-;-1:-1:-1::0;;;;;1363:25:2::1;:5;-1:-1:-1::0;;;;;1363:25:2::1;;1339:50;:74;;;;1403:9;:7;:9::i;:::-;-1:-1:-1::0;;;;;1394:18:2::1;:5;-1:-1:-1::0;;;;;1394:18:2::1;;1339:74;1314:167;;;;-1:-1:-1::0;;;1314:167:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;2096:22:2::2;::::0;;;:10:::2;:22;::::0;;;;;;;-1:-1:-1;;;;;2096:29:2;;;::::2;::::0;;;;;;;:40;;-1:-1:-1;;2096:40:2::2;::::0;::::2;;::::0;;;::::2;::::0;;1964:179::o;4618:120::-;1142:8;;-1:-1:-1;;;;;1142:8:2;1154:10;1142:22;1134:69;;;;-1:-1:-1;;;1134:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4723:8:::1;4689:22;:20;:22::i;:::-;:31;;:42:::0;;-1:-1:-1;;;;;;4689:42:2::1;-1:-1:-1::0;;;;;4689:42:2;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4618:120:2:o;527:114::-;575:66;527:114;:::o;3332:116::-;3384:7;3410:22;:20;:22::i;:::-;:31;;;-1:-1:-1;;;;;3410:31:2;;-1:-1:-1;3332:116:2;:::o;4261:144::-;1142:8;;-1:-1:-1;;;;;1142:8:2;1154:10;1142:22;1134:69;;;;-1:-1:-1;;;1134:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4384:14:::1;4344:22;:20;:22::i;:::-;:54:::0;;-1:-1:-1;;;;;;4344:54:2::1;-1:-1:-1::0;;;;;4344:54:2;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4261:144:2:o;3223:103::-;3263:7;3289:22;:20;:22::i;:::-;:30;;;-1:-1:-1;;;;;3289:30:2;;-1:-1:-1;3223:103:2;:::o;371:117::-;422:66;371:117;:::o;4944:420::-;5080:10;5054:24;1589:29;;;:22;;:29;:22;:29;;;267:66;;5080:10;1589:29;;1581:77;;;;-1:-1:-1;;;1581:77:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5130:11;5102:18:::1;5159:199;5183:11;5179:15;;:1;:15;;;5159:199;;;5215:17;5235:11;;5255:1;5247:10;;5235:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;5235:23:2::1;5215:43;;5346:1;5272:30;:28;:30::i;:::-;-1:-1:-1::0;;;;;5272:60:2;;::::1;;::::0;;;:48:::1;::::0;;::::1;:60;::::0;;;;;;;:71;;;::::1;::::0;;;;;;;;;:75;;::::1;::::0;;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;5196:3:::1;5159:199;;3100:117:::0;3147:7;3173:22;:20;:22::i;:::-;:37;-1:-1:-1;;;;;3173:37:2;;-1:-1:-1;3100:117:2;:::o;2455:293::-;2584:20;;;;;;;;;;;;2574:31;;;;2561:7;2544:25;;2574:31;;2561:7;;2544:25;;;;2561:7;;2544:25;-1:-1:-1;;2544:25:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2534:36;;;;;;:71;2513:170;;;;-1:-1:-1;;;2513:170:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2694:17;;;;;;;;;;;;;;;;;;;;;;;:7;;:17;:::i;:::-;-1:-1:-1;2721:8:2;:20;;-1:-1:-1;;;;;;2721:20:2;-1:-1:-1;;;;;2721:20:2;;;;;;;;;;2455:293::o;3454:204::-;3554:6;3579:30;:28;:30::i;:::-;-1:-1:-1;;;;;3579:60:2;;;;;;;:48;;;;;:60;;;;;;;;:72;;;;;;;;;;-1:-1:-1;3579:72:2;;;;;3454:204::o;5370:210::-;5480:10;5454:24;1589:29;;;:22;;:29;:22;:29;;;422:66;;5480:10;1589:29;;1581:77;;;;-1:-1:-1;;;1581:77:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5569:4:::1;5502:30;:28;:30::i;:::-;:46;:64:::0;;;::::1;::::0;;;;;:71;;-1:-1:-1;;5502:71:2::1;::::0;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;;5370:210:2:o;216:117::-;267:66;216:117;:::o;4453:116::-;1142:8;;-1:-1:-1;;;;;1142:8:2;1154:10;1142:22;1134:69;;;;-1:-1:-1;;;1134:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4555:7:::1;4522:22;:20;:22::i;:::-;:30;;:40:::0;;-1:-1:-1;;;;;;4522:40:2::1;-1:-1:-1::0;;;;;4522:40:2;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4453:116:2:o;1683:210::-;1142:8;;-1:-1:-1;;;;;1142:8:2;1154:10;1142:22;1134:69;;;;-1:-1:-1;;;1134:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1772:26:2;::::1;1764:89;;;;-1:-1:-1::0;;;1764:89:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1863:8;:23:::0;;-1:-1:-1;;;;;;1863:23:2::1;-1:-1:-1::0;;;;;1863:23:2;;;::::1;::::0;;;::::1;::::0;;1683:210::o;1249:487:1:-;922:66;;1709:21::o;362:484::-;123:66;;819:21::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://e883adaf94028d45d769b50fa144f4912633bfc9465055968f00ed1154936910
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.