智能合约区块链历史
Smart contract blockchain history
智能合约是否有可能查看过去在其上完成的交易,换句话说,智能合约是否有可能查看自创建以来谁向它发送了以太币?
如果智能合约有一个数据结构来记录这些活动,那将是可能的。
仓促准备的例子:
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; }
}
这可能会以牺牲顺序或随机访问为代价提高存储效率。这种方式一举两得。
希望对您有所帮助。
如果您尝试使用智能合约从区块链中读取交易,答案是 "No" 在 solidity 语言中不存在这个。您可以使用 Web3.js 以 Rob 为例,或者将事务日志保存在外部数据库中,这就像检查大量块和大量事务以及异步问题的复杂性一样。
在其他情况下,您可以使用外部 api 来检查交易并拥有历史记录,例如:https://etherscan.io/apis
智能合约是否有可能查看过去在其上完成的交易,换句话说,智能合约是否有可能查看自创建以来谁向它发送了以太币?
如果智能合约有一个数据结构来记录这些活动,那将是可能的。
仓促准备的例子:
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; }
}
这可能会以牺牲顺序或随机访问为代价提高存储效率。这种方式一举两得。
希望对您有所帮助。
如果您尝试使用智能合约从区块链中读取交易,答案是 "No" 在 solidity 语言中不存在这个。您可以使用 Web3.js 以 Rob 为例,或者将事务日志保存在外部数据库中,这就像检查大量块和大量事务以及异步问题的复杂性一样。
在其他情况下,您可以使用外部 api 来检查交易并拥有历史记录,例如:https://etherscan.io/apis