2

智能合约是否有可能查看过去在其上完成的交易,换句话说,智能合约是否有可能查看自成立以来谁向它发送了以太币?

4

2 回答 2

2

如果智能合约有一个数据结构来记录这些活动的发生,那将是可能的。

匆忙准备的例子:

pragma solidity ^0.4.6;

contract TrackPayments {

    struct PaymentStruct {
        address sender;
        uint amount;
    }

    // look up the struct with payment details using the unique key for each payment
    mapping(bytes32 => PaymentStruct) public paymentStructs;

    // payment keys in order received
    bytes32[] public paymentKeyList;

    event LogPaymentReceived(address sender, uint amount);

    function payMe() public payable returns(bool success) {
        if(msg.value==0) throw;
        // make a unique key ... 
        bytes32 newKey = sha3(msg.sender, paymentKeyList.length);
        paymentStructs[newKey].sender = msg.sender;
        paymentStructs[newKey].amount = msg.value;
        paymentKeyList.push(newKey);
        LogPaymentReceived(msg.sender, msg.value);
        return true;
    }

    function getPaymentCount() public constant returns(uint paymentCount) { return paymentKeyList.length; }

}

这可能会以牺牲顺序访问或随机访问为代价来提高存储效率。这种方式两者兼而有之。

希望能帮助到你。

于 2017-04-27T05:20:44.283 回答
1

如果您试图从区块链中读取您的智能合约的交易,那么在solidity 语言中答案是“否”不存在这个。您可以使用 Web3.js 和 Rob 的示例来执行此操作,或者将事务的日志保存在外部数据库中,这对于检查大量块和大量事务以及异步问题的复杂性来说是这样的。

在其他情况下,您可以使用外部 api 来检查交易并拥有历史记录,例如:https ://etherscan.io/apis

于 2017-05-31T08:11:52.483 回答