Source Code
Latest 16 from a total of 16 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 19635874 | 272 days ago | IN | 0 FRAX | 0 | ||||
| Propose | 19635866 | 272 days ago | IN | 0 FRAX | 0 | ||||
| Execute | 19635834 | 272 days ago | IN | 0 FRAX | 0 | ||||
| Propose | 19635827 | 272 days ago | IN | 0 FRAX | 0.00000001 | ||||
| Execute | 13857126 | 406 days ago | IN | 0 FRAX | 0.00001799 | ||||
| Propose | 13857062 | 406 days ago | IN | 0 FRAX | 0.00010671 | ||||
| Execute | 13854991 | 406 days ago | IN | 0 FRAX | 0.00000135 | ||||
| Propose | 13854983 | 406 days ago | IN | 0 FRAX | 0.00000243 | ||||
| Execute | 13813785 | 407 days ago | IN | 0 FRAX | 0.00000078 | ||||
| Propose | 13813779 | 407 days ago | IN | 0 FRAX | 0.00000298 | ||||
| Execute | 13767211 | 408 days ago | IN | 0 FRAX | 0.00000098 | ||||
| Propose | 13767203 | 408 days ago | IN | 0 FRAX | 0.00000538 | ||||
| Execute | 13754402 | 408 days ago | IN | 0 FRAX | 0.00000083 | ||||
| Propose | 13754393 | 408 days ago | IN | 0 FRAX | 0.00000534 | ||||
| Execute | 13192495 | 421 days ago | IN | 0 FRAX | 0.00000193 | ||||
| Propose | 13192488 | 421 days ago | IN | 0 FRAX | 0.00006961 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635874 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX | |||||
| 19635834 | 272 days ago | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SickleMultisig
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { EnumerableSet } from
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
contract SickleMultisig {
using EnumerableSet for EnumerableSet.AddressSet;
// Data structures
struct Proposal {
address[] targets;
bytes[] calldatas;
string description;
}
struct Transaction {
// Calls to be executed in the transaction
Proposal proposal;
// Transaction state
bool exists;
bool executed;
bool cancelled;
// Settings nonce that the transaction was created with
uint256 settingsNonce;
// Signing state
uint256 signatures;
mapping(address => bool) signed;
}
// Errors
error NotASigner();
error NotMultisig();
error InvalidProposal();
error InvalidThreshold();
error TransactionDoesNotExist();
error TransactionNotReadyToExecute();
error TransactionNoLongerValid();
error TransactionAlreadyExists();
error TransactionAlreadySigned();
error TransactionAlreadyExecuted();
error TransactionAlreadyCancelled();
error SignerAlreadyAdded();
error SignerAlreadyRemoved();
error SignerCannotBeRemoved();
// Events
event SignerAdded(address signer);
event SignerRemoved(address signer);
event ThresholdChanged(uint256 newThreshold);
event TransactionProposed(uint256 proposalId, address signer);
event TransactionSigned(uint256 proposalId, address signer);
event TransactionExecuted(uint256 proposalId, address signer);
event TransactionCancelled(uint256 proposalId, address signer);
// Public storage
uint256 public threshold;
uint256 public settingsNonce;
mapping(uint256 => Transaction) public transactions;
// Initialization
constructor(address initialSigner) {
// Initialize with only a single signer and a threshold of 1. The signer
// can add more signers and update the threshold using a proposal.
_addSigner(initialSigner);
_setThreshold(1);
}
// Signer-only actions
/// @notice Propose a new transaction to be executed from the multisig
/// @custom:access Restricted to multisig signers.
function propose(Proposal memory proposal)
public
onlySigner
returns (uint256)
{
return _propose(proposal);
}
/// @notice Propose a cancellation for a transaction
/// @custom:access Restricted to multisig signers.
function proposeCancellation(
uint256 proposalId
) public onlySigner returns (uint256) {
Proposal memory proposal = Proposal({
targets: new address[](1),
calldatas: new bytes[](1),
description: ""
});
proposal.targets[0] = address(this);
proposal.calldatas[0] = abi.encodeCall(this.cancel, (proposalId));
return _propose(proposal);
}
/// @notice Sign a transaction
/// @custom:access Restricted to multisig signers.
function sign(uint256 proposalId) public onlySigner {
_sign(proposalId);
}
/// @notice Execute a transaction that has passed the signatures threshold
/// @custom:access Restricted to multisig signers.
function execute(uint256 proposalId) public onlySigner {
_execute(proposalId);
}
/// @notice Sign a transaction and immediately execute it
/// @dev Assumes only one signature is missing from the signing threshold.
/// @custom:access Restricted to multisig signers.
function signAndExecute(uint256 proposalId) public onlySigner {
_sign(proposalId);
_execute(proposalId);
}
// Multisig-only actions
/// @notice Cancel a transaction that hasn't been executed or invalidated
/// @custom:access Restricted to multisig transactions.
function cancel(
uint256 proposalId
) public onlyMultisig {
_cancel(proposalId);
}
/// @notice Add a signer to the multisig
/// @custom:access Restricted to multisig transactions.
function addSigner(address signer) public onlyMultisig {
_addSigner(signer);
}
/// @notice Remove a signer from the multisig
/// @custom:access Restricted to multisig transactions.
function removeSigner(address signer) public onlyMultisig {
_removeSigner(signer);
}
/// @notice Remove a signer from the multisig
/// @custom:access Restricted to multisig transactions.
function replaceSigner(
address oldSigner,
address newSigner
) public onlyMultisig {
_addSigner(newSigner);
_removeSigner(oldSigner);
}
/// @notice Set a new signatures threshold for the multisig
/// @custom:access Restricted to multisig transactions.
function setThreshold(uint256 newThreshold) public onlyMultisig {
_setThreshold(newThreshold);
}
// Public functions
function signerCount() public view returns (uint256) {
return _signers.length();
}
function signerAddresses() public view returns (address[] memory) {
return _signers.values();
}
function isSigner(address signer) public view returns (bool) {
return _signers.contains(signer);
}
function hashProposal(Proposal memory proposal)
public
view
returns (uint256)
{
return uint256(
keccak256(
abi.encode(
block.chainid,
proposal.targets,
proposal.calldatas,
proposal.description
)
)
);
}
function getProposal(uint256 proposalId)
public
view
returns (Proposal memory)
{
return transactions[proposalId].proposal;
}
function exists(uint256 proposalId) public view returns (bool) {
return transactions[proposalId].exists;
}
function executed(uint256 proposalId) public view returns (bool) {
return transactions[proposalId].executed;
}
function cancelled(uint256 proposalId) public view returns (bool) {
return transactions[proposalId].cancelled;
}
function signatures(uint256 proposalId) public view returns (uint256) {
return transactions[proposalId].signatures;
}
function signed(
uint256 proposalId,
address signer
) public view returns (bool) {
return transactions[proposalId].signed[signer];
}
// Modifiers
modifier onlySigner() {
if (!isSigner(msg.sender)) {
revert NotASigner();
}
_;
}
modifier onlyMultisig() {
if (msg.sender != address(this)) {
revert NotMultisig();
}
_;
}
modifier changesSettings() {
_;
settingsNonce += 1;
}
// Internals
EnumerableSet.AddressSet private _signers;
function _propose(Proposal memory proposal) internal returns (uint256) {
// Check that the proposal is valid
if (proposal.targets.length != proposal.calldatas.length) {
revert InvalidProposal();
}
// Retrieve transaction details
uint256 proposalId = hashProposal(proposal);
Transaction storage transaction = transactions[proposalId];
// Validate transaction state
if (transaction.exists) revert TransactionAlreadyExists();
// Initialize transaction statue
transaction.exists = true;
transaction.proposal = proposal;
transaction.settingsNonce = settingsNonce;
// Emit event
emit TransactionProposed(proposalId, msg.sender);
// Add a signature from the current signer
_sign(proposalId);
return proposalId;
}
function _validateTransaction(Transaction storage transaction)
internal
view
{
if (!transaction.exists) revert TransactionDoesNotExist();
if (transaction.executed) revert TransactionAlreadyExecuted();
if (transaction.cancelled) revert TransactionAlreadyCancelled();
if (transaction.settingsNonce != settingsNonce) {
revert TransactionNoLongerValid();
}
}
function _sign(uint256 proposalId) internal {
// Retrieve transaction details
Transaction storage transaction = transactions[proposalId];
// Validate transaction state
_validateTransaction(transaction);
if (transaction.signed[msg.sender]) revert TransactionAlreadySigned();
// Update transaction state
transaction.signatures += 1;
transaction.signed[msg.sender] = true;
// Emit event
emit TransactionSigned(proposalId, msg.sender);
}
function _cancel(uint256 proposalId) internal {
// Retrieve transaction details
Transaction storage transaction = transactions[proposalId];
// Validate transaction state
_validateTransaction(transaction);
// Update transaction state
transaction.cancelled = true;
// Emit event
emit TransactionCancelled(proposalId, msg.sender);
}
function _execute(uint256 proposalId) internal {
// Retrieve transaction details
Transaction storage transaction = transactions[proposalId];
// Validate transaction state
_validateTransaction(transaction);
// Check if the transaction has enough signatures
if (transaction.signatures < threshold) {
revert TransactionNotReadyToExecute();
}
// Update transaction state
transaction.executed = true;
// Execute calls
uint256 length = transaction.proposal.targets.length;
for (uint256 i; i < length;) {
_call(
transaction.proposal.targets[i],
transaction.proposal.calldatas[i]
);
unchecked {
++i;
}
}
// And finally emit event
emit TransactionExecuted(proposalId, msg.sender);
}
function _call(address target, bytes memory data) internal {
(bool success, bytes memory result) = target.call(data);
if (!success) {
assembly {
revert(add(32, result), mload(result))
}
}
}
function _addSigner(address signer) internal changesSettings {
if (isSigner(signer)) revert SignerAlreadyAdded();
_signers.add(signer);
emit SignerAdded(signer);
}
function _removeSigner(address signer) internal changesSettings {
if (!isSigner(signer)) revert SignerAlreadyRemoved();
if (signerCount() == 1) revert SignerCannotBeRemoved();
_signers.remove(signer);
emit SignerRemoved(signer);
if (threshold > signerCount()) {
_setThreshold(signerCount());
}
}
function _setThreshold(uint256 newThreshold) internal changesSettings {
if (newThreshold > signerCount() || newThreshold == 0) {
revert InvalidThreshold();
}
threshold = newThreshold;
emit ThresholdChanged(newThreshold);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
* unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
* array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastValue;
// Update the index for the moved value
set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
bytes32[] memory store = _values(set._inner);
bytes32[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}{
"remappings": [
"solmate/=lib/solmate/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@uniswap/v3-periphery/=lib/v3-periphery/",
"@uniswap/v3-core/=lib/v3-core/",
"@morpho-blue/=lib/morpho-blue/src/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"morpho-blue/=lib/morpho-blue/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialSigner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProposal","type":"error"},{"inputs":[],"name":"InvalidThreshold","type":"error"},{"inputs":[],"name":"NotASigner","type":"error"},{"inputs":[],"name":"NotMultisig","type":"error"},{"inputs":[],"name":"SignerAlreadyAdded","type":"error"},{"inputs":[],"name":"SignerAlreadyRemoved","type":"error"},{"inputs":[],"name":"SignerCannotBeRemoved","type":"error"},{"inputs":[],"name":"TransactionAlreadyCancelled","type":"error"},{"inputs":[],"name":"TransactionAlreadyExecuted","type":"error"},{"inputs":[],"name":"TransactionAlreadyExists","type":"error"},{"inputs":[],"name":"TransactionAlreadySigned","type":"error"},{"inputs":[],"name":"TransactionDoesNotExist","type":"error"},{"inputs":[],"name":"TransactionNoLongerValid","type":"error"},{"inputs":[],"name":"TransactionNotReadyToExecute","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"SignerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"SignerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"ThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"TransactionCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"TransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"TransactionProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"TransactionSigned","type":"event"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"addSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"executed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposal","outputs":[{"components":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct SickleMultisig.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct SickleMultisig.Proposal","name":"proposal","type":"tuple"}],"name":"hashProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct SickleMultisig.Proposal","name":"proposal","type":"tuple"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposeCancellation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"removeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldSigner","type":"address"},{"internalType":"address","name":"newSigner","type":"address"}],"name":"replaceSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settingsNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"sign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"signAndExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"signatures","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"}],"name":"signed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"signerAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"signerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"components":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct SickleMultisig.Proposal","name":"proposal","type":"tuple"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"uint256","name":"settingsNonce","type":"uint256"},{"internalType":"uint256","name":"signatures","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162001eb338038062001eb3833981016040819052620000349162000214565b6200003f8162000052565b6200004b6001620000e3565b5062000261565b6200005d816200014e565b156200007c57604051631250b50f60e11b815260040160405180910390fd5b6200008960038262000163565b506040516001600160a01b03821681527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24906020015b60405180910390a16001806000828254620000db91906200023f565b909155505050565b620000ed62000181565b811180620000f9575080155b15620001185760405163aabd5a0960e01b815260040160405180910390fd5b60008190556040518181527f6c4ce60fd690e1216286a10b875c5662555f10774484e58142cedd7a90781baa90602001620000bf565b60006200015d60038362000194565b92915050565b60006200017a836001600160a01b038416620001b7565b9392505050565b60006200018f600362000209565b905090565b6001600160a01b038116600090815260018301602052604081205415156200017a565b600081815260018301602052604081205462000200575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200015d565b5060006200015d565b60006200015d825490565b6000602082840312156200022757600080fd5b81516001600160a01b03811681146200017a57600080fd5b808201808211156200015d57634e487b7160e01b600052601160045260246000fd5b611c4280620002716000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638be10194116100c3578063c7f758a81161007c578063c7f758a8146102d2578063d3ecebd7146102f2578063e050be571461031d578063e3d9109f14610349578063eb12d61e1461035c578063fe0d94c11461036f57600080fd5b80638be1019414610246578063960bfe04146102695780639ace38c21461027c578063b0ac5138146102a1578063bdaa4553146102b6578063c2ddb7c9146102c957600080fd5b80634f558e79116101155780634f558e79146101bc5780635596f414146101f25780635a5b67a61461020557806367dcd62f146102185780637ca548c61461022b5780637df73e271461023357600080fd5b80630e316ab7146101525780632fb1b25f1461016757806340e58ee51461017a57806342cde4e81461018d57806345f07de3146101a9575b600080fd5b6101656101603660046114de565b610382565b005b6101656101753660046114f9565b6103ae565b6101656101883660046114f9565b6103dd565b61019660005481565b6040519081526020015b60405180910390f35b6101966101b73660046116c3565b610406565b6101e26101ca3660046114f9565b60009081526002602052604090206003015460ff1690565b60405190151581526020016101a0565b6101656102003660046114f9565b610449565b6101966102133660046116c3565b610481565b6101966102263660046114f9565b6104ba565b6101966105ec565b6101e26102413660046114de565b6105fd565b6101966102543660046114f9565b60009081526002602052604090206005015490565b6101656102773660046114f9565b61060a565b61028f61028a3660046114f9565b610633565b6040516101a0969594939291906118f9565b6102a9610845565b6040516101a09190611979565b6101e26102c436600461198c565b610851565b61019660015481565b6102e56102e03660046114f9565b610881565b6040516101a091906119b8565b6101e26103003660046114f9565b600090815260026020526040902060030154610100900460ff1690565b6101e261032b3660046114f9565b60009081526002602052604090206003015462010000900460ff1690565b6101656103573660046119cb565b610a8a565b61016561036a3660046114de565b610ac0565b61016561037d3660046114f9565b610ae9565b3330146103a25760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610b0f565b50565b6103b7336105fd565b6103d45760405163da0357f760e01b815260040160405180910390fd5b6103ab81610be0565b3330146103fd5760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610caf565b60004682600001518360200151846040015160405160200161042b94939291906119f5565b60408051601f19818403018152919052805160209091012092915050565b610452336105fd565b61046f5760405163da0357f760e01b815260040160405180910390fd5b61047881610be0565b6103ab81610d0e565b600061048c336105fd565b6104a95760405163da0357f760e01b815260040160405180910390fd5b6104b282610e8e565b90505b919050565b60006104c5336105fd565b6104e25760405163da0357f760e01b815260040160405180910390fd5b6040805160016060820181815260a0830190935260009282916080830160208036833701905050815260408051600180825281830190925260209092019190816020015b606081526020019060019003908161052657905050815260200160405180602001604052806000815250815250905030816000015160008151811061056d5761056d611a3f565b6001600160a01b039290921660209283029190910182015260408051602480820187905282518083039091018152604490910190915280820180516001600160e01b03166340e58ee560e01b1790529082015180516000906105d1576105d1611a3f565b60200260200101819052506105e581610e8e565b9392505050565b60006105f86003610fa4565b905090565b60006104b2600383610fae565b33301461062a5760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610fd0565b6002602090815260009182526040918290208251815460809381028201840190945260608101848152919390928492849290918491908401828280156106a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610684575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561077c5783829060005260206000200180546106ef90611a55565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90611a55565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050815260200190600101906106d0565b50505050815260200160028201805461079490611a55565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090611a55565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050509190925250505060038201546004830154600590930154919260ff808316936101008404821693620100009004909116919086565b60606105f8600361104c565b60008281526002602090815260408083206001600160a01b038516845260060190915290205460ff165b92915050565b6108a560405180606001604052806060815260200160608152602001606081525090565b6000828152600260209081526040918290208251815460809381028201840190945260608101848152909391928492849184018282801561090f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108f1575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156109e957838290600052602060002001805461095c90611a55565b80601f016020809104026020016040519081016040528092919081815260200182805461098890611a55565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b50505050508152602001906001019061093d565b505050508152602001600282018054610a0190611a55565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90611a55565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050815250509050919050565b333014610aaa5760405163f05e412b60e01b815260040160405180910390fd5b610ab381611059565b610abc82610b0f565b5050565b333014610ae05760405163f05e412b60e01b815260040160405180910390fd5b6103ab81611059565b610af2336105fd565b6104785760405163da0357f760e01b815260040160405180910390fd5b610b18816105fd565b610b355760405163188c45f760e01b815260040160405180910390fd5b610b3d6105ec565b600103610b5d5760405163fd509a7960e01b815260040160405180910390fd5b610b686003826110c5565b506040516001600160a01b03821681527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9060200160405180910390a1610bad6105ec565b6000541115610bc657610bc6610bc16105ec565b610fd0565b6001806000828254610bd89190611aa5565b909155505050565b6000818152600260205260409020610bf7816110da565b33600090815260068201602052604090205460ff1615610c2a5760405163e54b01d960e01b815260040160405180910390fd5b6001816005016000828254610c3f9190611aa5565b909155505033600081815260068301602052604090819020805460ff19166001179055517f737f6609fa194738ed162051f994c6e9599a830846ea9d72d6501d79871e098191610ca3918591909182526001600160a01b0316602082015260400190565b60405180910390a15050565b6000818152600260205260409020610cc6816110da565b60038101805462ff0000191662010000179055604080518381523360208201527fbeed812a0535c283c6bc8eda32deb53df2603d7c1b518b07e2bec1df38da83939101610ca3565b6000818152600260205260409020610d25816110da565b60005481600501541015610d4c57604051631a30c2bd60e31b815260040160405180910390fd5b60038101805461ff001916610100179055805460005b81811015610e50578254610e4890849083908110610d8257610d82611a3f565b6000918252602090912001546001850180546001600160a01b039092169184908110610db057610db0611a3f565b906000526020600020018054610dc590611a55565b80601f0160208091040260200160405190810160405280929190818152602001828054610df190611a55565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505061117c565b600101610d62565b50604080518481523360208201527fefc13bdcf58f184ea7cae26b499fb33b539e01d0197cea456f3ada289b8cf19b910160405180910390a1505050565b60208101515181515160009114610eb857604051631dc0650160e31b815260040160405180910390fd5b6000610ec383610406565b600081815260026020526040902060038101549192509060ff1615610efb576040516332c8c71960e11b815260040160405180910390fd5b60038101805460ff191660011790558351805185918391610f239183916020909101906113a4565b506020828101518051610f3c9260018501920190611409565b5060408201516002820190610f519082611b07565b5050600154600483015550604080518381523360208201527f85a02044abc1a0089f390169e926132b38b4ff22cdb91072c2c43c03e8c710d4910160405180910390a1610f9d82610be0565b5092915050565b60006104b2825490565b6001600160a01b038116600090815260018301602052604081205415156105e5565b610fd86105ec565b811180610fe3575080155b156110015760405163aabd5a0960e01b815260040160405180910390fd5b60008190556040518181527f6c4ce60fd690e1216286a10b875c5662555f10774484e58142cedd7a90781baa906020015b60405180910390a16001806000828254610bd89190611aa5565b606060006105e5836111f1565b611062816105fd565b1561108057604051631250b50f60e11b815260040160405180910390fd5b61108b60038261124d565b506040516001600160a01b03821681527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2490602001611032565b60006105e5836001600160a01b038416611262565b600381015460ff166110ff576040516315147c4560e21b815260040160405180910390fd5b6003810154610100900460ff161561112a5760405163db5e659b60e01b815260040160405180910390fd5b600381015462010000900460ff16156111565760405163d11ba1b760e01b815260040160405180910390fd5b6001548160040154146103ab57604051630389dd1160e31b815260040160405180910390fd5b600080836001600160a01b0316836040516111979190611bc7565b6000604051808303816000865af19150503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b5091509150816111eb57805181602001fd5b50505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561124157602002820191906000526020600020905b81548152602001906001019080831161122d575b50505050509050919050565b60006105e5836001600160a01b038416611355565b6000818152600183016020526040812054801561134b576000611286600183611be3565b855490915060009061129a90600190611be3565b90508181146112ff5760008660000182815481106112ba576112ba611a3f565b90600052602060002001549050808760000184815481106112dd576112dd611a3f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061131057611310611bf6565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061087b565b600091505061087b565b600081815260018301602052604081205461139c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561087b565b50600061087b565b8280548282559060005260206000209081019282156113f9579160200282015b828111156113f957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906113c4565b5061140592915061145b565b5090565b82805482825590600052602060002090810192821561144f579160200282015b8281111561144f578251829061143f9082611b07565b5091602001919060010190611429565b50611405929150611470565b5b80821115611405576000815560010161145c565b80821115611405576000611484828261148d565b50600101611470565b50805461149990611a55565b6000825580601f106114a9575050565b601f0160209004906000526020600020908101906103ab919061145b565b80356001600160a01b03811681146104b557600080fd5b6000602082840312156114f057600080fd5b6105e5826114c7565b60006020828403121561150b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561154b5761154b611512565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561157a5761157a611512565b604052919050565b600067ffffffffffffffff82111561159c5761159c611512565b5060051b60200190565b600067ffffffffffffffff8311156115c0576115c0611512565b6115d3601f8401601f1916602001611551565b90508281528383830111156115e757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261160f57600080fd5b8135602061162461161f83611582565b611551565b82815260059290921b8401810191818101908684111561164357600080fd5b8286015b8481101561169857803567ffffffffffffffff8111156116675760008081fd5b8701603f810189136116795760008081fd5b61168a8986830135604084016115a6565b845250918301918301611647565b509695505050505050565b600082601f8301126116b457600080fd5b6105e5838335602085016115a6565b600060208083850312156116d657600080fd5b823567ffffffffffffffff808211156116ee57600080fd5b908401906060828703121561170257600080fd5b61170a611528565b82358281111561171957600080fd5b8301601f8101881361172a57600080fd5b803561173861161f82611582565b81815260059190911b8201860190868101908a83111561175757600080fd5b928701925b8284101561177c5761176d846114c7565b8252928701929087019061175c565b8452505050828401358281111561179257600080fd5b61179e888286016115fe565b858301525060408301359350818411156117b757600080fd5b6117c3878585016116a3565b60408201529695505050505050565b60005b838110156117ed5781810151838201526020016117d5565b50506000910152565b6000815180845261180e8160208601602086016117d2565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561186a5782840389526118588483516117f6565b98850198935090840190600101611840565b5091979650505050505050565b805160608084528151908401819052600091602091908201906080860190845b818110156118bc5783516001600160a01b031683529284019291840191600101611897565b5050828501519150858103838701526118d58183611822565b92505050604083015184820360408601526118f082826117f6565b95945050505050565b60c08152600061190c60c0830189611877565b96151560208301525093151560408501529115156060840152608083015260a090910152919050565b600081518084526020808501945080840160005b8381101561196e5781516001600160a01b031687529582019590820190600101611949565b509495945050505050565b6020815260006105e56020830184611935565b6000806040838503121561199f57600080fd5b823591506119af602084016114c7565b90509250929050565b6020815260006105e56020830184611877565b600080604083850312156119de57600080fd5b6119e7836114c7565b91506119af602084016114c7565b848152608060208201526000611a0e6080830186611935565b8281036040840152611a208186611822565b90508281036060840152611a3481856117f6565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611a6957607f821691505b602082108103611a8957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561087b5761087b611a8f565b601f821115611b0257600081815260208120601f850160051c81016020861015611adf5750805b601f850160051c820191505b81811015611afe57828155600101611aeb565b5050505b505050565b815167ffffffffffffffff811115611b2157611b21611512565b611b3581611b2f8454611a55565b84611ab8565b602080601f831160018114611b6a5760008415611b525750858301515b600019600386901b1c1916600185901b178555611afe565b600085815260208120601f198616915b82811015611b9957888601518255948401946001909101908401611b7a565b5085821015611bb75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251611bd98184602087016117d2565b9190910192915050565b8181038181111561087b5761087b611a8f565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204c481a8fe04c07790fce97ea202894abce5132041c5e3bee7b3e04fa0c83800d64736f6c63430008130033000000000000000000000000bde48624f9e1dd4107df324d1ba3c07004640206
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638be10194116100c3578063c7f758a81161007c578063c7f758a8146102d2578063d3ecebd7146102f2578063e050be571461031d578063e3d9109f14610349578063eb12d61e1461035c578063fe0d94c11461036f57600080fd5b80638be1019414610246578063960bfe04146102695780639ace38c21461027c578063b0ac5138146102a1578063bdaa4553146102b6578063c2ddb7c9146102c957600080fd5b80634f558e79116101155780634f558e79146101bc5780635596f414146101f25780635a5b67a61461020557806367dcd62f146102185780637ca548c61461022b5780637df73e271461023357600080fd5b80630e316ab7146101525780632fb1b25f1461016757806340e58ee51461017a57806342cde4e81461018d57806345f07de3146101a9575b600080fd5b6101656101603660046114de565b610382565b005b6101656101753660046114f9565b6103ae565b6101656101883660046114f9565b6103dd565b61019660005481565b6040519081526020015b60405180910390f35b6101966101b73660046116c3565b610406565b6101e26101ca3660046114f9565b60009081526002602052604090206003015460ff1690565b60405190151581526020016101a0565b6101656102003660046114f9565b610449565b6101966102133660046116c3565b610481565b6101966102263660046114f9565b6104ba565b6101966105ec565b6101e26102413660046114de565b6105fd565b6101966102543660046114f9565b60009081526002602052604090206005015490565b6101656102773660046114f9565b61060a565b61028f61028a3660046114f9565b610633565b6040516101a0969594939291906118f9565b6102a9610845565b6040516101a09190611979565b6101e26102c436600461198c565b610851565b61019660015481565b6102e56102e03660046114f9565b610881565b6040516101a091906119b8565b6101e26103003660046114f9565b600090815260026020526040902060030154610100900460ff1690565b6101e261032b3660046114f9565b60009081526002602052604090206003015462010000900460ff1690565b6101656103573660046119cb565b610a8a565b61016561036a3660046114de565b610ac0565b61016561037d3660046114f9565b610ae9565b3330146103a25760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610b0f565b50565b6103b7336105fd565b6103d45760405163da0357f760e01b815260040160405180910390fd5b6103ab81610be0565b3330146103fd5760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610caf565b60004682600001518360200151846040015160405160200161042b94939291906119f5565b60408051601f19818403018152919052805160209091012092915050565b610452336105fd565b61046f5760405163da0357f760e01b815260040160405180910390fd5b61047881610be0565b6103ab81610d0e565b600061048c336105fd565b6104a95760405163da0357f760e01b815260040160405180910390fd5b6104b282610e8e565b90505b919050565b60006104c5336105fd565b6104e25760405163da0357f760e01b815260040160405180910390fd5b6040805160016060820181815260a0830190935260009282916080830160208036833701905050815260408051600180825281830190925260209092019190816020015b606081526020019060019003908161052657905050815260200160405180602001604052806000815250815250905030816000015160008151811061056d5761056d611a3f565b6001600160a01b039290921660209283029190910182015260408051602480820187905282518083039091018152604490910190915280820180516001600160e01b03166340e58ee560e01b1790529082015180516000906105d1576105d1611a3f565b60200260200101819052506105e581610e8e565b9392505050565b60006105f86003610fa4565b905090565b60006104b2600383610fae565b33301461062a5760405163f05e412b60e01b815260040160405180910390fd5b6103ab81610fd0565b6002602090815260009182526040918290208251815460809381028201840190945260608101848152919390928492849290918491908401828280156106a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610684575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561077c5783829060005260206000200180546106ef90611a55565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90611a55565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050815260200190600101906106d0565b50505050815260200160028201805461079490611a55565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090611a55565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050509190925250505060038201546004830154600590930154919260ff808316936101008404821693620100009004909116919086565b60606105f8600361104c565b60008281526002602090815260408083206001600160a01b038516845260060190915290205460ff165b92915050565b6108a560405180606001604052806060815260200160608152602001606081525090565b6000828152600260209081526040918290208251815460809381028201840190945260608101848152909391928492849184018282801561090f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108f1575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156109e957838290600052602060002001805461095c90611a55565b80601f016020809104026020016040519081016040528092919081815260200182805461098890611a55565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b50505050508152602001906001019061093d565b505050508152602001600282018054610a0190611a55565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90611a55565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050505050815250509050919050565b333014610aaa5760405163f05e412b60e01b815260040160405180910390fd5b610ab381611059565b610abc82610b0f565b5050565b333014610ae05760405163f05e412b60e01b815260040160405180910390fd5b6103ab81611059565b610af2336105fd565b6104785760405163da0357f760e01b815260040160405180910390fd5b610b18816105fd565b610b355760405163188c45f760e01b815260040160405180910390fd5b610b3d6105ec565b600103610b5d5760405163fd509a7960e01b815260040160405180910390fd5b610b686003826110c5565b506040516001600160a01b03821681527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9060200160405180910390a1610bad6105ec565b6000541115610bc657610bc6610bc16105ec565b610fd0565b6001806000828254610bd89190611aa5565b909155505050565b6000818152600260205260409020610bf7816110da565b33600090815260068201602052604090205460ff1615610c2a5760405163e54b01d960e01b815260040160405180910390fd5b6001816005016000828254610c3f9190611aa5565b909155505033600081815260068301602052604090819020805460ff19166001179055517f737f6609fa194738ed162051f994c6e9599a830846ea9d72d6501d79871e098191610ca3918591909182526001600160a01b0316602082015260400190565b60405180910390a15050565b6000818152600260205260409020610cc6816110da565b60038101805462ff0000191662010000179055604080518381523360208201527fbeed812a0535c283c6bc8eda32deb53df2603d7c1b518b07e2bec1df38da83939101610ca3565b6000818152600260205260409020610d25816110da565b60005481600501541015610d4c57604051631a30c2bd60e31b815260040160405180910390fd5b60038101805461ff001916610100179055805460005b81811015610e50578254610e4890849083908110610d8257610d82611a3f565b6000918252602090912001546001850180546001600160a01b039092169184908110610db057610db0611a3f565b906000526020600020018054610dc590611a55565b80601f0160208091040260200160405190810160405280929190818152602001828054610df190611a55565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505061117c565b600101610d62565b50604080518481523360208201527fefc13bdcf58f184ea7cae26b499fb33b539e01d0197cea456f3ada289b8cf19b910160405180910390a1505050565b60208101515181515160009114610eb857604051631dc0650160e31b815260040160405180910390fd5b6000610ec383610406565b600081815260026020526040902060038101549192509060ff1615610efb576040516332c8c71960e11b815260040160405180910390fd5b60038101805460ff191660011790558351805185918391610f239183916020909101906113a4565b506020828101518051610f3c9260018501920190611409565b5060408201516002820190610f519082611b07565b5050600154600483015550604080518381523360208201527f85a02044abc1a0089f390169e926132b38b4ff22cdb91072c2c43c03e8c710d4910160405180910390a1610f9d82610be0565b5092915050565b60006104b2825490565b6001600160a01b038116600090815260018301602052604081205415156105e5565b610fd86105ec565b811180610fe3575080155b156110015760405163aabd5a0960e01b815260040160405180910390fd5b60008190556040518181527f6c4ce60fd690e1216286a10b875c5662555f10774484e58142cedd7a90781baa906020015b60405180910390a16001806000828254610bd89190611aa5565b606060006105e5836111f1565b611062816105fd565b1561108057604051631250b50f60e11b815260040160405180910390fd5b61108b60038261124d565b506040516001600160a01b03821681527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2490602001611032565b60006105e5836001600160a01b038416611262565b600381015460ff166110ff576040516315147c4560e21b815260040160405180910390fd5b6003810154610100900460ff161561112a5760405163db5e659b60e01b815260040160405180910390fd5b600381015462010000900460ff16156111565760405163d11ba1b760e01b815260040160405180910390fd5b6001548160040154146103ab57604051630389dd1160e31b815260040160405180910390fd5b600080836001600160a01b0316836040516111979190611bc7565b6000604051808303816000865af19150503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b5091509150816111eb57805181602001fd5b50505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561124157602002820191906000526020600020905b81548152602001906001019080831161122d575b50505050509050919050565b60006105e5836001600160a01b038416611355565b6000818152600183016020526040812054801561134b576000611286600183611be3565b855490915060009061129a90600190611be3565b90508181146112ff5760008660000182815481106112ba576112ba611a3f565b90600052602060002001549050808760000184815481106112dd576112dd611a3f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061131057611310611bf6565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061087b565b600091505061087b565b600081815260018301602052604081205461139c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561087b565b50600061087b565b8280548282559060005260206000209081019282156113f9579160200282015b828111156113f957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906113c4565b5061140592915061145b565b5090565b82805482825590600052602060002090810192821561144f579160200282015b8281111561144f578251829061143f9082611b07565b5091602001919060010190611429565b50611405929150611470565b5b80821115611405576000815560010161145c565b80821115611405576000611484828261148d565b50600101611470565b50805461149990611a55565b6000825580601f106114a9575050565b601f0160209004906000526020600020908101906103ab919061145b565b80356001600160a01b03811681146104b557600080fd5b6000602082840312156114f057600080fd5b6105e5826114c7565b60006020828403121561150b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561154b5761154b611512565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561157a5761157a611512565b604052919050565b600067ffffffffffffffff82111561159c5761159c611512565b5060051b60200190565b600067ffffffffffffffff8311156115c0576115c0611512565b6115d3601f8401601f1916602001611551565b90508281528383830111156115e757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261160f57600080fd5b8135602061162461161f83611582565b611551565b82815260059290921b8401810191818101908684111561164357600080fd5b8286015b8481101561169857803567ffffffffffffffff8111156116675760008081fd5b8701603f810189136116795760008081fd5b61168a8986830135604084016115a6565b845250918301918301611647565b509695505050505050565b600082601f8301126116b457600080fd5b6105e5838335602085016115a6565b600060208083850312156116d657600080fd5b823567ffffffffffffffff808211156116ee57600080fd5b908401906060828703121561170257600080fd5b61170a611528565b82358281111561171957600080fd5b8301601f8101881361172a57600080fd5b803561173861161f82611582565b81815260059190911b8201860190868101908a83111561175757600080fd5b928701925b8284101561177c5761176d846114c7565b8252928701929087019061175c565b8452505050828401358281111561179257600080fd5b61179e888286016115fe565b858301525060408301359350818411156117b757600080fd5b6117c3878585016116a3565b60408201529695505050505050565b60005b838110156117ed5781810151838201526020016117d5565b50506000910152565b6000815180845261180e8160208601602086016117d2565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561186a5782840389526118588483516117f6565b98850198935090840190600101611840565b5091979650505050505050565b805160608084528151908401819052600091602091908201906080860190845b818110156118bc5783516001600160a01b031683529284019291840191600101611897565b5050828501519150858103838701526118d58183611822565b92505050604083015184820360408601526118f082826117f6565b95945050505050565b60c08152600061190c60c0830189611877565b96151560208301525093151560408501529115156060840152608083015260a090910152919050565b600081518084526020808501945080840160005b8381101561196e5781516001600160a01b031687529582019590820190600101611949565b509495945050505050565b6020815260006105e56020830184611935565b6000806040838503121561199f57600080fd5b823591506119af602084016114c7565b90509250929050565b6020815260006105e56020830184611877565b600080604083850312156119de57600080fd5b6119e7836114c7565b91506119af602084016114c7565b848152608060208201526000611a0e6080830186611935565b8281036040840152611a208186611822565b90508281036060840152611a3481856117f6565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611a6957607f821691505b602082108103611a8957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561087b5761087b611a8f565b601f821115611b0257600081815260208120601f850160051c81016020861015611adf5750805b601f850160051c820191505b81811015611afe57828155600101611aeb565b5050505b505050565b815167ffffffffffffffff811115611b2157611b21611512565b611b3581611b2f8454611a55565b84611ab8565b602080601f831160018114611b6a5760008415611b525750858301515b600019600386901b1c1916600185901b178555611afe565b600085815260208120601f198616915b82811015611b9957888601518255948401946001909101908401611b7a565b5085821015611bb75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251611bd98184602087016117d2565b9190910192915050565b8181038181111561087b5761087b611a8f565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204c481a8fe04c07790fce97ea202894abce5132041c5e3bee7b3e04fa0c83800d64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bde48624f9e1dd4107df324d1ba3c07004640206
-----Decoded View---------------
Arg [0] : initialSigner (address): 0xBDE48624F9E1dd4107df324D1BA3C07004640206
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bde48624f9e1dd4107df324d1ba3c07004640206
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.