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安装的请参考环境搭建)上查看账户信息方式如下。

图中(1)是账户的地址(token),(2)点击查看具体信息。

图中privateKey为私钥。

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

maven包引用

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.web3j</groupId><artifactId>core</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><!-- https://mvnrepository.com/artifact/org.web3j/web3j-unit --><dependency><groupId>org.web3j</groupId><artifactId>web3j-unit</artifactId><version>4.8.1</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.web3j</groupId><artifactId>web3j-maven-plugin</artifactId><version>4.6.5</version><configuration><soliditySourceFiles/></configuration></plugin></plugins></build><repositories><repository><id>central</id><name>central</name><url>https://maven.aliyun.com/repository/central</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>jcenter</id><name>jcenter</name><url>http://jcenter.bintray.com/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>maven-net-cn</id><name>Maven China Mirror</name><url>https://dl.bintray.com/ethereum/maven</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories>

创建账户代码

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玩转区块链-基础篇-账户相关推荐

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

    java玩转区块链-基础篇-solidity语法-基础类型 java环境配置 代码准备 maven 完整solidity 执行步骤 基础类型 布尔类型 类型标识: 字面常量值: 运算符: 短路规则: ...

  2. 基于Java的Android区块链钱包开发(ETH篇)

    基于Java的Android区块链钱包开发-ETH篇 引言 使用的库 具体代码如下 生成公私钥.地址 查余额.签名转账 引言 首先要生成12个助记词,区块链开发之生成12个助记词 使用的库 imple ...

  3. 基于Java语言构建区块链(四)—— 交易(UTXO)

    基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...

  4. 基于Java语言构建区块链(五)—— 地址(钱包)

    基于Java语言构建区块链(五)-- 地址(钱包) 2018年03月25日 18:02:06 wangwei_hz 阅读数:1292更多 个人分类: 区块链bitcoin比特币 文章的主要思想和内容均 ...

  5. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)

    基于Java语言构建区块链(六)-- 交易(Merkle Tree) 2018年04月16日 10:21:35 wangwei_hz 阅读数:480更多 个人分类: 区块链比特币bitcoin 最终内 ...

  6. 私钥经过哈希计算可以产生公钥_「区块链基础概念100」:公钥和私钥 | 027

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 投资区块链,猛戳:火星财经App下载 来源:学习区块链 原文标题:「区块链基础概 ...

  7. AIADATA 独家深度解密:百度XuperChain开源区块链基础平台

    AIADATA 独家深度解密:百度XuperChain开源区块链基础平台 百度超级链Xuperchain正式宣布开源.根据官网显示,链内并行技术.可插拔共识机制.一体化智能合约等四大技术支撑开源,让区 ...

  8. 区块链基础知识与关键技术解析

    区块链基础 1. 区块链的来龙去脉     1.1 区块链技术起源     1.2 比特币产生背景与现状     1.3 数字货币概念     1.4 比特币技术原理 2. 区块链概念与产业现状   ...

  9. 【区块链基础】4——ETH区块结构

    账户 与BTC不同,ETH使用的是基于账户的账本(account-based ledger),账本中记录了各个用户的的余额,交易时不必追溯币的来源. 基于账户的账本对双花攻击(duoble spend ...

最新文章

  1. 关联规则挖掘算法_#数据挖掘初体验 使用weka做关联规则
  2. 容器间通信_Vue组件间通信的6种方式,前端工程师人人都会,网友:太简单了...
  3. c++ 读文件_C语言处理文件基础知识:文件、流和键盘输入
  4. Google 公司的 Java 语言编写规范
  5. 认识flex中的sprite
  6. php 空函数,PHP 中函数 isset(), empty(), is_null() 的区别
  7. 任何事情的发生必有其目的,并有助于我
  8. 为PyCharm添加不同解释器
  9. [大数据]Hadoop+Storm+Spark全套入门及实战视频教程
  10. 常用的硬盘数据恢复软件Easyrecovery、Finaldata、DataExplore简介
  11. Matlab实现雷达波位编排
  12. SEO关键词之选取策略及具体方法
  13. 世硕电子厂的故事!!测!
  14. 元宇宙时代,服装品牌们如何成为“头号玩家”?
  15. oracle安装界面空白,在windows 2012中安装oracle 12c R2界面空白挂起无响应CPU达到100%的问题...
  16. 什么是面向对象?你是怎么理解面向对象的?为什么要用面向对象?用面向对象有什么好处?
  17. python:IndentationError: unexpected indent 问题解决 图文说明
  18. 罗密哦与朱丽叶----this指针、函数封装
  19. Go的宕机与宕机恢复
  20. 【华为机试Python3题解】HJ21简单密码

热门文章

  1. 以外派的身份进大厂,或许条程序员升级的途径
  2. 华为HMS Core全面发布,全球开发者的新机会来了!
  3. SAP BW介绍(zt)
  4. Hazel引擎学习(五)
  5. Proxifier 代理方式上网
  6. 计算机冷知识科普,【科普冷知识】有趣的8个科学冷知识,让你大吃一惊
  7. IOS 微信返回按钮事件控制弹层关闭还是返回上一页
  8. TPL异步并行编程之任务超时
  9. easypermission坑_Android EasyPermissions官方库高效处理权限相关教程
  10. MFC DockPane 分割窗口 嵌入对话框