ETH Price: $3,321.02 (-3.72%)

Contract

0x3584C26FdbAC407Def37DDbe054f5bFA17Aa7362
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend86322522019-09-27 17:25:371887 days ago1569605137IN
0x3584C26F...A17Aa7362
0 ETH0.0019202124
Spend86262862019-09-26 19:11:381888 days ago1569525098IN
0x3584C26F...A17Aa7362
0 ETH0.0022413728
Spend85748402019-09-18 17:46:001896 days ago1568828760IN
0x3584C26F...A17Aa7362
0 ETH0.0026217725
Spend81696072019-07-17 17:33:381959 days ago1563384818IN
0x3584C26F...A17Aa7362
0 ETH0.0016015820
Spend77341262019-05-10 17:32:302027 days ago1557509550IN
0x3584C26F...A17Aa7362
0 ETH0.000261424
Spend77341262019-05-10 17:32:302027 days ago1557509550IN
0x3584C26F...A17Aa7362
0 ETH0.000327764
Spend74961362019-04-03 15:42:312064 days ago1554306151IN
0x3584C26F...A17Aa7362
0 ETH0.00049196
Spend70233192019-01-07 2:28:292150 days ago1546828109IN
0x3584C26F...A17Aa7362
0 ETH0.000239522
Spend70230482019-01-07 1:19:192150 days ago1546823959IN
0x3584C26F...A17Aa7362
0 ETH0.000479695
Transfer68810282018-12-13 20:25:452175 days ago1544732745IN
0x3584C26F...A17Aa7362
4.38574813 ETH0.0011683751.9
Transfer68402932018-12-07 3:13:332181 days ago1544152413IN
0x3584C26F...A17Aa7362
3.994 ETH0.001125650
Transfer68398942018-12-07 1:36:392181 days ago1544146599IN
0x3584C26F...A17Aa7362
2.09 ETH0.0011683751.9
Transfer67760132018-11-26 11:58:342192 days ago1543233514IN
0x3584C26F...A17Aa7362
2.394 ETH0.001125650
Transfer67759292018-11-26 11:34:502192 days ago1543232090IN
0x3584C26F...A17Aa7362
0.094 ETH0.001125650
Transfer67733872018-11-26 1:29:082192 days ago1543195748IN
0x3584C26F...A17Aa7362
22.87722751 ETH0.001125650
Transfer67666802018-11-24 23:17:462194 days ago1543101466IN
0x3584C26F...A17Aa7362
4.87941271 ETH0.001125650
Transfer67666512018-11-24 23:09:542194 days ago1543100994IN
0x3584C26F...A17Aa7362
7.99 ETH0.0006753630
Transfer67665712018-11-24 22:53:112194 days ago1543099991IN
0x3584C26F...A17Aa7362
8.97814221 ETH0.0006753630
Transfer67649932018-11-24 16:42:212194 days ago1543077741IN
0x3584C26F...A17Aa7362
3.494 ETH0.001125650
Transfer67555792018-11-23 3:50:472195 days ago1542945047IN
0x3584C26F...A17Aa7362
3.494 ETH0.001125650
Transfer67398682018-11-20 13:51:532198 days ago1542721913IN
0x3584C26F...A17Aa7362
1.97795327 ETH0.001125650
Transfer67386762018-11-20 9:05:232198 days ago1542704723IN
0x3584C26F...A17Aa7362
2.194 ETH0.001125650
Transfer67386062018-11-20 8:47:182198 days ago1542703638IN
0x3584C26F...A17Aa7362
3.394 ETH0.001125650
Transfer67137982018-11-16 7:08:412202 days ago1542352121IN
0x3584C26F...A17Aa7362
26.83920462 ETH0.001125650
Transfer67054272018-11-14 22:17:352204 days ago1542233855IN
0x3584C26F...A17Aa7362
4.994 ETH0.001125650
View all transactions

Latest 9 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
86322522019-09-27 17:25:371887 days ago1569605137
0x3584C26F...A17Aa7362
58.63349289 ETH
86262862019-09-26 19:11:381888 days ago1569525098
0x3584C26F...A17Aa7362
59.91 ETH
85748402019-09-18 17:46:001896 days ago1568828760
0x3584C26F...A17Aa7362
13 ETH
81696072019-07-17 17:33:381959 days ago1563384818
0x3584C26F...A17Aa7362
22 ETH
77341262019-05-10 17:32:302027 days ago1557509550
0x3584C26F...A17Aa7362
10 ETH
74961362019-04-03 15:42:312064 days ago1554306151
0x3584C26F...A17Aa7362
10 ETH
70233192019-01-07 2:28:292150 days ago1546828109
0x3584C26F...A17Aa7362
18 ETH
70230482019-01-07 1:19:192150 days ago1546823959
0x3584C26F...A17Aa7362
18 ETH
64101362018-09-27 16:53:272252 days ago1538067207
0x3584C26F...A17Aa7362
87.47380444 ETH
Loading...
Loading

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

Contract Name:
MultiSig2of3

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-08
*/

pragma solidity ^0.4.24;


// A 2/3 multisig contract compatible with Trezor or Ledger-signed messages.
//
// To authorize a spend, two signtures must be provided by 2 of the 3 owners.
// To generate the message to be signed, provide the destination address and
// spend amount (in wei) to the generateMessageToSignmethod.
// The signatures must be provided as the (v, r, s) hex-encoded coordinates.
// The S coordinate must be 0x00 or 0x01 corresponding to 0x1b and 0x1c
// (27 and 28), respectively.
// See the test file for example inputs.
//
// If you use other software than the provided dApp or scripts to sign the
// message, verify that the message shown by the device matches the
// generated message in hex.
//
// WARNING: The generated message is only valid until the next spend
//          is executed. After that, a new message will need to be calculated.
//
// ADDITIONAL WARNING: This contract is **NOT** ERC20 compatible.
// Tokens sent to this contract will be lost forever.
//
// ERROR CODES:
//
// 1: Invalid Owner Address. You must provide three distinct addresses.
//    None of the provided addresses may be 0x00.
// 2: Invalid Destination. You may not send ETH to this contract's address.
// 3: Insufficient Balance. You have tried to send more ETH that this
//    contract currently owns.
// 4: Invalid Signature. The provided signature does not correspond to
//    the provided destination, amount, nonce and current contract.
//    Did you swap the R and S fields?
// 5: Invalid Signers. The provided signatures are correctly signed, but are
//    not signed by the correct addresses. You must provide signatures from
//    two of the owner addresses.
//
// Developed by Unchained Capital, Inc.



contract MultiSig2of3 {

    // The 3 addresses which control the funds in this contract.  The
    // owners of 2 of these addresses will need to both sign a message
    // allowing the funds in this contract to be spent.
    mapping(address => bool) private owners;

    // The contract nonce is not accessible to the contract so we
    // implement a nonce-like variable for replay protection.
    uint256 public spendNonce = 0;

    // Contract Versioning
    uint256 public unchainedMultisigVersionMajor = 2;
    uint256 public unchainedMultisigVersionMinor = 0;

    // An event sent when funds are received.
    event Funded(uint newBalance);

    // An event sent when a spend is triggered to the given address.
    event Spent(address to, uint transfer);

    // Instantiate a new Multisig 2 of 3 contract owned by the
    // three given addresses
    constructor(address owner1, address owner2, address owner3) public {
        address zeroAddress = 0x0;

        require(owner1 != zeroAddress, "1");
        require(owner2 != zeroAddress, "1");
        require(owner3 != zeroAddress, "1");

        require(owner1 != owner2, "1");
        require(owner2 != owner3, "1");
        require(owner1 != owner3, "1");

        owners[owner1] = true;
        owners[owner2] = true;
        owners[owner3] = true;
    }

    // The fallback function for this contract.
    function() public payable {
        emit Funded(address(this).balance);
    }

    // Generates the message to sign given the output destination address and amount.
    // includes this contract's address and a nonce for replay protection.
    // One option to independently verify:
    //     https://leventozturk.com/engineering/sha3/ and select keccak
    function generateMessageToSign(
        address destination,
        uint256 value
    )
        public view returns (bytes32)
    {
        require(destination != address(this), "2");
        bytes32 message = keccak256(
            abi.encodePacked(
                spendNonce,
                this,
                value,
                destination
            )
        );
        return message;
    }

    // Send the given amount of ETH to the given destination using
    // the two triplets (v1, r1, s1) and (v2, r2, s2) as signatures.
    // s1 and s2 should be 0x00 or 0x01 corresponding to 0x1b and 0x1c respectively.
    function spend(
        address destination,
        uint256 value,
        uint8 v1,
        bytes32 r1,
        bytes32 s1,
        uint8 v2,
        bytes32 r2,
        bytes32 s2
    )
        public
    {
        // This require is handled by generateMessageToSign()
        // require(destination != address(this));
        require(address(this).balance >= value, "3");
        require(
            _validSignature(
                destination,
                value,
                v1, r1, s1,
                v2, r2, s2
            ),
            "4");
        spendNonce = spendNonce + 1;
        destination.transfer(value);
        emit Spent(destination, value);
    }

    // Confirm that the two signature triplets (v1, r1, s1) and (v2, r2, s2)
    // both authorize a spend of this contract's funds to the given
    // destination address.
    function _validSignature(
        address destination,
        uint256 value,
        uint8 v1, bytes32 r1, bytes32 s1,
        uint8 v2, bytes32 r2, bytes32 s2
    )
        private view returns (bool)
    {
        bytes32 message = _messageToRecover(destination, value);
        address addr1 = ecrecover(
            message,
            v1+27, r1, s1
        );
        address addr2 = ecrecover(
            message,
            v2+27, r2, s2
        );
        require(_distinctOwners(addr1, addr2), "5");

        return true;
    }

    // Generate the the unsigned message (in bytes32) that each owner's
    // wallet would have signed for the given destination and amount.
    //
    // The generated message from generateMessageToSign is converted to
    // ascii when signed by a trezor.
    //
    // The required signing prefix, the length of this
    // unsigned message, and the unsigned ascii message itself are
    // then concatenated and hashed with keccak256.
    function _messageToRecover(
        address destination,
        uint256 value
    )
        private view returns (bytes32)
    {
        bytes32 hashedUnsignedMessage = generateMessageToSign(
            destination,
            value
        );
        bytes memory unsignedMessageBytes = _hashToAscii(
            hashedUnsignedMessage
        );
        bytes memory prefix = "\x19Ethereum Signed Message:\n64";
        return keccak256(abi.encodePacked(prefix,unsignedMessageBytes));
    }

    // Confirm the pair of addresses as two distinct owners of this contract.
    function _distinctOwners(
        address addr1,
        address addr2
    )
        private view returns (bool)
    {
        // Check that both addresses are different
        require(addr1 != addr2, "5");
        // Check that both addresses are owners
        require(owners[addr1], "5");
        require(owners[addr2], "5");
        return true;
    }

    // Construct the byte representation of the ascii-encoded
    // hashed message written in hex.
    function _hashToAscii(bytes32 hash) private pure returns (bytes) {
        bytes memory s = new bytes(64);
        for (uint i = 0; i < 32; i++) {
            byte  b = hash[i];
            byte hi = byte(uint8(b) / 16);
            byte lo = byte(uint8(b) - 16 * uint8(hi));
            s[2*i] = _char(hi);
            s[2*i+1] = _char(lo);
        }
        return s;
    }

    // Convert from byte to ASCII of 0-f
    // http://www.unicode.org/charts/PDF/U0000.pdf
    function _char(byte b) private pure returns (byte c) {
        if (b < 10) {
            return byte(uint8(b) + 0x30);
        } else {
            return byte(uint8(b) + 0x57);
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"unchainedMultisigVersionMajor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"spendNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unchainedMultisigVersionMinor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"v1","type":"uint8"},{"name":"r1","type":"bytes32"},{"name":"s1","type":"bytes32"},{"name":"v2","type":"uint8"},{"name":"r2","type":"bytes32"},{"name":"s2","type":"bytes32"}],"name":"spend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"}],"name":"generateMessageToSign","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"owner1","type":"address"},{"name":"owner2","type":"address"},{"name":"owner3","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newBalance","type":"uint256"}],"name":"Funded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"transfer","type":"uint256"}],"name":"Spent","type":"event"}]

Deployed Bytecode

0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806323eb861c146100bd578063843b1a09146100e8578063a7dd7a5914610113578063bb6d203c1461013e578063d0590bad146101dd575b7fc4c14883ae9fd8e26d5d59e3485ed29fd126d781d7e498a4ca5c54c8268e49363073ffffffffffffffffffffffffffffffffffffffff16316040518082815260200191505060405180910390a1005b3480156100c957600080fd5b506100d2610246565b6040518082815260200191505060405180910390f35b3480156100f457600080fd5b506100fd61024c565b6040518082815260200191505060405180910390f35b34801561011f57600080fd5b50610128610252565b6040518082815260200191505060405180910390f35b34801561014a57600080fd5b506101db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff16906020019092919080356000191690602001909291908035600019169060200190929190803560ff16906020019092919080356000191690602001909291908035600019169060200190929190505050610258565b005b3480156101e957600080fd5b50610228600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610432565b60405180826000191660001916815260200191505060405180910390f35b60025481565b60015481565b60035481565b863073ffffffffffffffffffffffffffffffffffffffff1631101515156102e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f330000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6102f788888888888888886105f7565b151561036b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f340000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018054016001819055508773ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f193505050501580156103bc573d6000803e3d6000fd5b507fd3eec71143c45f28685b24760ea218d476917aa0ac0392a55e5304cef40bd2b68888604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050505050505050565b6000803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156104d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f320000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600154308486604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019450505050506040516020818303038152906040526040518082805190602001908083835b6020831015156105be5780518252602082019150602081019050602083039250610599565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508091505092915050565b6000806000806106078c8c6107a6565b9250600183601b8c018b8b604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610683573d6000803e3d6000fd5b505050602060405103519150600183601b89018888604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610709573d6000803e3d6000fd5b50505060206040510351905061071f828261092a565b1515610793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001935050505098975050505050505050565b6000806060806107b68686610432565b92506107c183610b5a565b91506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a363400000000815250905080826040516020018083805190602001908083835b6020831015156108355780518252602082019150602081019050602083039250610810565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831015156108885780518252602082019150602081019050602083039250610863565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156108f257805182526020820191506020810190506020830392506108cd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020935050505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610b50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001905092915050565b606080600080600080604080519080825280601f01601f191660200182016040528015610b965781602001602082028038833980820191505090505b509450600093505b6020841015610d45578684602081101515610bb557fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000292506010837f0100000000000000000000000000000000000000000000000000000000000000900460ff16811515610c0c57fe5b047f0100000000000000000000000000000000000000000000000000000000000000029150817f01000000000000000000000000000000000000000000000000000000000000009004601002837f01000000000000000000000000000000000000000000000000000000000000009004037f0100000000000000000000000000000000000000000000000000000000000000029050610caa82610d52565b8585600202815181101515610cbb57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610cf481610d52565b8560018660020201815181101515610d0857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508380600101945050610b9e565b8495505050505050919050565b6000600a7f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015610df1576030827f01000000000000000000000000000000000000000000000000000000000000009004017f0100000000000000000000000000000000000000000000000000000000000000029050610e3d565b6057827f01000000000000000000000000000000000000000000000000000000000000009004017f01000000000000000000000000000000000000000000000000000000000000000290505b9190505600a165627a7a723058207ff41163d65546776ffd3142f4668df91f2b206451eb670b24be540cf8ce5de40029

Swarm Source

bzzr://7ff41163d65546776ffd3142f4668df91f2b206451eb670b24be540cf8ce5de4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.