Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EchoAdministration
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
// ███████╗ ██████╗██╗ ██╗ ██████╗ ███╗ ███╗ █████╗ ██████╗ ██╗ ██╗███████╗████████╗
// ██╔════╝██╔════╝██║ ██║██╔═══██╗ ████╗ ████║██╔══██╗██╔══██╗██║ ██╔╝██╔════╝╚══██╔══╝
// █████╗ ██║ ███████║██║ ██║ ██╔████╔██║███████║██████╔╝█████╔╝ █████╗ ██║
// ██╔══╝ ██║ ██╔══██║██║ ██║ ██║╚██╔╝██║██╔══██║██╔══██╗██╔═██╗ ██╔══╝ ██║
// ███████╗╚██████╗██║ ██║╚██████╔╝ ██║ ╚═╝ ██║██║ ██║██║ ██║██║ ██╗███████╗ ██║
// ╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═╝
// ============================== EchoAdministration V2 ==============================
// =================================== Summer 2025 ===================================
import {ActionStatus, ActionAndKind, ModelData, IEchoAdministration} from "../interfaces/IEchoAdministration.sol";
/// @title Echo Administration contract
/// @author Dynabits.org
contract EchoAdministration is IEchoAdministration {
/********************************\
|-*-*-*-*-* STATES *-*-*-*-*-|
\********************************/
mapping(string => uint256) public totalKindMethods; // "X" => 6
mapping(bytes32 => string) public hashToActionKind; // 0xba...ab => "X: Like"
mapping(address => mapping(bytes32 => ModelData)) public modelData;
// e.g:
// address(0) => keccak("X: Like") => { fee: uint256, actionStatus: ActionStatus.KPI, socialKPIratio: uint256, oracle: address }
// address(1) => keccak("CONFIG: AuthorWallet") => { fee: uint256, actionStatus: ActionStatus.Config, socialKPIratio: uint256(0), oracle: address }
// address => keccak("QA-AI: Accuracy And Credibility") => { fee: uint256, actionStatus: ActionStatus.QA, socialKPIratio: 0, oracle: address(0) }
// address => keccak("QA-C: Accuracy And Credibility") => { fee: uint256, actionStatus: ActionStatus.QA, socialKPIratio: 0, oracle: address(0) }
// address => keccak("QA-V: Accuracy And Credibility") => { fee: uint256, actionStatus: ActionStatus.QA, socialKPIratio: 0, oracle: address(0) }
// @Deprecated
// uint24 public campaignFeeRate;
// @Deprecated
// uint72 public maxCampaignTime;
// @Deprecated
// address public protocolAdmin;
// @Deprecated
// mapping(address => bool) public whitelistedToken;
// @Deprecated
// mapping(address => bool) public disallowedOracle;
/*******************************\
|-*-*-*-* CONSTANTS *-*-*-*-|
\*******************************/
IEchoAdministration private constant ECHO_ADMIN_V1 =
IEchoAdministration(0x787FB122fC8a4B183e42e92DD48D1b52F707e031);
/********************************\
|-*-*-*-*-* EVENTS *-*-*-*-*-|
\********************************/
event ModelSettled(
ActionAndKind actionKind,
bytes32 hashedActionKind,
ModelData model
);
event ModelRemoved(
ActionAndKind actionKind,
bytes32 hashedActionKind,
ModelData model
);
// @Deprecated
// event ProtocolAdminChanged(
// address indexed lastImplementation,
// address indexed newImplementation
// );
// @Deprecated
// event maxCampaignTimeChanged(
// uint256 indexed lastMaxCampaignTime,
// uint256 indexed maxCampaignTime
// );
// @Deprecated
// event CampaignFeeRateChanged(
// uint256 indexed lastCampaignFeeRate,
// uint256 indexed CampaignFeeRate
// );
// @Deprecated
// event TokenWhitelisted(address indexed token);
// @Deprecated
// event TokenRemoved(address indexed token);
// @Deprecated
// event OracleFullAccessChanged(
// address indexed oracle,
// bool isFullAccessRestricted
// );
/********************************\
|-*-*-*-*-* ERRORS *-*-*-*-*-|
\********************************/
error CALL_ECHO_V1();
error ONLY_PROTOCOL_ADMIN();
error ZERO_ADDRESS_PROVIDED();
error EMPTY_ACTION_OR_KIND_PROVIDED();
error NA_ACTION_STATUS();
error NOT_RELATIVE_ACTION(string action, ActionStatus actionStatus);
error UNDEFINED_PROCESS();
error ZERO_FEE_PROVIDED(ActionStatus actionStatus);
error ZERO_SOCIAL_KPI_PROVIDED();
// @Deprecated
// error TOKEN_WHITELISTED_BEFORE();
// @Deprecated
// error TOKEN_DOESNT_EXIST();
// @Deprecated
// error FEE_RATE_MUST_BE_BETWEEN_0_TO_1E5(uint256 givenFee);
/*******************************\
|-*-*-*-* MODIFIERS *-*-*-*-|
\*******************************/
modifier onlyProtocolAdmin() {
if (msg.sender != protocolAdmin()) revert ONLY_PROTOCOL_ADMIN();
_;
}
/******************************\
|-*-*-*-* BUILT-IN *-*-*-*-|
\******************************/
constructor() {
totalKindMethods["QA-AI"] = 3;
totalKindMethods["X"] = 7;
totalKindMethods["CONFIG"] = 3;
address echoOracle = 0xEC051Bb8876E78bA6a24E03cb07FBe1259E44C47;
modelData[echoOracle][
keccak256(abi.encodePacked("QA-AI: Relevance And Alignment"))
] = ModelData(ActionStatus.QA, 0, 1, address(0));
modelData[echoOracle][
keccak256(abi.encodePacked("QA-AI: Accuracy And Credibility"))
] = ModelData(ActionStatus.QA, 0, 1, address(0));
modelData[echoOracle][
keccak256(abi.encodePacked("QA-AI: Reputation And Influence"))
] = ModelData(ActionStatus.QA, 0, 1, address(0));
modelData[address(0)][
keccak256(abi.encodePacked("X: Post"))
] = ModelData(ActionStatus.KPI, 100, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Reply"))
] = ModelData(ActionStatus.KPI, 50, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Quote"))
] = ModelData(ActionStatus.KPI, 20, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Retweet"))
] = ModelData(ActionStatus.KPI, 10, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Like"))
] = ModelData(ActionStatus.KPI, 5, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Bookmark"))
] = ModelData(ActionStatus.KPI, 5, 1, echoOracle);
modelData[address(0)][
keccak256(abi.encodePacked("X: Impression"))
] = ModelData(ActionStatus.KPI, 1, 1, echoOracle);
modelData[address(1)][
keccak256(abi.encodePacked("CONFIG: AuthorWallet"))
] = ModelData(ActionStatus.Config, 0, 0, echoOracle);
modelData[address(1)][
keccak256(abi.encodePacked("CONFIG: AuthorXID"))
] = ModelData(ActionStatus.Config, 0, 0, echoOracle);
modelData[address(1)][
keccak256(abi.encodePacked("CONFIG: Finalizer"))
] = ModelData(ActionStatus.Config, 0, 0, echoOracle);
}
/********************************\
|-*-*-* ADMINISTRATION *-*-*-|
\********************************/
/// @inheritdoc IEchoAdministration
function setModel(
ActionAndKind calldata actionAndKind,
ModelData calldata model
) external onlyProtocolAdmin {
// Ensure that neither action nor kind is empty
if (
bytes(actionAndKind.action).length == 0 ||
bytes(actionAndKind.kind).length == 0
) revert EMPTY_ACTION_OR_KIND_PROVIDED();
// Validate that the actionStatus is not NA (must be QA, KPI, or CONFIG)
if (model.actionStatus == ActionStatus.NA) revert NA_ACTION_STATUS();
// Generate a unique hash for the action and kind combination
bytes32 hashedActionKind = keccak256(
abi.encodePacked(actionAndKind.action, ": ", actionAndKind.kind)
);
bool increaseTotalKinds;
if (model.actionStatus == ActionStatus.QA) {
// Validate that the action is a recognized QA type
if (
keccak256(abi.encodePacked(actionAndKind.action)) !=
keccak256(abi.encodePacked("QA-AI")) &&
keccak256(abi.encodePacked(actionAndKind.action)) !=
keccak256(abi.encodePacked("QA-C")) &&
keccak256(abi.encodePacked(actionAndKind.action)) !=
keccak256(abi.encodePacked("QA-V"))
) revert NOT_RELATIVE_ACTION(actionAndKind.action, ActionStatus.QA);
// Ensure a valid oracle fee: either both fee and oracle must be set, or neither
if (model.fee != 0 && model.oracle == address(0))
revert UNDEFINED_PROCESS();
if (model.fee == 0 && model.oracle != address(0))
revert ZERO_FEE_PROVIDED(ActionStatus.QA);
// Update fee for the QA oracle or remove the QA access if fee is zero
if (model.fee != 0) {
if (modelData[model.oracle][hashedActionKind].fee == 0)
increaseTotalKinds = true;
// Assign the provided actionStatus to the corresponding model data
modelData[model.oracle][hashedActionKind].actionStatus = model
.actionStatus;
modelData[model.oracle][hashedActionKind].fee = model.fee;
} else delete modelData[model.oracle][hashedActionKind];
} else if (model.actionStatus == ActionStatus.KPI) {
// If fee is zero, remove the KPI mapping; otherwise, update the KPI model
if (model.fee == 0) {
delete modelData[address(0)][hashedActionKind];
} else {
// Ensure that social KPI ratio and fee are valid (non-zero)
if (model.socialKPIratio == 0)
revert ZERO_SOCIAL_KPI_PROVIDED();
_revertZeroAddress(model.oracle);
if (modelData[address(0)][hashedActionKind].fee == 0)
increaseTotalKinds = true;
modelData[address(0)][hashedActionKind] = model;
}
} else {
// Validate that the action corresponds to CONFIG
if (
keccak256(abi.encodePacked(actionAndKind.action)) !=
keccak256(abi.encodePacked("CONFIG"))
)
revert NOT_RELATIVE_ACTION(
actionAndKind.action,
ActionStatus.Config
);
// If fee is zero, remove the CONFIG mapping; otherwise, update the oracle
if (model.fee == 0) delete modelData[address(1)][hashedActionKind];
else {
if (
modelData[address(1)][hashedActionKind].oracle == address(0)
) increaseTotalKinds = true;
modelData[address(1)][hashedActionKind].actionStatus = model
.actionStatus;
modelData[address(1)][hashedActionKind].oracle = model.oracle;
}
}
// Emit appropriate events based on whether fee is provided
if (model.fee != 0) {
if (increaseTotalKinds) totalKindMethods[actionAndKind.action]++;
hashToActionKind[hashedActionKind] = string.concat(
actionAndKind.action,
": ",
actionAndKind.kind
);
emit ModelSettled(actionAndKind, hashedActionKind, model);
} else {
if (bytes(hashToActionKind[hashedActionKind]).length != 0) {
totalKindMethods[actionAndKind.action]--;
delete hashToActionKind[hashedActionKind];
emit ModelRemoved(actionAndKind, hashedActionKind, model);
}
}
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function changeProtocolAdmin(address newProtocolAdmin)
external
view
onlyProtocolAdmin
{
newProtocolAdmin;
revert CALL_ECHO_V1();
// _revertZeroAddress(newProtocolAdmin);
// emit ProtocolAdminChanged(protocolAdmin, newProtocolAdmin);
// protocolAdmin = newProtocolAdmin;
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function changeCampaignFeeRate(uint24 newCampaignFeeRate)
external
view
onlyProtocolAdmin
{
newCampaignFeeRate;
revert CALL_ECHO_V1();
// if (newCampaignFeeRate == 0 || newCampaignFeeRate >= 1e5)
// revert FEE_RATE_MUST_BE_BETWEEN_0_TO_1E5(newCampaignFeeRate);
// emit CampaignFeeRateChanged(campaignFeeRate, newCampaignFeeRate);
// campaignFeeRate = newCampaignFeeRate;
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function setMaxCampaignTime(uint72 newMaxCampaignTime)
external
view
onlyProtocolAdmin
{
newMaxCampaignTime;
revert CALL_ECHO_V1();
// emit maxCampaignTimeChanged(maxCampaignTime, newMaxCampaignTime);
// if (newMaxCampaignTime == 0) delete maxCampaignTime;
// maxCampaignTime = newMaxCampaignTime;
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function whitelistToken(address token) external view onlyProtocolAdmin {
token;
revert CALL_ECHO_V1();
// _revertZeroAddress(token);
// if (whitelistedToken[token]) revert TOKEN_WHITELISTED_BEFORE();
// whitelistedToken[token] = true;
// emit TokenWhitelisted(token);
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function removeWhitelistedToken(address token)
external
view
onlyProtocolAdmin
{
token;
revert CALL_ECHO_V1();
// _revertZeroAddress(token);
// if (!whitelistedToken[token]) revert TOKEN_DOESNT_EXIST();
// delete whitelistedToken[token];
// emit TokenRemoved(token);
}
// @Deprecated
/// @inheritdoc IEchoAdministration
function toggleOracleFullAccess(address oracle)
external
view
onlyProtocolAdmin
{
oracle;
revert CALL_ECHO_V1();
// _revertZeroAddress(oracle);
// disallowedOracle[oracle] = !disallowedOracle[oracle];
// emit OracleFullAccessChanged(oracle, disallowedOracle[oracle]);
}
/*****************************\
|-*-*-*-* GETTERS *-*-*-*-|
\*****************************/
/// @inheritdoc IEchoAdministration
function campaignFeeRate() external view returns (uint24) {
return ECHO_ADMIN_V1.campaignFeeRate();
}
/// @inheritdoc IEchoAdministration
function maxCampaignTime() external view returns (uint72) {
return ECHO_ADMIN_V1.maxCampaignTime();
}
/// @inheritdoc IEchoAdministration
function whitelistedToken(address token) external view returns (bool) {
return ECHO_ADMIN_V1.whitelistedToken(token);
}
/// @inheritdoc IEchoAdministration
function disallowedOracle(address oracle) external view returns (bool) {
return ECHO_ADMIN_V1.disallowedOracle(oracle);
}
/// @inheritdoc IEchoAdministration
function allowedActionKind(
address oracle,
bytes32[] calldata hashedActionsKind
) external view returns (bool) {
uint256 length = hashedActionsKind.length;
ActionStatus actionStatus;
/*
* Determine the expected ActionStatus based on the provided oracle address:
* - If oracle is address(0), check KPI access.
* - If oracle is address(1), check CONFIG access.
* - Otherwise, check QA access for the given oracle.
*/
if (oracle == address(0)) actionStatus = ActionStatus.KPI;
else if (oracle == address(1)) actionStatus = ActionStatus.Config;
else actionStatus = ActionStatus.QA;
/*
* Iterate through the provided hashed action-kind values:
* - If any action-kind entry does not match the expected ActionStatus, return false.
* - Otherwise, continue checking.
*/
for (uint256 i; i < length; ) {
if (
modelData[oracle][hashedActionsKind[i]].actionStatus !=
actionStatus
) return false;
unchecked {
i++;
}
}
// If all hashedActionsKind entries match the expected ActionStatus, return true
return true;
}
function protocolAdmin() public view returns (address) {
return ECHO_ADMIN_V1.protocolAdmin();
}
/*****************************\
|-*-*-*-* PRIVATE *-*-*-*-|
\*****************************/
function _revertZeroAddress(address addr) private pure {
if (addr == address(0)) revert ZERO_ADDRESS_PROVIDED();
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
/***************************\
|*-*-*-* TYPES *-*-*-*|
\***************************/
enum ActionStatus {
NA,
Config,
QA,
KPI
}
struct ActionAndKind {
ActionStatus actionStatus;
string action;
string kind;
}
struct ModelData {
ActionStatus actionStatus;
uint8 socialKPIratio;
uint248 fee;
address oracle;
}
/// @title Echo Administration Interface
/// @notice Defines administrative functions for managing campaign settings, token whitelisting, and oracle permissions.
/// @author Dynabits.org
interface IEchoAdministration {
/*******************************\
|*-*-*-* EXTERNALS *-*-*-*-*|
\*******************************/
/// @notice Transfers protocol admin rights to a new address.
/// @dev Only the current protocol admin can call this function. The new admin address cannot be the zero address.
/// @param newProtocolAdmin The address of the new protocol admin.
function changeProtocolAdmin(address newProtocolAdmin) external;
/// @notice Sets the campaign fee rate as a percentage of the allocated token at creation.
/// @dev The value must be between 0 and 1e5.
/// @param newCampaignFeeRate The new campaign creation fee rate.
function changeCampaignFeeRate(uint24 newCampaignFeeRate) external;
/// @notice Sets the maximum campaign duration.
/// @dev A value of zero means there is no maximum campaign duration.
/// @param newMaxCampaignTime The maximum campaign duration in seconds.
function setMaxCampaignTime(uint72 newMaxCampaignTime) external;
/// @notice Whitelists a new ERC20 token for use in campaigns.
/// @dev A token cannot be whitelisted more than once. The whitelist status is checked during campaign creation.
/// @param token The ERC20 token address.
function whitelistToken(address token) external;
/// @notice Removes an ERC20 token from the whitelist, preventing its selection as a campaign budget token.
/// @param token The ERC20 token address.
function removeWhitelistedToken(address token) external;
/// @notice Toggles full access permissions for an oracle.
/// @dev This function can be used to temporarily or permanently disable an oracle’s access to campaign-related functionalities.
/// @param oracle The address of the oracle.
function toggleOracleFullAccess(address oracle) external;
/**
* @notice Sets or updates the model data for a given action and kind.
* @dev Configures an action-kind mapping with an associated oracle, fee, and status.
* @param actionAndKind The struct containing the action and kind identifiers.
* @param model The struct containing model details such as the oracle, fee, status, and social KPI ratio.
*
* Requirements:
* - `actionAndKind.action` and `actionAndKind.kind` must not be empty.
* - `model.actionStatus` must be one of `QA`, `KPI`, or `CONFIG`.
* - Actions must match their respective `actionStatus`:
* - `QA` actions: `QA-AI`, `QA-C`, `QA-V`
* - `KPI` actions: `KPI`
* - `CONFIG` actions: `CONFIG`
* - QA oracles must have a nonzero fee.
* - KPI oracles must have both a nonzero fee and a nonzero social KPI ratio.
* - CONFIG actions always have a zero fee.
*
* Effects:
* - Adds or updates an action-kind mapping.
* - Removes model data if `model.oracle` is zero.
*
* Emits:
* - `ModelSettled` if a model is set or updated.
* - `ModelRemoved` if a model is removed.
*
* Reverts:
* - `EMPTY_ACTION_OR_KIND_PROVIDED` if either action or kind is empty.
* - `NA_ACTION_STATUS` if the provided action status is `NA`.
* - `NOT_RELATIVE_ACTION` if the action does not match its required type.
* - `UNDEFINED_PROCESS` if a QA oracle has a fee but no valid address.
* - `ZERO_FEE_PROVIDED` if a required fee is zero.
* - `ZERO_SOCIAL_KPI_PROVIDED` if a required social KPI ratio is zero.
*/
function setModel(
ActionAndKind calldata actionAndKind,
ModelData calldata model
) external;
/*****************************\
|-*-*-*-* GETTERS *-*-*-*-|
\*****************************/
/// @notice Returns the campaign creation fee rate as a percentage.
/// @dev This value is deducted from the allocated budget immediately upon campaign creation.
/// @return The campaign creation fee rate.
function campaignFeeRate() external view returns (uint24);
/// @notice Returns the maximum allowed duration for campaigns.
/// @dev A campaign’s duration (end time - start time) must be less than or equal to this value at creation.
/// @return The maximum campaign duration in seconds.
function maxCampaignTime() external view returns (uint72);
/// @notice Returns the protocol admin address.
/// @dev The protocol admin has full access to infrastructural modifications.
/// @return The address of the protocol admin.
function protocolAdmin() external view returns (address);
/// @notice Checks if a given ERC20 token is whitelisted for campaign use.
/// @param token The ERC20 token address.
/// @return A boolean indicating whether the token is whitelisted.
function whitelistedToken(address token) external view returns (bool);
/**
* @notice Checks if an oracle has been banned.
* @dev A banned oracle loses all permissions to interact with EchoContents and campaign contracts.
* @param oracle The address of the oracle.
* @return A boolean indicating whether the oracle is banned.
*/
function disallowedOracle(address oracle) external view returns (bool);
/**
* @notice Returns the number of available methods and parameters for a given action.
* @dev Examples:
* - KPI actions (e.g., `X`) can have parameters like `Like` and `Retweet`.
* - Qualification actions (`QA-V`) can have parameters like `Accuracy` and `Originality`.
* @param action The action type, such as `X`, `QA-V`, or `Config`.
* @return The number of available methods for the action.
*/
function totalKindMethods(string calldata action)
external
view
returns (uint256);
/**
* @notice Retrieves the original action and kind from a given hashed identifier.
* @dev Useful for reducing gas costs and simplifying comparisons.
* @param hashedActionKind The hash of the concatenated action and kind.
* @return The decoded action and kind as a string.
*/
function hashToActionKind(bytes32 hashedActionKind)
external
view
returns (string memory);
/**
* @notice Returns model data associated with an oracle and a hashed action-kind.
* @param oracle_ The address of the oracle.
* @param hashedActionKind The hashed action-kind identifier.
* @return actionStatus The action status of the model.
* @return socialKPIratio The social KPI ratio.
* @return fee The associated fee for the action.
* @return oracle The address of the oracle managing the action.
*/
function modelData(address oracle_, bytes32 hashedActionKind)
external
view
returns (
ActionStatus actionStatus,
uint8 socialKPIratio,
uint248 fee,
address oracle
);
/**
* @notice Checks if an oracle has the required permissions for given action-kind hashes.
* @dev Access is determined based on the oracle's address:
* - `address(0)`: Checks if the hashed action-kind exists for KPI.
* - `address(1)`: Checks if the hashed action-kind exists for CONFIG.
* - Any other address: Checks if the oracle has QA access.
* @param oracle The oracle’s address.
* @param hashedActionsKind An array of hashed action-kind values to verify.
* @return A boolean indicating whether the oracle is authorized.
*/
function allowedActionKind(
address oracle,
bytes32[] calldata hashedActionsKind
) external view returns (bool);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"forge-std/=lib/forge-std/src/",
"@prb/math/=lib/prb-math/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/"
]
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CALL_ECHO_V1","type":"error"},{"inputs":[],"name":"EMPTY_ACTION_OR_KIND_PROVIDED","type":"error"},{"inputs":[],"name":"NA_ACTION_STATUS","type":"error"},{"inputs":[{"internalType":"string","name":"action","type":"string"},{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"}],"name":"NOT_RELATIVE_ACTION","type":"error"},{"inputs":[],"name":"ONLY_PROTOCOL_ADMIN","type":"error"},{"inputs":[],"name":"UNDEFINED_PROCESS","type":"error"},{"inputs":[],"name":"ZERO_ADDRESS_PROVIDED","type":"error"},{"inputs":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"}],"name":"ZERO_FEE_PROVIDED","type":"error"},{"inputs":[],"name":"ZERO_SOCIAL_KPI_PROVIDED","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"kind","type":"string"}],"indexed":false,"internalType":"struct ActionAndKind","name":"actionKind","type":"tuple"},{"indexed":false,"internalType":"bytes32","name":"hashedActionKind","type":"bytes32"},{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"uint8","name":"socialKPIratio","type":"uint8"},{"internalType":"uint248","name":"fee","type":"uint248"},{"internalType":"address","name":"oracle","type":"address"}],"indexed":false,"internalType":"struct ModelData","name":"model","type":"tuple"}],"name":"ModelRemoved","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"kind","type":"string"}],"indexed":false,"internalType":"struct ActionAndKind","name":"actionKind","type":"tuple"},{"indexed":false,"internalType":"bytes32","name":"hashedActionKind","type":"bytes32"},{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"uint8","name":"socialKPIratio","type":"uint8"},{"internalType":"uint248","name":"fee","type":"uint248"},{"internalType":"address","name":"oracle","type":"address"}],"indexed":false,"internalType":"struct ModelData","name":"model","type":"tuple"}],"name":"ModelSettled","type":"event"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"bytes32[]","name":"hashedActionsKind","type":"bytes32[]"}],"name":"allowedActionKind","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"campaignFeeRate","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"newCampaignFeeRate","type":"uint24"}],"name":"changeCampaignFeeRate","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newProtocolAdmin","type":"address"}],"name":"changeProtocolAdmin","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"disallowedOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToActionKind","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCampaignTime","outputs":[{"internalType":"uint72","name":"","type":"uint72"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"modelData","outputs":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"uint8","name":"socialKPIratio","type":"uint8"},{"internalType":"uint248","name":"fee","type":"uint248"},{"internalType":"address","name":"oracle","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeWhitelistedToken","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"newMaxCampaignTime","type":"uint72"}],"name":"setMaxCampaignTime","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"kind","type":"string"}],"internalType":"struct ActionAndKind","name":"actionAndKind","type":"tuple"},{"components":[{"internalType":"enum ActionStatus","name":"actionStatus","type":"uint8"},{"internalType":"uint8","name":"socialKPIratio","type":"uint8"},{"internalType":"uint248","name":"fee","type":"uint248"},{"internalType":"address","name":"oracle","type":"address"}],"internalType":"struct ModelData","name":"model","type":"tuple"}],"name":"setModel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"toggleOracleFullAccess","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"totalKindMethods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"whitelistToken","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"whitelistedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b5060035f60405161002b906451412d414960d81b815260050190565b90815260408051918290036020908101832093909355600b60fb1b82525f600180840182905282519384900360210184206007905565434f4e46494760d01b845260068401829052825193849003602601842060039081905560808501845260028086528587018490528585018390526060860184905273ec051bb8876e78ba6a24e03cb07fbe1259e44c4780855290875284517f51412d41493a2052656c6576616e636520416e6420416c69676e6d656e740000818901528551808203601e018152603e909101865280519088012084527fa9b6589dd0d1f34b744b892d1e4bba34aceb459014487f5f11469ce7fa63b82b909652929091208351815491939092849260ff191691849081111561014557610145610df3565b02179055506020820151815461ff00191661010060ff909216919091021781556040808301516001830180546001600160f81b0319166001600160f81b03909216919091179055606090920151600291820180546001600160a01b0319166001600160a01b03909216919091179055815160808101909252819081525f6020808301829052600160408085019190915260609093018290526001600160a01b038516825260028152828220925161022091017f51412d41493a20416363757261637920416e6420437265646962696c697479008152601f0190565b60408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff1916600183600381111561026257610262610df3565b02179055506020820151815461ff00191661010060ff909216919091021781556040808301516001830180546001600160f81b0319166001600160f81b03909216919091179055606090920151600291820180546001600160a01b0319166001600160a01b03909216919091179055815160808101909252819081525f6020808301829052600160408085019190915260609093018290526001600160a01b038516825260028152828220925161033d91017f51412d41493a2052657075746174696f6e20416e6420496e666c75656e6365008152601f0190565b60408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff1916600183600381111561037f5761037f610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252606482870152818501849052918816968101969096525f808052948452825166160e88141bdcdd60ca1b81860152835180820360070181526027909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff19169190849081111561047657610476610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252603282870152818501849052918816968101969096525f808052948452825167583a205265706c7960c01b81860152835180820360080181526028909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff19169190849081111561056e5761056e610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252601482870152818501849052918816968101969096525f808052948452825167583a2051756f746560c01b81860152835180820360080181526028909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff19169190849081111561066657610666610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b03928316179055825160808101845260038152600a81860152808401929092528616948101949094525f8080529282525169160e8814995d1dd9595d60b21b918101919091525f5160206127bc5f395f51905f529190602a0160408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff1916600183600381111561076957610769610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252600582870152818501849052918816968101969096525f808052948452825166583a204c696b6560c81b81860152835180820360070181526027909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff19169190849081111561086057610860610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252600582870152818501849052918816968101969096525f80805294845282516a583a20426f6f6b6d61726b60a81b818601528351808203600b018152602b909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff19169190849081111561095b5761095b610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184526003808252818601849052818501849052918816968101969096525f80805294845282516c2c1d1024b6b83932b9b9b4b7b760991b818601528351808203600d018152602d909101845280519085012085525f5160206127bc5f395f51905f5290935292208351815491939092849260ff191691908490811115610a5857610a58610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184528281525f81860181905281850181905291881696810196909652908152928252517f434f4e4649473a20417574686f7257616c6c6574000000000000000000000000918101919091525f5160206127dc5f395f51905f52919060340160408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff19166001836003811115610b6d57610b6d610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184528281525f81860181905281850181905291881696810196909652908152928252517010d3d3919251ce88105d5d1a1bdc961251607a1b918101919091525f5160206127dc5f395f51905f52919060310160408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff19166001836003811115610c7657610c76610df3565b0217905550602082810151825461ff00191661010060ff90921691909102178255604080840151600180850180546001600160f81b0319166001600160f81b0390931692909217909155606094850151600294850180546001600160a01b0319166001600160a01b0392831617905582516080810184528281525f81860181905281850181905291881696810196909652908152928252517021a7a72324a39d102334b730b634bd32b960791b918101919091525f5160206127dc5f395f51905f52919060310160408051601f198184030181529181528151602092830120835290820192909252015f2081518154829060ff19166001836003811115610d7f57610d7f610df3565b02179055506020820151815461ff00191661010060ff9092169190910217815560408201516001820180546001600160f81b0319166001600160f81b03909216919091179055606090910151600290910180546001600160a01b0319166001600160a01b0390921691909117905550610e07565b634e487b7160e01b5f52602160045260245ffd5b6119a880610e145f395ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c8063911cf01411610093578063bec4d54e11610063578063bec4d54e14610244578063e2cc5f3c14610266578063e6e2be1614610279578063f33bd5be1461028c575f5ffd5b8063911cf01414610194578063aa79b741146100ff578063b6001e24146101cc578063b82f038e14610231575f5ffd5b8063531280c1116100ce578063531280c11461015c5780636247f6f2146100ff5780636c8709ab1461016a5780638ddc321f14610178575f5ffd5b80631c88705d146100ff5780632ac1326b14610114578063420f68611461013c57806344c43a7d146100ff575b5f5ffd5b61011261010d3660046110e2565b6102ac565b005b6101276101223660046110e2565b6102fe565b60405190151581526020015b60405180910390f35b610144610381565b6040516001600160a01b039091168152602001610133565b61011261010d36600461110d565b61011261010d36600461113e565b6101806103fb565b60405162ffffff9091168152602001610133565b6101be6101a236600461116d565b80516020818301810180515f8252928201919093012091525481565b604051908152602001610133565b6102216101da366004611220565b600260208181525f9384526040808520909152918352912080546001820154919092015460ff80841693610100900416916001600160f81b0316906001600160a01b031684565b604051610133949392919061127e565b61011261023f3660046112bc565b610470565b61024c610e3c565b60405168ffffffffffffffffff9091168152602001610133565b6101276102743660046110e2565b610eb1565b610127610287366004611316565b610ef3565b61029f61029a366004611399565b610fc3565b60405161013391906113b0565b6102b4610381565b6001600160a01b0316336001600160a01b0316146102e5576040516315cead3960e31b815260040160405180910390fd5b604051632ba079f560e01b815260040160405180910390fd5b604051632ac1326b60e01b81526001600160a01b03821660048201525f9073787fb122fc8a4b183e42e92dd48d1b52f707e03190632ac1326b906024015b602060405180830381865afa158015610357573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037b91906113e5565b92915050565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b031663420f68616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f69190611404565b905090565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b0316638ddc321f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561044c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f6919061141f565b610478610381565b6001600160a01b0316336001600160a01b0316146104a9576040516315cead3960e31b815260040160405180910390fd5b6104b6602083018361143a565b159050806104d057506104cc604083018361143a565b1590505b156104ee57604051630a8bf2b760e11b815260040160405180910390fd5b5f6104fc6020830183611490565b600381111561050d5761050d61124a565b0361052b57604051631e719f3360e01b815260040160405180910390fd5b5f610539602084018461143a565b610546604086018661143a565b60405160200161055994939291906114ab565b60408051601f19818403018152919052805160209091012090505f60026105836020850185611490565b60038111156105945761059461124a565b0361096c576040516451412d414960d81b6020820152602501604051602081830303815290604052805190602001208480602001906105d3919061143a565b6040516020016105e49291906114d5565b604051602081830303815290604052805190602001201415801561066657506040516351412d4360e01b60208201526024016040516020818303038152906040528051906020012084806020019061063c919061143a565b60405160200161064d9291906114d5565b6040516020818303038152906040528051906020012014155b80156106d057506040516328a096ab60e11b6020820152602401604051602081830303815290604052805190602001208480602001906106a6919061143a565b6040516020016106b79291906114d5565b6040516020818303038152906040528051906020012014155b15610709576106e2602085018561143a565b600260405163222a151760e11b81526004016107009392919061150c565b60405180910390fd5b610719606084016040850161154a565b6001600160f81b03161580159061074757505f61073c60808501606086016110e2565b6001600160a01b0316145b1561076557604051630e84ae9360e21b815260040160405180910390fd5b610775606084016040850161154a565b6001600160f81b03161580156107a357505f61079760808501606086016110e2565b6001600160a01b031614155b156107c457600260405163d5ff172960e01b81526004016107009190611565565b6107d4606084016040850161154a565b6001600160f81b0316156109035760025f6107f560808601606087016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208582529092528120600101546001600160f81b03169003610831575060015b61083e6020840184611490565b60025f61085160808701606088016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff191660018360038111156108905761089061124a565b02179055506108a5606084016040850161154a565b60025f6108b860808701606088016110e2565b6001600160a01b0316815260208082019290925260409081015f908120868252909252902060010180546001600160f81b0319166001600160f81b0392909216919091179055610c93565b60025f61091660808601606087016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208582529092529020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b600361097b6020850185611490565b600381111561098c5761098c61124a565b03610ada576109a1606084016040850161154a565b6001600160f81b03165f03610a0d575f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b60205260409020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b610a1d6040840160208501611581565b60ff165f03610a3f57604051636ab3f8d560e11b815260040160405180910390fd5b610a57610a5260808501606086016110e2565b61105a565b5f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b60205260408120600101546001600160f81b03169003610a9a575060015b5f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b602052604090208390610ad282826115b4565b905050610c93565b60405165434f4e46494760d01b602082015260260160405160208183030381529060405280519060200120848060200190610b15919061143a565b604051602001610b269291906114d5565b6040516020818303038152906040528051906020012014610b6c57610b4e602085018561143a565b600160405163222a151760e11b81526004016107009392919061150c565b610b7c606084016040850161154a565b6001600160f81b03165f03610bd5575f8281525f5160206119535f395f51905f5260205260409020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b5f8281525f5160206119535f395f51905f5260205260409020600201546001600160a01b0316610c03575060015b610c106020840184611490565b5f8381525f5160206119535f395f51905f5260205260409020805460ff19166001836003811115610c4357610c4361124a565b0217905550610c5860808401606085016110e2565b5f8381525f5160206119535f395f51905f526020526040902060020180546001600160a01b0319166001600160a01b03929092169190911790555b610ca3606084016040850161154a565b6001600160f81b031615610d88578015610cf5575f610cc5602086018661143a565b604051610cd39291906114d5565b9081526040519081900360200190208054905f610cef8361168e565b91905055505b610d02602085018561143a565b610d0f604087018761143a565b604051602001610d2294939291906114ab565b60408051601f198184030181529181525f84815260016020522090610d47908261172a565b507f308f9f55d3eeef9e8267285607d3dde765f53e18a5cdd7ed77e21e5633a6791b848385604051610d7b93929190611827565b60405180910390a1610e36565b5f8281526001602052604090208054610da0906116a6565b159050610e36575f610db5602086018661143a565b604051610dc39291906114d5565b9081526040519081900360200190208054905f610ddf8361190e565b90915550505f828152600160205260408120610dfa91611084565b7f454f1484777e93d9fd2ad4a7fd63f5fa7a9edd73f994a2be242a7fae02c121c1848385604051610e2d93929190611827565b60405180910390a15b50505050565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b031663bec4d54e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f69190611923565b6040516338b317cf60e21b81526001600160a01b03821660048201525f9073787fb122fc8a4b183e42e92dd48d1b52f707e0319063e2cc5f3c9060240161033c565b5f81816001600160a01b038616610f0c57506003610f29565b5f196001600160a01b03871601610f2557506001610f29565b5060025b5f5b82811015610fb457816003811115610f4557610f4561124a565b6001600160a01b0388165f90815260026020526040812090888885818110610f6f57610f6f61193e565b602090810292909201358352508101919091526040015f205460ff166003811115610f9c57610f9c61124a565b14610fac575f9350505050610fbc565b600101610f2b565b506001925050505b9392505050565b60016020525f908152604090208054610fdb906116a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611007906116a6565b80156110525780601f1061102957610100808354040283529160200191611052565b820191905f5260205f20905b81548152906001019060200180831161103557829003601f168201915b505050505081565b6001600160a01b0381166110815760405163140efc4d60e21b815260040160405180910390fd5b50565b508054611090906116a6565b5f825580601f1061109f575050565b601f0160209004905f5260205f209081019061108191905b808211156110ca575f81556001016110b7565b5090565b6001600160a01b0381168114611081575f5ffd5b5f602082840312156110f2575f5ffd5b8135610fbc816110ce565b62ffffff81168114611081575f5ffd5b5f6020828403121561111d575f5ffd5b8135610fbc816110fd565b68ffffffffffffffffff81168114611081575f5ffd5b5f6020828403121561114e575f5ffd5b8135610fbc81611128565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561117d575f5ffd5b813567ffffffffffffffff811115611193575f5ffd5b8201601f810184136111a3575f5ffd5b803567ffffffffffffffff8111156111bd576111bd611159565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111ec576111ec611159565b604052818152828201602001861015611203575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f60408385031215611231575f5ffd5b823561123c816110ce565b946020939093013593505050565b634e487b7160e01b5f52602160045260245ffd5b6004811061127a57634e487b7160e01b5f52602160045260245ffd5b9052565b6080810161128c828761125e565b60ff9490941660208201526001600160f81b039290921660408301526001600160a01b0316606090910152919050565b5f5f82840360a08112156112ce575f5ffd5b833567ffffffffffffffff8111156112e4575f5ffd5b8401606081870312156112f5575f5ffd5b92506080601f1982011215611308575f5ffd5b506020830190509250929050565b5f5f5f60408486031215611328575f5ffd5b8335611333816110ce565b9250602084013567ffffffffffffffff81111561134e575f5ffd5b8401601f8101861361135e575f5ffd5b803567ffffffffffffffff811115611374575f5ffd5b8660208260051b8401011115611388575f5ffd5b939660209190910195509293505050565b5f602082840312156113a9575f5ffd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156113f5575f5ffd5b81518015158114610fbc575f5ffd5b5f60208284031215611414575f5ffd5b8151610fbc816110ce565b5f6020828403121561142f575f5ffd5b8151610fbc816110fd565b5f5f8335601e1984360301811261144f575f5ffd5b83018035915067ffffffffffffffff821115611469575f5ffd5b60200191503681900382131561147d575f5ffd5b9250929050565b60048110611081575f5ffd5b5f602082840312156114a0575f5ffd5b8135610fbc81611484565b838582375f8482016101d160f51b8152838560028301375f93016002019283525090949350505050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61151f6040830185876114e4565b905061152e602083018461125e565b949350505050565b6001600160f81b0381168114611081575f5ffd5b5f6020828403121561155a575f5ffd5b8135610fbc81611536565b6020810161037b828461125e565b60ff81168114611081575f5ffd5b5f60208284031215611591575f5ffd5b8135610fbc81611573565b5f813561037b81611536565b5f813561037b816110ce565b81356115bf81611484565b600481106115db57634e487b7160e01b5f52602160045260245ffd5b815460ff821691508160ff19821617835560208401356115fa81611573565b61ff008160081b168361ffff1984161717845550505061164361161f6040840161159c565b6001830180546001600160f81b0319166001600160f81b0392909216919091179055565b611676611652606084016115a8565b6002830180546001600160a01b0319166001600160a01b0392909216919091179055565b5050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161169f5761169f61167a565b5060010190565b600181811c908216806116ba57607f821691505b6020821081036116d857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561172557805f5260205f20601f840160051c810160208510156117035750805b601f840160051c820191505b81811015611722575f815560010161170f565b50505b505050565b815167ffffffffffffffff81111561174457611744611159565b6117588161175284546116a6565b846116de565b6020601f82116001811461178a575f83156117735750848201515b5f19600385901b1c1916600184901b178455611722565b5f84815260208120601f198516915b828110156117b95787850151825560209485019460019092019101611799565b50848210156117d657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f8335601e198436030181126117fa575f5ffd5b830160208101925035905067ffffffffffffffff811115611819575f5ffd5b80360382131561147d575f5ffd5b60c081525f843561183781611484565b61184460c084018261125e565b5061185260208601866117e5565b606060e0850152611868610120850182846114e4565b91505061187860408701876117e5565b84830360bf19016101008601526118908382846114e4565b935050505083602083015282356118a681611484565b6118b3604084018261125e565b5060208301356118c281611573565b60ff16606083015260408301356118d881611536565b6001600160f81b0316608083015260608301356118f4816110ce565b6001600160a01b031660a092909201919091529392505050565b5f8161191c5761191c61167a565b505f190190565b5f60208284031215611933575f5ffd5b8151610fbc81611128565b634e487b7160e01b5f52603260045260245ffdfee90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0a26469706673582212207982f9666a07d64a98af7639c08d56957cc17e0ac70ba3c3347ba08df645c96d64736f6c634300081e0033ac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077be90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c8063911cf01411610093578063bec4d54e11610063578063bec4d54e14610244578063e2cc5f3c14610266578063e6e2be1614610279578063f33bd5be1461028c575f5ffd5b8063911cf01414610194578063aa79b741146100ff578063b6001e24146101cc578063b82f038e14610231575f5ffd5b8063531280c1116100ce578063531280c11461015c5780636247f6f2146100ff5780636c8709ab1461016a5780638ddc321f14610178575f5ffd5b80631c88705d146100ff5780632ac1326b14610114578063420f68611461013c57806344c43a7d146100ff575b5f5ffd5b61011261010d3660046110e2565b6102ac565b005b6101276101223660046110e2565b6102fe565b60405190151581526020015b60405180910390f35b610144610381565b6040516001600160a01b039091168152602001610133565b61011261010d36600461110d565b61011261010d36600461113e565b6101806103fb565b60405162ffffff9091168152602001610133565b6101be6101a236600461116d565b80516020818301810180515f8252928201919093012091525481565b604051908152602001610133565b6102216101da366004611220565b600260208181525f9384526040808520909152918352912080546001820154919092015460ff80841693610100900416916001600160f81b0316906001600160a01b031684565b604051610133949392919061127e565b61011261023f3660046112bc565b610470565b61024c610e3c565b60405168ffffffffffffffffff9091168152602001610133565b6101276102743660046110e2565b610eb1565b610127610287366004611316565b610ef3565b61029f61029a366004611399565b610fc3565b60405161013391906113b0565b6102b4610381565b6001600160a01b0316336001600160a01b0316146102e5576040516315cead3960e31b815260040160405180910390fd5b604051632ba079f560e01b815260040160405180910390fd5b604051632ac1326b60e01b81526001600160a01b03821660048201525f9073787fb122fc8a4b183e42e92dd48d1b52f707e03190632ac1326b906024015b602060405180830381865afa158015610357573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037b91906113e5565b92915050565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b031663420f68616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f69190611404565b905090565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b0316638ddc321f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561044c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f6919061141f565b610478610381565b6001600160a01b0316336001600160a01b0316146104a9576040516315cead3960e31b815260040160405180910390fd5b6104b6602083018361143a565b159050806104d057506104cc604083018361143a565b1590505b156104ee57604051630a8bf2b760e11b815260040160405180910390fd5b5f6104fc6020830183611490565b600381111561050d5761050d61124a565b0361052b57604051631e719f3360e01b815260040160405180910390fd5b5f610539602084018461143a565b610546604086018661143a565b60405160200161055994939291906114ab565b60408051601f19818403018152919052805160209091012090505f60026105836020850185611490565b60038111156105945761059461124a565b0361096c576040516451412d414960d81b6020820152602501604051602081830303815290604052805190602001208480602001906105d3919061143a565b6040516020016105e49291906114d5565b604051602081830303815290604052805190602001201415801561066657506040516351412d4360e01b60208201526024016040516020818303038152906040528051906020012084806020019061063c919061143a565b60405160200161064d9291906114d5565b6040516020818303038152906040528051906020012014155b80156106d057506040516328a096ab60e11b6020820152602401604051602081830303815290604052805190602001208480602001906106a6919061143a565b6040516020016106b79291906114d5565b6040516020818303038152906040528051906020012014155b15610709576106e2602085018561143a565b600260405163222a151760e11b81526004016107009392919061150c565b60405180910390fd5b610719606084016040850161154a565b6001600160f81b03161580159061074757505f61073c60808501606086016110e2565b6001600160a01b0316145b1561076557604051630e84ae9360e21b815260040160405180910390fd5b610775606084016040850161154a565b6001600160f81b03161580156107a357505f61079760808501606086016110e2565b6001600160a01b031614155b156107c457600260405163d5ff172960e01b81526004016107009190611565565b6107d4606084016040850161154a565b6001600160f81b0316156109035760025f6107f560808601606087016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208582529092528120600101546001600160f81b03169003610831575060015b61083e6020840184611490565b60025f61085160808701606088016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff191660018360038111156108905761089061124a565b02179055506108a5606084016040850161154a565b60025f6108b860808701606088016110e2565b6001600160a01b0316815260208082019290925260409081015f908120868252909252902060010180546001600160f81b0319166001600160f81b0392909216919091179055610c93565b60025f61091660808601606087016110e2565b6001600160a01b0316815260208082019290925260409081015f9081208582529092529020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b600361097b6020850185611490565b600381111561098c5761098c61124a565b03610ada576109a1606084016040850161154a565b6001600160f81b03165f03610a0d575f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b60205260409020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b610a1d6040840160208501611581565b60ff165f03610a3f57604051636ab3f8d560e11b815260040160405180910390fd5b610a57610a5260808501606086016110e2565b61105a565b5f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b60205260408120600101546001600160f81b03169003610a9a575060015b5f8281527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b602052604090208390610ad282826115b4565b905050610c93565b60405165434f4e46494760d01b602082015260260160405160208183030381529060405280519060200120848060200190610b15919061143a565b604051602001610b269291906114d5565b6040516020818303038152906040528051906020012014610b6c57610b4e602085018561143a565b600160405163222a151760e11b81526004016107009392919061150c565b610b7c606084016040850161154a565b6001600160f81b03165f03610bd5575f8281525f5160206119535f395f51905f5260205260409020805461ffff191681556001810180546001600160f81b031916905560020180546001600160a01b0319169055610c93565b5f8281525f5160206119535f395f51905f5260205260409020600201546001600160a01b0316610c03575060015b610c106020840184611490565b5f8381525f5160206119535f395f51905f5260205260409020805460ff19166001836003811115610c4357610c4361124a565b0217905550610c5860808401606085016110e2565b5f8381525f5160206119535f395f51905f526020526040902060020180546001600160a01b0319166001600160a01b03929092169190911790555b610ca3606084016040850161154a565b6001600160f81b031615610d88578015610cf5575f610cc5602086018661143a565b604051610cd39291906114d5565b9081526040519081900360200190208054905f610cef8361168e565b91905055505b610d02602085018561143a565b610d0f604087018761143a565b604051602001610d2294939291906114ab565b60408051601f198184030181529181525f84815260016020522090610d47908261172a565b507f308f9f55d3eeef9e8267285607d3dde765f53e18a5cdd7ed77e21e5633a6791b848385604051610d7b93929190611827565b60405180910390a1610e36565b5f8281526001602052604090208054610da0906116a6565b159050610e36575f610db5602086018661143a565b604051610dc39291906114d5565b9081526040519081900360200190208054905f610ddf8361190e565b90915550505f828152600160205260408120610dfa91611084565b7f454f1484777e93d9fd2ad4a7fd63f5fa7a9edd73f994a2be242a7fae02c121c1848385604051610e2d93929190611827565b60405180910390a15b50505050565b5f73787fb122fc8a4b183e42e92dd48d1b52f707e0316001600160a01b031663bec4d54e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f69190611923565b6040516338b317cf60e21b81526001600160a01b03821660048201525f9073787fb122fc8a4b183e42e92dd48d1b52f707e0319063e2cc5f3c9060240161033c565b5f81816001600160a01b038616610f0c57506003610f29565b5f196001600160a01b03871601610f2557506001610f29565b5060025b5f5b82811015610fb457816003811115610f4557610f4561124a565b6001600160a01b0388165f90815260026020526040812090888885818110610f6f57610f6f61193e565b602090810292909201358352508101919091526040015f205460ff166003811115610f9c57610f9c61124a565b14610fac575f9350505050610fbc565b600101610f2b565b506001925050505b9392505050565b60016020525f908152604090208054610fdb906116a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611007906116a6565b80156110525780601f1061102957610100808354040283529160200191611052565b820191905f5260205f20905b81548152906001019060200180831161103557829003601f168201915b505050505081565b6001600160a01b0381166110815760405163140efc4d60e21b815260040160405180910390fd5b50565b508054611090906116a6565b5f825580601f1061109f575050565b601f0160209004905f5260205f209081019061108191905b808211156110ca575f81556001016110b7565b5090565b6001600160a01b0381168114611081575f5ffd5b5f602082840312156110f2575f5ffd5b8135610fbc816110ce565b62ffffff81168114611081575f5ffd5b5f6020828403121561111d575f5ffd5b8135610fbc816110fd565b68ffffffffffffffffff81168114611081575f5ffd5b5f6020828403121561114e575f5ffd5b8135610fbc81611128565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561117d575f5ffd5b813567ffffffffffffffff811115611193575f5ffd5b8201601f810184136111a3575f5ffd5b803567ffffffffffffffff8111156111bd576111bd611159565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156111ec576111ec611159565b604052818152828201602001861015611203575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f60408385031215611231575f5ffd5b823561123c816110ce565b946020939093013593505050565b634e487b7160e01b5f52602160045260245ffd5b6004811061127a57634e487b7160e01b5f52602160045260245ffd5b9052565b6080810161128c828761125e565b60ff9490941660208201526001600160f81b039290921660408301526001600160a01b0316606090910152919050565b5f5f82840360a08112156112ce575f5ffd5b833567ffffffffffffffff8111156112e4575f5ffd5b8401606081870312156112f5575f5ffd5b92506080601f1982011215611308575f5ffd5b506020830190509250929050565b5f5f5f60408486031215611328575f5ffd5b8335611333816110ce565b9250602084013567ffffffffffffffff81111561134e575f5ffd5b8401601f8101861361135e575f5ffd5b803567ffffffffffffffff811115611374575f5ffd5b8660208260051b8401011115611388575f5ffd5b939660209190910195509293505050565b5f602082840312156113a9575f5ffd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156113f5575f5ffd5b81518015158114610fbc575f5ffd5b5f60208284031215611414575f5ffd5b8151610fbc816110ce565b5f6020828403121561142f575f5ffd5b8151610fbc816110fd565b5f5f8335601e1984360301811261144f575f5ffd5b83018035915067ffffffffffffffff821115611469575f5ffd5b60200191503681900382131561147d575f5ffd5b9250929050565b60048110611081575f5ffd5b5f602082840312156114a0575f5ffd5b8135610fbc81611484565b838582375f8482016101d160f51b8152838560028301375f93016002019283525090949350505050565b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61151f6040830185876114e4565b905061152e602083018461125e565b949350505050565b6001600160f81b0381168114611081575f5ffd5b5f6020828403121561155a575f5ffd5b8135610fbc81611536565b6020810161037b828461125e565b60ff81168114611081575f5ffd5b5f60208284031215611591575f5ffd5b8135610fbc81611573565b5f813561037b81611536565b5f813561037b816110ce565b81356115bf81611484565b600481106115db57634e487b7160e01b5f52602160045260245ffd5b815460ff821691508160ff19821617835560208401356115fa81611573565b61ff008160081b168361ffff1984161717845550505061164361161f6040840161159c565b6001830180546001600160f81b0319166001600160f81b0392909216919091179055565b611676611652606084016115a8565b6002830180546001600160a01b0319166001600160a01b0392909216919091179055565b5050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161169f5761169f61167a565b5060010190565b600181811c908216806116ba57607f821691505b6020821081036116d857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561172557805f5260205f20601f840160051c810160208510156117035750805b601f840160051c820191505b81811015611722575f815560010161170f565b50505b505050565b815167ffffffffffffffff81111561174457611744611159565b6117588161175284546116a6565b846116de565b6020601f82116001811461178a575f83156117735750848201515b5f19600385901b1c1916600184901b178455611722565b5f84815260208120601f198516915b828110156117b95787850151825560209485019460019092019101611799565b50848210156117d657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f8335601e198436030181126117fa575f5ffd5b830160208101925035905067ffffffffffffffff811115611819575f5ffd5b80360382131561147d575f5ffd5b60c081525f843561183781611484565b61184460c084018261125e565b5061185260208601866117e5565b606060e0850152611868610120850182846114e4565b91505061187860408701876117e5565b84830360bf19016101008601526118908382846114e4565b935050505083602083015282356118a681611484565b6118b3604084018261125e565b5060208301356118c281611573565b60ff16606083015260408301356118d881611536565b6001600160f81b0316608083015260608301356118f4816110ce565b6001600160a01b031660a092909201919091529392505050565b5f8161191c5761191c61167a565b505f190190565b5f60208284031215611933575f5ffd5b8151610fbc81611128565b634e487b7160e01b5f52603260045260245ffdfee90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0a26469706673582212207982f9666a07d64a98af7639c08d56957cc17e0ac70ba3c3347ba08df645c96d64736f6c634300081e0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 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.