热门标签 | 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网络

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

高可用架构

改变互联网的构建方式


推荐阅读
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
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社区 版权所有