以太坊区块链java开发:web3j

本文介绍了以太坊区块链的Java开发,重点是使用web3j库进行操作。内容涵盖连接以太坊同步节点,创建及管理账户,进行以太币转账,加载keystore文件,以及如何处理未公开源码的智能合约。同时,讲解了如何通过Solidity编译合约生成Java代码,并展示了如何调用智能合约方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以太坊 java开发依赖

        <dependency>
            <groupId>org.web3j</groupId>
            <artifactId>core</artifactId>
            <version>3.5.0</version>
        </dependency>

连接到以太坊同步节点

private String gethURL = "http://localhost:8545";

    private void connectGeth() {
        // --rpcport value HTTP-RPC服务器监听端口(默认值:8545)
        this.web3j = Admin.build(new HttpService(gethURL));
        if(null==web3j) {
            System.out.println("connectGeth error");
        }
    }

创建账户,需要输入密码,返回账户地址 0x00000...

    public String addAccount(String password) {
        // walletId:$|chainId:$|account:$
        if (web3j == null)
            connectGeth();
        String account = "";
        try {

            String fileName = WalletUtils.generateNewWalletFile(password, new File(keystorePath));
            Credentials credentials = WalletUtils.loadCredentials(password, keystorePath + "/" + fileName);
            account = credentials.getAddress();

        } catch (InvalidAlgorithmParameterException e1) {
            e1.printStackTrace();
        } catch (NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (NoSuchProviderException e1) {
            e1.printStackTrace();
        } catch (CipherException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        addCredentials(account, password);
        return account;
    }

以太币(矿币)转账

    private void transfer_ETH(String _from, String password, String _to, BigInteger value, Long logId) {
        Credentials credentials = loadCredentials(_from, password);
        try {
            //获取nonce
            EthGetTransactionCount count=web3j.ethGetTransactionCount(_from, DefaultBlockParameterName.LATEST).send();
            BigInteger nonce=count.getTransactionCount();
            //创建交易
            //BigInteger val=Convert.toWei(new BigDecimal(value), Unit.ETHER).toBigInteger();
            RawTransaction rawTransaction=RawTransaction.createEtherTransaction(nonce, GAS_PRICE, GAS_LIMIT, _to, value);
            //验证签名
            byte[] signMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
            String hexValue=Numeric.toHexString(signMessage);
            //发送交易
            CompletableFuture<EthSendTransaction> sendAsync = web3j.ethSendRawTransaction(hexValue).sendAsync();
            sendAsync.whenComplete((v,e)->{
                //交易回调
                new Thread(() -> {
                    callBackService.callbackEthSendTransaction
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值