Source Code
Latest 25 from a total of 11,103 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 14403913 | 35 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 14403855 | 35 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 14403830 | 35 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 14364500 | 38 days ago | IN | 0 MOVR | 0.00013945 | ||||
| Redeem | 14355781 | 39 days ago | IN | 0 MOVR | 0.00003977 | ||||
| Redeem | 14355736 | 39 days ago | IN | 0 MOVR | 0.00003977 | ||||
| Redeem | 14355724 | 39 days ago | IN | 0 MOVR | 0.00003977 | ||||
| Redeem | 14355701 | 39 days ago | IN | 0 MOVR | 0.00003977 | ||||
| Redeem | 13723522 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13722320 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13722291 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13722254 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13722246 | 87 days ago | IN | 0 MOVR | 0.00013553 | ||||
| Redeem | 13722198 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13722077 | 87 days ago | IN | 0 MOVR | 0.00013943 | ||||
| Redeem | 13681310 | 90 days ago | IN | 0 MOVR | 0.00160534 | ||||
| Redeem | 13488632 | 105 days ago | IN | 0 MOVR | 0.00049052 | ||||
| Redeem | 13480585 | 106 days ago | IN | 0 MOVR | 0.00009442 | ||||
| Redeem | 13318917 | 118 days ago | IN | 0 MOVR | 0.00066888 | ||||
| Redeem | 13318878 | 118 days ago | IN | 0 MOVR | 0.00069703 | ||||
| Redeem | 13318873 | 118 days ago | IN | 0 MOVR | 0.0019877 | ||||
| Redeem | 13237889 | 125 days ago | IN | 0 MOVR | 0.00052572 | ||||
| Redeem | 13131905 | 133 days ago | IN | 0 MOVR | 0.00025483 | ||||
| Redeem | 13131905 | 133 days ago | IN | 0 MOVR | 0.00078607 | ||||
| Redeem | 13116160 | 134 days ago | IN | 0 MOVR | 0.00080869 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RomeRedemption
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2022-07-20
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.15;
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
interface IERC20Burnable is IERC20 {
function burn(uint256 amount) external;
function burnFrom(address account, uint256 amount) external;
}
contract RomeRedemption is Ownable, Pausable {
////////////////////////////////////////////////////////////////////////////
// STATE
////////////////////////////////////////////////////////////////////////////
/// @notice rome token
IERC20Burnable public immutable rome;
/// @notice stable coins
address[] public stableCoins;
address public guardian;
////////////////////////////////////////////////////////////////////////////
// EVENTS
////////////////////////////////////////////////////////////////////////////
event Redeemed(address indexed who, uint256 amount, uint256[] amounts);
////////////////////////////////////////////////////////////////////////////
// CONSTRUCTOR
////////////////////////////////////////////////////////////////////////////
/**
* @dev only input stablecoins with 18 decimals. Frax, Mim and Dai are all 18 decimals.
*/
constructor(
address _rome,
address _guardian,
address[] memory _stableCoins
) {
require(_rome != address(0), "invalid rome");
require(_guardian != address(0), "invalid guardian");
rome = IERC20Burnable(_rome);
guardian = _guardian;
// init stable coins
uint256 length = _stableCoins.length;
for (uint256 i = 0; i < length; i++) {
address stableCoin = _stableCoins[i];
require(stableCoin != address(0), "invalid token");
stableCoins.push(stableCoin);
}
_pause();
}
////////////////////////////////////////////////////////////////////////////
// MODIFIERS
////////////////////////////////////////////////////////////////////////////
modifier onlyGuardianOrOwner() {
require(
msg.sender == guardian ||
msg.sender == owner(),
"only guardian"
);
_;
}
////////////////////////////////////////////////////////////////////////////
// PUBLIC
////////////////////////////////////////////////////////////////////////////
/**
* @notice redeem stable coins
* @dev burn rome tokens
* @param _amount rome token amount
*/
function redeem(uint256 _amount) external whenNotPaused {
require(_amount > 0, "invalid amount");
uint256 totalSupply = rome.totalSupply();
require(totalSupply > 0, "rome no longer exists");
// burn rome token
rome.burnFrom(msg.sender, _amount);
// transfer stable coins
uint256 length = stableCoins.length;
uint256[] memory amounts = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
IERC20Metadata stableCoin = IERC20Metadata(stableCoins[i]);
// calculate share of stablecoin to redeem
uint256 amountOut = _amount * stableCoin.balanceOf(address(this)) / totalSupply;
amounts[i] = amountOut;
// transfer stable coin
stableCoin.transfer(msg.sender, amountOut);
}
// event
emit Redeemed(msg.sender, _amount, amounts);
}
////////////////////////////////////////////////////////////////////////////
/// ADMIN
////////////////////////////////////////////////////////////////////////////
function pause() external onlyGuardianOrOwner whenNotPaused {
return _pause();
}
function unpause() external onlyOwner whenPaused {
return _unpause();
}
/**
* @notice sets a new guardian address who can pause the contract.
* @param _newGuardian is the address to set as new guardian
*/
function setGuardian(address _newGuardian) external onlyOwner {
require(_newGuardian != address(0), "cannot set to zero address");
guardian = _newGuardian;
}
/**
* @notice withdraw all stable coins
* @dev ownable function when paused
*/
function withdrawAll() external onlyOwner whenPaused {
uint256 length = stableCoins.length;
for (uint256 i = 0; i < length; i++) {
IERC20 stableCoin = IERC20(stableCoins[i]);
uint256 balance = stableCoin.balanceOf(address(this));
// transfer stable coin
if (balance > 0) {
stableCoin.transfer(msg.sender, balance);
}
}
}
/**
* @notice sweep a token
* @dev ownable function
*/
function sweep(address _token, uint256 _amount) external onlyOwner {
uint256 length = stableCoins.length;
for (uint256 i = 0; i < length; i++) {
require(_token != stableCoins[i], "invalid token to sweep");
}
SafeERC20.safeTransfer(IERC20(_token), msg.sender, _amount);
}
// ////////////////////////////////////////////////////////////////////////////
// // VIEW
// ////////////////////////////////////////////////////////////////////////////
/**
* @notice return stable coins and backing
* @param _amount of rome to check its backing
*/
function viewBacking(uint256 _amount)
public
view
returns (address[] memory stableCoins_, uint256[] memory stableAmounts_)
{
uint256 supply = rome.totalSupply();
require(supply > 0, "No more rome supply");
uint256 length = stableCoins.length;
stableCoins_ = new address[](length);
stableAmounts_ = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
IERC20Metadata stableCoin = IERC20Metadata(stableCoins[i]);
stableCoins_[i] = address(stableCoins[i]);
stableAmounts_[i] = _amount * stableCoin.balanceOf(address(this)) / supply;
}
}
function viewRfv() external view returns (uint256 rfv_) {
uint256 supply = rome.totalSupply();
require(supply > 0, "No more rome supply");
uint256 length = stableCoins.length;
for (uint256 i = 0; i < length; i++) {
IERC20Metadata stableCoin = IERC20Metadata(stableCoins[i]);
rfv_ += stableCoin.balanceOf(address(this));
}
rfv_ = rfv_ * 1e9 / supply;
}
function viewRfvForStable(
address _stable
) external view returns (uint256 rfv_) {
uint256 supply = rome.totalSupply();
require(supply > 0, "No more rome supply");
uint256 length = stableCoins.length;
for (uint256 i = 0; i < length; i++) {
if (_stable == stableCoins[i]) {
IERC20Metadata stableCoin = IERC20Metadata(stableCoins[i]);
return stableCoin.balanceOf(address(this)) * 1e9 / supply;
}
}
}
/**
* @notice return stable coins and amounts
*/
function viewStables()
external
view
returns (address[] memory stableCoins_, uint256[] memory stableAmounts_)
{
uint256 length = stableCoins.length;
stableCoins_ = new address[](length);
stableAmounts_ = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
IERC20Metadata stableCoin = IERC20Metadata(stableCoins[i]);
stableCoins_[i] = address(stableCoins[i]);
stableAmounts_[i] = stableCoin.balanceOf(address(this));
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_rome","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address[]","name":"_stableCoins","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rome","outputs":[{"internalType":"contract IERC20Burnable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGuardian","type":"address"}],"name":"setGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stableCoins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"viewBacking","outputs":[{"internalType":"address[]","name":"stableCoins_","type":"address[]"},{"internalType":"uint256[]","name":"stableAmounts_","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewRfv","outputs":[{"internalType":"uint256","name":"rfv_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stable","type":"address"}],"name":"viewRfvForStable","outputs":[{"internalType":"uint256","name":"rfv_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewStables","outputs":[{"internalType":"address[]","name":"stableCoins_","type":"address[]"},{"internalType":"uint256[]","name":"stableAmounts_","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040523480156200001157600080fd5b506040516200244938038062002449833981016040819052620000349162000341565b6200003f3362000203565b6000805460ff60a01b191690556001600160a01b038316620000975760405162461bcd60e51b815260206004820152600c60248201526b696e76616c696420726f6d6560a01b60448201526064015b60405180910390fd5b6001600160a01b038216620000e25760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b21033bab0b93234b0b760811b60448201526064016200008e565b6001600160a01b03838116608052600280546001600160a01b031916918416919091179055805160005b81811015620001ee5760008382815181106200012c576200012c6200043b565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200018a5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b2103a37b5b2b760991b60448201526064016200008e565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b039290921691909117905580620001e58162000451565b9150506200010c565b50620001f962000253565b5050505062000479565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200025d620002b6565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002993390565b6040516001600160a01b03909116815260200160405180910390a1565b620002ca600054600160a01b900460ff1690565b156200030c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200008e565b565b80516001600160a01b03811681146200032657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200035757600080fd5b62000362846200030e565b92506020620003738186016200030e565b60408601519093506001600160401b03808211156200039157600080fd5b818701915087601f830112620003a657600080fd5b815181811115620003bb57620003bb6200032b565b8060051b604051601f19603f83011681018181108582111715620003e357620003e36200032b565b60405291825284820192508381018501918a8311156200040257600080fd5b938501935b828510156200042b576200041b856200030e565b8452938501939285019262000407565b8096505050505050509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200047257634e487b7160e01b600052601160045260246000fd5b5060010190565b608051611f91620004b8600039600081816101f5015281816105070152818161083401528181610d3f015281816110bd01526111eb0152611f916000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b25780638a0dac4a11610081578063d39d3f4211610066578063d39d3f421461027b578063db006a751461028e578063f2fde38b146102a157600080fd5b80638a0dac4a1461024a5780638da5cb5b1461025d57600080fd5b8063715018a61461022a57806373a5ae12146102325780638456cb591461023a578063853828b61461024257600080fd5b80635c975abb116100ee5780635c975abb146101a157806366580d02146101cf5780636840a464146101f05780636ea056a91461021757600080fd5b806328f1c67a146101205780633f4ba83a1461013f578063452a93201461014957806348455cfe1461018e575b600080fd5b6101286102b4565b604051610136929190611c24565b60405180910390f35b6101476104b1565b005b6002546101699073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b61016961019c366004611c87565b6104cb565b60005474010000000000000000000000000000000000000000900460ff166040519015158152602001610136565b6101e26101dd366004611cc9565b610502565b604051908152602001610136565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b610147610225366004611ceb565b610743565b61014761081d565b6101e261082f565b610147610a2f565b610147610ae2565b610147610258366004611cc9565b610c6c565b60005473ffffffffffffffffffffffffffffffffffffffff16610169565b610128610289366004611c87565b610d38565b61014761029c366004611c87565b611047565b6101476102af366004611cc9565b61149f565b60015460609081908067ffffffffffffffff8111156102d5576102d5611d15565b6040519080825280602002602001820160405280156102fe578160200160208202803683370190505b5092508067ffffffffffffffff81111561031a5761031a611d15565b604051908082528060200260200182016040528015610343578160200160208202803683370190505b50915060005b818110156104ab5760006001828154811061036657610366611d44565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff909216925090839081106103a1576103a1611d44565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168583815181106103de576103de611d44565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152908216906370a0823190602401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190611d73565b84838151811061048d5761048d611d44565b602090810291909101015250806104a381611dbb565b915050610349565b50509091565b6104b9611556565b6104c16115d7565b6104c961165b565b565b600181815481106104db57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105949190611d73565b905060008111610605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064015b60405180910390fd5b60015460005b8181101561073b576001818154811061062657610626611d44565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908616036107295760006001828154811061066757610667611d44565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169150849082906370a0823190602401602060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107079190611d73565b61071590633b9aca00611df3565b61071f9190611e30565b9695505050505050565b8061073381611dbb565b91505061060b565b505050919050565b61074b611556565b60015460005b8181101561080c576001818154811061076c5761076c611d44565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908516036107fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420746f6b656e20746f2073776565700000000000000000000060448201526064016105fc565b8061080481611dbb565b915050610751565b506108188333846116d8565b505050565b610825611556565b6104c96000611765565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190611d73565b90506000811161092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064016105fc565b60015460005b81811015610a0e5760006001828154811061095057610950611d44565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116915081906370a0823190602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611d73565b6109f89086611e6b565b9450508080610a0690611dbb565b915050610933565b5081610a1e84633b9aca00611df3565b610a289190611e30565b9250505090565b60025473ffffffffffffffffffffffffffffffffffffffff16331480610a6c575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f6e6c7920677561726469616e0000000000000000000000000000000000000060448201526064016105fc565b610ada6117da565b6104c961185f565b610aea611556565b610af26115d7565b60015460005b81811015610c6857600060018281548110610b1557610b15611d44565b60009182526020822001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190611d73565b90508015610c53576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044016020604051808303816000875af1158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190611e83565b505b50508080610c6090611dbb565b915050610af8565b5050565b610c74611556565b73ffffffffffffffffffffffffffffffffffffffff8116610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e6e6f742073657420746f207a65726f206164647265737300000000000060448201526064016105fc565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60608060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc9190611d73565b905060008111610e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064016105fc565b6001548067ffffffffffffffff811115610e5457610e54611d15565b604051908082528060200260200182016040528015610e7d578160200160208202803683370190505b5093508067ffffffffffffffff811115610e9957610e99611d15565b604051908082528060200260200182016040528015610ec2578160200160208202803683370190505b50925060005b8181101561103f57600060018281548110610ee557610ee5611d44565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff90921692509083908110610f2057610f20611d44565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868381518110610f5d57610f5d611d44565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285918316906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611d73565b6110059089611df3565b61100f9190611e30565b85838151811061102157611021611d44565b6020908102919091010152508061103781611dbb565b915050610ec8565b505050915091565b61104f6117da565b600081116110b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016105fc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a9190611d73565b9050600081116111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f726f6d65206e6f206c6f6e67657220657869737473000000000000000000000060448201526064016105fc565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b50506001549150600090508167ffffffffffffffff81111561127c5761127c611d15565b6040519080825280602002602001820160405280156112a5578160200160208202803683370190505b50905060005b82811015611448576000600182815481106112c8576112c8611d44565b60009182526020822001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169250869083906370a0823190602401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190611d73565b6113719089611df3565b61137b9190611e30565b90508084848151811061139057611390611d44565b60209081029190910101526040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190611e83565b505050808061144090611dbb565b9150506112ab565b503373ffffffffffffffffffffffffffffffffffffffff167f6b921527f65949c80fab346e1e330b442e353b32e7b29f428d3d0c7766dd91528583604051611491929190611ea5565b60405180910390a250505050565b6114a7611556565b73ffffffffffffffffffffffffffffffffffffffff811661154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105fc565b61155381611765565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105fc565b60005474010000000000000000000000000000000000000000900460ff166104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105fc565b6116636115d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108189084906118ce565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005474010000000000000000000000000000000000000000900460ff16156104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105fc565b6118676117da565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ae3390565b6000611930826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119da9092919063ffffffff16565b805190915015610818578080602001905181019061194e9190611e83565b610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105fc565b60606119e984846000856119f1565b949350505050565b606082471015611a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105fc565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611aac9190611eee565b60006040518083038185875af1925050503d8060008114611ae9576040519150601f19603f3d011682016040523d82523d6000602084013e611aee565b606091505b5091509150611aff87838387611b0a565b979650505050505050565b60608315611ba0578251600003611b995773ffffffffffffffffffffffffffffffffffffffff85163b611b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105fc565b50816119e9565b6119e98383815115611bb55781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc9190611f0a565b600081518084526020808501945080840160005b83811015611c1957815187529582019590820190600101611bfd565b509495945050505050565b604080825283519082018190526000906020906060840190828701845b82811015611c7357815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101611c41565b5050508381038285015261071f8186611be9565b600060208284031215611c9957600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611cc457600080fd5b919050565b600060208284031215611cdb57600080fd5b611ce482611ca0565b9392505050565b60008060408385031215611cfe57600080fd5b611d0783611ca0565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d8557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611dec57611dec611d8c565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e2b57611e2b611d8c565b500290565b600082611e66577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115611e7e57611e7e611d8c565b500190565b600060208284031215611e9557600080fd5b81518015158114611ce457600080fd5b8281526040602082015260006119e96040830184611be9565b60005b83811015611ed9578181015183820152602001611ec1565b83811115611ee8576000848401525b50505050565b60008251611f00818460208701611ebe565b9190910192915050565b6020815260008251806020840152611f29816040850160208701611ebe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea264697066735822122028dc7e9b4c16b1cec1212e5a5c53b56273de09ef8ce3d1a0fe38358c09da18d464736f6c634300080f00330000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d6000000000000000000000000e8777d765fd496ab2df8633859716731f9b3e3a2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000cae51e1032e8461f4806e26332c030e34de3adb0000000000000000000000001a93b23281cc1cde4c4741353f3064709a16197d00000000000000000000000080a16016cc4a2e6a2caca8a4a498b1699ff0f844
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b25780638a0dac4a11610081578063d39d3f4211610066578063d39d3f421461027b578063db006a751461028e578063f2fde38b146102a157600080fd5b80638a0dac4a1461024a5780638da5cb5b1461025d57600080fd5b8063715018a61461022a57806373a5ae12146102325780638456cb591461023a578063853828b61461024257600080fd5b80635c975abb116100ee5780635c975abb146101a157806366580d02146101cf5780636840a464146101f05780636ea056a91461021757600080fd5b806328f1c67a146101205780633f4ba83a1461013f578063452a93201461014957806348455cfe1461018e575b600080fd5b6101286102b4565b604051610136929190611c24565b60405180910390f35b6101476104b1565b005b6002546101699073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b61016961019c366004611c87565b6104cb565b60005474010000000000000000000000000000000000000000900460ff166040519015158152602001610136565b6101e26101dd366004611cc9565b610502565b604051908152602001610136565b6101697f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d681565b610147610225366004611ceb565b610743565b61014761081d565b6101e261082f565b610147610a2f565b610147610ae2565b610147610258366004611cc9565b610c6c565b60005473ffffffffffffffffffffffffffffffffffffffff16610169565b610128610289366004611c87565b610d38565b61014761029c366004611c87565b611047565b6101476102af366004611cc9565b61149f565b60015460609081908067ffffffffffffffff8111156102d5576102d5611d15565b6040519080825280602002602001820160405280156102fe578160200160208202803683370190505b5092508067ffffffffffffffff81111561031a5761031a611d15565b604051908082528060200260200182016040528015610343578160200160208202803683370190505b50915060005b818110156104ab5760006001828154811061036657610366611d44565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff909216925090839081106103a1576103a1611d44565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168583815181106103de576103de611d44565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152908216906370a0823190602401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190611d73565b84838151811061048d5761048d611d44565b602090810291909101015250806104a381611dbb565b915050610349565b50509091565b6104b9611556565b6104c16115d7565b6104c961165b565b565b600181815481106104db57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000807f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105949190611d73565b905060008111610605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064015b60405180910390fd5b60015460005b8181101561073b576001818154811061062657610626611d44565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908616036107295760006001828154811061066757610667611d44565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169150849082906370a0823190602401602060405180830381865afa1580156106e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107079190611d73565b61071590633b9aca00611df3565b61071f9190611e30565b9695505050505050565b8061073381611dbb565b91505061060b565b505050919050565b61074b611556565b60015460005b8181101561080c576001818154811061076c5761076c611d44565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908516036107fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420746f6b656e20746f2073776565700000000000000000000060448201526064016105fc565b8061080481611dbb565b915050610751565b506108188333846116d8565b505050565b610825611556565b6104c96000611765565b6000807f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190611d73565b90506000811161092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064016105fc565b60015460005b81811015610a0e5760006001828154811061095057610950611d44565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116915081906370a0823190602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611d73565b6109f89086611e6b565b9450508080610a0690611dbb565b915050610933565b5081610a1e84633b9aca00611df3565b610a289190611e30565b9250505090565b60025473ffffffffffffffffffffffffffffffffffffffff16331480610a6c575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f6e6c7920677561726469616e0000000000000000000000000000000000000060448201526064016105fc565b610ada6117da565b6104c961185f565b610aea611556565b610af26115d7565b60015460005b81811015610c6857600060018281548110610b1557610b15611d44565b60009182526020822001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116925082906370a0823190602401602060405180830381865afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190611d73565b90508015610c53576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044016020604051808303816000875af1158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190611e83565b505b50508080610c6090611dbb565b915050610af8565b5050565b610c74611556565b73ffffffffffffffffffffffffffffffffffffffff8116610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e6e6f742073657420746f207a65726f206164647265737300000000000060448201526064016105fc565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60608060007f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc9190611d73565b905060008111610e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206d6f726520726f6d6520737570706c790000000000000000000000000060448201526064016105fc565b6001548067ffffffffffffffff811115610e5457610e54611d15565b604051908082528060200260200182016040528015610e7d578160200160208202803683370190505b5093508067ffffffffffffffff811115610e9957610e99611d15565b604051908082528060200260200182016040528015610ec2578160200160208202803683370190505b50925060005b8181101561103f57600060018281548110610ee557610ee5611d44565b6000918252602090912001546001805473ffffffffffffffffffffffffffffffffffffffff90921692509083908110610f2057610f20611d44565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868381518110610f5d57610f5d611d44565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285918316906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611d73565b6110059089611df3565b61100f9190611e30565b85838151811061102157611021611d44565b6020908102919091010152508061103781611dbb565b915050610ec8565b505050915091565b61104f6117da565b600081116110b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016105fc565b60007f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a9190611d73565b9050600081116111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f726f6d65206e6f206c6f6e67657220657869737473000000000000000000000060448201526064016105fc565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d673ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b50506001549150600090508167ffffffffffffffff81111561127c5761127c611d15565b6040519080825280602002602001820160405280156112a5578160200160208202803683370190505b50905060005b82811015611448576000600182815481106112c8576112c8611d44565b60009182526020822001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169250869083906370a0823190602401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190611d73565b6113719089611df3565b61137b9190611e30565b90508084848151811061139057611390611d44565b60209081029190910101526040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190611e83565b505050808061144090611dbb565b9150506112ab565b503373ffffffffffffffffffffffffffffffffffffffff167f6b921527f65949c80fab346e1e330b442e353b32e7b29f428d3d0c7766dd91528583604051611491929190611ea5565b60405180910390a250505050565b6114a7611556565b73ffffffffffffffffffffffffffffffffffffffff811661154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105fc565b61155381611765565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105fc565b60005474010000000000000000000000000000000000000000900460ff166104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105fc565b6116636115d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108189084906118ce565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005474010000000000000000000000000000000000000000900460ff16156104c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105fc565b6118676117da565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ae3390565b6000611930826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119da9092919063ffffffff16565b805190915015610818578080602001905181019061194e9190611e83565b610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105fc565b60606119e984846000856119f1565b949350505050565b606082471015611a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105fc565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611aac9190611eee565b60006040518083038185875af1925050503d8060008114611ae9576040519150601f19603f3d011682016040523d82523d6000602084013e611aee565b606091505b5091509150611aff87838387611b0a565b979650505050505050565b60608315611ba0578251600003611b995773ffffffffffffffffffffffffffffffffffffffff85163b611b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105fc565b50816119e9565b6119e98383815115611bb55781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc9190611f0a565b600081518084526020808501945080840160005b83811015611c1957815187529582019590820190600101611bfd565b509495945050505050565b604080825283519082018190526000906020906060840190828701845b82811015611c7357815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101611c41565b5050508381038285015261071f8186611be9565b600060208284031215611c9957600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611cc457600080fd5b919050565b600060208284031215611cdb57600080fd5b611ce482611ca0565b9392505050565b60008060408385031215611cfe57600080fd5b611d0783611ca0565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611d8557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611dec57611dec611d8c565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e2b57611e2b611d8c565b500290565b600082611e66577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115611e7e57611e7e611d8c565b500190565b600060208284031215611e9557600080fd5b81518015158114611ce457600080fd5b8281526040602082015260006119e96040830184611be9565b60005b83811015611ed9578181015183820152602001611ec1565b83811115611ee8576000848401525b50505050565b60008251611f00818460208701611ebe565b9190910192915050565b6020815260008251806020840152611f29816040850160208701611ebe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea264697066735822122028dc7e9b4c16b1cec1212e5a5c53b56273de09ef8ce3d1a0fe38358c09da18d464736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d6000000000000000000000000e8777d765fd496ab2df8633859716731f9b3e3a2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000cae51e1032e8461f4806e26332c030e34de3adb0000000000000000000000001a93b23281cc1cde4c4741353f3064709a16197d00000000000000000000000080a16016cc4a2e6a2caca8a4a498b1699ff0f844
-----Decoded View---------------
Arg [0] : _rome (address): 0x4a436073552044D5f2f49B176853ad3Ad473d9d6
Arg [1] : _guardian (address): 0xe8777d765FD496ab2df8633859716731F9b3E3A2
Arg [2] : _stableCoins (address[]): 0x0caE51e1032e8461f4806e26332c030E34De3aDb,0x1A93B23281CC1CDE4C4741353F3064709A16197d,0x80A16016cC4A2E6a2CACA8a4a498b1699fF0f844
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000004a436073552044d5f2f49b176853ad3ad473d9d6
Arg [1] : 000000000000000000000000e8777d765fd496ab2df8633859716731f9b3e3a2
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 0000000000000000000000000cae51e1032e8461f4806e26332c030e34de3adb
Arg [5] : 0000000000000000000000001a93b23281cc1cde4c4741353f3064709a16197d
Arg [6] : 00000000000000000000000080a16016cc4a2e6a2caca8a4a498b1699ff0f844
Deployed Bytecode Sourcemap
25630:7533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32604:556;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29143:85;;;:::i;:::-;;26002:23;;;;;;;;;;;;1490:42:1;1478:55;;;1460:74;;1448:2;1433:18;26002:23:0;1314:226:1;25965:28:0;;;;;;:::i;:::-;;:::i;2461:86::-;2508:4;2532:7;;;;;;2461:86;;1895:14:1;;1888:22;1870:41;;1858:2;1843:18;2461:86:0;1730:187:1;31997:533:0;;;;;;:::i;:::-;;:::i;:::-;;;2460:25:1;;;2448:2;2433:18;31997:533:0;2314:177:1;25890:36:0;;;;;30206:326;;;;;;:::i;:::-;;:::i;5240:103::-;;;:::i;31545:443::-;;;:::i;29041:94::-;;;:::i;29682:438::-;;;:::i;29392:180::-;;;;;;:::i;:::-;;:::i;4592:87::-;4638:7;4665:6;;;4592:87;;30846:690;;;;;;:::i;:::-;;:::i;27913:939::-;;;;;;:::i;:::-;;:::i;5498:201::-;;;;;;:::i;:::-;;:::i;32604:556::-;32774:11;:18;32677:29;;;;32774:18;32820:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32820:21:0;;32805:36;;32883:6;32869:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32869:21:0;;32852:38;;32908:9;32903:250;32927:6;32923:1;:10;32903:250;;;32955:25;32998:11;33010:1;32998:14;;;;;;;;:::i;:::-;;;;;;;;;;;;33056;;32998;;;;;-1:-1:-1;32998:14:0;33068:1;;33056:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33030:12;33043:1;33030:15;;;;;;;;:::i;:::-;:41;;;;:15;;;;;;;;;:41;33106:35;;;;;33135:4;33106:35;;;1460:74:1;33106:20:0;;;;;;1433:18:1;;33106:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33086:14;33101:1;33086:17;;;;;;;;:::i;:::-;;;;;;;;;;:55;-1:-1:-1;32935:3:0;;;;:::i;:::-;;;;32903:250;;;;32746:414;32604:556;;:::o;29143:85::-;4478:13;:11;:13::i;:::-;2325:16:::1;:14;:16::i;:::-;29210:10:::2;:8;:10::i;:::-;29143:85::o:0;25965:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25965:28:0;:::o;31997:533::-;32079:12;32104:14;32121:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32104:35;;32167:1;32158:6;:10;32150:42;;;;;;;4166:2:1;32150:42:0;;;4148:21:1;4205:2;4185:18;;;4178:30;4244:21;4224:18;;;4217:49;4283:18;;32150:42:0;;;;;;;;;32222:11;:18;32205:14;32253:267;32277:6;32273:1;:10;32253:267;;;32322:11;32334:1;32322:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;32311:25;;;;32307:202;;32357:25;32400:11;32412:1;32400:14;;;;;;;;:::i;:::-;;;;;;;;;;;32443:35;;;;;32472:4;32443:35;;;1460:74:1;32400:14:0;;;;;-1:-1:-1;32487:6:0;;32400:14;;32443:20;;1433:18:1;;32443:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;32481:3;32443:41;:::i;:::-;:50;;;;:::i;:::-;32436:57;31997:533;-1:-1:-1;;;;;;31997:533:0:o;32307:202::-;32285:3;;;;:::i;:::-;;;;32253:267;;;;32093:437;;31997:533;;;:::o;30206:326::-;4478:13;:11;:13::i;:::-;30301:11:::1;:18:::0;30284:14:::1;30332:123;30356:6;30352:1;:10;30332:123;;;30402:11;30414:1;30402:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;30392:24:::0;;::::1;::::0;30384:59:::1;;;::::0;::::1;::::0;;5026:2:1;30384:59:0::1;::::0;::::1;5008:21:1::0;5065:2;5045:18;;;5038:30;5104:24;5084:18;;;5077:52;5146:18;;30384:59:0::1;4824:346:1::0;30384:59:0::1;30364:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30332:123;;;;30465:59;30495:6;30504:10;30516:7;30465:22;:59::i;:::-;30273:259;30206:326:::0;;:::o;5240:103::-;4478:13;:11;:13::i;:::-;5305:30:::1;5332:1;5305:18;:30::i;31545:443::-:0;31587:12;31612:14;31629:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31612:35;;31675:1;31666:6;:10;31658:42;;;;;;;4166:2:1;31658:42:0;;;4148:21:1;4205:2;4185:18;;;4178:30;4244:21;4224:18;;;4217:49;4283:18;;31658:42:0;3964:343:1;31658:42:0;31728:11;:18;31711:14;31759:184;31783:6;31779:1;:10;31759:184;;;31813:25;31856:11;31868:1;31856:14;;;;;;;;:::i;:::-;;;;;;;;;;;31896:35;;;;;31925:4;31896:35;;;1460:74:1;31856:14:0;;;;;-1:-1:-1;31856:14:0;;31896:20;;1433:18:1;;31896:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31888:43;;;;:::i;:::-;;;31796:147;31791:3;;;;;:::i;:::-;;;;31759:184;;;-1:-1:-1;31973:6:0;31960:10;:4;31967:3;31960:10;:::i;:::-;:19;;;;:::i;:::-;31953:26;;31601:387;;31545:443;:::o;29041:94::-;27492:8;;;;27478:10;:22;;:60;;-1:-1:-1;4638:7:0;4665:6;;;27517:10;:21;27478:60;27456:123;;;;;;;5510:2:1;27456:123:0;;;5492:21:1;5549:2;5529:18;;;5522:30;5588:15;5568:18;;;5561:43;5621:18;;27456:123:0;5308:337:1;27456:123:0;2066:19:::1;:17;:19::i;:::-;29119:8:::2;:6;:8::i;29682:438::-:0;4478:13;:11;:13::i;:::-;2325:16:::1;:14;:16::i;:::-;29763:11:::2;:18:::0;29746:14:::2;29794:319;29818:6;29814:1;:10;29794:319;;;29846:17;29873:11;29885:1;29873:14;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;::::2;::::0;29921:35:::2;::::0;;;;29950:4:::2;29921:35;::::0;::::2;1460:74:1::0;29873:14:0::2;::::0;;::::2;::::0;-1:-1:-1;29873:14:0;;29921:20:::2;::::0;1433:18:1;;29921:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29903:53:::0;-1:-1:-1;30014:11:0;;30010:92:::2;;30046:40;::::0;;;;30066:10:::2;30046:40;::::0;::::2;5824:74:1::0;5914:18;;;5907:34;;;30046:19:0::2;::::0;::::2;::::0;::::2;::::0;5797:18:1;;30046:40:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30010:92;29831:282;;29826:3;;;;;:::i;:::-;;;;29794:319;;;;29735:385;29682:438::o:0;29392:180::-;4478:13;:11;:13::i;:::-;29473:26:::1;::::0;::::1;29465:65;;;::::0;::::1;::::0;;6436:2:1;29465:65:0::1;::::0;::::1;6418:21:1::0;6475:2;6455:18;;;6448:30;6514:28;6494:18;;;6487:56;6560:18;;29465:65:0::1;6234:350:1::0;29465:65:0::1;29541:8;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;29392:180::o;30846:690::-;30932:29;30963:31;31012:14;31029:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31012:35;;31075:1;31066:6;:10;31058:42;;;;;;;4166:2:1;31058:42:0;;;4148:21:1;4205:2;4185:18;;;4178:30;4244:21;4224:18;;;4217:49;4283:18;;31058:42:0;3964:343:1;31058:42:0;31128:11;:18;;31174:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31174:21:0;;31159:36;;31237:6;31223:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31223:21:0;;31206:38;;31262:9;31257:269;31281:6;31277:1;:10;31257:269;;;31309:25;31352:11;31364:1;31352:14;;;;;;;;:::i;:::-;;;;;;;;;;;;31410;;31352;;;;;-1:-1:-1;31352:14:0;31422:1;;31410:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31384:12;31397:1;31384:15;;;;;;;;:::i;:::-;:41;;;;:15;;;;;;;;;:41;31470:35;;;;;31499:4;31470:35;;;1460:74:1;31508:6:0;;31470:20;;;;;1433:18:1;;31470:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31460:45;;:7;:45;:::i;:::-;:54;;;;:::i;:::-;31440:14;31455:1;31440:17;;;;;;;;:::i;:::-;;;;;;;;;;:74;-1:-1:-1;31289:3:0;;;;:::i;:::-;;;;31257:269;;;;31001:535;;30846:690;;;:::o;27913:939::-;2066:19;:17;:19::i;:::-;27998:1:::1;27988:7;:11;27980:38;;;::::0;::::1;::::0;;6791:2:1;27980:38:0::1;::::0;::::1;6773:21:1::0;6830:2;6810:18;;;6803:30;6869:16;6849:18;;;6842:44;6903:18;;27980:38:0::1;6589:338:1::0;27980:38:0::1;28031:19;28053:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28031:40;;28106:1;28092:11;:15;28084:49;;;::::0;::::1;::::0;;7134:2:1;28084:49:0::1;::::0;::::1;7116:21:1::0;7173:2;7153:18;;;7146:30;7212:23;7192:18;;;7185:51;7253:18;;28084:49:0::1;6932:345:1::0;28084:49:0::1;28174:34;::::0;;;;28188:10:::1;28174:34;::::0;::::1;5824:74:1::0;5914:18;;;5907:34;;;28174:4:0::1;:13;;::::0;::::1;::::0;5797:18:1;;28174:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28272:11:0::1;:18:::0;;-1:-1:-1;28255:14:0::1;::::0;-1:-1:-1;28272:18:0;28330:21:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;28330:21:0::1;;28303:48;;28369:9;28364:407;28388:6;28384:1;:10;28364:407;;;28416:25;28459:11;28471:1;28459:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;28577:35:::1;::::0;;;;28606:4:::1;28577:35;::::0;::::1;1460:74:1::0;28459:14:0::1;::::0;;::::1;::::0;-1:-1:-1;28615:11:0;;28459:14;;28577:20:::1;::::0;1433:18:1;;28577:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28567:45;::::0;:7;:45:::1;:::i;:::-;:59;;;;:::i;:::-;28547:79;;28654:9;28641:7;28649:1;28641:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:22;28717:42:::1;::::0;;;;28737:10:::1;28717:42;::::0;::::1;5824:74:1::0;5914:18;;;5907:34;;;28717:19:0::1;::::0;::::1;::::0;::::1;::::0;5797:18:1;;28717:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28401:370;;28396:3;;;;;:::i;:::-;;;;28364:407;;;;28815:10;28806:38;;;28827:7;28836;28806:38;;;;;;;:::i;:::-;;;;;;;;27969:883;;;27913:939:::0;:::o;5498:201::-;4478:13;:11;:13::i;:::-;5587:22:::1;::::0;::::1;5579:73;;;::::0;::::1;::::0;;7821:2:1;5579:73:0::1;::::0;::::1;7803:21:1::0;7860:2;7840:18;;;7833:30;7899:34;7879:18;;;7872:62;7970:8;7950:18;;;7943:36;7996:19;;5579:73:0::1;7619:402:1::0;5579:73:0::1;5663:28;5682:8;5663:18;:28::i;:::-;5498:201:::0;:::o;4757:132::-;4638:7;4665:6;4821:23;4665:6;818:10;4821:23;4813:68;;;;;;;8228:2:1;4813:68:0;;;8210:21:1;;;8247:18;;;8240:30;8306:34;8286:18;;;8279:62;8358:18;;4813:68:0;8026:356:1;2805:108:0;2508:4;2532:7;;;;;;2864:41;;;;;;;8589:2:1;2864:41:0;;;8571:21:1;8628:2;8608:18;;;8601:30;8667:22;8647:18;;;8640:50;8707:18;;2864:41:0;8387:344:1;3316:120:0;2325:16;:14;:16::i;:::-;3385:5:::1;3375:15:::0;;;::::1;::::0;;3406:22:::1;818:10:::0;3415:12:::1;3406:22;::::0;1490:42:1;1478:55;;;1460:74;;1448:2;1433:18;3406:22:0::1;;;;;;;3316:120::o:0;21684:211::-;21828:58;;;5854:42:1;5842:55;;21828:58:0;;;5824:74:1;5914:18;;;;5907:34;;;21828:58:0;;;;;;;;;;5797:18:1;;;;21828:58:0;;;;;;;;;;21851:23;21828:58;;;21801:86;;21821:5;;21801:19;:86::i;5859:191::-;5933:16;5952:6;;;5969:17;;;;;;;;;;6002:40;;5952:6;;;;;;;6002:40;;5933:16;6002:40;5922:128;5859:191;:::o;2620:108::-;2508:4;2532:7;;;;;;2690:9;2682:38;;;;;;;8938:2:1;2682:38:0;;;8920:21:1;8977:2;8957:18;;;8950:30;9016:18;8996;;;8989:46;9052:18;;2682:38:0;8736:340:1;3057:118:0;2066:19;:17;:19::i;:::-;3117:7:::1;:14:::0;;;::::1;::::0;::::1;::::0;;3147:20:::1;3154:12;818:10:::0;;738:98;24751:716;25175:23;25201:69;25229:4;25201:69;;;;;;;;;;;;;;;;;25209:5;25201:27;;;;:69;;;;;:::i;:::-;25285:17;;25175:95;;-1:-1:-1;25285:21:0;25281:179;;25382:10;25371:30;;;;;;;;;;;;:::i;:::-;25363:85;;;;;;;9283:2:1;25363:85:0;;;9265:21:1;9322:2;9302:18;;;9295:30;9361:34;9341:18;;;9334:62;9432:12;9412:18;;;9405:40;9462:19;;25363:85:0;9081:406:1;15720:229:0;15857:12;15889:52;15911:6;15919:4;15925:1;15928:12;15889:21;:52::i;:::-;15882:59;15720:229;-1:-1:-1;;;;15720:229:0:o;16840:455::-;17010:12;17068:5;17043:21;:30;;17035:81;;;;;;;9694:2:1;17035:81:0;;;9676:21:1;9733:2;9713:18;;;9706:30;9772:34;9752:18;;;9745:62;9843:8;9823:18;;;9816:36;9869:19;;17035:81:0;9492:402:1;17035:81:0;17128:12;17142:23;17169:6;:11;;17188:5;17195:4;17169:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17127:73;;;;17218:69;17245:6;17253:7;17262:10;17274:12;17218:26;:69::i;:::-;17211:76;16840:455;-1:-1:-1;;;;;;;16840:455:0:o;19413:644::-;19598:12;19627:7;19623:427;;;19655:10;:17;19676:1;19655:22;19651:290;;13258:19;;;;19865:60;;;;;;;10643:2:1;19865:60:0;;;10625:21:1;10682:2;10662:18;;;10655:30;10721:31;10701:18;;;10694:59;10770:18;;19865:60:0;10441:353:1;19865:60:0;-1:-1:-1;19962:10:0;19955:17;;19623:427;20005:33;20013:10;20025:12;20760:17;;:21;20756:388;;20992:10;20986:17;21049:15;21036:10;21032:2;21028:19;21021:44;20756:388;21119:12;21112:20;;;;;;;;;;;:::i;14:435:1:-;67:3;105:5;99:12;132:6;127:3;120:19;158:4;187:2;182:3;178:12;171:19;;224:2;217:5;213:14;245:1;255:169;269:6;266:1;263:13;255:169;;;330:13;;318:26;;364:12;;;;399:15;;;;291:1;284:9;255:169;;;-1:-1:-1;440:3:1;;14:435;-1:-1:-1;;;;;14:435:1:o;454:855::-;722:2;734:21;;;804:13;;707:18;;;826:22;;;674:4;;901;;879:2;864:18;;;928:15;;;674:4;971:218;985:6;982:1;979:13;971:218;;;1050:13;;1065:42;1046:62;1034:75;;1129:12;;;;1164:15;;;;1007:1;1000:9;971:218;;;975:3;;;1234:9;1229:3;1225:19;1220:2;1209:9;1205:18;1198:47;1262:41;1299:3;1291:6;1262:41;:::i;1545:180::-;1604:6;1657:2;1645:9;1636:7;1632:23;1628:32;1625:52;;;1673:1;1670;1663:12;1625:52;-1:-1:-1;1696:23:1;;1545:180;-1:-1:-1;1545:180:1:o;1922:196::-;1990:20;;2050:42;2039:54;;2029:65;;2019:93;;2108:1;2105;2098:12;2019:93;1922:196;;;:::o;2123:186::-;2182:6;2235:2;2223:9;2214:7;2210:23;2206:32;2203:52;;;2251:1;2248;2241:12;2203:52;2274:29;2293:9;2274:29;:::i;:::-;2264:39;2123:186;-1:-1:-1;;;2123:186:1:o;2749:254::-;2817:6;2825;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2917:29;2936:9;2917:29;:::i;:::-;2907:39;2993:2;2978:18;;;;2965:32;;-1:-1:-1;;;2749:254:1:o;3008:184::-;3060:77;3057:1;3050:88;3157:4;3154:1;3147:15;3181:4;3178:1;3171:15;3197:184;3249:77;3246:1;3239:88;3346:4;3343:1;3336:15;3370:4;3367:1;3360:15;3386:184;3456:6;3509:2;3497:9;3488:7;3484:23;3480:32;3477:52;;;3525:1;3522;3515:12;3477:52;-1:-1:-1;3548:16:1;;3386:184;-1:-1:-1;3386:184:1:o;3575:::-;3627:77;3624:1;3617:88;3724:4;3721:1;3714:15;3748:4;3745:1;3738:15;3764:195;3803:3;3834:66;3827:5;3824:77;3821:103;;3904:18;;:::i;:::-;-1:-1:-1;3951:1:1;3940:13;;3764:195::o;4312:228::-;4352:7;4478:1;4410:66;4406:74;4403:1;4400:81;4395:1;4388:9;4381:17;4377:105;4374:131;;;4485:18;;:::i;:::-;-1:-1:-1;4525:9:1;;4312:228::o;4545:274::-;4585:1;4611;4601:189;;4646:77;4643:1;4636:88;4747:4;4744:1;4737:15;4775:4;4772:1;4765:15;4601:189;-1:-1:-1;4804:9:1;;4545:274::o;5175:128::-;5215:3;5246:1;5242:6;5239:1;5236:13;5233:39;;;5252:18;;:::i;:::-;-1:-1:-1;5288:9:1;;5175:128::o;5952:277::-;6019:6;6072:2;6060:9;6051:7;6047:23;6043:32;6040:52;;;6088:1;6085;6078:12;6040:52;6120:9;6114:16;6173:5;6166:13;6159:21;6152:5;6149:32;6139:60;;6195:1;6192;6185:12;7282:332;7489:6;7478:9;7471:25;7532:2;7527;7516:9;7512:18;7505:30;7452:4;7552:56;7604:2;7593:9;7589:18;7581:6;7552:56;:::i;9899:258::-;9971:1;9981:113;9995:6;9992:1;9989:13;9981:113;;;10071:11;;;10065:18;10052:11;;;10045:39;10017:2;10010:10;9981:113;;;10112:6;10109:1;10106:13;10103:48;;;10147:1;10138:6;10133:3;10129:16;10122:27;10103:48;;9899:258;;;:::o;10162:274::-;10291:3;10329:6;10323:13;10345:53;10391:6;10386:3;10379:4;10371:6;10367:17;10345:53;:::i;:::-;10414:16;;;;;10162:274;-1:-1:-1;;10162:274:1:o;10799:442::-;10948:2;10937:9;10930:21;10911:4;10980:6;10974:13;11023:6;11018:2;11007:9;11003:18;10996:34;11039:66;11098:6;11093:2;11082:9;11078:18;11073:2;11065:6;11061:15;11039:66;:::i;:::-;11157:2;11145:15;11162:66;11141:88;11126:104;;;;11232:2;11122:113;;10799:442;-1:-1:-1;;10799:442:1:o
Swarm Source
ipfs://28dc7e9b4c16b1cec1212e5a5c53b56273de09ef8ce3d1a0fe38358c09da18d4
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,005,726.41
Net Worth in MOVR
Token Allocations
FRAX
70.20%
MIM
15.89%
DAI
13.91%
Others
0.00%
Multichain Portfolio | 35 Chains
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.