当前位置: 首页 > 科技观察

区块链实战技能树

时间:2023-03-13 17:19:00 科技观察

随着新一波区块链热潮,很多同学怀着极大的热情进入了这个领域,同时也遇到了很多疑惑,区块链开发需要哪些知识?如何学习?在哪里学习?遇到问题怎么办?本文将尝试为区块链领域的新手们提供一份快速实用的指南。随着区块链新浪潮的兴起,很多同学都怀着极大的热情进入了这个领域。同时,他们也会遇到很多质疑。区块链开发需要哪些知识?如何学习?在哪里学习?遇到问题怎么办?本文将尝试为区块链领域的新手们提供一份快速实用的指南。1.IT基础技能区块链堪称“黑科技”,拥有大量的技术元素。有志于从技术角度进入区块链的人,应具备或掌握基本的IT技能,至少达到常规级别的“程序管理员”或“系统管理员”技能水平。首先,你需要精通Linux操作系统知识。大多数区块链系统都可以在Linux上运行,包括CentOS和Ubuntu。你至少要知道一些基本的Linux操作指令,比如ls查看目录,ps或top查看进程,find查找文件,netstat查看网络,ulimit查看系统参数限制,df/du查看磁盘空间、使用apt/yum安装软件等,如果不掌握这些基本命令,在Linux上操作起来肯定吃力。这方面的书籍和资料很多,相信一周就可以上手。另外,如果你擅长Linux的man命令,你可以获得每个命令的详细帮助。如果你学会写shell脚本,那就如虎添翼,可以把很多繁琐的操作自动化。必须有一个清晰的网络概念。区块链本来就是一个分布式系统,节点间必须通过网络连接起来。如果只是运行它,则不需要太多高级网络知识。你只需要了解什么是TCP/IP;公网、内网和本地地址的区别;如何配置端口;节点、SDK与节点之间的互联是否会被防火墙和网络策略阻断;使用ifconfig、telnet、ping、netstat等命令查看网络信息,检测和定位上网问题。一般来说Linux的书籍也会介绍这部分内容。围绕区块链的支持,比如浏览器、中间件、业务应用,都会依赖一些第三方的基础软件,比如MySQL/MariaDB数据库、Nginx服务、Tomcat服务等,至少会安装指定版本掌握软件的修改和修改这些软件的配置文件以及使之生效的基本操作,了解各软件的密码、权限配置和网络安全策略,保护自身安全。如果是基于云、Docker、k8s等容器环境构建的,需要了解所使用的服务商或容器的功能、性能、配置方式,包括资源的分配:CPU、内存、带宽、存储等,以及安全和权限的配置、网络策略配置、运维方式等,在保持其稳定性和可用性的同时,实现轻松分发和构建。各种云服务商和容器解决方案都有完备的文档和客服渠道,帮助用户顺利使用。在编程语言阶段,可以根据自己的学习路径选择不同的语言。如果使用Java语言,需要熟练掌握Eclipse、IntelliJIDEA等集成IDE,熟悉基于Gradle的工程管理软件,熟悉Spring、Springboot等Java。基本的开发组件,熟悉IDE或命令行下ApplicationContext等资源路径的定义,可能还有myBatis等流行组件,这些都可以在Java相关的社区和网站上找到。材料和书籍。在熟练使用Java语言的情况下,使用JavaSDK连接区块链并运行演示示例会非常轻松自如。如果使用其他语言,我们也提供Python、Node.js、Golang等语言的区块链SDK。不同的语言其安装包的稳定版本不同,会采用不同的环境和依赖的安装配置方式,也会有不同的IDE和调试方式,本文不再一一列举。我相信学习和使用语言本身,已经是程序员最基本的技能了。最后,作为一个在开源世界冲浪的玩家,“全球最大的同性交友网站”——GitHub一定要上。注册一个GitHub账号,掌握Git版本管理工具的基本操作,克隆和拉取开源软件代码,提交问题,提交自己的修改,提交pullrequest到开源项目,然后点个星,热情点和时尚,并在开源世界留下你的名字。2.区块链领域的基础知识stack下面部分的知识更多的是和区块链或者区块链的某个平台相关。从下到上分别是:HASH(哈希算法)、签名、证书。严格来说,这不是区块链领域的专属知识,而是必须具备的基础知识,包括SHA3/SHA256/RIPEMD160等摘要算法,以及这些算法与“区块链地址”、数字签名和验证的关系基于公私钥的方法,数字证书的概念和格式,如X.509证书,保存证书/公钥和私钥的文件格式,如PEM文件,keystore文件等。BasicAppliedCryptographyBasicApplied密码学的范围很广。作为初学者,至少要了解对称和非对称加密的常用算法,比如AES对称加密、RSA、ECDSA等椭圆曲线等非对称加密算法,以及这些算法在签名中的签名验证、数据加密、通信谈判和保护。如果要使用国家机密,需要了解从SM2到SM9的一系列算法的概念和使用。分布式网络结构区块链是一个与生俱来的“分布式网络系统”。节点与节点之间通过网络的P2P端口相互连接。客户端和SDK通过RPC/通道端口互连。首先,确保网络可互操作。监听地址和端口正确,端口开放,防火墙和网络策略正确,安全连接证书到位,做到“区块链通则无痛”。这也需要用户具备基本的网络知识和网络工具,同时了解区块链特有的节点类型(共识节点、观察节点、轻节点等)、互联方式(点对点双向连接)、JSONRPCHTTP短连接、通道长连接等)。详情请点击《FISCO BCOS 网络端口讲解》。智能合约智能合约可以说是应用开发者直接面对区块链的一扇门,走进这扇门是美妙的。流行的智能合约语言是Solidity语言,它起源于以太坊,从区块链诞生之日起就为区块链服务。Solidity语言更新积极,文档完善,一致性和事务性好,功能足以实现中型商业应用。当然在实时调试、第三方库支持、运行速度等方面不如成熟语言。开发者如果想用C++等语言编写智能合约,就必须深入研究区块链上的计算范式。理解,为避免编写无法达成共识的智能合约,一般建议在深入了解后使用Solidity以外的语言编写合约。要掌握Solidity合约,当然要通读文档并自己尝试。有关详细信息,请参阅此文档。ABI接口原理在以EVM为虚拟机的区块链上,EVM以Solidity语言执行合约。合约编译会生成一个后缀为ABI的文件。实际上,它包含了合约接口定义的JSON文本。你可以用文本查看器查看,了解你写的契约在ABI中是如何翻译成接口的,接口的返回类型,参数列表,还有参数Type等等,只要有ABI就可以了合约文件,可以调用区块链SDK的接口,分析合约相关的交易、返回值、回执等。区块数据结构区块(Block)有区块头和区块体。区块体有一个交易列表,交易列表中的每笔交易(Transaction)(Tx)都有一个发起者、目标地址、调用方法和参数、发送者签名。交易的结果会生成一个“Receipt”,里面包括被调用方法的返回值,运行过程中产生的EventLog等。了解了这些,你就可以基本掌握区块链数据的来龙去脉,你可以继续研究数据结构中的Merkle根和对应的Merkle树是如何产生的,它们的作用是什么(比如对于SPV:SimplifiedPaymentVerification)。有关详细信息,请参阅此文档。RPC接口这里将区块链节点暴露的功能接口统称为“RPC接口”。查看链上数据,包括区块、交易、回执、系统信息、配置信息、发起链上交易调用智能合约、修改系统配置等,或者通过AMOP协议发送消息和监听事件,都通过调用接口。几十个RPC接口推荐一个一个阅读,或者善用搜索找到你想要的接口。接口通信使用的协议可能是JSONRPC,也可能是FISCOBCOS原有的通道协议。SDK已经基本把接口和协议封装好了,也可以在深入理解ABI、RLP端等编码方式的前提下自行开发接口客户端。有关详细信息,请参阅此文档。准入与权限模型联盟链强调安全性和可控性。节点准入是第一步。链初始化后,其他节点或SDK必须配置相应的证书才能访问现有的联盟链。链上角色由权限模型控制,包括管理员权限、发布合约的权限、创建表的权限、配置参数的权限等,避免角色之间的操作混淆。有些角色既是运动员又是裁判。初学者需要仔细阅读区块链平台提供的技术文档,了解其中的原理,并按照操作手册中的步骤操作。有关详细信息,请参阅此文档。数据存储模型区块链节点会使用文件数据库(LevelDB或RocksDB),或MySQL等关系型数据库来存储数据,因此链上确实存在一个“数据库”。写入数据库的数据包括区块、交易、收据、合约产生的状态数据等,是否写入“调用合约产生的历史数据”取决于不同的平台。FISCOBCOS默认只保存最新的状态值,您可以选择将修改记录永久写入“回执”或“历史表”进行跟踪。FISCOBCOS还提供将历史数据导出到链下数据库进行关联分析的解决方案。有关详细信息,请参阅此文档。共识机制原理联盟链通常采用插件式共识机制实现。FISCOBCOS提供了PBFT和RAFT两种高效的共识算法,而不是“挖矿”这些高耗能、低效率的共识。共识机制是区块链的灵魂。只有深入研究共识机制,才能深刻理解区块链实现高度一致性、支持事务性交易、通过多方协作防止篡改和作恶的有效性。有关详细信息,请参阅此文档。区块链的知识包罗万象,更深层次的知识包括分布式系统理论、博弈论、密码学前沿、经济学、社会学等。掌握以上基础知识,再深入学习,举一反三,并用场景去验证和探索只有创新的应用才能发挥技术的潜力,才能感受到分布式商业的魅力。3.成为什么样的学习者?在这个过程中,希望学习者能够:耐心阅读文档。我们的开源项目文档的长度超过了200,000字。公众号中还有大量的技术分析和科普文章。这些都是程序员,他们用光了自己除了编码之外唯一的语言储备,编写了海量的文字,这是一笔巨大的技术财富,涵盖了相关开源项目的方方面面。如果你能通读一遍,或者记住文档的结构和标题,需要的时候可以快速打开,这就足够迷惑和深入了。可以搜索资料文件,公众号有搜索功能。当你想到一个与开源社区相关的问题时,你可以用关键字搜索,通常可以找到答案。如果语言有什么不清楚的地方,可以向开源项目组询问,或者根据自己的理解进行补充。一般的知识点,比如操作系统、网络等,一般都可以通过公共搜索引擎找到答案。环境和依赖问题排查能力开源软件涉及的系统环境、第三方软件、软件版本往往存在错综复杂的依赖关系。太高或太低的版本可能会出现一些问题。软件请阅读项目文档对硬件环境及依赖关系的描述,确保您的环境符合要求,并善用配置管理工具和软件安装工具,获取并设置合适的版本。调试能力前面提到,Solidity语言的调试工具还不完善,但是可以利用好合约的返回值、EventLog等,通过WeBASE、console等方便的工具进行调试,参考Solidity文档以了解可能出现的问题。它在哪里。区块链节点日志中开启调试级别后,也会打印详细信息。您可以通过查看操作日志获取操作信息和可能出错的信息,并将这些信息结合您自己的操作如发送交易的过程进行分析,提高调试效率。同时,目前的开源软件通常会将错误原因和解决问题的提示打印在屏幕上。仔细查看操作反馈后,大概率可以了解错误原因和解决方法。代码阅读能力开源软件最大的效率就是把代码毫无遗漏地铺在开发者和学习者的面前,了解代码结构,查看代码中的关键流程,用关键字搜索代码中对应的实现,都可以深入系统细节,挖掘设计思路,定位问题,寻找优化方法。一个好学的硬核程序员,足以通过代码与世界对话。提问的方式和方法“好问题比答案更重要”。我们的社区非常活跃,每个人都非常热衷于回答和解决问题。我们鼓励在社区中公开提问。一方面,每个人都可以分享问题并找到解决方案。另一方面,提问者可以得到更多人的帮助。同时,希望提问者提问时,能一次性详细描述,并提出相关操作步骤、系统环境、软件版本、错误信息和希望解决的问题。如果是一般性的问题,可以先搜索再提问,这样有利于培养独立解决问题的能力。希望提问者能够向社区反馈更深层次的问题,帮助社区快速优化。对于很多典型问题,社区也积累了一些行之有效的解决方案,我们将整理发布,方便大家参考。从新人到老手的路可能很长。如果能参考这篇小文中的一些方法,就可以避免很多坑,写出更多的应用。享受区块链,社区与你共同进步。各种开源组件资源链接索引:https://fintech.webank.com/FISCOBCOS开源文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/关键概念:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/key_concepts.html和手册:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/index.html