在我的私有(private)测试区块链中使用 web3j 库进行区块链交易时,我目前遇到了标题为响应错误: *gas 资金不足 * 价格 + 值(value) *

我想从中转移一些以太币的账户有 10000 以太币的余额。我注销的 gas 价格 的值为 18000000000 作为 BigInt(它是 WEI?), gas 限制 是 web3j 使用的默认值 值为

所以问题是为什么我让交易不起作用?我想转移 10 以太例如:

TransactionReceipt transactionReceipt = Transfer.sendFunds(web3, credentials, toAccount, BigDecimal.valueOf(10.0), Convert.Unit.ETHER).send();

更多详情

创世文件如下所示:
{
  "config": {
      "chainId": 9999,
      "homesteadBlock": 0,
      "eip155Block": 0,
      "eip158Block": 0,
      "byzantiumBlock": 0
   },
   "difficulty": "400",
   "gasLimit": "2100000",
   "alloc": {
      "0x9b6301bf2cfe11066dbd641f91a2b82e0783130e": {
          "balance": "100000000000000000000000"
      }
   }
}

代码如下所示:
// create new account
Admin admin = Admin.build(new HttpService());
NewAccountIdentifier newAccount = admin.personalNewAccount("PASSWORD").send();

// get current created account
Web3j web3 = Web3.build(new HttpService());
EthAccounts accounts = web3.ethAccounts().send();
String lastAccount = Iterables.getLast(accounts.getAccounts());
// get creadentials for the first account having some ether
String firstAccount = web3.ethAccounts().send().getAccounts().get(0);
Credentials credentials = Credentials.create(firstAccount);

// get current balance for first account
EthGetBalance balance = admin.ethGetBalance(firstAccount, DefaultBlockParameterName.LATEST).send();
BigDecimal balanceVaue = Convert.fromWei(balance.getBalance().toString(), Convert.Unit.ETHER);

// create transaction to give the new created account some ether from the first one
// log some stuff
System.out.println("Account: " + firstAccount);
System.out.println("Account balance: " + balanceVaue);
System.out.println("Gas Price admin.ethGasPrice() in Ether: " + Convert.fromWei(gasPrice.toString(), Convert.Unit.ETHER));
System.out.println("Transfer Gas Limit in Ether: " + Convert.fromWei(Transfer.GAS_LIMIT.toString(), Convert.Unit.ETHER));
System.out.println("Transfer Gas Price in Ether: " + Convert.fromWei(Transfer.GAS_PRICE.toString(), Convert.Unit.ETHER));

TransactionReceipt transactionReceipt = Transfer.sendFunds(web3, credentials, lastAccount, BigDecimal.valueOf(10.0), Convert.Unit.ETHER).send();
String transactionHash = transactionReceipt.getTransactionHash();

这就导致了上面的交易错误: gas * price + value 资金不足

这是日志输出:
Account: 0x9b6301bf2cfe11066dbd641f91a2b82e0783130e
Account balance: 100000
Gas Price admin.ethGasPrice() in Ether: 1.8E-8
Transfer Gas Limit in Ether: 2.1E-14
Transfer Gas Price in Ether: 2.2E-8
Funds transfer triggered ...

最佳答案

您的 Credentials 对象不正确。您使用的方法需要私钥,而不是以太坊地址。
Credentials credentials = Credentials.create(firstAccount);
应该
Credentials credentials = Credentials.create("<PRIVATE_KEY_HERE>");

关于java - Web3j Transfer.sendFunds() 返回错误 "insufficient funds for gas * price + value",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49299114/

10-12 06:01