如何选择一条公链
了解公链的第一步,是阅读白皮书。白皮书是公链的灵魂,也是驱动公链开发的指导性文档,通过阅读白皮书,可以找到一条区块链开发的完整愿景和路线图。
白皮书从形态上可分为产品白皮书和技术白皮书(或称为技术黄皮书),前者偏向于介绍背景和公链的功能愿景,后者则比较接近可行性论证和具体模块的技术设计,包含算法、公式等。
如何做出选择?公链都有自己的定位,其设计都围绕着白皮书中所描述的愿景和路线展开。如果说要选择一条公链参与其中,仔细阅读白皮书是第一步,对白皮书的技术和非技术愿景产生了认同,这个时候我们有才有理由告诉自己,这是我想做的事情。
对于公链这种社区型的项目来说,不像公司招人一样严格筛选,参与公链生态会更加开放一些,对于所有的贡献者是来者不拒的,当然,要做到给公链提交代码或者参与公链的设计,自身的硬实力是不可或缺的。
如上文所说,我们选择了一条公链,那我们能为这个公链做什么呢?讨论这个问题,我想从以下两个大的方面展开:
如果你有技术背景,在公链上选择就很多,如果你擅长区块链底层技术,哪怕是其中一个模块一个学科,那么恭喜你,你可能是众多公链竞相吸引的公链开发者之一;如果你在特定领域的背景不是那么强,或者说对枯燥的底层算法没那么感兴趣,那不妨尝试下做一些区块链上层的应用,因为这些应用对于整个生态来说,像树叶一般:只有枝叶繁茂的大树,才能吸引众人眼球。
在读懂白皮书或技术黄皮书的前提下,我们对公链的技术就有所了解了,其实从每条公链的核心组成部分去分析,我们可以概括出以下的知识结构,不妨看看,对这些技术概念,你掌握的如何?
核心技术模块
如果对上述的内容你了然于心,那么说明你已经是是一位合格的开发者(至少在我看来是的),如果对部分内容还熟悉,那欢迎选择性阅读以下内容:
私钥、公钥、地址
上述的公私钥指的是大多数区块链系统里面的公私钥,目前的主流区块链公私钥都是基于ECC(椭圆曲线密码学)的。如果你希望了解更多,这是一篇不错的文章https://www.jianshu.com/p/af6328cc693e
交易、区块、矿工
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设计,也离不开几个重要的基础设施,来更好地连接开发者和用户,比如:
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是指系统的吞吐量,因此QPS看起来是比较广义的,而TPS才是区块链的终极性能指标。
不可能的三角也称为三元悖论,在我们生活中各个领域,都面临着鱼和熊掌不可兼得的艰难抉择:
作者简介:蓝昊翔,公信宝区块链研发总监。全栈开发工程师,精通区块链技术,Graphene社区活跃成员和代码贡献者,5年金融领域从业经验,13年接触区块链,并持续从事区块链技术的研究和应用,曾就职于美国道富、51信用卡、大树金融,在密码学、数据库、服务端和移动端等多个领域都有丰富的实践经验。
— END —