以太坊/实体-查询交易

时间:2018-08-02 01:11:12

标签: transactions ethereum solidity

坚固性是否能够基于交易中的数据查询它放在区块链上的交易?通过查询,我的意思是在智能合约内部运行的实体代码内(而不是在智能合约外部运行的web3.js)

那么昨天我的合同执行了预付款交易,今天我想查询该交易类型为“ dp”或预付款的智能合约的任何/所有区块链交易?我希望此查询代码在我的智能合约中运行或执行。

我不是在进行tx哈希运算之后,我希望针对特定交易或基于参数(例如交易类型,地址或日期/时间等)的交易获得整个tx数据。

注意:我想通过在智能合约内执行实体代码来查询这些交易。 我不想使用web3.js-请不要提供web3.js的答案---查询必须在实体代码中的智能合约。感谢您的帮助-但如果您的答案是web3.js,那么您真的没有帮助

请-如果有人看到了以统一代码查询区块链交易的示例,请发布链接或提及。您可以将交易过帐到BC,这似乎很奇怪,但是solidity中没有内置的get或检索或查询功能。坦白地说,这似乎很基础。

我发现,虽然solidity可以进行事件记录,但所有tx都记录到了BC的特殊区域中- SADLY -在内部执行的solidity代码智能合约无法读取这些日志 https://www.bitdegree.org/learn/solidity-events/

我只是不明白……为什么,为什么,为什么您要使用一种语言创建交易但无法读取或查询交易。这对我来说毫无意义。

我非常感谢那些知识渊博的人的答案!!谢谢 Vmusic

1 个答案:

答案 0 :(得分:3)

这是不可能的。合同无法查询区块链历史中的任意状态。

您唯一的选择是:

  1. 保留合同中任何状态变化的记录,并检查这些状态以确定先前的交易是否已发生/当前交易是否有效
  2. 使用web3离线检索详细信息并将其作为参数传递给您的合同
  3. 使用oraclize之类的服务从智能合约中查询外部数据。这最终也将最终使查询脱离链条,但是您可以在智能合约中启动查询并读回结果。