以太坊从安装Geth到使用web3j调用智能合约的完整流程和学习实践过程

https://blog.csdn.net/su_bo_2010/article/details/80084031
第01课:以太坊节点部署及基本命令操作

上面这个网址的课程比较系统化,主要按照这个课程的步骤进行学习和实践,
其中遇到一些问题,会参考其他的文章

//----安装和启动Geth节点
这个类似安装一个数据库,其实以太坊区块链就是一个分布式账本数据库
根据第一课可以安装windows版本的Geth以太坊节点
https://ethfans.org/wikis/Ethereum-Geth-Mirror下载,最新文档版本
这里下载的是geth-windows-amd64-1.8.3-329ac18e

但是这个课程中启动Geth完全靠设置命令参数,没有使用创世块Json文件,
所以还要参考其他使用创世块接送文件初始化区块链方式的文章
主要参考了https://blog.csdn.net/qq_40102536/article/details/109211439
中的piccgenesis.json创世块文件的参数复制到了自己的文件genesis.json中
然后使用初始化命令:geth --datadir data init genesis.json
更详细的创世快文件参数的设置需要参考其他文章
任何使用一些命令参数启动Geth客户端geth --datadir data --rpc --rpcapi “db,eth,net,web3,miner,personal”

因为开发的时候一般使用的是开发模式,开发模式中预先给开发账户设置了很多以太币,所以不需要自己
定义创世块,直接用开发模式启动就可以了 geth --datadir data --rpc --rpcapi “db,eth,net,web3,miner,personal” -dev

console
其中还有一个自动挖矿模式geth --datadir data --rpc --rpcapi “db,eth,net,web3,miner,personal” -dev --dev.period 1
默认–dev.period参数是0,表示要有交易过来才会启动挖矿,以免刷屏

//—在Geth节点的console中使用接口命令
第03课:以太坊常见 JSON-RPC 接口解析
https://blog.csdn.net/su_bo_2010/article/details/80095187

//-----如何通过 Java 语言来进行以太坊常见接口的调用
第04课:以太坊常见 JSON-RPC Java 调用实例
https://blog.csdn.net/su_bo_2010/article/details/80095211
这一课没有任何问题,按文章学习就可以了

//—作者自己使用solidity写了一个符合ERC-20标准的代币合约
第05课:ERC-20 Token 标准详解及代码
https://blog.csdn.net/su_bo_2010/article/details/80095229?spm=1001.2014.3001.5501
合约没有任何问题,比一般普通的合约考虑更周全一定,根据自己的需要做些修改就可以了

//----编译,发布只能合约
第06课:Token 的发布及操作
编译工具使用remix 网址http://remix.ethereum.org
文章中的remix有些过时,参考https://blog.csdn.net/weixin_39998006/article/details/107149785
中的Remix使用方法,新建合约文件AC.sol然后编译,
注意remix编译的时候的编译器版本尽量选择和智能合约中定义的一致,否则会有一些报警和错误
按照原文中在Geth控制台中发布只能合约的方法遇到了一些问题,可能于Geth节点的版本或者
太长的字符串格式问题有关,所以改用在Remix中选择Metamask方式来部署只能合约

这就涉及到按照Metamask 参考http://blog.hubwiz.com/2018/04/13/metamask-install/
下载了metamask-chrome-9.3.0到本地安装
几个步骤:
STEP 1 点击链接:https://github.com/MetaMask/metamask-extension/releases
STEP 2 点击 “Assets” 列表下的 “metamask-chrome-4.4.0.zip” (或你看到的最新版), 下载并解压此压缩包
STEP 3 用谷歌浏览器 (Chrome) 打开链接:chrome://extensions
选择 “加载已解压的扩展程序” (Load unpacked extension),在跳出菜单中选择刚才解压的文件包

Metamask的使用方法参考https://blog.csdn.net/Fly_hps/article/details/104115231

//----使用java的web3j库调用合约
第07课:Token 的 Java 调用
https://blog.csdn.net/su_bo_2010/article/details/80419455?spm=1001.2014.3001.5501

参考https://www.e-learn.cn/topic/3524416

在remix中编译后,复制abi、Bytecode,放入指定位置,生成abi和bin文件

安装下载web3j,配置环境变量

然后使用命令web3j solidity generate -b J:\eth\abiAndbin\AC.bin -a J:\eth\abiAndbin\AC.abi -o J:\IdeaProjects

\geth-api-call\src\main\java -p com.secbro.eth

注意要在系统的CMD命令行窗口中执行,不能在git bash中执行,因为是bat文件

注意web3j库的版本问题,安装的web3j是4.5.5 但是原来代码pom中导入的是3.2.0,那么
由4.5.5生成的代码,在3.2.0的类库中可能找不到相应的类,出现编译错误,只要把pom
中的web3j的版本升级到4.5.5高版本就可以了

因为原文章中调用的时候主要是写了一个交易的监听类,没有写如何查询和交易代币,所以
要参考其他文章,

参考https://blog.csdn.net/Keith003/article/details/82802012
根据这篇文章中的异步调用写法成功的执行了代币转账

经过这些步骤后,终于初步实现了的使用java程序调用以太坊智能合约的方法
形成了一个比较系统的,完整的过程,不过里面还有很多细节知识需要研究扩展


版权声明:本文为u012251537原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。