Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 125246443 | 455 days ago | 0.002132744415603 ETH | ||||
| 125246443 | 455 days ago | 0.000021327444156 ETH | ||||
| 125246443 | 455 days ago | 0.002154071859759 ETH | ||||
| 125243817 | 455 days ago | 0.002134702292269 ETH | ||||
| 125243817 | 455 days ago | 0.000021347022922 ETH | ||||
| 125243817 | 455 days ago | 0.002156049315192 ETH | ||||
| 125211903 | 456 days ago | 0.002113940212423 ETH | ||||
| 125211903 | 456 days ago | 0.000029705258329 ETH | ||||
| 125211903 | 456 days ago | 0.002143645470753 ETH | ||||
| 125203102 | 456 days ago | 0.002103845830177 ETH | ||||
| 125203102 | 456 days ago | 0.000017788962952 ETH | ||||
| 125203102 | 456 days ago | 0.00212163479313 ETH | ||||
| 125195262 | 457 days ago | 0.002122596212528 ETH | ||||
| 125195262 | 457 days ago | 0.000027868160025 ETH | ||||
| 125195262 | 457 days ago | 0.002150464372554 ETH | ||||
| 125157349 | 457 days ago | 0.002132485707227 ETH | ||||
| 125157349 | 457 days ago | 0.000021324857072 ETH | ||||
| 125157349 | 457 days ago | 0.0021538105643 ETH | ||||
| 125138441 | 458 days ago | 0.002156428758464 ETH | ||||
| 125138441 | 458 days ago | 0.000021564287584 ETH | ||||
| 125138441 | 458 days ago | 0.002177993046048 ETH | ||||
| 125133556 | 458 days ago | 0.004348166378238 ETH | ||||
| 125133556 | 458 days ago | 0.000043481663782 ETH | ||||
| 125133556 | 458 days ago | 0.00439164804202 ETH | ||||
| 125116165 | 458 days ago | 0.002193717736444 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StableFeeMiddleware
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.14;
import { AggregatorV3Interface } from "chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import { ReentrancyGuard } from "openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";
import { ICyberIdMiddleware } from "../../interfaces/ICyberIdMiddleware.sol";
import { ITokenReceiver } from "../../interfaces/ITokenReceiver.sol";
import { DataTypes } from "../../libraries/DataTypes.sol";
import { LowerCaseCyberIdMiddleware } from "./base/LowerCaseCyberIdMiddleware.sol";
contract StableFeeMiddleware is LowerCaseCyberIdMiddleware, ReentrancyGuard {
/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
/**
* @notice ETH/USD Oracle address.
*/
AggregatorV3Interface public immutable usdOracle;
/**
* @notice TokenReceiver contract address.
*/
ITokenReceiver public immutable tokenReceiver;
/**
* If true, the middleware will charge the fee to token receiver.
*/
bool public rebateEnabled;
/**
* @notice The address that receives the fee.
*/
address public recipient;
/**
* @notice The price of each letter in USD.
*/
uint256 public price1Letter;
uint256 public price2Letter;
uint256 public price3Letter;
uint256 public price4Letter;
uint256 public price5Letter;
uint256 public price6Letter;
uint256 public price7To11Letter;
uint256 public price12AndMoreLetter;
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event RebateChanged(bool rebateEnabled);
event RecipientChanged(address recipient);
event StableFeeChanged(
uint256 price1Letter,
uint256 price2Letter,
uint256 price3Letter,
uint256 price4Letter,
uint256 price5Letter,
uint256 price6Letter,
uint256 price7To11Letter,
uint256 price12AndMoreLetter
);
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
address _oracleAddress,
address _tokenReceiver,
address cyberId
) LowerCaseCyberIdMiddleware(cyberId) {
usdOracle = AggregatorV3Interface(_oracleAddress);
tokenReceiver = ITokenReceiver(_tokenReceiver);
}
/*//////////////////////////////////////////////////////////////
ICyberIdMiddleware OVERRIDES
//////////////////////////////////////////////////////////////*/
/// @inheritdoc ICyberIdMiddleware
function setMwData(bytes calldata data) external override onlyNameRegistry {
(
bool _rebateEnabled,
address _recipient,
uint256[8] memory prices
) = abi.decode(data, (bool, address, uint256[8]));
rebateEnabled = _rebateEnabled;
recipient = _recipient;
price1Letter = prices[0];
price2Letter = prices[1];
price3Letter = prices[2];
price4Letter = prices[3];
price5Letter = prices[4];
price6Letter = prices[5];
price7To11Letter = prices[6];
price12AndMoreLetter = prices[7];
emit RebateChanged(_rebateEnabled);
emit RecipientChanged(_recipient);
emit StableFeeChanged(
prices[0],
prices[1],
prices[2],
prices[3],
prices[4],
prices[5],
prices[6],
prices[7]
);
}
/// @inheritdoc ICyberIdMiddleware
function preRegister(
DataTypes.RegisterCyberIdParams calldata params,
bytes calldata
)
external
payable
override
onlyNameRegistry
nonReentrant
returns (uint256)
{
uint256 cost = getPriceWei(params.cid);
_chargeAndRefundOverPayment(cost, params.to, params.msgSender);
return cost;
}
/// @inheritdoc ICyberIdMiddleware
function skipCommit() external pure virtual override returns (bool) {
return true;
}
/*//////////////////////////////////////////////////////////////
PUBLIC VIEW
//////////////////////////////////////////////////////////////*/
function getPriceWei(string calldata cid) public view returns (uint256) {
return _attoUSDToWei(_getUSDPrice(cid));
}
/*//////////////////////////////////////////////////////////////
INTERNAL LOGIC
//////////////////////////////////////////////////////////////*/
function _getUSDPrice(string calldata cid) internal view returns (uint256) {
// LowerCaseCyberIdMiddleware ensures that each cid character only occupies 1 byte
uint256 len = bytes(cid).length;
uint256 usdPrice;
if (len >= 12) {
usdPrice = price12AndMoreLetter;
} else if (len >= 7) {
usdPrice = price7To11Letter;
} else if (len == 6) {
usdPrice = price6Letter;
} else if (len == 5) {
usdPrice = price5Letter;
} else if (len == 4) {
usdPrice = price4Letter;
} else if (len == 3) {
usdPrice = price3Letter;
} else if (len == 2) {
usdPrice = price2Letter;
} else {
usdPrice = price1Letter;
}
return usdPrice;
}
function _getPrice() internal view returns (int256) {
// prettier-ignore
(
uint80 roundID,
int price,
/* uint startedAt */,
uint updatedAt,
/*uint80 answeredInRound*/
) = usdOracle.latestRoundData();
require(roundID != 0, "INVALID_ORACLE_ROUND_ID");
require(price > 0, "INVALID_ORACLE_PRICE");
require(updatedAt > block.timestamp - 3 hours, "STALE_ORACLE_PRICE");
return price;
}
function _attoUSDToWei(uint256 amount) internal view returns (uint256) {
uint256 ethPrice = uint256(_getPrice());
return (amount * 1e8) / ethPrice;
}
function _chargeAndRefundOverPayment(
uint256 cost,
address depositTo,
address refundTo
) internal {
require(msg.value >= cost, "INSUFFICIENT_FUNDS");
/**
* Already checked msg.value >= cost
*/
uint256 overpayment;
unchecked {
overpayment = msg.value - cost;
}
if (overpayment > 0) {
(bool refundSuccess, ) = refundTo.call{ value: overpayment }("");
require(refundSuccess, "REFUND_FAILED");
}
if (rebateEnabled) {
tokenReceiver.depositTo{ value: cost }(depositTo);
} else {
(bool chargeSuccess, ) = recipient.call{ value: cost }("");
require(chargeSuccess, "CHARGE_FAILED");
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
function getRoundData(uint80 _roundId)
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.14;
import { DataTypes } from "../libraries/DataTypes.sol";
interface ICyberIdMiddleware {
/**
* @notice Sets data for middleware.
*
* @param data Extra data to set.
*/
function setMwData(bytes calldata data) external;
/**
* @notice Indicates if commit-reveal should be skipped.
*/
function skipCommit() external pure returns (bool);
/**
* @notice Process that runs before the register happens.
*
* @param params The params for register cid.
* @param data Extra data to process.
*/
function preRegister(
DataTypes.RegisterCyberIdParams calldata params,
bytes calldata data
) external payable returns (uint256);
/**
* @notice Validates the name pattern.
*
* @param name The name to validate.
*/
function namePatternValid(
string calldata name
) external view returns (bool);
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.14;
/**
* @title TokenReceiver
* @author CyberConnect
* @notice A contract that receive native token and record the amount.
* The deposit only record the cumulative amount and withdraw won't affect
* the deposit value.
*/
interface ITokenReceiver {
function depositTo(address to) external payable;
function withdraw(address to, uint256 amount) external;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.14;
library DataTypes {
struct EIP712Signature {
uint8 v;
bytes32 r;
bytes32 s;
uint256 deadline;
}
struct MetadataPair {
string key;
string value;
}
struct RegisterNameParams {
address msgSender;
string name;
bytes32 parentNode;
address to;
}
struct RegisterCyberIdParams {
address msgSender;
string cid;
address to;
}
struct BatchRegisterCyberIdParams {
string cid;
address to;
address resolver;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.14;
import { ICyberIdMiddleware } from "../../../interfaces/ICyberIdMiddleware.sol";
abstract contract LowerCaseCyberIdMiddleware is ICyberIdMiddleware {
/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
address public immutable NAME_REGISTRY; // solhint-disable-line
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(address nameRegistry) {
NAME_REGISTRY = nameRegistry;
}
/*//////////////////////////////////////////////////////////////
MODIFIERS
//////////////////////////////////////////////////////////////*/
/**
* @dev Reverts if called by any account other than the name registry.
*/
modifier onlyNameRegistry() {
require(NAME_REGISTRY == msg.sender, "NOT_NAME_REGISTRY");
_;
}
/*//////////////////////////////////////////////////////////////
ICyberIdMiddleware OVERRIDES
//////////////////////////////////////////////////////////////*/
/// @inheritdoc ICyberIdMiddleware
function skipCommit() external pure virtual override returns (bool) {
return false;
}
/// @inheritdoc ICyberIdMiddleware
function namePatternValid(
string calldata name
) external pure virtual override returns (bool) {
bytes memory byteName = bytes(name);
if (byteName.length > 20 || byteName.length < 1) {
return false;
}
uint256 byteNameLength = byteName.length;
for (uint256 i = 0; i < byteNameLength; ) {
bytes1 b = byteName[i];
if ((b >= "0" && b <= "9") || (b >= "a" && b <= "z") || b == "_") {
unchecked {
++i;
}
} else {
return false;
}
}
return true;
}
}{
"remappings": [
"@ens/=lib/ens-contracts/contracts/",
"@ensdomains/=lib/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"buffer/=lib/buffer/contracts/",
"chainlink/=lib/chainlink/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"ens-contracts/=lib/ens-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/",
"solmate/=lib/solmate/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_oracleAddress","type":"address"},{"internalType":"address","name":"_tokenReceiver","type":"address"},{"internalType":"address","name":"cyberId","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rebateEnabled","type":"bool"}],"name":"RebateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"RecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price1Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price2Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price3Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price4Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price5Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price6Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price7To11Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price12AndMoreLetter","type":"uint256"}],"name":"StableFeeChanged","type":"event"},{"inputs":[],"name":"NAME_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"cid","type":"string"}],"name":"getPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"namePatternValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"address","name":"to","type":"address"}],"internalType":"struct DataTypes.RegisterCyberIdParams","name":"params","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"preRegister","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price12AndMoreLetter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price2Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price3Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price4Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price5Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price6Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price7To11Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebateEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setMwData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skipCommit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenReceiver","outputs":[{"internalType":"contract ITokenReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdOracle","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60e060405234801561001057600080fd5b5060405161105738038061105783398101604081905261002f9161006d565b6001600160a01b03908116608052600160005591821660a0521660c0526100b0565b80516001600160a01b038116811461006857600080fd5b919050565b60008060006060848603121561008257600080fd5b61008b84610051565b925061009960208501610051565b91506100a760408501610051565b90509250925092565b60805160a05160c051610f5c6100fb600039600081816102b0015261096c0152600081816102e40152610a770152600081816102660152818161037d01526104430152610f5c6000f3fe6080604052600436106101085760003560e01c80637ac3e6ea11610095578063c8a4271f11610064578063c8a4271f146102d2578063cb8dd1e914610306578063cd5d2c741461031c578063d820ed4214610332578063f1ebaa661461034857600080fd5b80637ac3e6ea14610234578063a05c261614610254578063a200e15314610288578063a3e295bc1461029e57600080fd5b8063316a7878116100dc578063316a7878146101965780633da6aaed146101ac57806342a0d9b4146101bf57806359b6b86c146101e157806366d003ac146101f757600080fd5b8062d48e461461010d5780630261d9421461014057806306534e0c146101565780632c0fd74c14610180575b600080fd5b34801561011957600080fd5b5061012d610128366004610c41565b61035c565b6040519081526020015b60405180910390f35b34801561014c57600080fd5b5061012d60075481565b34801561016257600080fd5b506001546101709060ff1681565b6040519015158152602001610137565b34801561018c57600080fd5b5061012d60025481565b3480156101a257600080fd5b5061012d60085481565b61012d6101ba366004610c83565b610379565b3480156101cb57600080fd5b506101df6101da366004610c41565b610441565b005b3480156101ed57600080fd5b5061012d60065481565b34801561020357600080fd5b5060015461021c9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610137565b34801561024057600080fd5b5061017061024f366004610c41565b61062a565b34801561026057600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561029457600080fd5b5061012d60045481565b3480156102aa57600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031257600080fd5b5061012d60095481565b34801561032857600080fd5b5061012d60035481565b34801561033e57600080fd5b5061012d60055481565b34801561035457600080fd5b506001610170565b600061037061036b8484610756565b6107de565b90505b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146103ec5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b6103f4610804565b60006104066101286020870187610cf4565b905061042e8161041c6060880160408901610d53565b6104296020890189610d53565b61085d565b905061043a6001600055565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104ad5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064016103e3565b600080806104bd84860186610d86565b600180546001600160a81b031916841515610100600160a81b03198116919091176101006001600160a01b038616021790915581516002556020808301516003556040808401516004556060840151600555608084015160065560a084015160075560c084015160085560e08401516009555191825293965091945092507f308ece3d6d07fc00169d460bea2cf86425f604ce98acfdc41bf1797b55588656910160405180910390a16040516001600160a01b03831681527fff2d07bd188a9eb41acbc4a7db39e18956c95ab7f54f434d97849bf6206e577c9060200160405180910390a1805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b519e8f529c8e019b909b52988c0197909752948a0193909352908801528601528401528201527f7489fa6294e4b179863f8681d89f7ebfb40d35cc39abb5243fef5798a5253021906101000160405180910390a15050505050565b60008083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050601490911190508061067a575060018151105b15610689576000915050610373565b805160005b8181101561074a5760008382815181106106aa576106aa610e33565b01602001516001600160f81b0319169050600360fc1b81108015906106dd5750603960f81b6001600160f81b0319821611155b8061070f5750606160f81b6001600160f81b031982161080159061070f5750603d60f91b6001600160f81b0319821611155b806107275750605f60f81b6001600160f81b03198216145b1561073757816001019150610744565b6000945050505050610373565b5061068e565b50600195945050505050565b60008181600c821061076b57506009546107d6565b6007821061077c57506008546107d6565b8160060361078d57506007546107d6565b8160050361079e57506006546107d6565b816004036107af57506005546107d6565b816003036107c057506004546107d6565b816002036107d157506003546107d6565b506002545b949350505050565b6000806107e9610a6f565b9050806107fa846305f5e100610e5f565b61043a9190610e7e565b6002600054036108565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103e3565b6002600055565b823410156108a25760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016103e3565b34838103908414610942576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b50509050806109405760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b60448201526064016103e3565b505b60015460ff16156109cf5760405163b760faf960e01b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99086906024016000604051808303818588803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b5050505050610a69565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610a21576040519150601f19603f3d011682016040523d82523d6000602084013e610a26565b606091505b5050905080610a675760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b60448201526064016103e3565b505b50505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190610ebf565b50935050925092508269ffffffffffffffffffff16600003610b5b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f494400000000000000000060448201526064016103e3565b60008213610ba25760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b60448201526064016103e3565b610bae612a3042610f0f565b8111610bf15760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b60448201526064016103e3565b5092915050565b60008083601f840112610c0a57600080fd5b50813567ffffffffffffffff811115610c2257600080fd5b602083019150836020828501011115610c3a57600080fd5b9250929050565b60008060208385031215610c5457600080fd5b823567ffffffffffffffff811115610c6b57600080fd5b610c7785828601610bf8565b90969095509350505050565b600080600060408486031215610c9857600080fd5b833567ffffffffffffffff80821115610cb057600080fd5b9085019060608288031215610cc457600080fd5b90935060208501359080821115610cda57600080fd5b50610ce786828701610bf8565b9497909650939450505050565b6000808335601e19843603018112610d0b57600080fd5b83018035915067ffffffffffffffff821115610d2657600080fd5b602001915036819003821315610c3a57600080fd5b6001600160a01b0381168114610d5057600080fd5b50565b600060208284031215610d6557600080fd5b813561043a81610d3b565b634e487b7160e01b600052604160045260246000fd5b6000806000610140808587031215610d9d57600080fd5b84358015158114610dad57600080fd5b9350602085810135610dbe81610d3b565b9350605f86018713610dcf57600080fd5b604051610100810181811067ffffffffffffffff82111715610df357610df3610d70565b604052918601918088841115610e0857600080fd5b604088015b84811015610e245780358252908301908301610e0d565b50508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610e7957610e79610e49565b500290565b600082610e9b57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610eba57600080fd5b919050565b600080600080600060a08688031215610ed757600080fd5b610ee086610ea0565b9450602086015193506040860151925060608601519150610f0360808701610ea0565b90509295509295909350565b600082821015610f2157610f21610e49565b50039056fea2646970667358221220257f73e755dd98d0f04aa3a62a468e48c2c67816eeadaca4ae8f08cfd4f4d7eb64736f6c634300080e003300000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24
Deployed Bytecode
0x6080604052600436106101085760003560e01c80637ac3e6ea11610095578063c8a4271f11610064578063c8a4271f146102d2578063cb8dd1e914610306578063cd5d2c741461031c578063d820ed4214610332578063f1ebaa661461034857600080fd5b80637ac3e6ea14610234578063a05c261614610254578063a200e15314610288578063a3e295bc1461029e57600080fd5b8063316a7878116100dc578063316a7878146101965780633da6aaed146101ac57806342a0d9b4146101bf57806359b6b86c146101e157806366d003ac146101f757600080fd5b8062d48e461461010d5780630261d9421461014057806306534e0c146101565780632c0fd74c14610180575b600080fd5b34801561011957600080fd5b5061012d610128366004610c41565b61035c565b6040519081526020015b60405180910390f35b34801561014c57600080fd5b5061012d60075481565b34801561016257600080fd5b506001546101709060ff1681565b6040519015158152602001610137565b34801561018c57600080fd5b5061012d60025481565b3480156101a257600080fd5b5061012d60085481565b61012d6101ba366004610c83565b610379565b3480156101cb57600080fd5b506101df6101da366004610c41565b610441565b005b3480156101ed57600080fd5b5061012d60065481565b34801561020357600080fd5b5060015461021c9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610137565b34801561024057600080fd5b5061017061024f366004610c41565b61062a565b34801561026057600080fd5b5061021c7f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b2481565b34801561029457600080fd5b5061012d60045481565b3480156102aa57600080fd5b5061021c7f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d41281565b3480156102de57600080fd5b5061021c7f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c581565b34801561031257600080fd5b5061012d60095481565b34801561032857600080fd5b5061012d60035481565b34801561033e57600080fd5b5061012d60055481565b34801561035457600080fd5b506001610170565b600061037061036b8484610756565b6107de565b90505b92915050565b60007f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b031633146103ec5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b6103f4610804565b60006104066101286020870187610cf4565b905061042e8161041c6060880160408901610d53565b6104296020890189610d53565b61085d565b905061043a6001600055565b9392505050565b7f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b031633146104ad5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064016103e3565b600080806104bd84860186610d86565b600180546001600160a81b031916841515610100600160a81b03198116919091176101006001600160a01b038616021790915581516002556020808301516003556040808401516004556060840151600555608084015160065560a084015160075560c084015160085560e08401516009555191825293965091945092507f308ece3d6d07fc00169d460bea2cf86425f604ce98acfdc41bf1797b55588656910160405180910390a16040516001600160a01b03831681527fff2d07bd188a9eb41acbc4a7db39e18956c95ab7f54f434d97849bf6206e577c9060200160405180910390a1805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b519e8f529c8e019b909b52988c0197909752948a0193909352908801528601528401528201527f7489fa6294e4b179863f8681d89f7ebfb40d35cc39abb5243fef5798a5253021906101000160405180910390a15050505050565b60008083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050601490911190508061067a575060018151105b15610689576000915050610373565b805160005b8181101561074a5760008382815181106106aa576106aa610e33565b01602001516001600160f81b0319169050600360fc1b81108015906106dd5750603960f81b6001600160f81b0319821611155b8061070f5750606160f81b6001600160f81b031982161080159061070f5750603d60f91b6001600160f81b0319821611155b806107275750605f60f81b6001600160f81b03198216145b1561073757816001019150610744565b6000945050505050610373565b5061068e565b50600195945050505050565b60008181600c821061076b57506009546107d6565b6007821061077c57506008546107d6565b8160060361078d57506007546107d6565b8160050361079e57506006546107d6565b816004036107af57506005546107d6565b816003036107c057506004546107d6565b816002036107d157506003546107d6565b506002545b949350505050565b6000806107e9610a6f565b9050806107fa846305f5e100610e5f565b61043a9190610e7e565b6002600054036108565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103e3565b6002600055565b823410156108a25760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016103e3565b34838103908414610942576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b50509050806109405760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b60448201526064016103e3565b505b60015460ff16156109cf5760405163b760faf960e01b81526001600160a01b0384811660048301527f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412169063b760faf99086906024016000604051808303818588803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b5050505050610a69565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610a21576040519150601f19603f3d011682016040523d82523d6000602084013e610a26565b606091505b5050905080610a675760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b60448201526064016103e3565b505b50505050565b6000806000807f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c56001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190610ebf565b50935050925092508269ffffffffffffffffffff16600003610b5b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f494400000000000000000060448201526064016103e3565b60008213610ba25760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b60448201526064016103e3565b610bae612a3042610f0f565b8111610bf15760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b60448201526064016103e3565b5092915050565b60008083601f840112610c0a57600080fd5b50813567ffffffffffffffff811115610c2257600080fd5b602083019150836020828501011115610c3a57600080fd5b9250929050565b60008060208385031215610c5457600080fd5b823567ffffffffffffffff811115610c6b57600080fd5b610c7785828601610bf8565b90969095509350505050565b600080600060408486031215610c9857600080fd5b833567ffffffffffffffff80821115610cb057600080fd5b9085019060608288031215610cc457600080fd5b90935060208501359080821115610cda57600080fd5b50610ce786828701610bf8565b9497909650939450505050565b6000808335601e19843603018112610d0b57600080fd5b83018035915067ffffffffffffffff821115610d2657600080fd5b602001915036819003821315610c3a57600080fd5b6001600160a01b0381168114610d5057600080fd5b50565b600060208284031215610d6557600080fd5b813561043a81610d3b565b634e487b7160e01b600052604160045260246000fd5b6000806000610140808587031215610d9d57600080fd5b84358015158114610dad57600080fd5b9350602085810135610dbe81610d3b565b9350605f86018713610dcf57600080fd5b604051610100810181811067ffffffffffffffff82111715610df357610df3610d70565b604052918601918088841115610e0857600080fd5b604088015b84811015610e245780358252908301908301610e0d565b50508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610e7957610e79610e49565b500290565b600082610e9b57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610eba57600080fd5b919050565b600080600080600060a08688031215610ed757600080fd5b610ee086610ea0565b9450602086015193506040860151925060608601519150610f0360808701610ea0565b90509295509295909350565b600082821015610f2157610f21610e49565b50039056fea2646970667358221220257f73e755dd98d0f04aa3a62a468e48c2c67816eeadaca4ae8f08cfd4f4d7eb64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24
-----Decoded View---------------
Arg [0] : _oracleAddress (address): 0x13e3Ee699D1909E989722E753853AE30b17e08c5
Arg [1] : _tokenReceiver (address): 0xcd97405Fb58e94954E825E46dB192b916A45d412
Arg [2] : cyberId (address): 0xe55793f55dF1F1B5037ebA41881663583d4f9B24
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5
Arg [1] : 000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412
Arg [2] : 000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.