Немного запутался. Как отправить эфир с помощью Web3j на адрес (Android)

РЕДАКТИРОВАТЬ: я использую платформу Android

Я думаю, что я немного запутался концептуально. Я был бы признателен, если бы кто-нибудь ответил мне на эти несколько вопросов, поскольку я пытаюсь сделать приложение, чтобы я мог точно понять, что здесь происходит. Я пытаюсь читать и расшифровывать документацию одновременно.

-Я сгенерировал свой адрес и закрытый ключ, используя класс web3j ECKeyPair

Теперь мне нужно иметь возможность отправить этот эфир на адрес, используя эти данные, и я не уверен, как я должен это делать.

  • Я думаю, что я должен использовать что-то, называемое необработанной транзакцией, но опять же мое понимание туманно

  • Я также хотел бы иметь возможность зашифровать свой закрытый ключ, однако я видел, что он шифрует данные в файл хранилища ключей. Есть ли способ очистить здесь ненужные данные, поскольку я только пытаюсь зашифровать закрытый ключ с помощью пароля.

Если бы более осведомленный участник, чем я, мог прояснить шаги, связанные с «подписанием транзакции», чтобы эфир можно было отправить с одного адреса на другой, вы бы очень помогли моему дизайн-проекту.

Я также не понимаю, как транзакции могут быть подписаны в автономном режиме, поскольку я думал, что смысл в подписании транзакции заключается в том, чтобы она могла быть проверена сетью.

Спасибо.

Ответы (2)

В основном вам нужно сделать три шага:

  1. Создать объект транзакции
  2. Подпишите его закрытым ключом
  3. Опубликовать подписанную транзакцию

Для шага 1 вы делаете что-то вроде этого:

var from = "0x..."; // The address you are sending ether from
var tx = {
  nonce: web3.eth.getTransactionCount (from),
  chainId: 1, // 1 means Mainnet, more chain IDs here: https://chainid.network/
  to: "0x...", // The address you are sending ether to
  data: "",
  value: value, // The amount of ether to send (in Wei)
  gasPrice: web3.eth.getGasPrice(),
  gas: 21000 // Enough for simple transfer
};

Для шага 2 вы делаете:

var signedTx = web3.eth.accounts.signTransaction (tx, privateKey);

Для шага 3 вы делаете:

web3.eth.sendSignedTransaction(signedTx);

См. документацию Web3js для получения дополнительной информации.

Извините, мой ответ о Web3js, а не о Web3j. Но для Web3j шаги в основном одинаковы:

  1. Подготовить объект транзакции ( RawTransaction )
  2. Подпишите его ( TransactionEncoder )
  3. Опубликовать его ( ethSendRawTransaction )

Подробности смотрите в официальной документации .

Если я правильно понимаю ваш вопрос, вы сможете просто использовать его, web3.eth.sendTransactionпередав объект транзакции.

var transactionObject = {
    from: web3.defaultAccount,
    to: addressToSendTo,
    value: web3.toWei(1.0, "ether"),
    gas: gasAmountInWei
};

web3.eth.sendTransaction(transactionObject, function(err, data) {
    // if no err, transaction was success
});

Что касается стоимости газа, вы можете оценить необходимый газ следующим образом.

// note that `transactionObject` is the same as above but without the gas value
web3.eth.estimateGas(transactionObject, function(err, estimate) {
    transactionObject.gas = estimate;
});

Если у вас есть проблемы с нехваткой газа, поэкспериментируйте с добавлением большего количества. Обычно я умножаю на 2, так как используется только то, что необходимо, а не вся сумма (поскольку предполагается, что это просто оценка).

Я работаю на платформе Android и java. Мои извинения за то, что не указал это выше