Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21683347 | 16 mins ago | 0 ETH | |||||
21682090 | 4 hrs ago | 0 ETH | |||||
21679689 | 12 hrs ago | 0 ETH | |||||
21678453 | 16 hrs ago | 0 ETH | |||||
21678209 | 17 hrs ago | 0 ETH | |||||
21676320 | 23 hrs ago | 0 ETH | |||||
21676319 | 23 hrs ago | 0 ETH | |||||
21676318 | 23 hrs ago | 0 ETH | |||||
21676317 | 23 hrs ago | 0 ETH | |||||
21671293 | 40 hrs ago | 0 ETH | |||||
21668911 | 2 days ago | 0 ETH | |||||
21668811 | 2 days ago | 0 ETH | |||||
21668287 | 2 days ago | 0 ETH | |||||
21668238 | 2 days ago | 0 ETH | |||||
21661995 | 2 days ago | 0 ETH | |||||
21661994 | 2 days ago | 0 ETH | |||||
21661993 | 2 days ago | 0 ETH | |||||
21661992 | 2 days ago | 0 ETH | |||||
21661991 | 2 days ago | 0 ETH | |||||
21661990 | 2 days ago | 0 ETH | |||||
21661989 | 2 days ago | 0 ETH | |||||
21661988 | 2 days ago | 0 ETH | |||||
21661987 | 2 days ago | 0 ETH | |||||
21661986 | 2 days ago | 0 ETH | |||||
21657287 | 3 days ago | 0 ETH |
Loading...
Loading
Contract Name:
Registry
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; import "./MultiRole.sol"; import "./RegistryInterface.sol"; import "./SafeMath.sol"; /** * @title Registry for financial contracts and approved financial contract creators. * @dev Maintains a whitelist of financial contract creators that are allowed * to register new financial contracts and stores party members of a financial contract. */ contract Registry is RegistryInterface, MultiRole { using SafeMath for uint256; /**************************************** * INTERNAL VARIABLES AND STORAGE * ****************************************/ enum Roles { Owner, // The owner manages the set of ContractCreators. ContractCreator // Can register financial contracts. } // This enum is required because a `WasValid` state is required // to ensure that financial contracts cannot be re-registered. enum Validity { Invalid, Valid } // Local information about a contract. struct FinancialContract { Validity valid; uint128 index; } struct Party { address[] contracts; // Each financial contract address is stored in this array. // The address of each financial contract is mapped to its index for constant time look up and deletion. mapping(address => uint256) contractIndex; } // Array of all contracts that are approved to use the UMA Oracle. address[] public registeredContracts; // Map of financial contract contracts to the associated FinancialContract struct. mapping(address => FinancialContract) public contractMap; // Map each party member to their their associated Party struct. mapping(address => Party) private partyMap; /**************************************** * EVENTS * ****************************************/ event NewContractRegistered(address indexed contractAddress, address indexed creator, address[] parties); event PartyAdded(address indexed contractAddress, address indexed party); event PartyRemoved(address indexed contractAddress, address indexed party); /** * @notice Construct the Registry contract. */ constructor() public { _createExclusiveRole(uint256(Roles.Owner), uint256(Roles.Owner), msg.sender); // Start with no contract creators registered. _createSharedRole(uint256(Roles.ContractCreator), uint256(Roles.Owner), new address[](0)); } /**************************************** * REGISTRATION FUNCTIONS * ****************************************/ /** * @notice Registers a new financial contract. * @dev Only authorized contract creators can call this method. * @param parties array of addresses who become parties in the contract. * @param contractAddress address of the contract against which the parties are registered. */ function registerContract(address[] calldata parties, address contractAddress) external override onlyRoleHolder(uint256(Roles.ContractCreator)) { FinancialContract storage financialContract = contractMap[contractAddress]; require(contractMap[contractAddress].valid == Validity.Invalid, "Can only register once"); // Store contract address as a registered contract. registeredContracts.push(contractAddress); // No length check necessary because we should never hit (2^127 - 1) contracts. financialContract.index = uint128(registeredContracts.length.sub(1)); // For all parties in the array add them to the contract's parties. financialContract.valid = Validity.Valid; for (uint256 i = 0; i < parties.length; i = i.add(1)) { _addPartyToContract(parties[i], contractAddress); } emit NewContractRegistered(contractAddress, msg.sender, parties); } /** * @notice Adds a party member to the calling contract. * @dev msg.sender will be used to determine the contract that this party is added to. * @param party new party for the calling contract. */ function addPartyToContract(address party) external override { address contractAddress = msg.sender; require(contractMap[contractAddress].valid == Validity.Valid, "Can only add to valid contract"); _addPartyToContract(party, contractAddress); } /** * @notice Removes a party member from the calling contract. * @dev msg.sender will be used to determine the contract that this party is removed from. * @param partyAddress address to be removed from the calling contract. */ function removePartyFromContract(address partyAddress) external override { address contractAddress = msg.sender; Party storage party = partyMap[partyAddress]; uint256 numberOfContracts = party.contracts.length; require(numberOfContracts != 0, "Party has no contracts"); require(contractMap[contractAddress].valid == Validity.Valid, "Remove only from valid contract"); require(isPartyMemberOfContract(partyAddress, contractAddress), "Can only remove existing party"); // Index of the current location of the contract to remove. uint256 deleteIndex = party.contractIndex[contractAddress]; // Store the last contract's address to update the lookup map. address lastContractAddress = party.contracts[numberOfContracts - 1]; // Swap the contract to be removed with the last contract. party.contracts[deleteIndex] = lastContractAddress; // Update the lookup index with the new location. party.contractIndex[lastContractAddress] = deleteIndex; // Pop the last contract from the array and update the lookup map. party.contracts.pop(); delete party.contractIndex[contractAddress]; emit PartyRemoved(contractAddress, partyAddress); } /**************************************** * REGISTRY STATE GETTERS * ****************************************/ /** * @notice Returns whether the contract has been registered with the registry. * @dev If it is registered, it is an authorized participant in the UMA system. * @param contractAddress address of the financial contract. * @return bool indicates whether the contract is registered. */ function isContractRegistered(address contractAddress) external override view returns (bool) { return contractMap[contractAddress].valid == Validity.Valid; } /** * @notice Returns a list of all contracts that are associated with a particular party. * @param party address of the party. * @return an array of the contracts the party is registered to. */ function getRegisteredContracts(address party) external override view returns (address[] memory) { return partyMap[party].contracts; } /** * @notice Returns all registered contracts. * @return all registered contract addresses within the system. */ function getAllRegisteredContracts() external override view returns (address[] memory) { return registeredContracts; } /** * @notice checks if an address is a party of a contract. * @param party party to check. * @param contractAddress address to check against the party. * @return bool indicating if the address is a party of the contract. */ function isPartyMemberOfContract(address party, address contractAddress) public override view returns (bool) { uint256 index = partyMap[party].contractIndex[contractAddress]; return partyMap[party].contracts.length > index && partyMap[party].contracts[index] == contractAddress; } /**************************************** * INTERNAL FUNCTIONS * ****************************************/ function _addPartyToContract(address party, address contractAddress) internal { require(!isPartyMemberOfContract(party, contractAddress), "Can only register a party once"); uint256 contractIndex = partyMap[party].contracts.length; partyMap[party].contracts.push(contractAddress); partyMap[party].contractIndex[contractAddress] = contractIndex; emit PartyAdded(contractAddress, party); } }
pragma solidity ^0.6.0; library Exclusive { struct RoleMembership { address member; } function isMember(RoleMembership storage roleMembership, address memberToCheck) internal view returns (bool) { return roleMembership.member == memberToCheck; } function resetMember(RoleMembership storage roleMembership, address newMember) internal { require(newMember != address(0x0), "Cannot set an exclusive role to 0x0"); roleMembership.member = newMember; } function getMember(RoleMembership storage roleMembership) internal view returns (address) { return roleMembership.member; } function init(RoleMembership storage roleMembership, address initialMember) internal { resetMember(roleMembership, initialMember); } } library Shared { struct RoleMembership { mapping(address => bool) members; } function isMember(RoleMembership storage roleMembership, address memberToCheck) internal view returns (bool) { return roleMembership.members[memberToCheck]; } function addMember(RoleMembership storage roleMembership, address memberToAdd) internal { require(memberToAdd != address(0x0), "Cannot add 0x0 to a shared role"); roleMembership.members[memberToAdd] = true; } function removeMember(RoleMembership storage roleMembership, address memberToRemove) internal { roleMembership.members[memberToRemove] = false; } function init(RoleMembership storage roleMembership, address[] memory initialMembers) internal { for (uint256 i = 0; i < initialMembers.length; i++) { addMember(roleMembership, initialMembers[i]); } } } /** * @title Base class to manage permissions for the derived class. */ abstract contract MultiRole { using Exclusive for Exclusive.RoleMembership; using Shared for Shared.RoleMembership; enum RoleType { Invalid, Exclusive, Shared } struct Role { uint256 managingRole; RoleType roleType; Exclusive.RoleMembership exclusiveRoleMembership; Shared.RoleMembership sharedRoleMembership; } mapping(uint256 => Role) private roles; event ResetExclusiveMember(uint256 indexed roleId, address indexed newMember, address indexed manager); event AddedSharedMember(uint256 indexed roleId, address indexed newMember, address indexed manager); event RemovedSharedMember(uint256 indexed roleId, address indexed oldMember, address indexed manager); /** * @notice Reverts unless the caller is a member of the specified roleId. */ modifier onlyRoleHolder(uint256 roleId) { require(holdsRole(roleId, msg.sender), "Sender does not hold required role"); _; } /** * @notice Reverts unless the caller is a member of the manager role for the specified roleId. */ modifier onlyRoleManager(uint256 roleId) { require(holdsRole(roles[roleId].managingRole, msg.sender), "Can only be called by a role manager"); _; } /** * @notice Reverts unless the roleId represents an initialized, exclusive roleId. */ modifier onlyExclusive(uint256 roleId) { require(roles[roleId].roleType == RoleType.Exclusive, "Must be called on an initialized Exclusive role"); _; } /** * @notice Reverts unless the roleId represents an initialized, shared roleId. */ modifier onlyShared(uint256 roleId) { require(roles[roleId].roleType == RoleType.Shared, "Must be called on an initialized Shared role"); _; } /** * @notice Whether `memberToCheck` is a member of roleId. * @dev Reverts if roleId does not correspond to an initialized role. * @param roleId the Role to check. * @param memberToCheck the address to check. * @return True if `memberToCheck` is a member of `roleId`. */ function holdsRole(uint256 roleId, address memberToCheck) public view returns (bool) { Role storage role = roles[roleId]; if (role.roleType == RoleType.Exclusive) { return role.exclusiveRoleMembership.isMember(memberToCheck); } else if (role.roleType == RoleType.Shared) { return role.sharedRoleMembership.isMember(memberToCheck); } revert("Invalid roleId"); } /** * @notice Changes the exclusive role holder of `roleId` to `newMember`. * @dev Reverts if the caller is not a member of the managing role for `roleId` or if `roleId` is not an * initialized, ExclusiveRole. * @param roleId the ExclusiveRole membership to modify. * @param newMember the new ExclusiveRole member. */ function resetMember(uint256 roleId, address newMember) public onlyExclusive(roleId) onlyRoleManager(roleId) { roles[roleId].exclusiveRoleMembership.resetMember(newMember); emit ResetExclusiveMember(roleId, newMember, msg.sender); } /** * @notice Gets the current holder of the exclusive role, `roleId`. * @dev Reverts if `roleId` does not represent an initialized, exclusive role. * @param roleId the ExclusiveRole membership to check. * @return the address of the current ExclusiveRole member. */ function getMember(uint256 roleId) public view onlyExclusive(roleId) returns (address) { return roles[roleId].exclusiveRoleMembership.getMember(); } /** * @notice Adds `newMember` to the shared role, `roleId`. * @dev Reverts if `roleId` does not represent an initialized, SharedRole or if the caller is not a member of the * managing role for `roleId`. * @param roleId the SharedRole membership to modify. * @param newMember the new SharedRole member. */ function addMember(uint256 roleId, address newMember) public onlyShared(roleId) onlyRoleManager(roleId) { roles[roleId].sharedRoleMembership.addMember(newMember); emit AddedSharedMember(roleId, newMember, msg.sender); } /** * @notice Removes `memberToRemove` from the shared role, `roleId`. * @dev Reverts if `roleId` does not represent an initialized, SharedRole or if the caller is not a member of the * managing role for `roleId`. * @param roleId the SharedRole membership to modify. * @param memberToRemove the current SharedRole member to remove. */ function removeMember(uint256 roleId, address memberToRemove) public onlyShared(roleId) onlyRoleManager(roleId) { roles[roleId].sharedRoleMembership.removeMember(memberToRemove); emit RemovedSharedMember(roleId, memberToRemove, msg.sender); } /** * @notice Removes caller from the role, `roleId`. * @dev Reverts if the caller is not a member of the role for `roleId` or if `roleId` is not an * initialized, SharedRole. * @param roleId the SharedRole membership to modify. */ function renounceMembership(uint256 roleId) public onlyShared(roleId) onlyRoleHolder(roleId) { roles[roleId].sharedRoleMembership.removeMember(msg.sender); emit RemovedSharedMember(roleId, msg.sender, msg.sender); } /** * @notice Reverts if `roleId` is not initialized. */ modifier onlyValidRole(uint256 roleId) { require(roles[roleId].roleType != RoleType.Invalid, "Attempted to use an invalid roleId"); _; } /** * @notice Reverts if `roleId` is initialized. */ modifier onlyInvalidRole(uint256 roleId) { require(roles[roleId].roleType == RoleType.Invalid, "Cannot use a pre-existing role"); _; } /** * @notice Internal method to initialize a shared role, `roleId`, which will be managed by `managingRoleId`. * `initialMembers` will be immediately added to the role. * @dev Should be called by derived contracts, usually at construction time. Will revert if the role is already * initialized. */ function _createSharedRole( uint256 roleId, uint256 managingRoleId, address[] memory initialMembers ) internal onlyInvalidRole(roleId) { Role storage role = roles[roleId]; role.roleType = RoleType.Shared; role.managingRole = managingRoleId; role.sharedRoleMembership.init(initialMembers); require( roles[managingRoleId].roleType != RoleType.Invalid, "Attempted to use an invalid role to manage a shared role" ); } /** * @notice Internal method to initialize an exclusive role, `roleId`, which will be managed by `managingRoleId`. * `initialMember` will be immediately added to the role. * @dev Should be called by derived contracts, usually at construction time. Will revert if the role is already * initialized. */ function _createExclusiveRole( uint256 roleId, uint256 managingRoleId, address initialMember ) internal onlyInvalidRole(roleId) { Role storage role = roles[roleId]; role.roleType = RoleType.Exclusive; role.managingRole = managingRoleId; role.exclusiveRoleMembership.init(initialMember); require( roles[managingRoleId].roleType != RoleType.Invalid, "Attempted to use an invalid role to manage an exclusive role" ); } }
pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; /** * @title Interface for a registry of contracts and contract creators. */ interface RegistryInterface { /** * @notice Registers a new contract. * @dev Only authorized contract creators can call this method. * @param parties an array of addresses who become parties in the contract. * @param contractAddress defines the address of the deployed contract. */ function registerContract(address[] calldata parties, address contractAddress) external; /** * @notice Returns whether the contract has been registered with the registry. * @dev If it is registered, it is an authorized participant in the UMA system. * @param contractAddress address of the contract. * @return bool indicates whether the contract is registered. */ function isContractRegistered(address contractAddress) external view returns (bool); /** * @notice Returns a list of all contracts that are associated with a particular party. * @param party address of the party. * @return an array of the contracts the party is registered to. */ function getRegisteredContracts(address party) external view returns (address[] memory); /** * @notice Returns all registered contracts. * @return all registered contract addresses within the system. */ function getAllRegisteredContracts() external view returns (address[] memory); /** * @notice Adds a party to the calling contract. * @dev msg.sender must be the contract to which the party member is added. * @param party address to be added to the contract. */ function addPartyToContract(address party) external; /** * @notice Removes a party member to the calling contract. * @dev msg.sender must be the contract to which the party member is added. * @param party address to be removed from the contract. */ function removePartyFromContract(address party) external; /** * @notice checks if an address is a party in a contract. * @param party party to check. * @param contractAddress address to check against the party. * @return bool indicating if the address is a party of the contract. */ function isPartyMemberOfContract(address party, address contractAddress) external view returns (bool); }
pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"newMember","type":"address"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"AddedSharedMember","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address[]","name":"parties","type":"address[]"}],"name":"NewContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"party","type":"address"}],"name":"PartyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"party","type":"address"}],"name":"PartyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldMember","type":"address"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"RemovedSharedMember","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"newMember","type":"address"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ResetExclusiveMember","type":"event"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"},{"internalType":"address","name":"newMember","type":"address"}],"name":"addMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"party","type":"address"}],"name":"addPartyToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractMap","outputs":[{"internalType":"enum Registry.Validity","name":"valid","type":"uint8"},{"internalType":"uint128","name":"index","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllRegisteredContracts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"}],"name":"getMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"party","type":"address"}],"name":"getRegisteredContracts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"},{"internalType":"address","name":"memberToCheck","type":"address"}],"name":"holdsRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isContractRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"party","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isPartyMemberOfContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"parties","type":"address[]"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registeredContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"},{"internalType":"address","name":"memberToRemove","type":"address"}],"name":"removeMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"partyAddress","type":"address"}],"name":"removePartyFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"}],"name":"renounceMembership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roleId","type":"uint256"},{"internalType":"address","name":"newMember","type":"address"}],"name":"resetMember","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5062000029600080336001600160e01b036200005616565b6040805160008082526020820190925262000050916001916001600160e01b036200012916565b62000422565b826000808281526020819052604090206001015460ff1660028111156200007957fe5b14620000a25760405162461bcd60e51b815260040162000099906200035c565b60405180910390fd5b60008481526020819052604090206001808201805460ff191682800217905550838155620000e06002820184620001eb602090811b620013e917901c565b60008481526020819052604081206001015460ff1660028111156200010157fe5b1415620001225760405162461bcd60e51b8152600401620000999062000310565b5050505050565b826000808281526020819052604090206001015460ff1660028111156200014c57fe5b146200016c5760405162461bcd60e51b815260040162000099906200035c565b60008481526020818152604090912060018101805460ff1916600217905584815590620001a99060038301908590620013f362000204821b17901c565b60008481526020819052604081206001015460ff166002811115620001ca57fe5b1415620001225760405162461bcd60e51b81526004016200009990620003d6565b6200020082826001600160e01b036200024516565b5050565b60005b8151811015620002405762000237838383815181106200022357fe5b60200260200101516200028b60201b60201c565b60010162000207565b505050565b6001600160a01b0381166200026e5760405162461bcd60e51b8152600401620000999062000393565b81546001600160a01b0319166001600160a01b0391909116179055565b6001600160a01b038116620002b45760405162461bcd60e51b81526004016200009990620002d9565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6020808252601f908201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c6500604082015260600190565b6020808252603c908201526000805160206200189183398151915260408201527f20746f206d616e61676520616e206578636c757369766520726f6c6500000000606082015260800190565b6020808252601e908201527f43616e6e6f74207573652061207072652d6578697374696e6720726f6c650000604082015260600190565b60208082526023908201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060408201526203078360ec1b606082015260800190565b60208082526038908201526000805160206200189183398151915260408201527f20746f206d616e61676520612073686172656420726f6c650000000000000000606082015260800190565b61145f80620004326000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806374d0a67611610097578063ab3545e511610066578063ab3545e5146101f3578063d97c05be14610213578063e33c4cd214610226578063f9f6b49b14610239576100f5565b806374d0a6761461019a5780637a3edab0146101ad5780637cdc1cb9146101cd578063aaa14ca3146101e0576100f5565b8063303118d0116100d3578063303118d0146101405780633c0af3441461015357806366c8c250146101745780636be7658b14610187576100f5565b80631676ddc3146100fa578063167cdde714610118578063188c6ff81461012d575b600080fd5b61010261024c565b60405161010f9190610fae565b60405180910390f35b61012b610126366004610e41565b6102ae565b005b61010261013b366004610e41565b610302565b61012b61014e366004610e41565b610378565b610166610161366004610e41565b610530565b60405161010f929190611006565b61012b610182366004610e90565b61055e565b61012b610195366004610f29565b6106ff565b61012b6101a8366004610f29565b6107d5565b6101c06101bb366004610e5c565b6108ab565b60405161010f9190610ffb565b6101c06101db366004610f29565b61092e565b61012b6101ee366004610f11565b6109b7565b610206610201366004610f11565b610a73565b60405161010f9190610f4c565b61012b610221366004610f29565b610ad6565b610206610234366004610f11565b610bac565b6101c0610247366004610e41565b610bd3565b606060018054806020026020016040519081016040528092919081815260200182805480156102a457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610286575b5050505050905090565b3360008181526002602052604090205460019060ff16818111156102ce57fe5b146102f45760405162461bcd60e51b81526004016102eb906111c1565b60405180910390fd5b6102fe8282610c05565b5050565b6001600160a01b03811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561036c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161034e575b50505050509050919050565b6001600160a01b03811660009081526003602052604090208054339190806103b25760405162461bcd60e51b81526004016102eb9061118a565b60016001600160a01b03841660009081526002602052604090205460ff1660018111156103db57fe5b146103f85760405162461bcd60e51b81526004016102eb906110bf565b61040284846108ab565b61041e5760405162461bcd60e51b81526004016102eb906113b2565b6001600160a01b038316600090815260018301602052604081205483549091908490600019850190811061044e57fe5b60009182526020909120015484546001600160a01b039091169150819085908490811061047757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600186019091526040902082905583548490806104bd57fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387811680845260018801909252604080842084905551908916927f8e0a870c3ff65bd1f2852048eb92d693833891a8c0ab0827347177544464c57091a3505050505050565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b600161056a813361092e565b6105865760405162461bcd60e51b81526004016102eb90611244565b6001600160a01b0382166000908152600260205260408120805490919060ff1660018111156105b157fe5b146105ce5760405162461bcd60e51b81526004016102eb90611344565b60018054808201825560008290527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038616179055805461062291610ca8565b815460016fffffffffffffffffffffffffffffffff929092166101000270ffffffffffffffffffffffffffffffff00199091161760ff191617815560005b848110156106aa5761069286868381811061067757fe5b905060200201602081019061068c9190610e41565b85610c05565b6106a381600163ffffffff610cea16565b9050610660565b50336001600160a01b0316836001600160a01b03167f1b0bc775e5162f873356bcc1733155bd2eb9509f1774770f54b4f938287bcf0387876040516106f0929190610f60565b60405180910390a35050505050565b81600260008281526020819052604090206001015460ff16600281111561072257fe5b1461073f5760405162461bcd60e51b81526004016102eb906111f8565b600083815260208190526040902054839061075a903361092e565b6107765760405162461bcd60e51b81526004016102eb90611300565b6000848152602081905260409020610797906003018463ffffffff610d0f16565b60405133906001600160a01b0385169086907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a450505050565b81600260008281526020819052604090206001015460ff1660028111156107f857fe5b146108155760405162461bcd60e51b81526004016102eb906111f8565b6000838152602081905260409020548390610830903361092e565b61084c5760405162461bcd60e51b81526004016102eb90611300565b600084815260208190526040902061086d906003018463ffffffff610d3116565b60405133906001600160a01b0385169086907f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f90600090a450505050565b6001600160a01b03808316600081815260036020818152604080842095871684526001860182528320549383525291548110801561092457506001600160a01b0384811660009081526003602052604090208054918516918390811061090d57fe5b6000918252602090912001546001600160a01b0316145b9150505b92915050565b600082815260208190526040812060018082015460ff16600281111561095057fe5b141561097157610969600282018463ffffffff610d7c16565b915050610928565b6002600182015460ff16600281111561098657fe5b141561099f57610969600382018463ffffffff610d8f16565b60405162461bcd60e51b81526004016102eb9061137b565b80600260008281526020819052604090206001015460ff1660028111156109da57fe5b146109f75760405162461bcd60e51b81526004016102eb906111f8565b81610a02813361092e565b610a1e5760405162461bcd60e51b81526004016102eb90611244565b6000838152602081905260409020610a3f906003013363ffffffff610d0f16565b6040513390819085907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a4505050565b600081600160008281526020819052604090206001015460ff166002811115610a9857fe5b14610ab55760405162461bcd60e51b81526004016102eb9061112d565b6000838152602081905260409020610acf90600201610dae565b9392505050565b81600160008281526020819052604090206001015460ff166002811115610af957fe5b14610b165760405162461bcd60e51b81526004016102eb9061112d565b6000838152602081905260409020548390610b31903361092e565b610b4d5760405162461bcd60e51b81526004016102eb90611300565b6000848152602081905260409020610b6e906002018463ffffffff610dbb16565b60405133906001600160a01b0385169086907f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e74690600090a450505050565b60018181548110610bb957fe5b6000918252602090912001546001600160a01b0316905081565b600060016001600160a01b03831660009081526002602052604090205460ff166001811115610bfe57fe5b1492915050565b610c0f82826108ab565b15610c2c5760405162461bcd60e51b81526004016102eb90611286565b6001600160a01b038281166000818152600360209081526040808320805460018082018355828652848620820180546001600160a01b031916988a169889179055878652909101909252808320829055519093917f4b920dd33e12e37712086438f2afcecb921cefe83b717ca990222f53d7e2845491a3505050565b6000610acf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dfe565b600082820183811015610acf5760405162461bcd60e51b81526004016102eb906110f6565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116610d575760405162461bcd60e51b81526004016102eb90611088565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b90546001600160a01b0391821691161490565b6001600160a01b03166000908152602091909152604090205460ff1690565b546001600160a01b031690565b6001600160a01b038116610de15760405162461bcd60e51b81526004016102eb906112bd565b81546001600160a01b0319166001600160a01b0391909116179055565b60008184841115610e225760405162461bcd60e51b81526004016102eb9190611035565b505050900390565b80356001600160a01b038116811461092857600080fd5b600060208284031215610e52578081fd5b610acf8383610e2a565b60008060408385031215610e6e578081fd5b610e788484610e2a565b9150610e878460208501610e2a565b90509250929050565b600080600060408486031215610ea4578081fd5b833567ffffffffffffffff80821115610ebb578283fd5b81860187601f820112610ecc578384fd5b8035925081831115610edc578384fd5b8760208085028301011115610eef578384fd5b602081019550505080925050610f088560208601610e2a565b90509250925092565b600060208284031215610f22578081fd5b5035919050565b60008060408385031215610f3b578182fd5b82359150610e878460208501610e2a565b6001600160a01b0391909116815260200190565b60208082528181018390526000908460408401835b86811015610fa3578383016001600160a01b03610f928286610e2a565b168352925090830190600101610f75565b509695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610fef5783516001600160a01b031683529284019291840191600101610fca565b50909695505050505050565b901515815260200190565b604081016002841061101457fe5b9281526fffffffffffffffffffffffffffffffff9190911660209091015290565b6000602080835283518082850152825b8181101561106157858101830151858201604001528201611045565b818111156110725783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c6500604082015260600190565b6020808252601f908201527f52656d6f7665206f6e6c792066726f6d2076616c696420636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201527f204578636c757369766520726f6c650000000000000000000000000000000000606082015260800190565b60208082526016908201527f506172747920686173206e6f20636f6e74726163747300000000000000000000604082015260600190565b6020808252601e908201527f43616e206f6e6c792061646420746f2076616c696420636f6e74726163740000604082015260600190565b6020808252602c908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201526b2053686172656420726f6c6560a01b606082015260800190565b60208082526022908201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f6040820152616c6560f01b606082015260800190565b6020808252601e908201527f43616e206f6e6c792072656769737465722061207061727479206f6e63650000604082015260600190565b60208082526023908201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060408201526203078360ec1b606082015260800190565b60208082526024908201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60408201526330b3b2b960e11b606082015260800190565b60208082526016908201527f43616e206f6e6c79207265676973746572206f6e636500000000000000000000604082015260600190565b6020808252600e908201527f496e76616c696420726f6c654964000000000000000000000000000000000000604082015260600190565b6020808252601e908201527f43616e206f6e6c792072656d6f7665206578697374696e672070617274790000604082015260600190565b6102fe8282610dbb565b60005b81518110156114245761141c8383838151811061140f57fe5b6020026020010151610d31565b6001016113f6565b50505056fea2646970667358221220213cd3641e73404c660417360e3680ba6d199604dec08172b4daa2ac9aa0a75d64736f6c63430006060033417474656d7074656420746f2075736520616e20696e76616c696420726f6c65
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806374d0a67611610097578063ab3545e511610066578063ab3545e5146101f3578063d97c05be14610213578063e33c4cd214610226578063f9f6b49b14610239576100f5565b806374d0a6761461019a5780637a3edab0146101ad5780637cdc1cb9146101cd578063aaa14ca3146101e0576100f5565b8063303118d0116100d3578063303118d0146101405780633c0af3441461015357806366c8c250146101745780636be7658b14610187576100f5565b80631676ddc3146100fa578063167cdde714610118578063188c6ff81461012d575b600080fd5b61010261024c565b60405161010f9190610fae565b60405180910390f35b61012b610126366004610e41565b6102ae565b005b61010261013b366004610e41565b610302565b61012b61014e366004610e41565b610378565b610166610161366004610e41565b610530565b60405161010f929190611006565b61012b610182366004610e90565b61055e565b61012b610195366004610f29565b6106ff565b61012b6101a8366004610f29565b6107d5565b6101c06101bb366004610e5c565b6108ab565b60405161010f9190610ffb565b6101c06101db366004610f29565b61092e565b61012b6101ee366004610f11565b6109b7565b610206610201366004610f11565b610a73565b60405161010f9190610f4c565b61012b610221366004610f29565b610ad6565b610206610234366004610f11565b610bac565b6101c0610247366004610e41565b610bd3565b606060018054806020026020016040519081016040528092919081815260200182805480156102a457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610286575b5050505050905090565b3360008181526002602052604090205460019060ff16818111156102ce57fe5b146102f45760405162461bcd60e51b81526004016102eb906111c1565b60405180910390fd5b6102fe8282610c05565b5050565b6001600160a01b03811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561036c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161034e575b50505050509050919050565b6001600160a01b03811660009081526003602052604090208054339190806103b25760405162461bcd60e51b81526004016102eb9061118a565b60016001600160a01b03841660009081526002602052604090205460ff1660018111156103db57fe5b146103f85760405162461bcd60e51b81526004016102eb906110bf565b61040284846108ab565b61041e5760405162461bcd60e51b81526004016102eb906113b2565b6001600160a01b038316600090815260018301602052604081205483549091908490600019850190811061044e57fe5b60009182526020909120015484546001600160a01b039091169150819085908490811061047757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600186019091526040902082905583548490806104bd57fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387811680845260018801909252604080842084905551908916927f8e0a870c3ff65bd1f2852048eb92d693833891a8c0ab0827347177544464c57091a3505050505050565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b600161056a813361092e565b6105865760405162461bcd60e51b81526004016102eb90611244565b6001600160a01b0382166000908152600260205260408120805490919060ff1660018111156105b157fe5b146105ce5760405162461bcd60e51b81526004016102eb90611344565b60018054808201825560008290527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038616179055805461062291610ca8565b815460016fffffffffffffffffffffffffffffffff929092166101000270ffffffffffffffffffffffffffffffff00199091161760ff191617815560005b848110156106aa5761069286868381811061067757fe5b905060200201602081019061068c9190610e41565b85610c05565b6106a381600163ffffffff610cea16565b9050610660565b50336001600160a01b0316836001600160a01b03167f1b0bc775e5162f873356bcc1733155bd2eb9509f1774770f54b4f938287bcf0387876040516106f0929190610f60565b60405180910390a35050505050565b81600260008281526020819052604090206001015460ff16600281111561072257fe5b1461073f5760405162461bcd60e51b81526004016102eb906111f8565b600083815260208190526040902054839061075a903361092e565b6107765760405162461bcd60e51b81526004016102eb90611300565b6000848152602081905260409020610797906003018463ffffffff610d0f16565b60405133906001600160a01b0385169086907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a450505050565b81600260008281526020819052604090206001015460ff1660028111156107f857fe5b146108155760405162461bcd60e51b81526004016102eb906111f8565b6000838152602081905260409020548390610830903361092e565b61084c5760405162461bcd60e51b81526004016102eb90611300565b600084815260208190526040902061086d906003018463ffffffff610d3116565b60405133906001600160a01b0385169086907f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f90600090a450505050565b6001600160a01b03808316600081815260036020818152604080842095871684526001860182528320549383525291548110801561092457506001600160a01b0384811660009081526003602052604090208054918516918390811061090d57fe5b6000918252602090912001546001600160a01b0316145b9150505b92915050565b600082815260208190526040812060018082015460ff16600281111561095057fe5b141561097157610969600282018463ffffffff610d7c16565b915050610928565b6002600182015460ff16600281111561098657fe5b141561099f57610969600382018463ffffffff610d8f16565b60405162461bcd60e51b81526004016102eb9061137b565b80600260008281526020819052604090206001015460ff1660028111156109da57fe5b146109f75760405162461bcd60e51b81526004016102eb906111f8565b81610a02813361092e565b610a1e5760405162461bcd60e51b81526004016102eb90611244565b6000838152602081905260409020610a3f906003013363ffffffff610d0f16565b6040513390819085907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a4505050565b600081600160008281526020819052604090206001015460ff166002811115610a9857fe5b14610ab55760405162461bcd60e51b81526004016102eb9061112d565b6000838152602081905260409020610acf90600201610dae565b9392505050565b81600160008281526020819052604090206001015460ff166002811115610af957fe5b14610b165760405162461bcd60e51b81526004016102eb9061112d565b6000838152602081905260409020548390610b31903361092e565b610b4d5760405162461bcd60e51b81526004016102eb90611300565b6000848152602081905260409020610b6e906002018463ffffffff610dbb16565b60405133906001600160a01b0385169086907f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e74690600090a450505050565b60018181548110610bb957fe5b6000918252602090912001546001600160a01b0316905081565b600060016001600160a01b03831660009081526002602052604090205460ff166001811115610bfe57fe5b1492915050565b610c0f82826108ab565b15610c2c5760405162461bcd60e51b81526004016102eb90611286565b6001600160a01b038281166000818152600360209081526040808320805460018082018355828652848620820180546001600160a01b031916988a169889179055878652909101909252808320829055519093917f4b920dd33e12e37712086438f2afcecb921cefe83b717ca990222f53d7e2845491a3505050565b6000610acf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dfe565b600082820183811015610acf5760405162461bcd60e51b81526004016102eb906110f6565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116610d575760405162461bcd60e51b81526004016102eb90611088565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b90546001600160a01b0391821691161490565b6001600160a01b03166000908152602091909152604090205460ff1690565b546001600160a01b031690565b6001600160a01b038116610de15760405162461bcd60e51b81526004016102eb906112bd565b81546001600160a01b0319166001600160a01b0391909116179055565b60008184841115610e225760405162461bcd60e51b81526004016102eb9190611035565b505050900390565b80356001600160a01b038116811461092857600080fd5b600060208284031215610e52578081fd5b610acf8383610e2a565b60008060408385031215610e6e578081fd5b610e788484610e2a565b9150610e878460208501610e2a565b90509250929050565b600080600060408486031215610ea4578081fd5b833567ffffffffffffffff80821115610ebb578283fd5b81860187601f820112610ecc578384fd5b8035925081831115610edc578384fd5b8760208085028301011115610eef578384fd5b602081019550505080925050610f088560208601610e2a565b90509250925092565b600060208284031215610f22578081fd5b5035919050565b60008060408385031215610f3b578182fd5b82359150610e878460208501610e2a565b6001600160a01b0391909116815260200190565b60208082528181018390526000908460408401835b86811015610fa3578383016001600160a01b03610f928286610e2a565b168352925090830190600101610f75565b509695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610fef5783516001600160a01b031683529284019291840191600101610fca565b50909695505050505050565b901515815260200190565b604081016002841061101457fe5b9281526fffffffffffffffffffffffffffffffff9190911660209091015290565b6000602080835283518082850152825b8181101561106157858101830151858201604001528201611045565b818111156110725783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c6500604082015260600190565b6020808252601f908201527f52656d6f7665206f6e6c792066726f6d2076616c696420636f6e747261637400604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201527f204578636c757369766520726f6c650000000000000000000000000000000000606082015260800190565b60208082526016908201527f506172747920686173206e6f20636f6e74726163747300000000000000000000604082015260600190565b6020808252601e908201527f43616e206f6e6c792061646420746f2076616c696420636f6e74726163740000604082015260600190565b6020808252602c908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201526b2053686172656420726f6c6560a01b606082015260800190565b60208082526022908201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f6040820152616c6560f01b606082015260800190565b6020808252601e908201527f43616e206f6e6c792072656769737465722061207061727479206f6e63650000604082015260600190565b60208082526023908201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060408201526203078360ec1b606082015260800190565b60208082526024908201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60408201526330b3b2b960e11b606082015260800190565b60208082526016908201527f43616e206f6e6c79207265676973746572206f6e636500000000000000000000604082015260600190565b6020808252600e908201527f496e76616c696420726f6c654964000000000000000000000000000000000000604082015260600190565b6020808252601e908201527f43616e206f6e6c792072656d6f7665206578697374696e672070617274790000604082015260600190565b6102fe8282610dbb565b60005b81518110156114245761141c8383838151811061140f57fe5b6020026020010151610d31565b6001016113f6565b50505056fea2646970667358221220213cd3641e73404c660417360e3680ba6d199604dec08172b4daa2ac9aa0a75d64736f6c63430006060033
Deployed Bytecode Sourcemap
407:7961:1:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;407:7961:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;7099:130:1;;;:::i;:::-;;;;;;;;;;;;;;;;4151:273;;;;;;;;;:::i;:::-;;6814:146;;;;;;;;;:::i;4682:1278::-;;;;;;;;;:::i;1567:56::-;;;;;;;;;:::i;:::-;;;;;;;;;2943:979;;;;;;;;;:::i;6365:262:0:-;;;;;;;;;:::i;5751:239::-;;;;;;;;;:::i;7489:300:1:-;;;;;;;;;:::i;:::-;;;;;;;;3906:428:0;;;;;;;;;:::i;6894:235::-;;;;;;;;;:::i;5245:160::-;;;;;;;;;:::i;:::-;;;;;;;;4692:252;;;;;;;;;:::i;1437:36:1:-;;;;;;;;;:::i;6420:169::-;;;;;;;;;:::i;7099:130::-;7168:16;7203:19;7196:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7196:26:1;;;;;;;;;;;;;;;;;;;;;;;7099:130;:::o;4151:273::-;4248:10;4276:28;;;;:11;:28;;;;;:34;4314:14;;4276:34;;:52;;;;;;;;;4268:95;;;;-1:-1:-1;;;4268:95:1;;;;;;;;;;;;;;;;;4374:43;4394:5;4401:15;4374:19;:43::i;:::-;4151:273;;:::o;6814:146::-;-1:-1:-1;;;;;6928:15:1;;;;;;:8;:15;;;;;;;;;6921:32;;;;;;;;;;;;;;;;;6893:16;;6921:32;;;6928:15;6921:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6921:32:1;;;;;;;;;;;;;;;;;;;;;;;6814:146;;;:::o;4682:1278::-;-1:-1:-1;;;;;4833:22:1;;4765:23;4833:22;;;:8;:22;;;;;4893;;4791:10;;4833:22;4934;4926:57;;;;-1:-1:-1;;;4926:57:1;;;;;;;;;5039:14;-1:-1:-1;;;;;5001:28:1;;;;;;:11;:28;;;;;:34;;;;:52;;;;;;;;4993:96;;;;-1:-1:-1;;;4993:96:1;;;;;;;;;5107:54;5131:12;5145:15;5107:23;:54::i;:::-;5099:97;;;;-1:-1:-1;;;5099:97:1;;;;;;;;;-1:-1:-1;;;;;5297:36:1;;5275:19;5297:36;;;:19;;;:36;;;;;;5445:38;;5297:36;;5275:19;5297:5;;-1:-1:-1;;5461:21:1;;;5445:38;;;;;;;;;;;;;;;;5561:28;;-1:-1:-1;;;;;5445:38:1;;;;-1:-1:-1;5445:38:1;;5561:5;;5577:11;;5561:28;;;;;;;;;;;;;;;;;;:50;;-1:-1:-1;;;;;;5561:50:1;-1:-1:-1;;;;;5561:50:1;;;;;;5680:40;;;;;-1:-1:-1;5680:19:1;;:40;;;;;;:54;;;5820:21;;5680:19;;5820:21;;;;;;;;;;;;;;;-1:-1:-1;;5820:21:1;;;;;-1:-1:-1;;;;;;5820:21:1;;;;;;;;;-1:-1:-1;;;;;5858:36:1;;;;;;5820:21;5858:19;;:36;;;;;;;5851:43;;;5910;;;;;;;;4682:1278;;;;;;:::o;1567:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;2943:979::-;3087:21;2674:29:0;2684:6;2692:10;2674:9;:29::i;:::-;2666:76;;;;-1:-1:-1;;;2666:76:0;;;;;;;;;-1:-1:-1;;;;;3171:28:1;::::1;3125:43;3171:28:::0;;;:11:::1;:28;::::0;;;;3217:34;;3171:28;;3125:43;3217:34:::1;;::::0;:54;::::1;;;;;;;3209:89;;;;-1:-1:-1::0;;;3209:89:1::1;;;;;;;;;3369:19;27:10:-1::0;;23:18;;::::1;45:23:::0;;-1:-1;3369:41:1;;;;::::1;::::0;;-1:-1:-1;;;;;;3369:41:1::1;-1:-1:-1::0;;;;;3369:41:1;::::1;;::::0;;3543:26;;:33:::1;::::0;:30:::1;:33::i;:::-;3509:68:::0;;-1:-1:-1;3509:68:1::1;::::0;;;::::1;;;-1:-1:-1::0;;3509:68:1;;::::1;;-1:-1:-1::0;;3664:40:1::1;;::::0;;-1:-1:-1;3714:127:1::1;3734:18:::0;;::::1;3714:127;;;3782:48;3802:7;;3810:1;3802:10;;;;;;;;;;;;;;;;;;;;;;3814:15;3782:19;:48::i;:::-;3758:8;:1:::0;3764::::1;3758:8;:5;:8;:::i;:::-;3754:12;;3714:127;;;;3895:10;-1:-1:-1::0;;;;;3856:59:1::1;3878:15;-1:-1:-1::0;;;;;3856:59:1::1;;3907:7;;3856:59;;;;;;;;;;;;;;;;2752:1:0;2943:979:1::0;;;;:::o;6365:262:0:-;6445:6;3512:15;3486:5;:13;;;;;;;;;;:22;;;;;:41;;;;;;;;;3478:98;;;;-1:-1:-1;;;3478:98:0;;;;;;;;;2950:5:::1;:13:::0;;;::::1;::::0;;;;;;:26;6469:6;;2940:49:::1;::::0;2978:10:::1;2940:9;:49::i;:::-;2932:98;;;;-1:-1:-1::0;;;2932:98:0::1;;;;;;;;;6487:5:::2;:13:::0;;;::::2;::::0;;;;;;:63:::2;::::0;:34:::2;;6535:14:::0;6487:63:::2;:47;:63;:::i;:::-;6565:55;::::0;6609:10:::2;::::0;-1:-1:-1;;;;;6565:55:0;::::2;::::0;6585:6;;6565:55:::2;::::0;;;::::2;3586:1:::1;6365:262:::0;;;:::o;5751:239::-;5823:6;3512:15;3486:5;:13;;;;;;;;;;:22;;;;;:41;;;;;;;;;3478:98;;;;-1:-1:-1;;;3478:98:0;;;;;;;;;2950:5:::1;:13:::0;;;::::1;::::0;;;;;;:26;5847:6;;2940:49:::1;::::0;2978:10:::1;2940:9;:49::i;:::-;2932:98;;;;-1:-1:-1::0;;;2932:98:0::1;;;;;;;;;5865:5:::2;:13:::0;;;::::2;::::0;;;;;;:55:::2;::::0;:34:::2;;5910:9:::0;5865:55:::2;:44;:55;:::i;:::-;5935:48;::::0;5972:10:::2;::::0;-1:-1:-1;;;;;5935:48:0;::::2;::::0;5953:6;;5935:48:::2;::::0;;;::::2;3586:1:::1;5751:239:::0;;;:::o;7489:300:1:-;-1:-1:-1;;;;;7624:15:1;;;7592:4;7624:15;;;:8;:15;;;;;;;;:46;;;;;:29;;;:46;;;;;7687:15;;;;:32;;:40;-1:-1:-1;7687:95:1;;;;-1:-1:-1;;;;;;7731:15:1;;;;;;;:8;:15;;;;;:32;;:51;;;;7757:5;;7731:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7731:32:1;:51;7687:95;7680:102;;;7489:300;;;;;:::o;3906:428:0:-;3985:4;4021:13;;;;;;;;;;4065:18;4048:13;;;;;;:35;;;;;;;;;4044:250;;;4106:52;:28;;;4144:13;4106:52;:37;:52;:::i;:::-;4099:59;;;;;4044:250;4196:15;4179:13;;;;;;:32;;;;;;;;;4175:119;;;4234:49;:25;;;4269:13;4234:49;:34;:49;:::i;4175:119::-;4303:24;;-1:-1:-1;;;4303:24:0;;;;;;;;6894:235;6956:6;3512:15;3486:5;:13;;;;;;;;;;:22;;;;;:41;;;;;;;;;3478:98;;;;-1:-1:-1;;;3478:98:0;;;;;;;;;6979:6:::1;2674:29;2684:6;2692:10;2674:9;:29::i;:::-;2666:76;;;;-1:-1:-1::0;;;2666:76:0::1;;;;;;;;;6997:5:::2;:13:::0;;;::::2;::::0;;;;;;:59:::2;::::0;:34:::2;;7045:10;6997:59;:47;:59;:::i;:::-;7071:51;::::0;7111:10:::2;::::0;;;7091:6;;7071:51:::2;::::0;;;::::2;3586:1:::1;6894:235:::0;;:::o;5245:160::-;5323:7;5306:6;3239:18;3213:5;:13;;;;;;;;;;:22;;;;;:44;;;;;;;;;3205:104;;;;-1:-1:-1;;;3205:104:0;;;;;;;;;5349:5:::1;:13:::0;;;::::1;::::0;;;;;;:49:::1;::::0;:37:::1;;:47;:49::i;:::-;5342:56:::0;5245:160;-1:-1:-1;;;5245:160:0:o;4692:252::-;4769:6;3239:18;3213:5;:13;;;;;;;;;;:22;;;;;:44;;;;;;;;;3205:104;;;;-1:-1:-1;;;3205:104:0;;;;;;;;;2950:5:::1;:13:::0;;;::::1;::::0;;;;;;:26;4793:6;;2940:49:::1;::::0;2978:10:::1;2940:9;:49::i;:::-;2932:98;;;;-1:-1:-1::0;;;2932:98:0::1;;;;;;;;;4811:5:::2;:13:::0;;;::::2;::::0;;;;;;:60:::2;::::0;:37:::2;;4861:9:::0;4811:60:::2;:49;:60;:::i;:::-;4886:51;::::0;4926:10:::2;::::0;-1:-1:-1;;;;;4886:51:0;::::2;::::0;4907:6;;4886:51:::2;::::0;;;::::2;3319:1:::1;4692:252:::0;;;:::o;1437:36:1:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1437:36:1;;-1:-1:-1;1437:36:1;:::o;6420:169::-;6507:4;6568:14;-1:-1:-1;;;;;6530:28:1;;;;;;:11;:28;;;;;:34;;;;:52;;;;;;;;;6420:169;-1:-1:-1;;6420:169:1:o;7935:431::-;8032:47;8056:5;8063:15;8032:23;:47::i;:::-;8031:48;8023:91;;;;-1:-1:-1;;;8023:91:1;;;;;;;;;-1:-1:-1;;;;;8148:15:1;;;8124:21;8148:15;;;:8;:15;;;;;;;;:32;;39:1:-1;23:18;;;45:23;;8190:47:1;;;;;;;;;;-1:-1:-1;;;;;;8190:47:1;;;;;;;;;8247:46;;;:29;;;:46;;;;;;:62;;;8325:34;8148:32;;8190:47;8325:34;;;7935:431;;;:::o;1274:134:3:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:3;;;;;;;;1311:157:0;-1:-1:-1;;;;;1415:38:0;1456:5;1415:38;;;;;;;;;;;:46;;-1:-1:-1;;1415:46:0;;;1311:157::o;1077:228::-;-1:-1:-1;;;;;1183:27:0;;1175:71;;;;-1:-1:-1;;;1175:71:0;;;;;;;;;-1:-1:-1;;;;;1256:35:0;:22;:35;;;;;;;;;;;:42;;-1:-1:-1;;1256:42:0;1294:4;1256:42;;;1077:228::o;109:171::-;235:21;;-1:-1:-1;;;;;235:38:0;;;:21;;:38;;109:171::o;901:170::-;-1:-1:-1;;;;;1027:37:0;1004:4;1027:37;;;;;;;;;;;;;;;901:170::o;513:135::-;620:21;-1:-1:-1;;;;;620:21:0;;513:135::o;286:221::-;-1:-1:-1;;;;;392:25:0;;384:73;;;;-1:-1:-1;;;384:73:0;;;;;;;;;467:33;;-1:-1:-1;;;;;;467:33:0;-1:-1:-1;;;;;467:33:0;;;;;;;286:221::o;1692:187:3:-;1778:7;1813:12;1805:6;;;;1797:29;;;;-1:-1:-1;;;1797:29:3;;;;;;;;;;-1:-1:-1;;;1848:5:3;;;1692:187::o;5:130:-1:-;72:20;;-1:-1;;;;;19378:54;;20211:35;;20201:2;;20260:1;;20250:12;657:241;;761:2;749:9;740:7;736:23;732:32;729:2;;;-1:-1;;767:12;729:2;829:53;874:7;850:22;829:53;;905:366;;;1026:2;1014:9;1005:7;1001:23;997:32;994:2;;;-1:-1;;1032:12;994:2;1094:53;1139:7;1115:22;1094:53;;;1084:63;;1202:53;1247:7;1184:2;1227:9;1223:22;1202:53;;;1192:63;;988:283;;;;;;1278:522;;;;1434:2;1422:9;1413:7;1409:23;1405:32;1402:2;;;-1:-1;;1440:12;1402:2;1498:17;1485:31;1536:18;;1528:6;1525:30;1522:2;;;-1:-1;;1558:12;1522:2;1659:6;1648:9;1644:22;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;341:6;328:20;318:30;;1536:18;360:6;357:30;354:2;;;-1:-1;;390:12;354:2;485:3;434:4;;469:6;465:17;426:6;451:32;;448:41;445:2;;;-1:-1;;492:12;445:2;434:4;426:6;422:17;1586:90;;;;;;;;1731:53;1776:7;434:4;1756:9;1752:22;1731:53;;;1721:63;;1396:404;;;;;;1807:241;;1911:2;1899:9;1890:7;1886:23;1882:32;1879:2;;;-1:-1;;1917:12;1879:2;-1:-1;587:20;;1873:175;-1:-1;1873:175;2055:366;;;2176:2;2164:9;2155:7;2151:23;2147:32;2144:2;;;-1:-1;;2182:12;2144:2;2265:22;587:20;2234:63;;2352:53;2397:7;2334:2;2377:9;2373:22;2352:53;;9955:213;-1:-1;;;;;19378:54;;;;2671:37;;10073:2;10058:18;;10044:124;10175:381;10353:2;10367:47;;;10338:18;;;18501:19;;;10175:381;;3196:21;18541:14;;;10175:381;3223:291;3248:6;3245:1;3242:13;3223:291;;;10353:2;3344:6;18842:12;-1:-1;;;;;18816:39;18842:12;3344:6;18816:39;;;19378:54;2671:37;;3435:72;-1:-1;2582:14;;;;3270:1;3263:9;3223:291;;;-1:-1;10420:126;10324:232;-1:-1;;;;;;10324:232;10563:361;10731:2;10745:47;;;17980:12;;10716:18;;;18501:19;;;10563:361;;10731:2;17834:14;;;;18541;;;;10563:361;3983:260;4008:6;4005:1;4002:13;3983:260;;;4069:13;;-1:-1;;;;;19378:54;2671:37;;18241:14;;;;2582;;;;4030:1;4023:9;3983:260;;;-1:-1;10798:116;;10702:222;-1:-1;;;;;;10702:222;10931:201;19033:13;;19026:21;4338:34;;11043:2;11028:18;;11014:118;11139:344;11295:2;11280:18;;20123:1;20113:12;;20103:2;;20129:9;20103:2;4465:60;;;19269:34;19258:46;;;;11469:2;11454:18;;;9906:37;11266:217;;11490:301;;11628:2;;11649:17;11642:47;4682:5;17980:12;18513:6;11628:2;11617:9;11613:18;18501:19;-1:-1;19733:101;19747:6;19744:1;19741:13;19733:101;;;19814:11;;;;;19808:18;19795:11;;;18541:14;19795:11;19788:39;19762:10;;19733:101;;;19849:6;19846:1;19843:13;19840:2;;;-1:-1;18541:14;19905:6;11617:9;19896:16;;19889:27;19840:2;-1:-1;20021:7;20005:14;-1:-1;;20001:28;4840:39;;;;18541:14;4840:39;;11599:192;-1:-1;;;11599:192;11798:407;11989:2;12003:47;;;5116:2;11974:18;;;18501:19;5152:33;18541:14;;;5132:54;5205:12;;;11960:245;12212:407;12403:2;12417:47;;;5456:2;12388:18;;;18501:19;5492:33;18541:14;;;5472:54;5545:12;;;12374:245;12626:407;12817:2;12831:47;;;5796:2;12802:18;;;18501:19;5832:29;18541:14;;;5812:50;5881:12;;;12788:245;13040:407;13231:2;13245:47;;;6132:2;13216:18;;;18501:19;6168:34;18541:14;;;6148:55;6237:17;6223:12;;;6216:39;6274:12;;;13202:245;13454:407;13645:2;13659:47;;;6525:2;13630:18;;;18501:19;6561:24;18541:14;;;6541:45;6605:12;;;13616:245;13868:407;14059:2;14073:47;;;6856:2;14044:18;;;18501:19;6892:32;18541:14;;;6872:53;6944:12;;;14030:245;14282:407;14473:2;14487:47;;;7195:2;14458:18;;;18501:19;7231:34;18541:14;;;7211:55;-1:-1;;;7286:12;;;7279:36;7334:12;;;14444:245;14696:407;14887:2;14901:47;;;7585:2;14872:18;;;18501:19;7621:34;18541:14;;;7601:55;-1:-1;;;7676:12;;;7669:26;7714:12;;;14858:245;15110:407;15301:2;15315:47;;;7965:2;15286:18;;;18501:19;8001:32;18541:14;;;7981:53;8053:12;;;15272:245;15524:407;15715:2;15729:47;;;8304:2;15700:18;;;18501:19;8340:34;18541:14;;;8320:55;-1:-1;;;8395:12;;;8388:27;8434:12;;;15686:245;15938:407;16129:2;16143:47;;;8685:2;16114:18;;;18501:19;8721:34;18541:14;;;8701:55;-1:-1;;;8776:12;;;8769:28;8816:12;;;16100:245;16352:407;16543:2;16557:47;;;9067:2;16528:18;;;18501:19;9103:24;18541:14;;;9083:45;9147:12;;;16514:245;16766:407;16957:2;16971:47;;;9398:2;16942:18;;;18501:19;9434:16;18541:14;;;9414:37;9470:12;;;16928:245;17180:407;17371:2;17385:47;;;9721:2;17356:18;;;18501:19;9757:32;18541:14;;;9737:53;9809:12;;;17342:245;;749:42:0;761:14;777:13;749:11;:42::i;1474:232::-;1584:9;1579:121;1603:14;:21;1599:1;:25;1579:121;;;1645:44;1655:14;1671;1686:1;1671:17;;;;;;;;;;;;;;1645:9;:44::i;:::-;1626:3;;1579:121;;;;1474:232;;:::o
Swarm Source
ipfs://213cd3641e73404c660417360e3680ba6d199604dec08172b4daa2ac9aa0a75d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.