从java应用程序调用智能合约函数,而无需侦听事件
据我所知,如果我们想提取事件,我们必须使用TransactionReceive从java应用程序调用智能合约函数,而无需侦听事件,java,ethereum,solidity,web3,Java,Ethereum,Solidity,Web3,据我所知,如果我们想提取事件,我们必须使用TransactionReceive TransactionReceipt transactionReceipt = contract.someMethod( <param1>, ...).send(); 但这个错误出现了: Error processing transaction request: Error: Exceeds block gas limit 谢谢 据我所知,如果我们想提取事件,我们
TransactionReceipt transactionReceipt = contract.someMethod(
<param1>,
...).send();
但这个错误出现了:
Error processing transaction request: Error: Exceeds block gas limit
谢谢
据我所知,如果我们想提取事件,我们必须使用TransactionReceive
TransactionReceipt transactionReceipt = contract.someMethod(
<param1>,
...).send();
TransactionReceipt
不是监听事件的唯一方式。您还可以设置可观察过滤器:
contract.someEventObservable(startBlock, endBlock).subscribe(event -> ...);
TransactionReceive
是访问为一个特定事务引发的事件的好方法。交易期间引发的所有事件都包含在收据中。但是,如果您希望跨多个事务处理事件和/或使用过滤器,则需要使用可观察过滤器。有一整节都是关于事件过滤器和示例的
如果TransactionReceive没有参数(来自哪个帐户、气体限制等),我如何定义帐户(许多凭据)
如果我正确理解了这个问题,您想知道如何处理TransactionReceive
的事件部分吗?Web3j在合同实例中提供了一个助手方法,该方法将处理来自TransactionReceive
的日志
EventValues EventValues=contract.processEVENT\u name事件(TransactionReceive)代码>
将事件名称替换为您感兴趣的事件类型。您需要识别所需事件(地址、名称等)的任何特定于帐户的信息都应包含在事件本身中
编辑:根据你的评论,我似乎误解了你问题的这一部分。我将把我以前的答案留在这里,以防它对处理事件有用,并回答下面的问题
创建合同实例后(通过deploy
或load
),可以更改天然气限额和天然气价格。两者在包装器的父类中都有setter。因此,您可以重用同一个包装器,使用特定函数的适当gas参数来调用合同中的不同函数
但是,您不能更改基础的凭据(至少在不子类化或更改生成的包装器的情况下)。对于不同的凭据,请使用.load
创建不同的包装器对象
但这个错误出现了:
Error processing transaction request: Error: Exceeds block gas limit
处理交易请求时出错:错误:超过区块气体限值
如果没有看到用于调用该函数的合同和代码,我将无能为力。谢谢您的回答,实际上我并不是在一次调用中注册许多帐户,我的意思是,例如我有帐户a、b和c,我如何让他们都注册自己?我可以定义凭证1、凭证2和凭证3,然后在注册呼叫中使用它吗。如果是,我必须将他们的地址放在哪里,TransactionReceive只接受函数“register”的参数,没有气体限制的参数,从哪个帐户,…等等)谢谢你的回答,你的评论总是有用且清晰的,再次感谢