我们可以在智能合约中使用Solidity获取过去区块记录的交易信息吗?

Can we get transaction information recorded in the past block using Solidity in the Smart contract?

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

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

enter image description here

请帮帮我

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

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

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

然而,通过这种方法,您依赖于:

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

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