Source Code
Latest 25 from a total of 288 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Execute Transact... | 24355705 | 14 days ago | IN | 0 ETH | 0.0005899 | ||||
| Confirm Transact... | 24355703 | 14 days ago | IN | 0 ETH | 0.00007832 | ||||
| Confirm Transact... | 24355702 | 14 days ago | IN | 0 ETH | 0.00007927 | ||||
| Confirm Transact... | 24355701 | 14 days ago | IN | 0 ETH | 0.00008249 | ||||
| Confirm Transact... | 24355700 | 14 days ago | IN | 0 ETH | 0.00010757 | ||||
| Submit Transacti... | 24355699 | 14 days ago | IN | 0 ETH | 0.00011622 | ||||
| Execute Transact... | 24355425 | 14 days ago | IN | 0 ETH | 0.00005838 | ||||
| Confirm Transact... | 24355423 | 14 days ago | IN | 0 ETH | 0.00002952 | ||||
| Confirm Transact... | 24355420 | 14 days ago | IN | 0 ETH | 0.00002776 | ||||
| Confirm Transact... | 24355419 | 14 days ago | IN | 0 ETH | 0.00002467 | ||||
| Confirm Transact... | 24355409 | 14 days ago | IN | 0 ETH | 0.00002694 | ||||
| Submit Transacti... | 24355408 | 14 days ago | IN | 0 ETH | 0.00005359 | ||||
| Execute Transact... | 24129378 | 46 days ago | IN | 0 ETH | 0.00001955 | ||||
| Confirm Transact... | 24129375 | 46 days ago | IN | 0 ETH | 0.00000276 | ||||
| Confirm Transact... | 24129373 | 46 days ago | IN | 0 ETH | 0.00000271 | ||||
| Confirm Transact... | 24129372 | 46 days ago | IN | 0 ETH | 0.00000283 | ||||
| Confirm Transact... | 24129371 | 46 days ago | IN | 0 ETH | 0.00000345 | ||||
| Submit Transacti... | 24129369 | 46 days ago | IN | 0 ETH | 0.00000372 | ||||
| Execute Transact... | 24129359 | 46 days ago | IN | 0 ETH | 0.00000506 | ||||
| Confirm Transact... | 24129358 | 46 days ago | IN | 0 ETH | 0.00000263 | ||||
| Confirm Transact... | 24129357 | 46 days ago | IN | 0 ETH | 0.00000255 | ||||
| Confirm Transact... | 24129356 | 46 days ago | IN | 0 ETH | 0.00000227 | ||||
| Confirm Transact... | 24129354 | 46 days ago | IN | 0 ETH | 0.0000032 | ||||
| Submit Transacti... | 24129353 | 46 days ago | IN | 0 ETH | 0.00000631 | ||||
| Execute Transact... | 23908201 | 77 days ago | IN | 0 ETH | 0.00001555 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MultiSigWallet
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 800 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.22;
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
/// @title Multi-Signature Wallet
/// @notice Multi-signature wallet with role based access for admins and signers.
/// @dev Uses OpenZeppelin's AccessControl for role based access.
contract MultiSigWallet is AccessControl, ReentrancyGuard {
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
bytes32 public constant SIGNER_ROLE = keccak256("SIGNER_ROLE");
uint256 public requiredConfirmations;
uint256 public transactionCount;
struct Transaction {
address to;
uint256 value;
bytes data;
bool executed;
uint256 confirmations;
}
mapping(uint256 => Transaction) public transactions;
mapping(uint256 => mapping(address => bool)) public isConfirmed;
/// -------------------- Events -------------------- ///
event Deposit(address indexed sender, uint256 amount);
event SubmitTransaction(uint256 indexed txId, address indexed to, uint256 value, bytes data);
event ConfirmTransaction(uint256 indexed txId, address indexed signer);
event ExecuteTransaction(uint256 indexed txId);
/// ------------------ Modifiers ------------------ ///
modifier onlySigner() {
require(hasRole(SIGNER_ROLE, msg.sender), "MultiSig: caller is not a signer");
_;
}
/// ------------------ Constructor ------------------ ///
constructor(
address _admin,
address[] memory signers,
uint256 _requiredConfirmations
) {
require(_requiredConfirmations > 0, "Confirmations must be > 0");
require(signers.length >= _requiredConfirmations, "Insufficient signers");
requiredConfirmations = _requiredConfirmations;
_grantRole(DEFAULT_ADMIN_ROLE, _admin);
_grantRole(ADMIN_ROLE, _admin);
for (uint256 i = 0; i < signers.length; i++) {
_grantRole(SIGNER_ROLE, signers[i]);
}
}
/// ------------------- Fallback -------------------- ///
receive() external payable {
emit Deposit(msg.sender, msg.value);
}
/// ----------------- Transaction Logic ----------------- ///
function submitTransaction(
address to,
uint256 value,
bytes calldata data
) external onlySigner returns (uint256 txId) {
require(to != address(0), "Invalid destination address");
txId = transactionCount;
transactions[txId] = Transaction({
to: to,
value: value,
data: data,
executed: false,
confirmations: 0
});
transactionCount++;
emit SubmitTransaction(txId, to, value, data);
}
function confirmTransaction(uint256 txId) external onlySigner {
require(transactions[txId].to != address(0), "Transaction does not exist");
require(!isConfirmed[txId][msg.sender], "Transaction already confirmed");
isConfirmed[txId][msg.sender] = true;
transactions[txId].confirmations += 1;
emit ConfirmTransaction(txId, msg.sender);
}
function executeTransaction(uint256 txId) external onlySigner nonReentrant {
Transaction storage txn = transactions[txId];
require(txn.to != address(0), "Transaction does not exist");
require(!txn.executed, "Transaction already executed");
require(txn.confirmations >= requiredConfirmations, "Insufficient confirmations");
txn.executed = true;
(bool success, ) = txn.to.call{value: txn.value}(txn.data);
require(success, "Transaction execution failed");
emit ExecuteTransaction(txId);
}
/// ----------------- Admin Functions ----------------- ///
function cancelTransaction(uint256 txId) external onlyRole(ADMIN_ROLE) {
require(!transactions[txId].executed, "Transaction already executed");
transactions[txId].executed = true;
}
function addSigner(address signer) external onlyRole(ADMIN_ROLE) {
require(signer != address(0), "Zero address not allowed");
require(!hasRole(SIGNER_ROLE, signer), "Signer already exists");
grantRole(SIGNER_ROLE, signer);
}
function removeSigner(address signer) external onlyRole(ADMIN_ROLE) {
require(hasRole(SIGNER_ROLE, signer), "Signer does not exist");
revokeRole(SIGNER_ROLE, signer);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
import {IAccessControl} from "./IAccessControl.sol";
import {Context} from "../utils/Context.sol";
import {ERC165} from "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC-165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted to signal this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}{
"optimizer": {
"enabled": true,
"runs": 800
},
"viaIR": true,
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"_requiredConfirmations","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"ConfirmTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"SubmitTransaction","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"addSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"cancelTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"removeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredConfirmations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"submitTransaction","outputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"confirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234620001d85762001757803803806200001d81620001f3565b928339810190606081830312620001d857620000398162000219565b602080830151909391926001600160401b039291838111620001d85781019180601f84011215620001d8578251938411620001dd576005928460051b878062000084818401620001f3565b809881520191830101928311620001d85787809201905b838210620001be575050505060400151926001936001805580156200017957808451106200013457849591620000e091600255620000d9816200022e565b50620002ae565b506000935b620000fb575b6040516113499081620003ee8239f35b82518410156200012e5783821b83018101518594859162000125906001600160a01b031662000350565b500193620000e5565b620000eb565b60405162461bcd60e51b815260048101879052601460248201527f496e73756666696369656e74207369676e6572730000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260048101879052601960248201527f436f6e6669726d6174696f6e73206d757374206265203e2030000000000000006044820152606490fd5b828091620001cc8462000219565b8152019101906200009b565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b03811183821017620001dd57604052565b51906001600160a01b0382168203620001d857565b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff16620002aa57818052816020526040822081835260205260408220600160ff198254161790553391600080516020620017378339815191528180a4600190565b5090565b6001600160a01b031660008181527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec60205260408120549091907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759060ff166200034b57808352826020526040832082845260205260408320600160ff1982541617905560008051602062001737833981519152339380a4600190565b505090565b6001600160a01b031660008181527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260408120549091907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f709060ff166200034b57808352826020526040832082845260205260408320600160ff1982541617905560008051602062001737833981519152339380a460019056fe6080806040526004361015610049575b50361561001b57600080fd5b6040513481527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c60203392a2005b60003560e01c90816301ffc9a714610e4c575080630e316ab714610d61578063248a9ca314610d325780632f2ff15d14610cf35780633380c0d814610c9b57806336568abe14610c5457806375b238fc14610c1957806380f59a6514610bcb57806382e717f714610bad57806391d1485414610b5f5780639ace38c214610a0a578063a1ebf35d146109cf578063a217fddf146109b3578063b77bf60014610995578063c01a8c841461084b578063c6427474146104c4578063d547741f14610485578063eb12d61e146103655763ee22610b14610127573861000f565b3461036057602080600319360112610360576004357fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7060005260008252604060002033600052825261018060ff60406000205416610f73565b600191600283541461034e5760028355816000526004815260406000206001600160a01b03815416906101b4821515610fbe565b60038101908154916101c960ff841615610f27565b600482015460025411610309578660ff1980941617905560028682015491016040519260009180546101fa81610ecb565b92818b169182156102f55750506001146102bd575b5050916000939181859403925af13d156102b8573d61022d8161100a565b9061023b6040519283610f05565b81526000833d92013e5b1561027457507fae30dc3f11bb6b178aafe5e7fc568fb6d87200068a944a8015c0db1b4533dbb8600080a28055005b6064906040519062461bcd60e51b82526004820152601c60248201527f5472616e73616374696f6e20657865637574696f6e206661696c6564000000006044820152fd5b610245565b9091506000528460002085886000925b8484106102e3575050509083019050818361020f565b805484880152019101908887916102cd565b16865250508015150283019050818361020f565b60405162461bcd60e51b815260048101869052601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e730000000000006044820152606490fd5b604051633ee5aeb560e01b8152600490fd5b600080fd5b34610360576020806003193601126103605761037f610e9f565b610387611026565b6001600160a01b0381168015610440577fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70908160005260008452604060002090600052835260ff604060002054166103fb576103f9926000918252526103f46001604060002001546110a0565b6110c6565b005b60405162461bcd60e51b815260048101849052601560248201527f5369676e657220616c72656164792065786973747300000000000000000000006044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606490fd5b34610360576040366003190112610360576103f96004356104a4610eb5565b908060005260006020526104bf6001604060002001546110a0565b61129d565b34610360576060366003190112610360576104dd610e9f565b67ffffffffffffffff6044358181116103605736602382011215610360578181600401351161036057366024826004013583010111610360573360009081527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260409020546105519060ff16610f73565b6001600160a01b039283811615610806576003549260405160a08101818110838211176107f057604052858316815260208101916024358352610597856004013561100a565b6105a46040519182610f05565b600486013580825260248701602083013760006020876004013583010152604083019081526000606084015260006080840152866000526004602052604060002093888451167fffffffffffffffffffffffff00000000000000000000000000000000000000008654161785555160018501555180519182116107f05761062e6002850154610ecb565b601f81116107a9575b50602090601f83116001146107365791806004949260809460009261072b575b50508160011b916000199060031b1c19161760028501555b600384016060820151151560ff8019835416911617905501519101556003549060001982146107155760209460607ec2937519b07b47ea25f52e915dd99023f9b3e1aaeef041ddecbac3e9400bbe926001879501600355604051928391602435835260408a84015287600401356040840152876004013560248901858501376000848960040135850101521695601f8019916004013501168101030190a3604051908152f35b634e487b7160e01b600052601160045260246000fd5b015190508a80610657565b90601f198316916002860160005260206000209260005b81811061079157509260019285926080966004989610610778575b505050811b01600285015561066f565b015160001960f88460031b161c191690558a8080610768565b9293602060018192878601518155019501930161074d565b600285016000526020600020601f840160051c8101602085106107e9575b601f830160051c820181106107dd575050610637565b600081556001016107c7565b50806107c7565b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642064657374696e6174696f6e206164647265737300000000006044820152606490fd5b346103605760208060031936011261036057600435907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f706000526000815260406000203360005281526108a560ff60406000205416610f73565b81600052600481526108c66001600160a01b03604060002054161515610fbe565b8160005260058152604060002033600052815260ff6040600020541661095157600490826000526005815260406000203360005281526040600020600160ff198254161790558260005252600460406000200180549060018201809211610715575533907fcb0f87c749501e9cd0f274dc3a2c62b91b6a4f2909001c6c13663072b739d3d6600080a3005b6064906040519062461bcd60e51b82526004820152601d60248201527f5472616e73616374696f6e20616c726561647920636f6e6669726d65640000006044820152fd5b34610360576000366003190112610360576020600354604051908152f35b3461036057600036600319011261036057602060405160008152f35b346103605760003660031901126103605760206040517fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f708152f35b3461036057602080600319360112610360576004356000526004815260406000206001600160a01b0381541691600191600181015491600282016040518095600090835493610a5885610ecb565b9485855286600182169182600014610b3d575050600114610afe575b5050610a8892509694969392930385610f05565b600460ff6003830154169101549060405195869485528385015260a060408501528451928360a08601526000955b848710610ae557505060c094506000858486010152151560608401526080830152601f80199101168101030190f35b86810182015188880160c0015295810195879550610ab6565b85925060005281600020906000915b858310610b25575050610a8893508201018880610a74565b8054838b018501528994508693909201918101610b0d565b9250935050610a8894915060ff191682840152151560051b8201018880610a74565b3461036057604036600319011261036057610b78610eb5565b60043560005260006020526001600160a01b0360406000209116600052602052602060ff604060002054166040519015158152f35b34610360576000366003190112610360576020600254604051908152f35b3461036057604036600319011261036057610be4610eb5565b60043560005260056020526001600160a01b0360406000209116600052602052602060ff604060002054166040519015158152f35b346103605760003660031901126103605760206040517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b3461036057604036600319011261036057610c6d610eb5565b336001600160a01b03821603610c89576103f99060043561129d565b60405163334bd91960e11b8152600490fd5b3461036057602036600319011261036057600435610cb7611026565b806000526004602052610cd560ff6003604060002001541615610f27565b6000908152600460205260409020600301805460ff19166001179055005b34610360576040366003190112610360576103f9600435610d12610eb5565b90806000526000602052610d2d6001604060002001546110a0565b611178565b346103605760203660031901126103605760043560005260006020526020600160406000200154604051908152f35b3461036057602036600319011261036057610d7a610e9f565b610d82611026565b6001600160a01b03811660009081527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260409020547fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70919060ff1615610e07576103f9916000526000602052610e026001604060002001546110a0565b6111f2565b60405162461bcd60e51b815260206004820152601560248201527f5369676e657220646f6573206e6f7420657869737400000000000000000000006044820152606490fd5b34610360576020366003190112610360576004359063ffffffff60e01b821680920361036057602091637965db0b60e01b8114908115610e8e575b5015158152f35b6301ffc9a760e01b14905083610e87565b600435906001600160a01b038216820361036057565b602435906001600160a01b038216820361036057565b90600182811c92168015610efb575b6020831014610ee557565b634e487b7160e01b600052602260045260246000fd5b91607f1691610eda565b90601f8019910116810190811067ffffffffffffffff8211176107f057604052565b15610f2e57565b60405162461bcd60e51b815260206004820152601c60248201527f5472616e73616374696f6e20616c7265616479206578656375746564000000006044820152606490fd5b15610f7a57565b606460405162461bcd60e51b815260206004820152602060248201527f4d756c74695369673a2063616c6c6572206973206e6f742061207369676e65726044820152fd5b15610fc557565b60405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e20646f6573206e6f742065786973740000000000006044820152606490fd5b67ffffffffffffffff81116107f057601f01601f191660200190565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec60205260409020547fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759060ff16156110825750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600060205260406000203360005260205260ff60406000205416156110825750565b6001600160a01b031660008181527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260408120549091907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f709060ff1661117357808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b90600091808352826020526001600160a01b036040842092169182845260205260ff6040842054161560001461117357808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b6001600160a01b031660008181527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260408120549091907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f709060ff16156111735780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b90600091808352826020526001600160a01b036040842092169182845260205260ff6040842054166000146111735780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a460019056fea2646970667358221220b523387370e036185faf63a80c0969871f93e8f9bb707e51382cf24d7306a62464736f6c634300081600332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d000000000000000000000000011a167cb872e308a7ccab42f68403fadabda9d5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000d3b454ed45e4630410e0d96698e0314c83505027000000000000000000000000b9d08a7e1e047ef6759927f41864b11f78415a45000000000000000000000000288cf3a5c8973c46dd950f4e36fbefa84697605b0000000000000000000000007bd0020a52745408da7eab9b8b0e18f5f1ba6eab00000000000000000000000066d472b41bc27ffd67ca24ea71c69044cdb3d8170000000000000000000000009bc7ff2afdc8d597533fbed6b2c515151d74cfb3000000000000000000000000e61925e477ded3d220ebee1d3f8169e3ff7eb0c4
Deployed Bytecode
0x6080806040526004361015610049575b50361561001b57600080fd5b6040513481527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c60203392a2005b60003560e01c90816301ffc9a714610e4c575080630e316ab714610d61578063248a9ca314610d325780632f2ff15d14610cf35780633380c0d814610c9b57806336568abe14610c5457806375b238fc14610c1957806380f59a6514610bcb57806382e717f714610bad57806391d1485414610b5f5780639ace38c214610a0a578063a1ebf35d146109cf578063a217fddf146109b3578063b77bf60014610995578063c01a8c841461084b578063c6427474146104c4578063d547741f14610485578063eb12d61e146103655763ee22610b14610127573861000f565b3461036057602080600319360112610360576004357fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7060005260008252604060002033600052825261018060ff60406000205416610f73565b600191600283541461034e5760028355816000526004815260406000206001600160a01b03815416906101b4821515610fbe565b60038101908154916101c960ff841615610f27565b600482015460025411610309578660ff1980941617905560028682015491016040519260009180546101fa81610ecb565b92818b169182156102f55750506001146102bd575b5050916000939181859403925af13d156102b8573d61022d8161100a565b9061023b6040519283610f05565b81526000833d92013e5b1561027457507fae30dc3f11bb6b178aafe5e7fc568fb6d87200068a944a8015c0db1b4533dbb8600080a28055005b6064906040519062461bcd60e51b82526004820152601c60248201527f5472616e73616374696f6e20657865637574696f6e206661696c6564000000006044820152fd5b610245565b9091506000528460002085886000925b8484106102e3575050509083019050818361020f565b805484880152019101908887916102cd565b16865250508015150283019050818361020f565b60405162461bcd60e51b815260048101869052601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e730000000000006044820152606490fd5b604051633ee5aeb560e01b8152600490fd5b600080fd5b34610360576020806003193601126103605761037f610e9f565b610387611026565b6001600160a01b0381168015610440577fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70908160005260008452604060002090600052835260ff604060002054166103fb576103f9926000918252526103f46001604060002001546110a0565b6110c6565b005b60405162461bcd60e51b815260048101849052601560248201527f5369676e657220616c72656164792065786973747300000000000000000000006044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606490fd5b34610360576040366003190112610360576103f96004356104a4610eb5565b908060005260006020526104bf6001604060002001546110a0565b61129d565b34610360576060366003190112610360576104dd610e9f565b67ffffffffffffffff6044358181116103605736602382011215610360578181600401351161036057366024826004013583010111610360573360009081527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260409020546105519060ff16610f73565b6001600160a01b039283811615610806576003549260405160a08101818110838211176107f057604052858316815260208101916024358352610597856004013561100a565b6105a46040519182610f05565b600486013580825260248701602083013760006020876004013583010152604083019081526000606084015260006080840152866000526004602052604060002093888451167fffffffffffffffffffffffff00000000000000000000000000000000000000008654161785555160018501555180519182116107f05761062e6002850154610ecb565b601f81116107a9575b50602090601f83116001146107365791806004949260809460009261072b575b50508160011b916000199060031b1c19161760028501555b600384016060820151151560ff8019835416911617905501519101556003549060001982146107155760209460607ec2937519b07b47ea25f52e915dd99023f9b3e1aaeef041ddecbac3e9400bbe926001879501600355604051928391602435835260408a84015287600401356040840152876004013560248901858501376000848960040135850101521695601f8019916004013501168101030190a3604051908152f35b634e487b7160e01b600052601160045260246000fd5b015190508a80610657565b90601f198316916002860160005260206000209260005b81811061079157509260019285926080966004989610610778575b505050811b01600285015561066f565b015160001960f88460031b161c191690558a8080610768565b9293602060018192878601518155019501930161074d565b600285016000526020600020601f840160051c8101602085106107e9575b601f830160051c820181106107dd575050610637565b600081556001016107c7565b50806107c7565b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642064657374696e6174696f6e206164647265737300000000006044820152606490fd5b346103605760208060031936011261036057600435907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f706000526000815260406000203360005281526108a560ff60406000205416610f73565b81600052600481526108c66001600160a01b03604060002054161515610fbe565b8160005260058152604060002033600052815260ff6040600020541661095157600490826000526005815260406000203360005281526040600020600160ff198254161790558260005252600460406000200180549060018201809211610715575533907fcb0f87c749501e9cd0f274dc3a2c62b91b6a4f2909001c6c13663072b739d3d6600080a3005b6064906040519062461bcd60e51b82526004820152601d60248201527f5472616e73616374696f6e20616c726561647920636f6e6669726d65640000006044820152fd5b34610360576000366003190112610360576020600354604051908152f35b3461036057600036600319011261036057602060405160008152f35b346103605760003660031901126103605760206040517fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f708152f35b3461036057602080600319360112610360576004356000526004815260406000206001600160a01b0381541691600191600181015491600282016040518095600090835493610a5885610ecb565b9485855286600182169182600014610b3d575050600114610afe575b5050610a8892509694969392930385610f05565b600460ff6003830154169101549060405195869485528385015260a060408501528451928360a08601526000955b848710610ae557505060c094506000858486010152151560608401526080830152601f80199101168101030190f35b86810182015188880160c0015295810195879550610ab6565b85925060005281600020906000915b858310610b25575050610a8893508201018880610a74565b8054838b018501528994508693909201918101610b0d565b9250935050610a8894915060ff191682840152151560051b8201018880610a74565b3461036057604036600319011261036057610b78610eb5565b60043560005260006020526001600160a01b0360406000209116600052602052602060ff604060002054166040519015158152f35b34610360576000366003190112610360576020600254604051908152f35b3461036057604036600319011261036057610be4610eb5565b60043560005260056020526001600160a01b0360406000209116600052602052602060ff604060002054166040519015158152f35b346103605760003660031901126103605760206040517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b3461036057604036600319011261036057610c6d610eb5565b336001600160a01b03821603610c89576103f99060043561129d565b60405163334bd91960e11b8152600490fd5b3461036057602036600319011261036057600435610cb7611026565b806000526004602052610cd560ff6003604060002001541615610f27565b6000908152600460205260409020600301805460ff19166001179055005b34610360576040366003190112610360576103f9600435610d12610eb5565b90806000526000602052610d2d6001604060002001546110a0565b611178565b346103605760203660031901126103605760043560005260006020526020600160406000200154604051908152f35b3461036057602036600319011261036057610d7a610e9f565b610d82611026565b6001600160a01b03811660009081527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260409020547fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70919060ff1615610e07576103f9916000526000602052610e026001604060002001546110a0565b6111f2565b60405162461bcd60e51b815260206004820152601560248201527f5369676e657220646f6573206e6f7420657869737400000000000000000000006044820152606490fd5b34610360576020366003190112610360576004359063ffffffff60e01b821680920361036057602091637965db0b60e01b8114908115610e8e575b5015158152f35b6301ffc9a760e01b14905083610e87565b600435906001600160a01b038216820361036057565b602435906001600160a01b038216820361036057565b90600182811c92168015610efb575b6020831014610ee557565b634e487b7160e01b600052602260045260246000fd5b91607f1691610eda565b90601f8019910116810190811067ffffffffffffffff8211176107f057604052565b15610f2e57565b60405162461bcd60e51b815260206004820152601c60248201527f5472616e73616374696f6e20616c7265616479206578656375746564000000006044820152606490fd5b15610f7a57565b606460405162461bcd60e51b815260206004820152602060248201527f4d756c74695369673a2063616c6c6572206973206e6f742061207369676e65726044820152fd5b15610fc557565b60405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e20646f6573206e6f742065786973740000000000006044820152606490fd5b67ffffffffffffffff81116107f057601f01601f191660200190565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec60205260409020547fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759060ff16156110825750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600060205260406000203360005260205260ff60406000205416156110825750565b6001600160a01b031660008181527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260408120549091907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f709060ff1661117357808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b90600091808352826020526001600160a01b036040842092169182845260205260ff6040842054161560001461117357808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b6001600160a01b031660008181527f059f08e7d7ba1c82eddc57afae67f80df851baf38a099607a779825038c3ce5b60205260408120549091907fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f709060ff16156111735780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b90600091808352826020526001600160a01b036040842092169182845260205260ff6040842054166000146111735780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a460019056fea2646970667358221220b523387370e036185faf63a80c0969871f93e8f9bb707e51382cf24d7306a62464736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000011a167cb872e308a7ccab42f68403fadabda9d5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000d3b454ed45e4630410e0d96698e0314c83505027000000000000000000000000b9d08a7e1e047ef6759927f41864b11f78415a45000000000000000000000000288cf3a5c8973c46dd950f4e36fbefa84697605b0000000000000000000000007bd0020a52745408da7eab9b8b0e18f5f1ba6eab00000000000000000000000066d472b41bc27ffd67ca24ea71c69044cdb3d8170000000000000000000000009bc7ff2afdc8d597533fbed6b2c515151d74cfb3000000000000000000000000e61925e477ded3d220ebee1d3f8169e3ff7eb0c4
-----Decoded View---------------
Arg [0] : _admin (address): 0x011a167Cb872e308a7CcAb42f68403fADAbDa9d5
Arg [1] : signers (address[]): 0xd3b454ed45E4630410E0d96698e0314C83505027,0xB9D08A7E1e047eF6759927F41864b11F78415a45,0x288Cf3A5c8973C46dD950F4E36FbEfA84697605B,0x7bD0020a52745408Da7eaB9B8B0e18f5F1BA6EaB,0x66D472B41bc27FFd67CA24ea71c69044cDb3d817,0x9Bc7fF2afdC8D597533FbeD6B2C515151d74CfB3,0xe61925e477dED3d220EBee1D3f8169E3fF7Eb0C4
Arg [2] : _requiredConfirmations (uint256): 4
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000011a167cb872e308a7ccab42f68403fadabda9d5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 000000000000000000000000d3b454ed45e4630410e0d96698e0314c83505027
Arg [5] : 000000000000000000000000b9d08a7e1e047ef6759927f41864b11f78415a45
Arg [6] : 000000000000000000000000288cf3a5c8973c46dd950f4e36fbefa84697605b
Arg [7] : 0000000000000000000000007bd0020a52745408da7eab9b8b0e18f5f1ba6eab
Arg [8] : 00000000000000000000000066d472b41bc27ffd67ca24ea71c69044cdb3d817
Arg [9] : 0000000000000000000000009bc7ff2afdc8d597533fbed6b2c515151d74cfb3
Arg [10] : 000000000000000000000000e61925e477ded3d220ebee1d3f8169e3ff7eb0c4
Loading...
Loading
Loading...
Loading
Net Worth in USD
$60,350,331.42
Net Worth in ETH
29,173.981424
Token Allocations
NAORIS
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.034493 | 1,749,653,273.3333 | $60,350,331.42 |
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.