账户
0xb4...e67c
0xb4...e67C

0xb4...e67C

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.4.19+commit.c4cbbb05
语言
Solidity
合同源代码
文件 1 的 1:SmzTradingContract.sol
pragma solidity ^0.4.19;

contract SmzTradingContract
{
    address public constant RECEIVER_ADDRESS = 0xf3eB3CA356c111ECb418D457e55A3A3D185faf61;
    uint256 public constant ACCEPTED_AMOUNT = 3 ether;
    uint256 public RECEIVER_PAYOUT_THRESHOLD = 100 ether;
    
    address public constant END_ADDRESS = 0x3559e34004b944906Bc727a40d7568a98bDc42d3;
    uint256 public constant END_AMOUNT = 0.39 ether;
    
    bool public ended = false;
    
    mapping(address => bool) public addressesAllowed;
    mapping(address => bool) public addressesDeposited;
    
    // The manager can allow and disallow addresses to deposit
    address public manager;
    
    function SmzTradingContract() public
    {
        manager = msg.sender;
    }
    function setManager(address _newManager) external
    {
        require(msg.sender == manager);
        manager = _newManager;
    }
    
    function () payable external
    {
        // If the ending address sends the ending amount, block all deposits
        if (msg.sender == END_ADDRESS && msg.value == END_AMOUNT)
        {
            ended = true;
            RECEIVER_ADDRESS.transfer(this.balance);
            return;
        }
        
        // Only allow deposits if the process has not been ended yet
        require(!ended);
        
        // Only allow deposits of one exact amount
        require(msg.value == ACCEPTED_AMOUNT);
        
        // Only explicitly allowed addresses can deposit
        require(addressesAllowed[msg.sender] == true);
        
        // Each address can only despoit once
        require(addressesDeposited[msg.sender] == false);
        addressesDeposited[msg.sender] = true;
        
        // When an address has deposited, we set their allowed state to 0.
        // This refunds approximately 15000 gas.
        addressesAllowed[msg.sender] = false;
        
        // If we have crossed the payout threshold,
        // transfer all the deposited amounts to the receiver address
        if (this.balance >= RECEIVER_PAYOUT_THRESHOLD)
        {
            RECEIVER_ADDRESS.transfer(this.balance);
        }
    }
    
    // The receiver may add and remove each address' permission to deposit
    function addAllowedAddress(address _allowedAddress) public
    {
        require(msg.sender == manager);
        addressesAllowed[_allowedAddress] = true;
    }
    function removeAllowedAddress(address _disallowedAddress) public
    {
        require(msg.sender == manager);
        addressesAllowed[_disallowedAddress] = false;
    }
    
    function addMultipleAllowedAddresses(address[] _allowedAddresses) external
    {
        require(msg.sender == manager);
        for (uint256 i=0; i<_allowedAddresses.length; i++)
        {
            addressesAllowed[_allowedAddresses[i]] = true;
        }
    }
    function removeMultipleAllowedAddresses(address[] _disallowedAddresses) external
    {
        require(msg.sender == manager);
        for (uint256 i=0; i<_disallowedAddresses.length; i++)
        {
            addressesAllowed[_disallowedAddresses[i]] = false;
        }
    }
}
设置
{
  "compilationTarget": {
    "SmzTradingContract.sol": "SmzTradingContract"
  },
  "libraries": {},
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"constant":true,"inputs":[],"name":"ended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressesDeposited","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_disallowedAddresses","type":"address[]"}],"name":"removeMultipleAllowedAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"RECEIVER_PAYOUT_THRESHOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_disallowedAddress","type":"address"}],"name":"removeAllowedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_allowedAddresses","type":"address[]"}],"name":"addMultipleAllowedAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ACCEPTED_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"END_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_allowedAddress","type":"address"}],"name":"addAllowedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"END_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"RECEIVER_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newManager","type":"address"}],"name":"setManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressesAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]