区块链 101
本期的区块链 101 将继续上期的内容,理论部分我们就上期中的共识机制展开来谈谈;实践部分我们鼓励大家跟着教程去写出自己的第一个区块链智能合约项目,相信我,这是个有趣而又令人兴奋的过程!
区块链理论:共识机制
为什么需要共识机制
在传统的中心化银行体系中,用户之间的交易可以通过查账来消除疑虑,大家都相信银行这个中央机构不会造假,但在去中心化的区块链世界中,不存在中心化角色,各个节点是分散且平行的,如何维护区块链的正常运作?各个区块应该选择什么版本?挖矿奖励应该分配给谁?如何避开造假的恶意账本?解决这一系列问题的方法与过程就是共识机制。
提到区块链共识机制,不得不提经典的拜占庭将军问题与拜占庭容错算法,在阅读下面介绍各类区块链共识机制的内容前,我推荐你先了解一下拜占庭容错:Wikipedia | Bianance Academy
⛓️ 区块链主流共识机制:
工作量证明 (Proof of Work)
代表代币:BTC、ETH 1.0
在第一期中介绍的区块链就是采用 POW 机制的区块链,在竞赛中,最先算出哈希签名并通过全网验证的矿工获得代币奖励
优点:
- 最安全的公有链共识机制
- 机制简单、容易实行,攻击成本高(51%算力)
- 挖矿机制相对公平,投入的算力越多,获取打包权的概率越高
缺点:
- 消耗大量能源(电力),算力是通过能源消耗创造出来的
- 区块确认时间长,交易速度慢
权益证明 (Proof of Stake)
代表代币:ETH 2.0
与 POW 的高算力高收益不同,在 POS 机制下,打包用户的角色从“矿工“变成了”锻工“,拥有越多代币(权益)的用户越容易得到当前区块的写入权,因此 POS 机制又叫“伪选举机制”。参与 POS 竞争不需要高算力。POS 奖励打包用户的形式多种多样,有锁仓挖矿,又有锁仓获取收益+锦鲤抽签的形式。部分区块链会在早期采取 POW,产生一定量代币后转换到 POS 机制,ETH 就是一个例子。
优点:
- 不需要矿工持续挖矿产生区块记录、节省能源
- 竞争打包权的矿工必须先持有代币,理论上,为避免币蒸发,矿工更愿意保护系统正常运作
缺点:
- 为了更容易获取打包权,可能会造成囤币情况,降低货币流通量
- 获取到打包权的矿工能够轻易地改写出另一条假链,可能导致 Double Spending 攻击成功
- 执行与运作比 POW 机制复杂
代理权益证明(Delegated Proof of Stake)
代表代币:EOS
DPOS 可以理解为 POS + POW,参与者将打包工作委托给一小群数量固定的验证者,参与者通过投票选出验证者代表,投票采用 POS 机制,被选出的验证者之间存在密钥计算竞赛,采取 POW 机制来决定谁负责打包。在 DPOS 机制下,被委托的验证人会和他们的支持者共享获得的奖励的
优点:
- 减少参与验证工作的节点数量,打包效率得到提高
- 维护区块链的成本低,更节省能源
缺点:
- 执行与运作更复杂,容易产生安全漏洞
- 权利容易被少数掌握,存在演变为“部分中心化”风险
关联阅读:What is Delegated Proof of Stake?
区块链开发:第一个智能合约项目
学完了 Solidity 的基础,你是否迫不及的的想写出自己的第一个智能合约呢?
现在你可以阅读 OpenZeppelin 的智能合约开发教程,从零开始,一步一步地完成自己的第一个 Smart Contract Project 。
通过阅读 Developing Smart Contracts Tutorial,你将会学习到:
- Truffle 和 Hardhat 基础使用
- 智能合约的编写、编译
- 智能合约的本地部署与测试
- 将智能合约部署到公开的测试网络
- 升级智能合约
在编写智能合约的过程中,你将会使用 OpenZeppelin 库,它提供一系列经过实践测试的 API 来协助你开发安全可靠的智能合约,减少被攻击的风险。
区块链工具分享:开发框架
从 0 开始编写区块链智能合约是困难的,但借助开发框架,我们可以更轻松的写出高质量的代码,更好地完成开发工作
- Hardhat: 基于 JS,灵活可拓展的以太坊专业开发环境,容易上手,与 OpenZeppelin 的可升级智能合约插件直接集成
- Truffle:基于 JS,近几年以太坊智能合约的默认开发框架,功能与 Hardhat 类似;它是 Truffle Suite 中的一员,能够与姊妹工具 Drizzle 和 Ganache 很好的配合完成各项开发工作
- Brownie:基于 Python,简洁干净的智能合约开发框架,没有 JS 带来的各种麻烦,适合讨厌 JS 的开发者
- EmBark:基于JS,区块链 DApp 全栈框架,功能强大,自带 UI,可以通过 CLI 进行合约交互测试;模块化设计开发构建,可以选择想集成的功能、插件与工具;EmBark 有一定的上手难度
关于 TypeScript 和 JavaScript:虽然目前的主流框架基于 JavaScript,但在实际开发中开发者更倾向于采用 TypeScript 来编写 Deploy 脚本与测试用例,JS 这玩意儿真的是一言难尽...