以太坊|eth 创建钱包,转账 web3j

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(); }

    推荐阅读