Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java应用程序调用智能合约函数,而无需侦听事件_Java_Ethereum_Solidity_Web3 - Fatal编程技术网

从java应用程序调用智能合约函数,而无需侦听事件

从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 谢谢 据我所知,如果我们想提取事件,我们

据我所知,如果我们想提取事件,我们必须使用TransactionReceive

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”的参数,没有气体限制的参数,从哪个帐户,…等等)谢谢你的回答,你的评论总是有用且清晰的,再次感谢