ETH Price: $3,331.57 (+4.15%)

Contract

0x81B1C2521647deD838C9A746A2922cB8c6347A64
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
139391592022-01-04 13:09:541107 days ago1641301794  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Stream

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 2 : Stream.sol
/////////////////////////////////////////////////////////////////////////////////////
//
//  SPDX-License-Identifier: MIT
//
//  ███    ███  ██████  ███    ██ ███████ ██    ██ ██████  ██ ██████  ███████
//  ████  ████ ██    ██ ████   ██ ██       ██  ██  ██   ██ ██ ██   ██ ██     
//  ██ ████ ██ ██    ██ ██ ██  ██ █████     ████   ██████  ██ ██████  █████  
//  ██  ██  ██ ██    ██ ██  ██ ██ ██         ██    ██      ██ ██      ██     
//  ██      ██  ██████  ██   ████ ███████    ██    ██      ██ ██      ███████
// 
//  ███████ ████████ ██████  ███████  █████  ███    ███ 
//  ██         ██    ██   ██ ██      ██   ██ ████  ████ 
//  ███████    ██    ██████  █████   ███████ ██ ████ ██ 
//       ██    ██    ██   ██ ██      ██   ██ ██  ██  ██ 
//  ███████    ██    ██   ██ ███████ ██   ██ ██      ██ 
//
//  https://moneypipe.xyz
//
/////////////////////////////////////////////////////////////////////////////////////
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/proxy/utils/Initializable.sol";
contract Stream is Initializable {
  Member[] private _members;
  struct Member {
    address account;
    uint32 value;
    uint32 total;
  }
  function initialize(Member[] calldata m) initializer public {
    for(uint i=0; i<m.length; i++) {
      _members.push(m[i]);
    }
  }
  receive () external payable {
    require(_members.length > 0, "1");
    for(uint i=0; i<_members.length; i++) {
      Member memory member = _members[i];
      _transfer(member.account, msg.value * member.value / member.total);
    }
  }
  function members() external view returns (Member[] memory) {
    return _members;
  }
  // adopted from https://github.com/lexDAO/Kali/blob/main/contracts/libraries/SafeTransferLib.sol
  error TransferFailed();
  function _transfer(address to, uint256 amount) internal {
    bool callStatus;
    assembly {
      callStatus := call(gas(), to, amount, 0, 0, 0, 0)
    }
    if (!callStatus) revert TransferFailed();
  }
}

File 2 of 2 : Initializable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"value","type":"uint32"},{"internalType":"uint32","name":"total","type":"uint32"}],"internalType":"struct Stream.Member[]","name":"m","type":"tuple[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"members","outputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"value","type":"uint32"},{"internalType":"uint32","name":"total","type":"uint32"}],"internalType":"struct Stream.Member[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50610673806100206000396000f3fe60806040526004361061002d5760003560e01c8063804e1c081461014a578063bdd4d18d1461016c57600080fd5b36610145576001546100865760405162461bcd60e51b815260206004820152600160248201527f310000000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b600154811015610142576000600182815481106100b657634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051606081018252929091015473ffffffffffffffffffffffffffffffffffffffff811680845263ffffffff600160a01b83048116958501869052600160c01b90920490911691830182905291935061012f9261012090346104b0565b61012a9190610490565b610197565b508061013a816104cf565b915050610089565b50005b600080fd5b34801561015657600080fd5b5061016a6101653660046103a7565b6101e1565b005b34801561017857600080fd5b50610181610313565b60405161018e9190610417565b60405180910390f35b600080600080600085875af19050806101dc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600054610100900460ff16806101fa575060005460ff16155b61026c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161007d565b600054610100900460ff1615801561028e576000805461ffff19166101011790555b60005b828110156102fc5760018484838181106102bb57634e487b7160e01b600052603260045260246000fd5b835460018101855560009485526020909420606090910292909201929190910190506102e7828261051b565b505080806102f4906104cf565b915050610291565b5080156101dc576000805461ff0019169055505050565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561039e576000848152602090819020604080516060810182529185015473ffffffffffffffffffffffffffffffffffffffff8116835263ffffffff600160a01b8204811684860152600160c01b9091041690820152825260019092019101610337565b50505050905090565b600080602083850312156103b9578182fd5b823567ffffffffffffffff808211156103d0578384fd5b818501915085601f8301126103e3578384fd5b8135818111156103f1578485fd5b866020606083028501011115610405578485fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015610483578151805173ffffffffffffffffffffffffffffffffffffffff1685528681015163ffffffff9081168887015290860151168585015260609093019290850190600101610434565b5091979650505050505050565b6000826104ab57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156104ca576104ca6104ea565b500290565b60006000198214156104e3576104e36104ea565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6000813563ffffffff81168114610515578182fd5b92915050565b813573ffffffffffffffffffffffffffffffffffffffff811680821461054057600080fd5b82549150807fffffffffffffffffffffffff0000000000000000000000000000000000000000831617835577ffffffff000000000000000000000000000000000000000061059060208601610500565b60a01b1680827fffffffffffffffff0000000000000000000000000000000000000000000000008516171784557bffffffff0000000000000000000000000000000000000000000000006105e660408701610500565b60c01b167fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff83167fffffffff000000000000000000000000000000000000000000000000000000008516178217178455505050505056fea2646970667358221220adc0272f2ed275777abded06c3247c7cfd698af5c3bee91a4d44995fb6a8800e64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061002d5760003560e01c8063804e1c081461014a578063bdd4d18d1461016c57600080fd5b36610145576001546100865760405162461bcd60e51b815260206004820152600160248201527f310000000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b600154811015610142576000600182815481106100b657634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051606081018252929091015473ffffffffffffffffffffffffffffffffffffffff811680845263ffffffff600160a01b83048116958501869052600160c01b90920490911691830182905291935061012f9261012090346104b0565b61012a9190610490565b610197565b508061013a816104cf565b915050610089565b50005b600080fd5b34801561015657600080fd5b5061016a6101653660046103a7565b6101e1565b005b34801561017857600080fd5b50610181610313565b60405161018e9190610417565b60405180910390f35b600080600080600085875af19050806101dc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600054610100900460ff16806101fa575060005460ff16155b61026c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161007d565b600054610100900460ff1615801561028e576000805461ffff19166101011790555b60005b828110156102fc5760018484838181106102bb57634e487b7160e01b600052603260045260246000fd5b835460018101855560009485526020909420606090910292909201929190910190506102e7828261051b565b505080806102f4906104cf565b915050610291565b5080156101dc576000805461ff0019169055505050565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561039e576000848152602090819020604080516060810182529185015473ffffffffffffffffffffffffffffffffffffffff8116835263ffffffff600160a01b8204811684860152600160c01b9091041690820152825260019092019101610337565b50505050905090565b600080602083850312156103b9578182fd5b823567ffffffffffffffff808211156103d0578384fd5b818501915085601f8301126103e3578384fd5b8135818111156103f1578485fd5b866020606083028501011115610405578485fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015610483578151805173ffffffffffffffffffffffffffffffffffffffff1685528681015163ffffffff9081168887015290860151168585015260609093019290850190600101610434565b5091979650505050505050565b6000826104ab57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156104ca576104ca6104ea565b500290565b60006000198214156104e3576104e36104ea565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6000813563ffffffff81168114610515578182fd5b92915050565b813573ffffffffffffffffffffffffffffffffffffffff811680821461054057600080fd5b82549150807fffffffffffffffffffffffff0000000000000000000000000000000000000000831617835577ffffffff000000000000000000000000000000000000000061059060208601610500565b60a01b1680827fffffffffffffffff0000000000000000000000000000000000000000000000008516171784557bffffffff0000000000000000000000000000000000000000000000006105e660408701610500565b60c01b167fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff83167fffffffff000000000000000000000000000000000000000000000000000000008516178217178455505050505056fea2646970667358221220adc0272f2ed275777abded06c3247c7cfd698af5c3bee91a4d44995fb6a8800e64736f6c63430008040033

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  ]

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.