pom文件引入web3j 包
com.madgag.spongycastle
core
1.58.0.0
org.web3j
utils
3.4.0
org.web3j
core
>3.4.0
eth 创建钱包
public static void create() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, CipherException {
ECKeyPair ecKeyPair = Keys.createEcKeyPair();
WalletFile walletFile = Wallet.createLight("password", ecKeyPair);
String address = "0x" + walletFile.getAddress();
String privateKey = ecKeyPair.getPrivateKey().toString(16);
String encryptPrivateKey = AesCBC.getInstance().simpleEncrypt(privateKey,
AesCBC.makeKey(1 + "_" + 1));
System.out.println("address:"+ address);
System.out.println("encryptPrivateKey:"+ encryptPrivateKey);
}
eth 转账
public static voidtrans() throws ExecutionException, InterruptedException, IOException, CipherException{
//设置需要的矿工费//调用的是kovan测试环境,这里使用的是infura这个客户端
Web3j web3j = Web3j.build(new HttpService("节点地址"));
//转账人账户地址
String ownAddress = "转账地址";
//被转人账户地址
String toAddress = "收款地址";
//金额
String amount = "转账金额";
//转账人私钥
//Credentials credentials = Credentials.create("私钥");
Credentials credentials = WalletUtils.loadCredentials(
"私钥",
"keystore.store文件地址");
//getNonce(每成功交易一笔Nonce会增加)
EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(
ownAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
BigInteger nonce = ethGetTransactionCount.getTransactionCount();
//创建交易,这里是把金额转成wei的计价单位
BigInteger value = https://www.it610.com/article/Convert.toWei(amount, Convert.Unit.ETHER).toBigInteger();
//获取手续费
EthGasPrice gasPrice = web3j.ethGasPrice().send();
//转账ETH
RawTransaction rawTransaction = RawTransaction.createEtherTransaction(
nonce, gasPrice.getGasPrice(), GAS_LIMIT, toAddress, value);
////转账代币
//Function function = new Function(
//"transfer",
//Arrays.asList(new Address(toAddress), new Uint256(value)),
//Collections.emptyList());
//String data = https://www.it610.com/article/FunctionEncoder.encode(function);
//RawTransaction rawTransaction = RawTransaction.createTransaction(
//nonce,
//TransactionConstants.getUseGasPrice(gasPrice.getGasPrice()),
//TransactionConstants.GAS_AMOUNT,
//"代币地址",
//data
//);
//签名Transaction,这里要对交易做签名
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = https://www.it610.com/article/Numeric.toHexString(signedMessage);
//发送交易
EthSendTransaction ethSendTransaction =
web3j.ethSendRawTransaction(hexValue).sendAsync().get();
String transactionHash = ethSendTransaction.getTransactionHash();
//获得到transactionHash后就可以到以太坊的网站上查询这笔交易的状态了
System.out.println(transactionHash);
}/**
* 对数字乘以10的18次方
*
* @param amount 乘数
*/
public static BigInteger toWei(String amount) {
return new BigDecimal(amount).multiply(new BigDecimal(Math.pow(10, 18))).toBigInteger();
}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- 推动NFT走出监管困境,BSN推出支持NFT基础设施网络
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])