热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何成为一名区块链开发者(二)

导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高

导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融 DeFi 应用也非常火热,程序员业余也有开发了解区块链的需求。高可用架构翻译 blockgeeks 的系列文章,帮助大家更好学习及了解区块链开发。本文为第二篇。

对区块链基础及公链开发感兴趣的读者请参阅 如何成为一名区块链开发者(一)

成为区块链开发者 - 里程碑4:学习智能合约开发

如何定义智能合约?

根据维基百科,智能合约是 "一种旨在促进、验证或执行合约的协商或执行的计算机协议"。虽然它是由美国密码学家 Nick Szabo 在 1996 年首次提出,但 Ethereum (以太坊)通常被认为是普及这一概念并使其成为主流的原因。

可以在我们的深度指南中了解更多关于智能合约的信息。

https://blockgeeks.com/guides/smart-contracts/

在智能合约中,我们想要的理想属性是什么?

任何在区块链上运行的东西都需要是不可变的,必须有能力在不影响其完整性的情况下通过多个节点运行。因此,智能合约的功能需要具备三个要素:

  • 确定性(Deterministic)

  • 可终止的(Terminable)

  • 隔离性(Isolated)

特点1:确定性

如果一个程序每次给定的输入都有相同的输出,那么它就是确定性的。例如:如果 3+1=4,那么 3+1 将永远是 4(假设基础相同)。所以当一个程序在不同的计算机中对同一组输入给出相同的输出时,这个程序就被称为确定性程序。

有各种情况,程序可以以非确定性方式运行。

  • 调用非确定性的系统函数。当在程序中调用一个不确定的函数时。

  • 访问不确定的数据资源。如果一个程序在运行时获取数据,而这个数据源是不确定的,那么这个程序就会变成不确定的。比如一个程序获取一个特定查询的前 10 名 Google 搜索。这个列表可能会不断变化。

  • 动态调用。当一个程序调用第二个程序时,就叫做动态调用。由于调用目标只在执行过程中确定,所以它的性质是不确定的。

特征2:可终止

在数理逻辑中有一个错误叫做“停顿问题”。基本上,它表示无法知道一个给定的程序是否能在限定的时间内执行其功能。1936 年,Alan Turing 利用 Cantor's Diagonal Problem 推断出,无法知道一个给定的程序是否能在限定时间内完成。

这对于智能合约来说,这显然是一个问题,因为合约的定义,必须能够在给定的时间限制内终止。我们采取了一些措施来确保有办法从外部“杀死”合约,不进入一个无尽的循环,从而消耗资源。

  • 图灵非完备性 一个图灵非完备的区块链的功能是有限的,代码不能进行跳转及循环。当然也不能进入无尽循环。

  • 步数和计费。一个程序可以简单地跟踪它所走的 "步数",也就是它所执行的指令数量,然后在某一特定步数被执行后终止。另一种方法是计费。在这里,合约的执行需要预先支付一定的费用。每一条指令的执行都需要一定的费用。如果花费的费用超过了预付费用,那么合约就会终止。

  • 定时器:这里有一个预先设定的定时器。如果合约的执行超过了时间限制,那么合约就会被外部中止。

特征#3:隔离性

在区块链中,任何人都可以上传智能合约。然而正因如此,这些合约可能会在有意和无意中包含病毒和 bug。如果合约没有被隔离,这可能会影响整个系统。因此将合约隔离在沙盒中,使整个生态系统免受任何负面影响是至关重要的。

现在我们已经看到了这些功能,重要的是要知道它们是如何执行的。通常,智能合约使用下面两个系统中的一个运行。

  • 虚拟机:Ethereum 使用的是虚拟机

  • Docker:Fabric 使用

让我们比较一下这两者,并确定哪一个生态更好。为了简单起见,我们将比较Ethereum(虚拟机)和Fabric(Docker)。

如果你对 Ethereum 开发特别感兴趣,那么你需要同时学习 solidity 编程语言。

对于任何想要学习如何开发 DAPP(去中心化应用)的人来说,学习 Solidity 是绝对必须的。我们已经有一份详细的指南,你可以在这里阅读 (1)。在这里我们给出一个基本的概述。Solidity 由 Gavin Wood、Christian Reitwiessner、Alex Beregszaszi、Yoichi Hirai 和几位前 Ethereum 核心贡献者开发,以实现在 Ethereum 等区块链平台上编写智能合约。

(1) https://blockgeeks.com/guides/how-to-learn-solidity/

Solidity 是一种特意精简的松散型语言,语法与 ECMAScript(Javascript)非常相似。在 Ethereum 设计原理文档中,有一些关键点需要记住,即我们是在堆栈和内存模型上工作,指令字大小为 32 字节,EVM(Ethereum虚拟机)给我们提供了访问程序 "堆栈" 的机会,它就像一个寄存器空间,我们也可以在这里使用内存地址,程序计数器循环/跳转(用于顺序程序控制)。一个可扩展的临时 "内存 "和一个更永久的 "存储",而这个存储实际上是写入永久区块链的,最重要的是,EVM 要求智能合约内的完全确定性。

如果你有兴趣学习 Solidity,那么你可以在这里查看我们的深度课程。

https://courses.blockgeeks.com/

这一节的行动计划包括:

  • 了解智能合约的工作原理

  • (Ethereum开发者可选) 学习 Solidity

成为一名区块链开发者 - 里程碑5:进入区块链公司。

作为一名新晋开发者,最重要的事情之一就是融入其中。

访问 Reddit 论坛、Github 页面和 StackExchange,与其他开发者交流,并时刻关注有关该技术的任何消息。

除此之外,了解人们对区块链开发者的要求,对你也会有帮助。公司在招聘时有什么要求?你可以在这里了解这些信息。

https://blockgeeks.com/how-to-hire-a-good-blockchain-developer/

这些信息对于强化你的技能以吸引这些公司非常有用。

成为区块链开发者 - 结论

本文整理了成为区块链开发工程师的大致路线图。当然,仅有这些是不够的,你需要展现更多主动性,并始终处于其中。

如果你正在寻找关于区块链开发的信息资源,那么请点击这里。

https://courses.blockgeeks.com/

祝你在学习区块链途中一切顺利!

英文全文:
https://blockgeeks.com/guides/blockchain-developer/

参考阅读:

  • 如何成为一名区块链开发者(一)

  • 为什么我们不用数据库生成 ID?

  • C++服务编译耗时优化原理及实践

  • 基于Consul服务注册中心:一次故障分析及优化

  • 使用Go语言从零编写PoS区块链

  • 使用Go语言编写区块链P2P网络

本文由高可用架构翻译,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建方式


推荐阅读
author-avatar
ThinkSNS
ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+。
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有