我想从区块链中获取某个地址(地址A)的所有收据记录。我使用web3。eth公司。getBlock和web3。eth公司。getTransaction获取与A相关的所有事务。但我发现,如果通过调用合同中的“A.send”或“A.transfer”函数将以太传输到地址A,我只能获取从调用方地址到合同地址的合同调用事务。我找不到这个事务和地址A之间的关系。有没有办法让A的合同调用事务?谢谢
简短回答:倾听事件,而不是监视事务。
为什么我找不到合同“调用”的事务?
合约不会调用/创建自己的事务(它没有私钥来签署)。正如您所看到的,合约可以在自己的执行过程中调用其他合约,但这些调用都是作为同一事务的一部分执行的。
发现已执行函数调用的推荐方法是使用事件。如果您要查看的合约没有在您要查看的调用上指定事件,您可能会面临一些繁重的工作:在EVM级别跟踪每个事务的执行情况(大型块浏览器会这样做来生成他们提供的一些额外信息)。
如果你被跟踪卡住了:你可以在这个关于内部交易的以太坊StackExchange问题上找到更多关于使用以太坊js-vm
或geth的debug_traceTransaction
的信息。
如何从交易调用的智能合约方法中获取返回值? 不可能从被称为交易一部分的智能合约上返回方法的值。如果希望在交易期间读取值,则必须使用事件event。要从智能合约中查询值,必须使用与交易分开的调用。这些方法应该标记为常量函数。由web3j创建的solidity智能合约封装包为你处理这些差异。 下面的stackexchange帖子对于理解这个问题很有用。
与智能合约交易 要与现有的智能合约进行交易,需要提供以下属性: to:智能合同地址 value:在智能合约中你希望存放的以太币Ether量(如果智能合约接受以太币Ether的话) data: 已编码的函数选择器和自变量参数 web3j负责函数编码,有关实现的进一步细节,请参阅应用程序二进制接口部分Application Binary Interface。 Function function = n
部署智能合约及与智能合约交互 如果你想避免使用智能合约的底层实现细节,web3j提供solidity的智能合约的封装包,使你能够通过web3j生成的包装对象直接与智能合约的所有方法进行交互。 另外,如果你希望发送常规交易或希望在与智能合约的交互中有更多的控制权,请参阅web3j教程:java使用web3j开发以太坊智能合约交易,这里讲到了创建智能合约,与智能合约进行交易,查询智能合约的状态等内容。
8.1 RPC 之前的章节中我们看到了怎么写、部署合约以及与合约互动。现在该讲讲与以太坊网络和智能合约沟通的细节了。 一个以太坊节点提供一个 RPC界面。这个界面给 Ðapp访问以太坊区块链的权限和节点提供的功能,比如编译智能合约代码,它用 JSON-RPC 2.0规范(不支持提醒和命名的参数)的子集作为序列化协议,在 HTTP和 IPC (linux/OSX上的 unix域接口,在 Window
指导编写一个EOSIO的智能合约 模块 Account API 查询账户数据的API. Chain API 查询链内部状态的API. Database API 存储和检索EOS.IO区块链的数据API根据以下广泛结构来组织数据. Math API 定义常用的数学函数. Action API 定义用于查询操作属性的API. Memory API 定义常用的记忆功能. Console API 使应用程
编程语言 使用golang作为编程语言(对部分关键字限制,以保证处理的有序性),而不是重新创造编程语言。 golang是一个简单、易用的编程语言,它有完善的帮助文档和开发工具。 它是强类型校验,编译阶段就能够校验发现很多bug。 它是模块化的,本系统能够简单屏蔽外部功能,使智能合约处在简单可预期的环境中。 已经有大量的golang开发人员,他们如果要开发智能合约,非常容易上手。 智能合约的分类 公