0 区块链认知
开发区块链与Dapp所需知识
GO 语言: 联盟链、私有链的搭建,设立接口、监听
Solidity语言: 智能合约开发,区块链上的逻辑实现
Node.js : 监听、通信、RPC
JavaScript : Dapp应用程序开发
<学习资料>
- Linux: 《linux从入门到精通》
- JavaScript: 《JavaScript编程精解》
- 以太坊: 《深入理解以太坊》、《第一行代码以太坊》、以太坊源码
- Go: 《GO语言实战》《GO并发编程实战》
- Solidity与智能合约: 《Solidity编程》《深入以太坊智能合约开发》
- 区块链: 《GO语言公链开发实战》
- 网络与前端:《node.js区块链开发》(利用node深度使用区块链功能)《零基础学微信小程序开发》
- Dapp实战: 《区块链以太坊Dapp开发实战》(GO+solidity)、《区块链Dapp》(JS+Solidity)、《区块链开发实战实用案例分析》(案例应用多但需要基础 Solidity+JS)、《区块链智能合约与Dapp应用实战》(solidity+Java)
现在市面上的区块链书很多、很杂,学习难度也相差很大。在走了一些弯路后,本人翻阅了这些书的主要内容、记录了每本书的主要侧重点与讲述较好的地方,并给出如下的阅读建议。并非要全部通读,尤其在有了一定基础之后可直接阅读书中的核心部分。
有了此相对平滑的学习曲线,相信你我在自学的路上一定能越走越远。祝你成功!
建议学习顺序(我目前还在5):
1. 《JavaScript编程精解》(掌握JS的基本编程)
2. 《Solidity编程》(掌握智能合约的基本编程)
3. 《区块链以太坊Dapp开发实战》 《GO语言实战》(参考) (学习GO的RPC接口链接以太坊)
4. 《深入理解以太坊》(此时学习以太坊内部的细节更易于理解)
5. 《第一行代码以太坊》(学习通过web3接口链接以太坊)
6. 《区块链Dapp》(Dapp完整实战)
7. 《区块链开发实战实用案例分析》(更复杂更多元的项目)《深入以太坊智能合约开发》(参考避免重复造轮子)
8. 《node.js区块链开发》(开放了更多功能,不再局限于只使用接口)
9. 《GO语言公链开发实战》《GO并发编程实战》(完全解开手脚,不再局限于别人的链,订制自己的联盟链、企业链)
实际应用项目
电子身份、证据认证系统
供应链上下游智能合约
网上拍卖软件
众筹平台
融资、股份认证等
<区块链知识>
部署私有链
Ganache
使用Ganache图形界面端或ganache-cli快速搭建私有链,使用图形界面可快速监控链上的实时交易。
给出一个win下exe格式的下载链接:ganache图形界面下载地址
账户管理
MetaMask
Mist钱包已经停用,使用轻度的MetaMask钱包管理主网、测试网、私有链中的账户
生成以太坊钱包
使用以太坊源码调用创建账户的函数,地址将保存在keystore下
再使用解码函数传入密码从中解出私钥(交易签名、导入其他钱包时使用)
//存储钱包文件的位置
keydir := "./keystores"
//调用源码
ks := keystore.NewKeyStore(keydir,keystore.StandardScryptN,keystore.StandardScryptP)
wallet,err := ks.NewAccount(password)
发布智能合约
remix:
- JavaScript VM虚拟机,测试合约函数功能使用
- 注入web3 向主网、测试网发布合约。此时在remix网页下打开metamask插件选择对应网络可自动切换
- web3自定义网络, 可连接到私有链
Truffle:
- 在truffle中新建工程
init
并导入到ganache的项目中 - 在配置文件中配置网络连接位置,一般为私有链测试
- sol文件复制进合约文件夹,同时编译文件夹中生成编译文件(仿写案例,注意文件名序号递增)
build
编译当前工程内的所有sol文件migrate
部署智能合约进当前网络
给出Truffle官方文档https://www.trufflesuite.com/docs/truffle/overview
<智能合约知识>
编写智能合约
remix
使用网页版remix编写智能合约
中文版remix网站 http://remix.hubwiz.com/
英文版remix网站 http://remix.ethereum.org
建议使用英文版,因为中文版可能存在以太坊测试网络连不上的问题
配合atom保存到本地
事件与监听
智能合约无法自动触发,只能通过外部调用。所以智能合约只能发布事件,但不能监听。
发布的事件数据储存在该交易(函数调用)的日志中,如下图所示为满足ERC20协议的Transfer交易触发的交易事件。
LOG由address、Topic、Data三部分组成
- Address: 代表发布事件的合约地址
- Topic:第一个数据为事件触发的函数头的HASH值,如上图中数据内容为:
sha3('Transfer(address,uint256)')
- Data:触发事件传出的参数,此事件触发后返回三个值为from,to,value(ERC20协议)
同时,在solidity中定义事件时给出indexed关键字则参数将保存在topic中,而不存在data中,更有利于筛选事件:
event Transfer(address indexed from,address indexed to, uint256 value)
则Topic将出现3行数据,分别为函数头hash,传出参数1 from,参数2 to
函数ID生成方法
用Keecak256算法给函数声明字符串进行hash,取结果的前四个字节:
bytes4(keccak256(Transfer(address,uint256)))
ERC20协议
加密货币协议,可用于股权证明、众筹证明等一切权益共识
ERC271协议
加密猫所用的协议,唯一个体币协议
<与区块链交互>
<<利用GO
查询区块链消息
开发环境 :GO
- 导入以太坊源码包、所有依赖包并配置gcc编译器
rpcClient,err := rpc.DialHTTP(erc.NodeUrl)
配置以太坊RPC接口
接口协议
采用json结构传输数据,如获取交易信息 methodName := "eth_getTransactionByHash"
的输出结构:
type Transaction struct {
Hash string `json: "hash"`
Nonce string `json: "nonce"`
BlockHash string `json: "blockHash"`
BlockNumber string `json: "blockNumber"`
TransactionIndex string `json: "