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

i20*_*awa 4 blockchain ethereum solidity web3js geth

我正在使用以太坊学习区块链,我想使用Solidity在智能合约中使用过去的交易数据.如果我在用javascript编写的程序中使用Web3.js模块,我可以轻松获得这些数据.但我无法使用Solidity在Smart合同中获取这些数据.

Solidity的参考说我们可以通过使用"block.number"和"block.blockhash(uint blockNumber)"函数来获取当前的块编号,blockhash等,但是没有提到获取事务数据.(http://solidity.readthedocs.io/en/latest/units-and-global-variables.html#special-variables-and-functions)

在此输入图像描述

请帮我.

Pat*_*tas 5

答案很简单.遗憾的是,您无法从Solidity访问旧事务或阻止数据链.至多,你可以访问最后256块的哈希值(见blockhash文档)

或者,作为一种解决方法,您可以考虑使用Oraclize.Oraclize表示读取链上的链数据的方法,因此您可以尝试从Etherscan Web API读取事务数据.Oraclize的工作方式是:

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

但是,通过这种方法,您依赖于:

  1. EtherScan已启动并正在运行
  2. Oraclize正在运行.

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