6

我正在研究以太坊的区块链,我想在使用 Solidity 的智能合约中使用过去的交易数据。如果我在用javascript编写的程序中使用Web3.js模块,我可以很容易地得到这些数据。但我无法使用 Solidity 在智能合约中获取这些数据。

Solidity 的参考资料说我们可以通过“block.number”和“block.blockhash(uint blockNumber)”函数获取当前区块号、blockhash 等,但没有提到获取交易数据。(http://solidity.readthedocs.io/en/latest/units-and-global-variables.html#special-variables-and-functions

在此处输入图像描述

请帮我。

4

1 回答 1

10

答案很简单。不幸的是,您根本无法从 Solidity 访问链上的旧交易或区块数据。最多,您可以访问最后 256 个块的哈希(blockhash参见文档

或者,作为一种解决方法,您可以考虑使用Oraclize。Oraclize 代表在链上读取链下数据的方式,因此您可以尝试从 Etherscan Web API 读取交易数据。Oraclize 的工作方式是:

  1. 你请求 Oraclize 智能合约你想从互联网上获取什么数据(一些 URL)
  2. Oraclize 链下服务器然后检测您的链上请求
  3. 查找您想要的数据(他们会向您提供的 URL 发出一些 http 请求)
  4. 一旦他们得到响应,他们就会将包含您请求的数据的交易发送到您的合约(调用特定的回调方法)

但是,使用这种方法,您依赖的是:

  1. EtherScan 已启动并运行
  2. Oraclize 未运行。

如果您只关心与智能合约相关的交易数据,另一种方法是将交易数据存储在链上。如果您告诉我们更多关于您要解决的具体问题,也许我们可以给您更多建议。

于 2018-06-21T12:48:22.457 回答