00后都玩区块链,你还不懂公链开发?
本篇专家指南首发CSDN,
由公信宝区块链研发总监蓝昊翔倾心编写。
不仅教你如何上手公链开发,更拓展你参与这个行业的新姿势:)
如何选择一条公链
了解公链的第一步,是阅读白皮书。白皮书是公链的灵魂,也是驱动公链开发的指导性文档,通过阅读白皮书,可以找到一条区块链开发的完整愿景和路线图。
白皮书从形态上可分为产品白皮书和技术白皮书(或称为技术黄皮书),前者偏向于介绍背景和公链的功能愿景,后者则比较接近可行性论证和具体模块的技术设计,包含算法、公式等。
如何做出选择?公链都有自己的定位,其设计都围绕着白皮书中所描述的愿景和路线展开。如果说要选择一条公链参与其中,仔细阅读白皮书是第一步,对白皮书的技术和非技术愿景产生了认同,这个时候我们有才有理由告诉自己,这是我想做的事情。
对于公链这种社区型的项目来说,不像公司招人一样严格筛选,参与公链生态会更加开放一些,对于所有的贡献者是来者不拒的,当然,要做到给公链提交代码或者参与公链的设计,自身的硬实力是不可或缺的。
我能为公链贡献什么
如上文所说,我们选择了一条公链,那我们能为这个公链做什么呢?讨论这个问题,我想从以下两个大的方面展开:
一、擅长技术
如果你有技术背景,在公链上选择就很多,如果你擅长区块链底层技术,哪怕是其中一个模块一个学科,那么恭喜你,你可能是众多公链竞相吸引的公链开发者之一;如果你在特定领域的背景不是那么强,或者说对枯燥的底层算法没那么感兴趣,那不妨尝试下做一些区块链上层的应用,因为这些应用对于整个生态来说,像树叶一般:只有枝叶繁茂的大树,才能吸引众人眼球。
参与底层开发
在读懂白皮书或技术黄皮书的前提下,我们对公链的技术就有所了解了,其实从每条公链的核心组成部分去分析,我们可以概括出以下的知识结构,不妨看看,对这些技术概念,你掌握的如何?
核心技术模块
数据结构
区块、交易、账户模型、未花费交易输出(UTXO)
密码学
编码方式:Base64, Base58
哈希算法:SHA2, SHA3
对称加密:AES
椭圆曲线密码学
私钥、公钥、地址
密钥交换算法
签名验签
P2P网络:Kademlia
共识机制
一致性算法、POW, POS, DPOS, BFT
智能合约
什么是智能合约
JVM, EVM, WebAssembly有什么关系
如果对上述的内容你了然于心,那么说明你已经是是一位合格的开发者(至少在我看来是的),如果对部分内容还熟悉,那欢迎选择性阅读以下内容:
私钥、公钥、地址
私钥:
一个大整型(BigInteger)随机数a
公钥:
由椭圆曲线上一个固定点G通过几何算法计算出的a*G,其中a为私钥,由于椭圆曲线上的几何运算逆运算非常复杂,因此私钥可以推导公钥,公钥法逆向推导私钥
地址:
一般为公钥的摘要格式,当然在多签的网络里,可以用一个地址对应多个公钥
上述的公私钥指的是大多数区块链系统里面的公私钥,目前的主流区块链公私钥都是基于ECC(椭圆曲线密码学)的。如果你希望了解更多,这是一篇不错的文章https://www.jianshu.com/p/af6328cc693e
交易、区块、矿工
交易:
一个用私钥签名的消息体,比如一个转账交易。每个交易都是可验证的,每个区块链的节点会对验证的交易进行存储,并且通过P2P网络广播出去
区块:
一个区块中包含时间戳,包含一段时间内的多笔交易,以及一些验证字段(如当前区块的hash,上个区块的id等),还会包含记录这个区块的矿工的签名;一段时间内发生的交易是散乱无序的,每个节点接受到交易的顺序是不一样的,那么,需要一种机制让所有的节点来通过一种约定的方式来确定交易发生的顺序,我们称这种行为为出块,我们称这样的机制为共识机制
矿工:
即打包一段时间内的交易的人,矿工负责对所有的交易进行线性梳理,通过出块的方式告知网络,先发生了什么,后发生了什么,只有通过这样的线性的方式,才能让整个网络的账本(或者说状态)是一致的。
Base64、Base58
其实很好理解,Base64即基于64个字符的编码, Base58即基于58个字符的编码。相比Base64,Base58不使用数字“0”,字母大写“O”,字母大写“I”,和字母小写“l”,以及“+”和“/”符号。
这样做的主要原因是为了肉眼容易识别,在输入的时候不容易打错,因此目前大多数的区块链系统是优先选择Base58的,当然像以太坊这样的项目甚至直接使用16进制编码了。
账户模型、UTXO
账户模型和UTXO实际上是两种记录账户余额的数据结构。UTXO的简单说法就是总量不变的前提下,如A余额10,B余额20,记为(10,20), 而当B向A转账5后,记为(10,20)=>(15,15); 而同样的事情,在账户模型下,我们可能会记为{A:15,B:15}。
相比之下:UTXO的可验证性更强,而账户模型具备更好的可扩展性,比如账户模型下,更容易实现多重签名(一个账户由多把私钥来管理)。
关于密码学、P2P网络、共识机制和智能合约,都属于一言难尽的内容,在此不多赘述。有兴趣的小伙伴可以看文后的推荐阅读资料。
常用的开发语言
对于不同的底层公链,开发语言可能有所不同,网上有比较多客观的分析,从我们对目前主流公链的比较主观的判断来看,不同语言的使用频率排序是这样的(仅从公链底层模块分析):
C++ > GoLang > Rust > Java > Javascript
话说回来,毕竟语言只是工具,从核心技术和算法角度来说,语言的难度不算什么。
社区和公司的不同
公链项目的典型特征是以社区的方式开展的,这和公司的组织形式天差地别,没有固定的地理范围,没有语言和国家限制,这和区块链的网络结构很像,所有人都是点对点协作的。
唯一能帮助所有技术贡献者聚焦的,除了白皮书,还有技术文档和技术社区。技术文档定义了一种规范,帮助所有人以特定的规范进行开发或调用,而社区是讨论和形成规范的地方。
参与生态建设
如果你对底层的技术不那么擅长,也可以选择做一些不那么底层的事情;更重要的是其实对于公链来说,底层开发不需要太多的人,而对于主链之上的工具和DApp, 则是一片巨大的蓝海。
基础设施开发
公链就算有再好的架构和API设计,也离不开几个重要的基础设施,来更好地连接开发者和用户,比如:
SDK、IDE:
SDK帮助开发者方便地调用主链API,IDE则让开发者更好地编写智能合约
客户端:
无论是管理私钥,还是体验链上DApp,客户端是用户的最好选择,一个方便、简单且安全的客户端往往是一条公链最大的流量入口,即用户聚集的地方
区块浏览器、DApp统计等信息类站点:
区块浏览器就是区块链世界的Google,无论是开发者还是用户,都离不开公链的汇总信息和统计类API,这样的信息类站点,也是一个巨大的流量入口
DApp开发
构建在公链上的应用,不依赖于中心化的服务器,所有的和逻辑都运行在去中心化网络里,DApp因此而得名;通过学习智能合约开发,应用一些主链API和SDK,结合一些必要的前端技能,我们便可以开发自己的DApp,并且快速发布到整个区块链网络,供用户使用,我们需要做的是找到用户的兴趣和痛点,并花时间去实现它
二、不擅长技术
前面说了很多技术内容,也许会让不懂技术的小伙伴心灰意冷,但实际上区块链并不是一个只属于技术极客的世界,即使你不擅长代码实现,也是可以做很多事情的,比如:
优化提案
对公链开发来说,很多的想法可能不是核心团队提出来的,而是来自于社区的意见收集,而几乎所有的公链都有这样一个讨论和整理意见的地方,叫Improvement Proposal,如比特币的BIPs,和以太坊的EIPs,参与的方式是先发起Issue讨论,社区协调员指定提案编号后整理成文档发布成一个固定格式的Proposal文档。任何人既可以参与自己感兴趣的话题讨论,也可以发起讨论,即使你不懂技术,一个很好的意见,也可能改变公链未来的方向。
技术布道
如果你通晓公链的技术原理和通证设计,在保持技术中立和科学严谨的前提下,便可以考虑将你的想法传播给更多的人,从而扩大社区的共识范围,这其实是一件伟大且影响深远的事情,在这个过程中,你会体会到想法的碰撞和汇聚,直到一个想法最终影响到很多后来的人。
文档翻译
对于有语言基础的人来说,文档翻译可能是最简单不过的事情,但对社区来说却是非常重要,因为如前文所说,无论是开发者还是用户,进入社区到深入了解公链生态的第一步,可能就是白皮书或者技术文档,如果语言不是障碍,公链将更容易吸收来自世界各地的力量。所以,这么简单且重要的事情,何乐而不为呢?
合约、经济等理论
通证、通证经济、通证模型
在区块链的世界里,通证是密码学管理的、数字化的、可流通的权益证明,通证经济指的是把通证应用于激励和流通的经济活动,而通证模型是通证产生、流通和使用的规则。
智能合约
智能合约是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。
智能合约是通证模型的实现,一份完整的合约,不只是编程技术本身,还包含一个合理的通证模型,即通证是如何产生、流通和使用的。
智能合约的执行环境是一个沙盒,通过主链的API与外界交互,合约的执行环境,也就是我们常说的虚拟机,本质上来说,JAVA的JVM、以太坊的EVM、EOS或GXChain的WebAssembly虚拟机都是一样的道理,只是在智能合约里面能调用的API,是区块链节点本身的数据。
预言机
如上文所述,智能合约是一个沙盒,其能力范围只能通过虚拟机提供的API主动访问节点本身的数据,那么如果想让智能合约能访问更多链外的数据,我们需要把这些数据搬上链,把链外可信数据搬上链的机制,我们叫预言机。
预言机不仅仅是把数据搬到链上这么简单,更重要的是做到可信,我们除了通过技术的手段,比如数字签名这样的技术外,还可以使用多方计算的方式增加数据的可信度和输入的稳定性。
典型领域的知识和储备
分布式一致性
在分布式计算领域,我们常讨论强一致性和弱一致性,而对于区块链的系统来说,我们通常实现的是最终一致性,也就是说每一笔交易不是立即确认的,而是有一个最终确认的过程,这个最终确认的标准和过程,是在共识机制中研究和设计的重点,也是我们常说的BFT、PoW、PoS、DPoS这些共识机制的主要区别。
TPS和QPS的区别
TPS指的是系统每秒处理的交易数,QPS是指系统的吞吐量,因此QPS看起来是比较广义的,而TPS才是区块链的终极性能指标。
不可能的三角(Impossible Trinity)
不可能的三角也称为三元悖论,在我们生活中各个领域,都面临着鱼和熊掌不可兼得的艰难抉择:
比如国际金融学领域: 资本流动性(Capital mobility)、汇率稳定性(Exchange rate)、货币政策独立性(Monetary policy),三者是无法兼得的,追求资本稳定性,要保持汇率的稳定,国家需要制定各种经济政策,来应对国际经济形式的变化,当下中美贸易战就是一个最直观的例子了。
分布式计算领域,我们常说的CAP,即一致性、可用性和分区容错性,也是一个难以取舍的问题。
同样区块链系统中去中心化、安全、性能,也是一直以来社区的一大争议,所以回到本文的论述要点,如何选择一条公链,或许你就需要在去中心化、安全、性能上有所取舍。例如,追求绝对的去中心化和安全,不考虑性能,比特币和以太坊的社区是一个很好的选择,而如果你希望合理地收敛去中心化程度来实现更高的性能,基于DPoS和各种XPoS共识机制的公链将是你的不二之选。
扩展阅读:值得参考的项目和资料
技术
入门必读之《比特币白皮书》
https://bitcoin.org/bitcoin.pdf
《GXChain白皮书》
https://static.gxchain.org/files/GXChain_WhitePaper_v3.0_CN.pdf
能把密码学这么学术的问题阐述地最简洁明了的,当然是Wiki了《椭圆曲线密码学》
https://en.wikipedia.org/wiki/Elliptic-curve_cryptography
安全,是智能合约最大的敌人,也是这个行业最尖端的人最关注的事情之一《智能合约安全》
https://medium.com/@merunasgrincalaitis/how-to-audit-a-smart-contract-most-dangerous-attacks-in-solidity-ae402a7e7868
如果文中UTXO和账户模型的解释让你无法理解,可以阅读这篇
http://8btc.com/article-4381-1.html
非技术
如果我们非得非常学术地理解“通证经济”
https://en.wikipedia.org/wiki/Token_economy
“智能合约”
https://github.com/EthFans/wiki/wiki/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6
作者简介:蓝昊翔,公信宝区块链研发总监。全栈开发工程师,精通区块链技术,Graphene社区活跃成员和代码贡献者,5年金融领域从业经验,13年接触区块链,并持续从事区块链技术的研究和应用,曾就职于美国道富、51信用卡、大树金融,在密码学、数据库、服务端和移动端等多个领域都有丰富的实践经验。
往期推荐
(点击图片即可看文章)
本篇文章首发在CSDN,可点击阅读原文查看