web3j区块链上链代码

Posted timelessmemoryli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web3j区块链上链代码相关的知识,希望对你有一定的参考价值。

首先需要安装geth

以下为代码

private static final String URL = "http://localhost:8000";

    public static Web3j initWeb3j() 
        return Web3j.build(getService());
    

    private static HttpService getService()
        return new HttpService(URL);
    

    /**
     * 创建账户
     * @param pwd
     * @throws Exception
     */
    public static void createAccount(String pwd) throws Exception 

        Bip39Wallet wallet = WalletUtils.generateBip39Wallet(pwd, new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\keystore\\\\"));

        Credentials credentials = WalletUtils.loadBip39Credentials(pwd, wallet.getMnemonic());

        //钱包地址 0x23f984a40d187d6c97b387b5436492023cceb12c
        String address = credentials.getAddress();
        System.out.println(address);
        //钱包私钥 89662c6e15987af2e26617a004b4b03ad57d477313352437acafdee61fc36660
        String privateKey = credentials.getEcKeyPair().getPrivateKey().toString(16);
        System.out.println(privateKey);
        //钱包公钥 5911320c64817d704da0a208cde98546ce8de0d124bc287e995e99de468c560e94bba5c6fcdbdc530b5de103e1cc6aa17fb98f64d4c0a4fee30bd3fd5b529b42
        String publicKey = credentials.getEcKeyPair().getPublicKey().toString(16);
        System.out.println(publicKey);

        String filenName = wallet.getFilename();//UTC--2020-07-22T01-26-33.79000000Z--23f984a40d187d6c97b387b5436492023cceb12c.json
        System.out.println(filenName);
        String mnemonic = wallet.getMnemonic();//rather cheap album catalog twenty move attack tube fossil purity thing voice
        System.out.println(mnemonic);
    

    /**
     * 获取账户余额
     * @param address
     * @throws Exception
     */
    public static void getBalance(String address) throws Exception 

        Web3j web3j = initWeb3j();

        EthGetBalance ethGetBalance = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send();

        if (ethGetBalance != null) 
            String banlance = ethGetBalance.getBalance().toString();
            System.out.println("账号余额(wei):" + banlance);
            System.out.println("账号余额(eth):" + Convert.fromWei(banlance, Convert.Unit.ETHER) + "ETH");
        
    

    /**
     * 转账
     * @param fromAccount
     * @param toAccount
     * @param value
     * @param privateKey
     * @param input 携带数据 上链
     * @throws Exception
     */
    public static void transfer(String fromAccount, String toAccount, BigInteger value, String privateKey, String input) throws Exception 

        Web3j web3j = initWeb3j();

        EthGetBalance ethGetBalance = web3j.ethGetBalance(fromAccount, DefaultBlockParameterName.LATEST).send();

        if (ethGetBalance != null && ethGetBalance.getBalance().compareTo(value) == 1) 
            //方法1私钥
            Credentials credentials = Credentials.create(privateKey);
            //方法2 Credentials credentials = WalletUtils.loadCredentials(passWord, filenName);

            BigInteger nonce = web3j.ethGetTransactionCount(fromAccount, DefaultBlockParameterName.LATEST).send().getTransactionCount();
            BigInteger GAS_PRICE = BigInteger.valueOf(4000000000L);
            BigInteger GAS_LIMIT = BigInteger.valueOf(4712388);

            RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, GAS_PRICE, GAS_LIMIT, toAccount, value, input);
            //签名
            byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
            String hexValue = Numeric.toHexString(signedMessage);

            EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();

            if (ethSendTransaction.getError() != null) 
                System.out.println(ethSendTransaction.getError().getMessage());
            
            String transactionHash = ethSendTransaction.getTransactionHash();

            System.out.println(transactionHash);
        
    

    /**
     * 获取交易信息
     * @param transactionHash
     * @throws Exception
     */
    public static void getTransaction(String transactionHash) throws Exception 
        Web3j web3j = initWeb3j();
        EthTransaction ethTransaction = web3j.ethGetTransactionByHash(transactionHash).send();
        Transaction transaction = ethTransaction.getResult();
        System.out.println(HexTool.toString(transaction.getInput()));
        System.out.println(transaction);
    

    /**
     * 监听交易
     * @throws Exception
     */
    public static void listen() throws Exception 
        Web3j web3j = initWeb3j();

        Subscription subscription = web3j.transactionObservable().subscribe(transaction -> 
            System.out.println("listen : " + transaction.getBlockHash());
        );
    

 

以上是关于web3j区块链上链代码的主要内容,如果未能解决你的问题,请参考以下文章

使用Ganache,web3js和remix在个人区块链上部署并调用合约

区块链 存储可扩展方法 链上链下

区块链以太坊(Ethereum )高级进阶实战视频教程

从零开发区块链应用--以太坊余额查询

云图说丨华为云区块链引擎服务:高安全的区块链技术服务平台,轻松部署,快速上链

java调用区块链智能合约