java玩转区块链-基础篇-账户

java玩转区块链-基础篇--账户

    • java环境配置
    • 基础概念
    • 账户
    • maven包引用
    • 创建账户代码
        • 代码解释
          • (1)
          • (2)
          • (3)
          • (4)

可以不让搞,但是不允许你不会

java环境配置

  1. jdk版本,jdk1.8+;
  2. IDE环境,ideas;
  3. 依赖包,web3
  4. 区块链网路,开发网Ganache

基础概念

区块链网络: 提供区块链交易的网络,测试网和正式网由以太坊提供,开发网络可以本地安装,ganache,Hardhat是两个可以本地安装的区块链服务器,ganache是本教程使用的开发区块链服务器。
web3:与区块链进行交互的网络协议,web3目前有python,nodejs,java,typeScript等语言实现
账户:区块链上的一个token
钱包:管理用户拥有token的dapp

账户

区块链中所有的资源都是token,这些token就是我们所谓的账户。账户分为两类:

  • 外部拥有的帐户,由私钥控制并且没有与之关联的代码
  • 合约账户,由其合约代码控制并具有与其关联的代码

每个账户由 余额、nonce、storageRoot 和 codeHash 等信息组成的状态,并由一个 20 字节的地址标识。

ganache(不清楚ganache安装的请参考环境搭建)上查看账户信息方式如下。
java玩转区块链-基础篇-账户_第1张图片
图中(1)是账户的地址(token),(2)点击查看具体信息。
java玩转区块链-基础篇-账户_第2张图片
图中privateKey为私钥。

区块链上只有token信息没有归属人信息,区块链并不知道这个token是谁的资产,所以已经拥有了token资产的同学看紧自己的钱袋子,不能把privateKey泄漏给其他人。

maven包引用

<properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    <dependencies>

        <dependency>
            <groupId>org.web3jgroupId>
            <artifactId>coreartifactId>
            <version>5.0.0version>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
            <version>3.12.0version>
        dependency>
        
        <dependency>
            <groupId>org.web3jgroupId>
            <artifactId>web3j-unitartifactId>
            <version>4.8.1version>
        dependency>
        <dependency>
            <groupId>com.google.guavagroupId>
            <artifactId>guavaartifactId>
            <version>23.0version>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.web3jgroupId>
                <artifactId>web3j-maven-pluginartifactId>
                <version>4.6.5version>
                <configuration>
                    <soliditySourceFiles/>
                configuration>
            plugin>
        plugins>
    build>
    <repositories>
        <repository>
            <id>centralid>
            <name>centralname>
            <url>https://maven.aliyun.com/repository/centralurl>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
        <repository>
            <id>jcenterid>
            <name>jcentername>
            <url>http://jcenter.bintray.com/url>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
        <repository>
            <id>maven-net-cnid>
            <name>Maven China Mirrorname>
            <url>https://dl.bintray.com/ethereum/mavenurl>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
    repositories>

创建账户代码

java玩转区块链-基础篇-账户_第3张图片

package com.eth.account;

import org.web3j.crypto.Credentials;
import org.web3j.crypto.WalletUtils;
import org.web3j.model.DocumentRegistry;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.gas.StaticGasProvider;

import java.io.File;
import java.math.BigInteger;

public class CreateAccount {
    public static void main(String[] args) throws Exception {
        String walletPassword = "mypassword";  //(1)
        String walletDirectory = "/Users/beijixiongzzj/Documents";  //(2)
        String filename = WalletUtils.generateNewWalletFile(walletPassword, new File(walletDirectory));  //(3)

        System.out.println("生成密钥文件:" + walletDirectory + "/" + filename);
        System.out.println("开始解析密钥->:");
        Credentials credentials = WalletUtils.loadCredentials(walletPassword, walletDirectory + "/" + filename); //(4)

        System.out.println("Account address: " + credentials.getAddress()); //(5)
        System.out.println("Account private key: " + credentials.getEcKeyPair().getPrivateKey().toString(16));  //(6)
        System.out.println("Account public key: " + credentials.getEcKeyPair().getPublicKey().toString(16));  //(7)
    }
}

执行结果

生成密钥文件:/Users/beijixiongzzj/Documents/UTC–2021-10-01T12-33-54.33000000Z–a8a97958d136c1656b9dbd83f28c8238d97265ba.json
开始解析密钥->:
Account address: 0xa8a97958d136c1656b9dbd83f28c8238d97265ba
Account private key: ca448f923bd5886ce1213b5ba831580324b9b56422199aa3486db5f04f1f4627
Account public key: 29627a520b60b0c2c61f0896199bbbe711063c4027204325d14c5f48d8087fedbff3a6408a4f7aa154801fa13a85c1b726fdd5bf04100c7b765f861d106188ba

代码解释

以下为代码块中注释的代码行的解释

(1)

定义一个变量“walletPassword“,这个密码用户为生成的密钥文件进行加密

(2)

定义一个变量,代表的是“/Users/beijixiongzzj/Documents“这个目录,是生成加密文件存在的本地目录

(3)

WalletUtils.generateNewWalletFile该api用户生成一个密钥文件,返回的是生成的密钥文件的地址

(4)

加载密钥文件解析出公钥私钥

java玩转区块链-基础篇-环境搭建

java玩转区块链-基础篇-solidity语法-基础类型

你可能感兴趣的:(java玩转区块链-基础篇,java,区块链)