Legacy Account Key
AccountKeyLegacy
Import necessary classes from the Web3j and kaia libraries(web3j-ext
).
Create a credentials from private key
Create a Web3j instance with the specified BAOBAB_URL
Also, you can change the default provider. For example, using the alchemy provider.
Gas price and gas limit settings
Get chain ID from the network
Get the nonce for the sender's address
Generate a new account key for account update
Set transaction type as ACCOUNT_UPDATE
Create a raw transaction for account update
Sign the transaction
Send the signed transaction to kaia network
Wait for the transaction to be completed and get the transaction receipt
Shut down the Web3j instance
Decode the raw transaction to get the transaction type
AccountUpdateWithLegacyExample.java
package org.web3j.example.accountKey;import org.web3j.tx.response.PollingTransactionReceiptProcessor;import org.web3j.tx.response.TransactionReceiptProcessor;import org.web3j.example.keySample;import java.io.IOException;import java.math.BigInteger;import org.web3j.crypto.KlayCredentials;import org.web3j.crypto.KlayRawTransaction;import org.web3j.crypto.KlayTransactionEncoder;import org.web3j.crypto.transaction.account.AccountKeyLegacy;import org.web3j.crypto.transaction.type.TxType;import org.web3j.crypto.transaction.type.TxTypeAccountUpdate;import org.web3j.crypto.transaction.type.TxType.Type;import org.web3j.protocol.core.DefaultBlockParameterName;import org.web3j.protocol.core.methods.response.EthChainId;import org.web3j.protocol.core.methods.response.EthSendTransaction;import org.web3j.protocol.kaia.Web3j;import org.web3j.protocol.http.HttpService;import org.web3j.utils.Numeric;import org.web3j.protocol.kaia.core.method.response.TransactionReceipt;public class AccountUpdateWithLegacyExample { public static void run() throws Exception { KlayCredentials credentials = KlayCredentials.create(keySample.LEGACY_KEY_privkey); Web3j web3j = Web3j.build(new HttpService(keySample.BAOBAB_URL)); BigInteger GAS_PRICE = BigInteger.valueOf(50000000000L); BigInteger GAS_LIMIT = BigInteger.valueOf(6721950); String from = credentials.getAddress(); EthChainId EthchainId = web3j.ethChainId().send(); long chainId = EthchainId.getChainId().longValue(); BigInteger nonce = web3j.ethGetTransactionCount(from, DefaultBlockParameterName.LATEST).send() .getTransactionCount(); AccountKeyLegacy accountkey = AccountKeyLegacy.create(); TxType.Type type = Type.ACCOUNT_UPDATE; KlayRawTransaction raw = KlayRawTransaction.createTransaction( type, nonce, GAS_PRICE, GAS_LIMIT, from, accountkey); byte[] signedMessage = KlayTransactionEncoder.signMessage(raw, chainId, credentials); String hexValue = Numeric.toHexString(signedMessage); EthSendTransaction transactionResponse = web3j.ethSendRawTransaction(hexValue).send(); System.out.println("TxHash : \n " + transactionResponse.getResult()); String txHash = transactionResponse.getResult(); int DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH = 40; int DEFAULT_BLOCK_TIME = 1 * 1000; long DEFAULT_POLLING_FREQUENCY = DEFAULT_BLOCK_TIME; TransactionReceiptProcessor transactionReceiptProcessor = new PollingTransactionReceiptProcessor(web3j, DEFAULT_POLLING_FREQUENCY, DEFAULT_POLLING_ATTEMPTS_PER_TX_HASH); org.web3j.protocol.core.methods.response.TransactionReceipt ethReceipt = transactionReceiptProcessor .waitForTransactionReceipt(txHash); System.out.println("Receipt from eth_getTransactionReceipt : \n" + ethReceipt); TransactionReceipt receipt = web3j.klayGetTransactionReceipt(txHash).send().getResult(); System.out.println("Receipt from klay_getTransactionReceipt : \n" + receipt); web3j.shutdown(); TxTypeAccountUpdate rawTransaction = TxTypeAccountUpdate.decodeFromRawTransaction(signedMessage); System.out.println("TxType : " + rawTransaction.getKlayType()); }}
output
❯ java AccountUpdateWithLegacyExample.javaTxHash : 0x7b435e127119d8ee2edf8d49377ed150e4579cc3c991e0272a519a5d7f3f17b2Receipt from eth_getTransactionReceipt :TransactionReceipt{transactionHash='0x7b435e127119d8ee2edf8d49377ed150e4579cc3c991e0272a519a5d7f3f17b2', transactionIndex='0x1', blockHash='0xc1d491e001410664e0a1e68c20d69890a587dede6beae43c20fa1899935425ba', blockNumber='0x90e59b5', cumulativeGasUsed='0x3240d', gasUsed='0x5208', contractAddress='null', root='null', status='0x1', from='0xa2a8854b1802d8cd5de631e690817c253d6a9153', to='0xa2a8854b1802d8cd5de631e690817c253d6a9153', logs=[], logsBloom='0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', revertReason='null', type='0x0', effectiveGasPrice='0x5d21dba00'}Receipt from klay_getTransactionReceipt :class TransactionReceipt { blockHash: 0xc1d491e001410664e0a1e68c20d69890a587dede6beae43c20fa1899935425ba blockNumber: 0x90e59b5 codeFormat: null contractAddress: null feePayer: null feePayerSignatures: [] feeRatio: null from: 0xa2a8854b1802d8cd5de631e690817c253d6a9153 gas: 0x66919e effectiveGasPrice: 0x5d21dba00 gasPrice: 0xba43b7400 gasUsed: 0x5208 humanReadable: null key: 0x01c0 input: null logs: [] logsBloom: 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 nonce: 0x3e8 senderTxHash: 0x7b435e127119d8ee2edf8d49377ed150e4579cc3c991e0272a519a5d7f3f17b2 signature: [] status: 0x1 txError: null to: null transactionHash: 0x7b435e127119d8ee2edf8d49377ed150e4579cc3c991e0272a519a5d7f3f17b2 transactionIndex: 0x1 type: TxTypeAccountUpdate typeInt: 32 value: null}TxType : ACCOUNT_UPDATE