智能合同包装纸的交易哈希和超时例外



我们当前正在为使用Web3J及其功能的Android开发一个应用程序。我们使用从智能合约中创建的生成的SmartContract包装器。

现在,创建合同可能需要一些时间(可以感谢我们在Ropsten Testnet上设定汽油价格高高的提示(。我们使用此方法:

TestContract contract = TestContract.deploy(web3, credentials,
        GAS_PRICE, GAS_LIMIT, eth.toBigInteger(),
        stringToBytes32(conditions), eth.toBigInteger(), Addresses, Roles).send();  // constructor params

现在,这种方法是一种方法,可能需要很长时间。在Android中,这是一个问题。而且,我们似乎只能在合同地址完成后访问。(逻辑上是合乎逻辑的,必须先开采合同(我们想知道,如果我们能以某种方式将交易提前放出,因此,如果出现错误部署后(至少有一个可以检查它的进度,并在部署后的地址进一步。

生成的包装器类有目的地抽象客户端从了解发送交易的某些复杂性,包括交易哈希,签署交易,编码数据等。访问它,您必须直接与TransactionManager进行交互。经理公开了返回EthSendTransaction

sendTransaction方法
public abstract EthSendTransaction sendTransaction(BigInteger gasPrice, BigInteger gasLimit, String toAddress, String data, BigInteger value) throws IOException;

从那里,您可以致电EthSendTransaction.getTransactionHash()获取交易哈希。

如果您唯一关心的是增加超时,则通过TransactionManager中使用的TransactionReceiptProcessor来控制交易的轮询/超时:

  public static final int DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH = 40;
  public static final long DEFAULT_POLLING_FREQUENCY = 15000L;

您可以通过自己的PollingTransactionReceiptProcessor实例而不是使用TransactionManager中创建的默认一个:

来覆盖此问题。
RawTransactionManager manager = new RawTransactionManager(web3, credentials, CHAIN_ID, 
        new PollingTransactionReceiptProcessor(web3, SLEEP_IN_MILLIS, MAX_POLL_ATTEMPTS));
TestContract contract = TestContract.deploy(web3, manager,
        GAS_PRICE, GAS_LIMIT, eth.toBigInteger(),
        stringToBytes32(conditions), eth.toBigInteger(), Addresses, Roles).send();

加快交易的采矿时间将根据区块链上的负载而变化。在大多数情况下,您会在合理的时间等待时间(5分钟(中查看10-20 GWEI的汽油价格。即使那样,有时候您将支付> 20 GWEI,并且需要10分钟以上,否则您将花费5 GWEI,并且将在30秒内开采。这一切都取决于负载。您可以在添加到区块链中的新区块上使用元数据来确定负载和平均汽油价格(如果您需要在代码中动态执行此操作(,也可以查看https://ethgasstation.info/。

最新更新