转账
c
fun sendEthTransaction(
privateKey: String,
toAddress: String,
amount: BigDecimal
) {
//chainId
val chainId:Long = 1
//url 可以从https://chainlist.org/里面获取可用节点
//eth转账,bnb同理,但需发送到bnb对应节点
val url = "https://xxx"
val web3j = Web3j.build(HttpService(url))
val credentials = Credentials.create(privateKey)
val count =
web3j.ethGetTransactionCount(credentials.address, DefaultBlockParameterName.LATEST)
.send()
val nonce = count.transactionCount
val gasPrice = Convert.toWei("20", Convert.Unit.GWEI).toBigInteger()
val gasLimit = BigInteger.valueOf(21000)
val value = Convert.toWei(amount, Convert.Unit.ETHER).toBigInteger()
val rawTransaction = RawTransaction.createEtherTransaction(
nonce, gasPrice, gasLimit, toAddress, value
)
val signedMessage = TransactionEncoder.signMessage(rawTransaction, chainId,credentials)
val hexValue = Numeric.toHexString(signedMessage)
logDebug("签名后的数据 $hexValue")
val ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send()
if (ethSendTransaction.hasError()) {
println("发送 ETH 交易时出错: ${ethSendTransaction.error.message}")
} else {
println("ETH 交易哈希: ${ethSendTransaction.transactionHash}")
}
}
c
fun sendErc20USDTTransaction(
privateKey: String,
toAddress: String,
amount: BigInteger
) {
//erc20 usdt 合约地址
val contractAddress = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
val url = "https://xxx"
val web3j = Web3j.build(HttpService(url))
val credentials = Credentials.create(privateKey)
val count = web3j.ethGetTransactionCount(
credentials.address, DefaultBlockParameterName.LATEST
).send()
val nonce = count.transactionCount
val gasPrice = Convert.toWei("20", Convert.Unit.GWEI).toBigInteger()
val gasLimit = BigInteger.valueOf(200000)
val function = Function(
"transfer",
listOf(Address(toAddress), Uint256(amount)),
emptyList()
)
val data = FunctionEncoder.encode(function)
val rawTransaction = RawTransaction.createTransaction(
nonce, gasPrice, gasLimit, contractAddress, data
)
val signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials)
val hexValue = Numeric.toHexString(signedMessage)
val ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send()
if (ethSendTransaction.hasError()) {
println("发送 ERC - 20 代币交易时出错: ${ethSendTransaction.error.message}")
} else {
println("ERC - 20 代币交易哈希: ${ethSendTransaction.transactionHash}")
}
}
更多: