区块链与DApp开发(学习总结)

0 区块链认知

开发区块链与Dapp所需知识

GO 语言: 联盟链、私有链的搭建,设立接口、监听
Solidity语言: 智能合约开发,区块链上的逻辑实现
Node.js : 监听、通信、RPC
JavaScript : Dapp应用程序开发

<学习资料>

  1. Linux: 《linux从入门到精通》
  2. JavaScript: 《JavaScript编程精解》
  3. 以太坊: 《深入理解以太坊》、《第一行代码以太坊》、以太坊源码
  4. Go: 《GO语言实战》《GO并发编程实战》
  5. Solidity与智能合约: 《Solidity编程》《深入以太坊智能合约开发》
  6. 区块链: 《GO语言公链开发实战》
  7. 网络与前端:《node.js区块链开发》(利用node深度使用区块链功能)《零基础学微信小程序开发》
  8. 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:

  1. JavaScript VM虚拟机,测试合约函数功能使用
  2. 注入web3 向主网、测试网发布合约。此时在remix网页下打开metamask插件选择对应网络可自动切换
  3. web3自定义网络, 可连接到私有链

Truffle:

  1. 在truffle中新建工程init并导入到ganache的项目中
  2. 在配置文件中配置网络连接位置,一般为私有链测试
  3. sol文件复制进合约文件夹,同时编译文件夹中生成编译文件(仿写案例,注意文件名序号递增)
  4. build编译当前工程内的所有sol文件
  5. 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三部分组成

  1. Address: 代表发布事件的合约地址
  2. Topic:第一个数据为事件触发的函数头的HASH值,如上图中数据内容为:sha3('Transfer(address,uint256)')
  3. 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

  1. 导入以太坊源码包、所有依赖包并配置gcc编译器
  2. 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: "
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值