eth 创建钱包,转账 web3j

pom文件引入web3j 包

        <dependency>
            <groupId>com.madgag.spongycastle</groupId>
            <artifactId>core</artifactId>
            <version>1.58.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.web3j</groupId>
            <artifactId>utils</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.web3j</groupId>
            <artifactId>core</artifactId>
            <version>>3.4.0</version>
        </dependency>

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 void  trans() 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 = 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 = 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 = 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)