ETH Price: $1,972.34 (+0.13%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

1 address found via
Age:7D
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Age:7D
Reset Filter

Advanced mode:
Parent Transaction Hash Method Block
From
To

There are no matching entries

Update your filters to view other transactions

View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xE25a329d...b99A5436e
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SimpleMultiSig

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2025-01-08
*/

pragma solidity ^0.6.11;

contract SimpleMultiSig {

// EIP712 Precomputed hashes:
// keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)")
bytes32 constant EIP712DOMAINTYPE_HASH = 0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472;

// keccak256("Simple MultiSig")
bytes32 constant NAME_HASH = 0xb7a0bfa1b79f2443f4d73ebb9259cddbcd510b18be6fc4da7d1aa7b1786e73e6;

// keccak256("1")
bytes32 constant VERSION_HASH = 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6;

// keccak256("MultiSigTransaction(address destination,uint256 value,bytes data,uint256 nonce,address executor,uint256 gasLimit)")
bytes32 constant TXTYPE_HASH = 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7;

bytes32 constant SALT = 0x251543af6a222378665a76fe38dbceae4871a070b7fdaf5c6c30cf758dc33cc0;

  uint public nonce;                 // mutable state
  uint public threshold;             // mutable state
  mapping (address => bool) isOwner; // mutable state
  address[] public ownersArr;        // mutable state

  bytes32 immutable DOMAIN_SEPARATOR;          // hash for EIP712, computed from contract address

  function owners() external view returns (address[] memory) {
    return ownersArr;
  }

  // Note that owners_ must be strictly increasing, in order to prevent duplicates
  function setOwners_(uint threshold_, address[] memory owners_) private {
    require(owners_.length <= 20 && threshold_ <= owners_.length && threshold_ > 0);

    // remove old owners from map
    for (uint i = 0; i < ownersArr.length; i++) {
      isOwner[ownersArr[i]] = false;
    }

    // add new owners to map
    address lastAdd = address(0);
    for (uint i = 0; i < owners_.length; i++) {
      require(owners_[i] > lastAdd);
      isOwner[owners_[i]] = true;
      lastAdd = owners_[i];
    }

    // set owners array and threshold
    ownersArr = owners_;
    threshold = threshold_;
  }

  constructor(uint threshold_, address[] memory owners_, uint chainId) public {
    setOwners_(threshold_, owners_);

    DOMAIN_SEPARATOR = keccak256(abi.encode(EIP712DOMAINTYPE_HASH,
                                            NAME_HASH,
                                            VERSION_HASH,
                                            chainId,
                                            this,
                                            SALT));
  }

  // Requires a quorum of owners to call from this contract using execute
  function setOwners(uint threshold_, address[] memory owners_) external {
    require(msg.sender == address(this));
    setOwners_(threshold_, owners_);
  }

  // Note that address recovered from signatures must be strictly increasing, in order to prevent duplicates
  function execute(uint8[] memory sigV, bytes32[] memory sigR, bytes32[] memory sigS, address destination, uint value, bytes memory data, address executor, uint gasLimit) external {
    require(sigR.length == threshold);
    require(sigR.length == sigS.length && sigR.length == sigV.length);
    require(executor == msg.sender || executor == address(0));

    // EIP712 scheme: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md
    bytes32 txInputHash = keccak256(abi.encode(TXTYPE_HASH, destination, value, keccak256(data), nonce, executor, gasLimit));
    bytes32 totalHash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR, txInputHash));

    address lastAdd = address(0); // cannot have address(0) as an owner
    for (uint i = 0; i < threshold; i++) {
      address recovered = ecrecover(totalHash, sigV[i], sigR[i], sigS[i]);
      require(recovered > lastAdd && isOwner[recovered]);
      lastAdd = recovered;
    }

    // If we make it here all signatures are accounted for.
    nonce = nonce + 1;
    bool success = false;
    (success,) = destination.call{value: value, gas: gasLimit}(data);
    require(success);
  }

  receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"threshold_","type":"uint256"},{"internalType":"address[]","name":"owners_","type":"address[]"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8[]","name":"sigV","type":"uint8[]"},{"internalType":"bytes32[]","name":"sigR","type":"bytes32[]"},{"internalType":"bytes32[]","name":"sigS","type":"bytes32[]"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownersArr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold_","type":"uint256"},{"internalType":"address[]","name":"owners_","type":"address[]"}],"name":"setOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x60a06040523480156200001157600080fd5b5060405162000de638038062000de6833981810160405260608110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82518660208202830111640100000000821117156200009357600080fd5b82525081516020918201928201910280838360005b83811015620000c2578181015183820152602001620000a8565b505050509190910160405250602001519150620000eb905083836001600160e01b03620001bf16565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726020808301919091527fb7a0bfa1b79f2443f4d73ebb9259cddbcd510b18be6fc4da7d1aa7b1786e73e6828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301526080808301949094523060a08301527f251543af6a222378665a76fe38dbceae4871a070b7fdaf5c6c30cf758dc33cc060c0808401919091528351808403909101815260e09092019092528051910120905250620003b29050565b6014815111158015620001d3575080518211155b8015620001e05750600082115b620001ea57600080fd5b60005b6003548110156200024957600060026000600384815481106200020c57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101620001ed565b506000805b82518110156200030057816001600160a01b03168382815181106200026f57fe5b60200260200101516001600160a01b0316116200028b57600080fd5b6001600260008584815181106200029e57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110620002ea57fe5b602090810291909101015191506001016200024e565b508151620003169060039060208501906200031e565b505050600155565b82805482825590600052602060002090810192821562000376579160200282015b828111156200037657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200033f565b506200038492915062000388565b5090565b620003af91905b80821115620003845780546001600160a01b03191681556001016200038f565b90565b608051610a19620003cd600039806105485250610a196000f3fe6080604052600436106100595760003560e01c806342cde4e814610065578063a0ab96531461008c578063aa5df9e2146102e9578063affe39c11461032f578063affed0e014610394578063f3182e85146103a957610060565b3661006057005b600080fd5b34801561007157600080fd5b5061007a61045e565b60408051918252519081900360200190f35b34801561009857600080fd5b506102e760048036036101008110156100b057600080fd5b810190602081018135600160201b8111156100ca57600080fd5b8201836020820111156100dc57600080fd5b803590602001918460208302840111600160201b831117156100fd57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561014c57600080fd5b82018360208201111561015e57600080fd5b803590602001918460208302840111600160201b8311171561017f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156101ce57600080fd5b8201836020820111156101e057600080fd5b803590602001918460208302840111600160201b8311171561020157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092956001600160a01b0385351695602086013595919450925060608101915060400135600160201b81111561026557600080fd5b82018360208201111561027757600080fd5b803590602001918460018302840111600160201b8311171561029857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060200135610464565b005b3480156102f557600080fd5b506103136004803603602081101561030c57600080fd5b503561075f565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b50610344610786565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610380578181015183820152602001610368565b505050509050019250505060405180910390f35b3480156103a057600080fd5b5061007a6107e9565b3480156103b557600080fd5b506102e7600480360360408110156103cc57600080fd5b81359190810190604081016020820135600160201b8111156103ed57600080fd5b8201836020820111156103ff57600080fd5b803590602001918460208302840111600160201b8311171561042057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506107ef945050505050565b60015481565b60015487511461047357600080fd5b85518751148015610485575087518751145b61048e57600080fd5b6001600160a01b0382163314806104ac57506001600160a01b038216155b6104b557600080fd5b825160208085019190912060008054604080517f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7818701526001600160a01b03808c1682840152606082018b9052608082019590955260a081019290925292861660c082015260e0808201869052835180830390910181526101008201845280519085012061190160f01b6101208301527f00000000000000000000000000000000000000000000000000000000000000006101228301526101428083018290528451808403909101815261016290920190935280519301929092209091805b60015481101561068f5760006001848e84815181106105b057fe5b60200260200101518e85815181106105c457fe5b60200260200101518e86815181106105d857fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610637573d6000803e3d6000fd5b505050602060405103519050826001600160a01b0316816001600160a01b031611801561067c57506001600160a01b03811660009081526002602052604090205460ff165b61068557600080fd5b9150600101610595565b5060008054600101815560405187516001600160a01b038b169187918b918b91819060208401908083835b602083106106d95780518252601f1990920191602091820191016106ba565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381858888f193505050503d806000811461073c576040519150601f19603f3d011682016040523d82523d6000602084013e610741565b606091505b5050809150508061075157600080fd5b505050505050505050505050565b6003818154811061076c57fe5b6000918252602090912001546001600160a01b0316905081565b606060038054806020026020016040519081016040528092919081815260200182805480156107de57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107c0575b505050505090505b90565b60005481565b3330146107fb57600080fd5b6108058282610809565b5050565b601481511115801561081c575080518211155b80156108285750600082115b61083157600080fd5b60005b60035481101561088d576000600260006003848154811061085157fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101610834565b506000805b825181101561093e57816001600160a01b03168382815181106108b157fe5b60200260200101516001600160a01b0316116108cc57600080fd5b6001600260008584815181106108de57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082818151811061092957fe5b60209081029190910101519150600101610892565b50815161095290600390602085019061095a565b505050600155565b8280548282559060005260206000209081019282156109af579160200282015b828111156109af57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061097a565b506109bb9291506109bf565b5090565b6107e691905b808211156109bb5780546001600160a01b03191681556001016109c556fea2646970667358221220a7f001c04b4ca952a668227536b252ef82848d66d7320d379d4ef3c3b92f521a64736f6c634300060b0033000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000020f303fa714437f886e459bc1744181db838218a0000000000000000000000003321a3a57c513d24892f93ecd2347bed532c2584000000000000000000000000368090b9d51197dd2f1a5bca07efa6508aebb6c600000000000000000000000058545316325a66fafcf0c8c9e44c264e0a2d94380000000000000000000000005f2c71f69c260e652fdaf63b315303133624e7d100000000000000000000000070e11349cbf17b0a07aa247fd017b9873b1e316000000000000000000000000086efff46c4d6f53db63f3636a0e64a295f33dccc000000000000000000000000b85a9007ea068642c94e589f86b3fb228e00150f

Deployed Bytecode

0x6080604052600436106100595760003560e01c806342cde4e814610065578063a0ab96531461008c578063aa5df9e2146102e9578063affe39c11461032f578063affed0e014610394578063f3182e85146103a957610060565b3661006057005b600080fd5b34801561007157600080fd5b5061007a61045e565b60408051918252519081900360200190f35b34801561009857600080fd5b506102e760048036036101008110156100b057600080fd5b810190602081018135600160201b8111156100ca57600080fd5b8201836020820111156100dc57600080fd5b803590602001918460208302840111600160201b831117156100fd57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561014c57600080fd5b82018360208201111561015e57600080fd5b803590602001918460208302840111600160201b8311171561017f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156101ce57600080fd5b8201836020820111156101e057600080fd5b803590602001918460208302840111600160201b8311171561020157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092956001600160a01b0385351695602086013595919450925060608101915060400135600160201b81111561026557600080fd5b82018360208201111561027757600080fd5b803590602001918460018302840111600160201b8311171561029857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335169350505060200135610464565b005b3480156102f557600080fd5b506103136004803603602081101561030c57600080fd5b503561075f565b604080516001600160a01b039092168252519081900360200190f35b34801561033b57600080fd5b50610344610786565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610380578181015183820152602001610368565b505050509050019250505060405180910390f35b3480156103a057600080fd5b5061007a6107e9565b3480156103b557600080fd5b506102e7600480360360408110156103cc57600080fd5b81359190810190604081016020820135600160201b8111156103ed57600080fd5b8201836020820111156103ff57600080fd5b803590602001918460208302840111600160201b8311171561042057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506107ef945050505050565b60015481565b60015487511461047357600080fd5b85518751148015610485575087518751145b61048e57600080fd5b6001600160a01b0382163314806104ac57506001600160a01b038216155b6104b557600080fd5b825160208085019190912060008054604080517f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7818701526001600160a01b03808c1682840152606082018b9052608082019590955260a081019290925292861660c082015260e0808201869052835180830390910181526101008201845280519085012061190160f01b6101208301527f2d2ee355fbf3d54219786097c036ce9d6d48b153db1f7a225be40dad771d5d796101228301526101428083018290528451808403909101815261016290920190935280519301929092209091805b60015481101561068f5760006001848e84815181106105b057fe5b60200260200101518e85815181106105c457fe5b60200260200101518e86815181106105d857fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610637573d6000803e3d6000fd5b505050602060405103519050826001600160a01b0316816001600160a01b031611801561067c57506001600160a01b03811660009081526002602052604090205460ff165b61068557600080fd5b9150600101610595565b5060008054600101815560405187516001600160a01b038b169187918b918b91819060208401908083835b602083106106d95780518252601f1990920191602091820191016106ba565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381858888f193505050503d806000811461073c576040519150601f19603f3d011682016040523d82523d6000602084013e610741565b606091505b5050809150508061075157600080fd5b505050505050505050505050565b6003818154811061076c57fe5b6000918252602090912001546001600160a01b0316905081565b606060038054806020026020016040519081016040528092919081815260200182805480156107de57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107c0575b505050505090505b90565b60005481565b3330146107fb57600080fd5b6108058282610809565b5050565b601481511115801561081c575080518211155b80156108285750600082115b61083157600080fd5b60005b60035481101561088d576000600260006003848154811061085157fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055600101610834565b506000805b825181101561093e57816001600160a01b03168382815181106108b157fe5b60200260200101516001600160a01b0316116108cc57600080fd5b6001600260008584815181106108de57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082818151811061092957fe5b60209081029190910101519150600101610892565b50815161095290600390602085019061095a565b505050600155565b8280548282559060005260206000209081019282156109af579160200282015b828111156109af57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061097a565b506109bb9291506109bf565b5090565b6107e691905b808211156109bb5780546001600160a01b03191681556001016109c556fea2646970667358221220a7f001c04b4ca952a668227536b252ef82848d66d7320d379d4ef3c3b92f521a64736f6c634300060b0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0x0C23fc0Ef06716D2f8ba19bC4bEd56D045581F2d
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.