比特币代码框架介绍
1. 区块链常见的名词解释
1.区块链(BlockChain)
区块链是一串通过验证的区块,其中每个区块都与上一个区块相连,一直连到创世区块。区块链是比特币等数字货币的底层技术,是一个去中心化的分布式共享账本。区块链与人工智能、大数据并称为金融科技的三大方向。
2.比特币(Bitcoin)
比特币是区块链技术的第一个落地应用,最初是一种点对点的电子现金(Bitcoin: A Peer-to-Peer Electronic Cash System)。如今,比特币已经根据中本聪的思路设计发展成为开源系统,以及构建在其上的数字货币网络。
3.中本聪(Satoshi Nakamoto)
中本聪是一个化名,他是比特币的创始人兼早期开发者,2008年,中本聪在密码朋克中发表了比特币的白皮书,Bitcoin: A Peer-to-Peer Electronic Cash System,构建了比特币系统的基本框架。2009年,他为比特币系统搭建了一个开源项目,正式宣告了比特币的诞生。但是当比特币渐成气候时,中本聪却悄然离去,销声匿迹于互联网上。
4.数字货币(Token)
区块链最初的应用形式就是数字货币,区块链的出现本身也是为数字货币服务。目前来说区块链应用最好的领域是金融领域,这是因为区块链技术更适合于为金融场景服务。数字货币是电子形式的替代货币,它是属于虚拟世界中的虚拟货币。目前全世界发行的数字货币有成千上万种,它们可以通过交易所与现实世界中的货币进行交易,或者与其它数字货币进行交易。
5.挖矿(Mining)
比特币被比喻为数字黄金,在网络中,通过竞争计算能力获得区块的认可权,进而获得区块的代币奖励以及交易费的奖励,而这种方式就是在系统中获取初始比特币的方法,就好像当年金银被从地下开采出来一样,所以被称为挖矿。.
6.矿工(Miner)
通过提供算力进行挖矿的节点,就被称为矿工,当然有时候也是指节点的所有人。
7.公钥私钥(Public Keys/Private Keys)
公钥和私钥,是非对称加密算法的方式,这也是对以前的对称加密算法的提高。对称加密算法用一套密码来加解密,知道了加密密码,也就可以破解密文;而非对称加密算法,则是存在两套密码,用公钥来加密,但是用私钥来解密,这样就保证了密码的安全性。在比特币系统中,私钥本质上是由32个字节组成的数组,公钥和地址的生成都依赖私钥,有了私钥就能生成公钥和地址,就能够对应使用地址上的比特币。
8.哈希值(Hash)
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值, 这个小的二进制值就是哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。哪怕只更改一段明文中的一个字母,随后产生的哈希值都将差别极大。要找到对应同一哈希值的两个不同的输入,从计算的角度来说基本上是不可能的。
9.共识机制(Consensus)
区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质:
(1)一致性。所有诚实节点保存的区块链的前缀部分完全相同。
(2)有效性。由某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块链中
10.钱包(Wallet)
比特币的钱包不存余额,在比特币的世界中也没有“余额”这个概念,这里的钱包是指保存比特币地址和私钥的客户端或者软件,可以用它来接收、发送和存储你的比特币。
2. 各区块链架构的横向比较
各区块链架构的横向比较
时常听人们谈起区块链,从 2009 年比特币诞生至今,各式各样的区块链系统或基于区块链的应用不断被开发出来,并被应用到大量的场景中,而区块链技术本身也在不停地变化和改进。
区块链又被称为分布式账本,与之对应的则是中心化账本,比如银行。与中心化账本不同的是,分布式账本依靠的是将账本数据冗余存储在所有参与节点中,来保证账本的安全性。简单地说,区块链会用到三种底层技术:点对点网络技术、密码学技术和分布式一致性算法。而通常,区块链系统还会“免费附赠”一种被称为智能合约的功能。智能合约虽然不是区块链系统的必要组成部分,但由于区块链天生所具备的去中心化特点,使它可以很好地为智能合约提供可信的计算环境。
为了适应不同场景的需求,区块链系统在实际应用的过程中往往会需要进行各种改造,以满足特定业务的要求,比如身份认证、共识机制、密钥管理、交易频次、响应时间、隐私保护、监管要求等。而实际应用区块链系统的公司往往没有进行这种改造的能力,于是市场上慢慢出现了一些用于定制专用区块链系统的框架,采用这些框架就可以很方便地定制出适用于企业自身业务的区块链系统。
本文将对目前市场上几个典型的区块链框架进行横向对比,看看它们都有哪些特点,以及它们之间到底有哪些区别。为了保持对比的公正性,本文将只针对开源的区块链框架进行讨论。
各区块链架构的简单介绍
1、比特币
比特币(bitcoin)源自一名叫做中本聪(Satoshi Nakamoto)的人在 2008 年发表的一篇名为《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-PeerElectronic Cash System)的论文,文中描述了一种被他称为“比特币”的电子货币及其算法。在之后的几年里,比特币不断成长和成熟,而它的底层技术也逐渐被人们认识并抽象出来,这就是区块链技术。比特币作为区块链的鼻祖,在区块链的大家族中具有举足轻重的地位,基于比特币技术开发出的山寨币(altcoins)的数量有如天上繁星,数不胜数。
从论文中可以得知,中本聪设计比特币的目的,就是希望能够实现一种完全基于点对点网络的电子现金系统,使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的中介机构。总结来说,他希望比特币的设计能够实现以下这些目标:
● 不需要中央机构就可以发行货币
● 不需要中介机构就可以支付
● 保持使用者的匿名性
● 交易无法被撤销
从电子现金系统的角度来看,以上这些目标在比特币中基本都得到了实现,但是依然有一些技术问题有待解决,比如延展性攻击、区块容量限制、区块分叉、扩展性等。
在应用场景方面,目前大量的数字货币项目都是基于比特币架构来设计的,此外还有一些比较实际的应用案例,比如彩色币、t? 等。
彩色币(coloredcoin),通过仔细跟踪一些特定比特币的来龙去脉,可以将它们与其他的比特币区分开来,这些特定的比特币就叫作彩色币。它们具有一些特殊的属性,从而具有与比特币面值无关的价值,利用彩色币的这种特性,使得开发者可以在比特币网络上创建其它的数字资产。彩色币本身就是比特币,存储和转移不需要第三方,可以利用已经存在的比特币的基础。
t? 是比特币区块链在金融领域的应用,是美国在线零售商 Overstock 推出的基于区块链的私有和公有股权交易平台。
2、以太坊
以太坊(ethereum) 的目标是提供一个带有图灵完备语言的区块链,用这种语言可以创建合约来编写任意状态转换功能,用户只要简单地用几行代码来实现逻辑,就能够创建一个基于区块链的应用程序,并应用于货币以外的场景。
以太坊的设计思想是不直接“支持”任何应用,但图灵完备的编程语言意味着理论上任意的合约逻辑和任何类型的应用都可以被创建出来。总结来说,以太坊在比特币的设计目标之外,还需要实现以下几个目标:
● 图灵完备的合约语言
● 内置的持久化状态存储
目前基于以太坊的合约项目已达到数百个,比较有名的有 Augur、TheDAO、Digix、FirstBlood 等。
Augur 是一个去中心化的预测市场平台,基于以太坊区块链技术。用户可以用数字货币进行预测和下注,依靠群众的智慧来预判事件的发展结果,可以有效地消除对手方风险和服务器的中心化风险。
限于篇幅,基于以太坊智能合约平台的项目就不多介绍了。基于以太坊的代码进行改造的区块链项目也有不少,但几乎都是闭源项目,只能依靠一些公开的特性来推断,所以就不在本文展开讨论了。
3、Fabric
Fabric 是由 IBM 和 DAH 主导开发的一个区块链框架,是超级帐本的项目成员之一。它的功能与以太坊类似,也是一个分布式的智能合约平台。但与以太坊和比特币不同的是,它从一开始就是一个框架,而不是一个公有链,也没有内置的代币(token)。
超级账本(hyperledger)是 Linux 基金会于 2015 年发起的推进区块链技术和标准的开源项目,加入成员包括:荷兰银行(ABN AMRO)、埃森哲(Accenture)等十几个不同利益体,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。
作为一个区块链框架,Fabric 采用了松耦合的设计,将共识机制、身份验证等组件模块化,使之在应用过程中可以方便地替换成自定义的模块。除此之外,Fabric 还采用了容器技术,将智能合约代码(chaincode)放在 docker 中运行,从而使得智能合约可以用几乎任意的高级语言来编写。
以下是 Fabric 的一些设计目标:
● 模块化设计,组件可替换
● 运行于 docker 的智能合约
目前已经有不少采用 Fabric 架构进行开发的概念验证(POC)项目在实施过程中,其中不乏一些金融机构做出的尝试,不过由于项目刚刚起步,还没有比较成熟的落地应用。
4、DNA
DNA(Distributed Networks Architecture,分布式网络架构),是由总部位于上海的区块链创业公司“分布科技”开发的区块链架构,可以同时支持公有链、联盟链、私有链等不同应用类型和场景,并快速与业务系统集成。
与以太坊、Fabric不同的是,DNA 在系统底层实现了对多种数字资产的支持,用户可以直接在链上创建自己的资产类型,并用智能合约来控制它的发行逻辑。对于绝大部分的区块链应用场景,数字资产是必不可少的,而为每一种数字资产都开发一套基于智能合约的转账、发行逻辑是非常浪费且低效的。因此,由区块链底层提供直接的数字资产功能是十分必要的。而对于那些完全不需要数字资产的应用场景,同样可以基于 DNA 提供的智能合约架构来编写任意的自定义逻辑来实现。
DNA 的设计目标主要有以下几点:
● 多种数字资产的底层支持
● 图灵完备的智能合约和状态持久化
● 跨链互操作性
● 交易的最终性
目前已有不少金融机构采用 DNA 架构来进行区块链概念验证产品的开发。除此之外,还有一些已经落地的区块链项目,如小蚁区块链、法链等。
小蚁(antshares)是一个定位于资产数字化的公有链,将实体世界的资产和权益进行数字化,通过点对点网络进行登记发行、转让交易、清算交割等金融业务的去中心化网络协议。它采用社区化开发的模式,在架构上与 DNA 保持一致,从而可以与任何基于DNA 的区块链系统发生跨链互操作。
法链是全球第一个大规模商用的法律存证区块链,一个底层基于 DNA区块链技术,并由多个机构参与建立和运营的证据记录和保存系统。该系统没有中心控制点,且数据一旦录入,单个机构或节点无法篡改,从而满足司法存证的要求。
5、Corda
Corda 是由一家总部位于纽约的区块链创业公司 R3CEV 开发的,由其发起的 R3区块链联盟,至今已吸引了数十家巨头银行的参与,其中包括富国银行、美国银行、纽约梅隆银行、花旗银行、德国商业银行、德意志银行、汇丰银行、三菱 UFJ 金融集团、摩根士丹利、澳大利亚国民银行、加拿大皇家银行、瑞典北欧斯安银行(SEB)、法国兴业银行等。
从 R3 成员的组成上也可以看出,Corda 是一款专门用于银行与银行间业务的区块链架构。尽管 R3 自己声称 Corda 不是区块链,但从各项特征来看,它具备区块链的一些特性。
技术对比
1、数字资产
接下来,将对前文中提到的这些区块链框架进行一系列的技术对比,并从多个维度展开介绍它们的区别与相似之处。
区块链的内置代币通常是一种经济激励模型和防止垃圾交易的手段。比特币天生就有且只有一种内置代币,所以在比特币系统中所有的“交易”本质上都是转账行为,除非通过外部的协议层来给比特币增加额外的数字资产。
以太坊和 DNA 具有内置代币,它们的作用除了以上提到的经济激励和防止垃圾交易之外,还具有为系统内置功能提供一个收费的渠道。比如以太坊的智能合约运行需要消耗 GAS,而 DNA 的数字资产创建也需要消耗一定的代币。
以太坊和 Fabric 没有内置的多种数字资产支持,而是通过智能合约来实现相应的功能。这种方式的好处在于,系统设计可以做到非常简洁,而且资产的行为可以任意指定,自由度极高。然而这样的设计也会带来一系列的负面影响,比如所有的资产创建者不得不自己编写重复的业务逻辑,而用户也没有办法通过统一的方式去操作自己的资产。
相比之下,DNA 和 Corda 采用了在底层支持多种数字资产的方式,让资产创建者可以方便地创建自己的资产类型,而用户也可以在同一个客户端中管理所有的资产。对于逻辑更加复杂一点的业务场景来说,他们同样可以利用智能合约来强化资产的功能,或者创建一种与资产无关的业务逻辑。
2、账户系统
UTXO(Unspent Transaction Output)是这样一种机制:每一枚数字货币都会被登记在一个账户的所有权之下,一枚数字货币有两种状态,即要么还没有被花费,要么已经被花费。当需要使用一枚数字货币的时候,就将它的状态标记为已经花费,并创造一枚新的与之等额的数字货币,将它的所有权登记到新的账户之下。在这个过程中,被标记为已花费的数字货币就被称为交易的输入,而创造出来的新的数字货币被称为交易的输出,在一笔交易中,可以包含多个输入和多个输出,但是输入之和与输出之和必须相等。要计算一个账户的余额时,只要将所有登记在该账户下的数字货币的面额相加即可得出。
比特币和 Corda 就采用了 UTXO 这样一种账户机制,而以太坊则采用了更加直观的余额机制:每个账户有一个状态,状态中直接记录了账户当前的余额,转账的逻辑就是从一个账户中减去一部分余额,并在另一个账户中加上相应的余额,减去的部分和加上的部分必须相等。DNA 在账户机制上同时兼容这两种模式。
那么 UTXO 模式和余额模式,究竟有什么优缺点呢?UTXO 最大的好处就是,基于 UTXO 的交易可以并行验证且任意排序,因为所有的 UTXO 之间都是没有关联的,这对区块链未来的伸缩性是有很大帮助的,而基于余额的设计就没有这个优势了;反过来,余额设计的优点是设计思想非常简洁和直觉化,便于程序实现,特别是在智能合约中,要处理 UTXO 的状态是非常困难的。这也是为什么以智能合约为主要功能的以太坊选择余额设计的原因,而比特币、OnchainDNA、Corda 这些以数字资产为核心的架构则更倾向于 UTXO 设计。
关于身份认证,比特币和以太坊基本没有身份认证的设计,原因很简单,因为这两者的设计思想都是强调隐私和匿名,而反对监管和中心化,而身份认证就势必要引入一些中心或者弱化的中心机构。Fabric、DNA 和 Corda 不约而同地选择了采用数字证书来对用户身份进行认证,原因在于这三者都有应用于现有金融系统的设计目标,而金融系统必然要考虑合规化并接受监管,此外现有的金融系统已经大范围地采用数字证书方案,这样便可以和区块链系统快速集成。
3. 銆愬繀鐪嬨慐TH浣庨庨櫓濂楀埄鐨勪竴绉嶆柟娉
璇濅笉澶氳达紝鐩存帴涓婂共璐с
杩戜竴娈靛叧娉‥OS浼楃规瘮杈冨氾紝鐪嬪埌鏈夊皬浼欎即鏍规嵁EOS/ETH鐨勬暟鎹锛屽彂浜嗗備笅涓寮犲浘锛
鍥句腑鏄庢樉鍙浠ョ湅鍑烘定璺屽懆鏈熷熀鏈浠23灏忔椂涓轰竴涓杞鍥烇紝濡傛灉鍦ㄦ瘡闂撮殧23灏忔椂楂樺崠浣庝拱涓娆★紝绠楁槸涓绉嶆瘮杈冪ǔ濡ョ殑鑾峰埄鍔炴硶銆
浣犱竴瀹氬緢濂藉囷紝杩欑湡鐨勬槸涓涓瑙勫緥鍚楋紵鎴栬呰翠负浠涔堟槸杩欐牱鍛锛
杩欒繕瑕佷粠EOS浼楃瑰紑濮嬭磋捣銆侭M褰撴椂澶╂墠鐨勬彁鍑轰簡EOS浼楃圭殑鎯虫硶锛屼互23灏忔椂涓哄懆鏈燂紝鎸佺画涓骞达紝姝ょ嶄紬绛规柟寮忓彲璋撳墠鏃犲彜浜恒
鎴戠寽娴婤M鏄涓嶆槸鑰冭檻鍖哄潡閾句箖鏄鍏ㄧ悆鍏卞悓鍏虫敞鐨勯」鐩锛屽洜姝ゆ妸浼楃规椂闂村浐瀹氬湪鍑犵偣浼间箮閮戒笉鍚堥傦紝閭e共鑴嗚疆娴侊紝姣忎釜鏃堕棿閮借疆鍒般
鐜板湪鎶奅TH鎹㈡垚EOS鏈変袱绉嶆柟寮忥紝涓鏄鍦ㄤ簩绾у競鍦轰拱鍏ワ紝浜屾槸鍙備笌涓绾у競鍦虹殑浼楃广
鍋囪句竴绾у競鍦轰紬绛圭殑浠锋牸鎸佺画楂樹簬浜岀骇甯傚満涔板叆锛岄偅涔堝弬涓庝紬绛圭殑浜哄繀鐒惰秺鏉ヨ秺灏戯紝璁╁弬涓庝竴绾у競鍦轰紬绛圭殑浠锋牸鎱㈡參闄嶄綆銆傞檷浣庡埌浠涔堢▼搴﹀憿锛熸瘮杈冨悎鐞嗙殑缁撴灉鏄锛氫竴绾у競鍦轰紬绛圭殑浠锋牸鐣ヤ綆浜庢垨绛変簬浜岀骇甯傚満鐨勪环鏍笺
涓句竴涓渚嬪瓙灏辨槑鐧戒簡锛屼互涓嬫暟鎹浠呬负璇存槑鐢ㄣ
姣斿傚湪浜岀骇甯傚満锛堝氨鏄鍦ㄤ氦鏄撴墍涔板叆锛1涓狤TH鍙浠ユ崲40涓狤OS锛屼絾鏄鍦ㄤ竴绾у競鍦猴紙鍙備笌浼楃癸級1涓狤TH鍙浠ユ崲41涓狤OS锛岄偅蹇呯劧鏈変汉浼氱敤1涓狤TH鍙備笌浼楃规崲鏉41涓狤OS锛岀劧鍚庡湪浜岀骇甯傚満鎹㈠洖ETH锛岃繖鏍峰湪涓嶈冭檻鎵嬬画璐圭殑鎯呭喌涓嬶紝1涓狤TH灏卞彉鎴愪簡1025涓狤TH锛岃幏鍒╀簡25%銆
杩戞湡闅忕潃EOS浠锋牸鐨勮蛋楂橈紝姣忓ぉ鍙備笌浼楃圭殑ETH澶氳揪4涓囧氫釜銆
杩欓噷鑲瀹氭湁涓嶅皯姣斾緥鐨勮祫閲戞槸鍦ㄨ繘琛屼竴绾у競鍦哄拰浜岀骇甯傚満鐨勬惉鐮栧楀埄銆
濡傛灉鐭ラ亾浜嗚繖涓鍘熺悊锛岄偅涔堝彲浠ュ垎鏋愬嚭鍦‥OS鐨勪紬绛规椂闂寸偣灏辨槸涓涓狤OS浠锋牸鐨勭浉瀵逛綆鐐癸紝杩欐椂鐢‥TH鎹㈡垚EOS锛岀瓑杩囦竴灏忔垫椂闂寸瓑EOS娑ㄤ笂鍘伙紝鍐嶆妸EOS鎹㈠洖ETH锛屽疄鐜板楀埄銆
浠ユ渶杩戜袱鍛ㄥ氱殑鏁版嵁鏉ュ垎鏋愶紝鍋囪惧湪姣忓ぉ浼楃圭殑鏃堕棿鐐规妸ETH鎹㈡垚EOS锛屽湪涓灏忔椂鍚庢妸EOS鎹㈠洖ETH锛屽彲浠ョ泩鍒╁氬皯鍛锛
缁忚繃璁$畻锛屾渶杩18澶╃殑鏀剁泭鎬昏′负36%锛岀湅璧锋潵涓嶇畻澶氾紝濂藉勬槸椋庨櫓杈冨皬銆
濡傛灉璧勯噾閲忚緝澶ф敹鐩婄粷瀵规敹鐩婁篃姣旇緝鍙瑙傘
鍗充娇鍙戠敓椋庨櫓锛孍OS鍜孍TH涔熼兘鏄澶у竵绉嶏紝涔熶笉浼氱牳鍦ㄦ墜閲屻
鐢变簬鏃堕棿浠撲績锛屾垜鍚庣画浼氭洿鏂颁笂杩拌〃鏍硷紝琛ュ厖EOS浼楃瑰綋鏃剁殑浠锋牸鍜屼紬绛1灏忔椂鍚庣殑浠锋牸銆
鏈鍚庡皬缁撲竴涓嬫搷浣滄ラわ細
鈶犲湪EOS鐨勪紬绛圭綉绔欐煡璇㈡瘡澶〦OS鐨勪紬绛规椂闂
鈶″湪浼楃规椂闂寸偣锛屽湪浜ゆ槗缃戠珯锛堝傚竵瀹夛級鐢‥TH涔板叆EOS
鈶1灏忔椂鍚庡啀鎶奅OS鎹㈠洖ETH
杩欐槸涓绉嶄綆椋庨櫓濂楀埄鐨勬柟寮忥紝浣嗗苟涓嶄唬琛ㄦ病鏈夐庨櫓銆傛湁鏃朵簩绾у競鍦虹殑娉㈠姩姣旇緝澶э紝鍑虹幇鏆傛椂鐨勪簭鎹熶篃鏄姝e父鐨勩
濡傚湪鍥句腑鍙浠ョ湅鍒帮紝鍦4鏈29鏃ワ紝甯傚満娉㈠姩鏋佸ぇ锛屽湪浼楃瑰悗鐨勪竴涓灏忔椂鍐匛OS/ETH涓嬭穼浜41%銆
涓嶈繃鎴戜滑鍋氫簨鎯咃紝鍙瑕佸仛姒傜巼澶х殑浜嬫儏鍗冲彲銆傚傛灉鍍忛摱琛屽瓨娆鹃偅鏍凤紝铏界劧鍑犱箮鏃犻庨櫓锛屼絾骞村寲鏀剁泭鐜囧彧鏈夊尯鍖175%銆
濡傛灉鐢ㄧ悊鎬ф垬鑳滀汉鎹熷け鍘屾伓鐨勬劅鎬э紝閭d箞浜虹殑鑳藉姏杈圭晫鏃犵枒灏辨墿澶т簡涓浜涖
杩欎篃鏄鍊熼壌浜嗛噺鍖栦氦鏄撶殑鎬濊矾锛屽傛灉纭璁や竴浠朵簨鎯呮槸澶ф傜巼鑾峰埄锛岄偅灏卞︿範鍐峰啺鍐扮殑璁$畻鏈猴紝姣鏃犳劅鎯呯殑鎵ц屽嵆鍙銆
杩欓噷鏈変竴鐐归渶瑕佽存槑锛氱幇鍦ㄨ窛绂籈OS涓荤綉涓婄嚎杩樻湁鏈鍚庝竴涓鏈堬紝鎵浠ヨ繖绉嶄綆椋庨櫓濂楀埄鐨勫姙娉曞彧鑳藉啀鎸佺画4鍛锛屾湁鍏磋叮灏濊瘯鐨勫皬浼欎即鍙瑕佹姄绱т簡銆
ETH鐨勬寲鐭垮師鐞嗕笌鏈哄埗
寰呭瓧闂轰腑寮鍙戜簡涓闂ㄥ尯鍧楅摼鏂归潰鐨勮剧▼锛氥婃繁鍏ユ祬鍑篍TH鍘熺悊涓庢櫤鑳藉悎绾﹀紑鍙戙嬶紝椹鑹鑰佸笀璁叉巿銆傛ゆ枃闆嗚板綍鎴戠殑瀛︿範绗旇般
璇剧▼鍏8鑺傝俱傚叾涓锛屽墠鍥涜捐睧TH鍘熺悊锛屽悗鍥涜捐叉櫤鑳藉悎绾︺
绗鍥涜惧垎涓轰笁閮ㄥ垎锛
杩欑瘒鏂囩珷鏄绗鍥涜剧涓閮ㄥ垎鐨勫︿範绗旇帮細Ethash绠楁硶銆
杩欒妭璇句粙缁嶇殑鏄浠ュお鍧婇潪甯告牳蹇冪殑鎸栫熆绠楁硶銆
鍦ㄤ粙缁岴thash绠楁硶涔嬪墠锛屽厛璁蹭竴浜涜儗鏅鐭ヨ瘑銆傚叾瀹炲尯鍧楅摼鎶鏈涓昏佹槸瑙e喅涓涓鍏辫瘑鐨勯棶棰橈紝鑰屽叡璇嗘槸涓涓灞傛″緢涓板瘜鐨勬傚康锛岃繖閲屾妸鑼冪暣缂╁皬锛屽彧璁ㄨ哄尯鍧楅摼涓鐨勫叡璇嗐
浠涔堟槸鍏辫瘑锛
鍦ㄥ尯鍧楅摼涓锛屽叡璇嗘槸鎸囧摢涓鑺傜偣鏈夎拌处鏉冦傜綉缁滀腑鏈夊氫釜鑺傜偣锛岀悊璁轰笂閮芥湁璁拌处鏉冿紝棣栧厛闈涓寸殑闂棰樺氨鏄锛屽埌搴曡皝鏉ヨ板笎銆傚彟涓涓闂棰橈紝浜ゆ槗涓瀹氭槸鏈夐『搴忕殑锛屽嵆璋佸湪鍓嶏紝鍓嶅湪鍚庛傝繖鏍峰彲浠ヨВ鍐冲弻鑺遍棶棰樸傚尯鍧楅摼涓鐨勫叡璇嗘満鍒跺氨鏄瑙e喅杩欎袱涓闂棰橈紝璋佽板笎鍜屼氦鏄撶殑椤哄簭銆
浠涔堟槸宸ヤ綔閲忚瘉鏄庣畻娉
涓轰簡鍐冲畾浼楀氳妭鐐逛腑璋佹潵璁板笎锛屽彲浠ユ湁澶氱嶆柟妗堛傚叾涓锛屽伐浣滈噺璇佹槑灏辫╄妭鐐瑰幓绠椾竴涓鍝堝笇鍊硷紝婊¤冻闅惧害鐩鏍囧肩殑鑳滃嚭銆傝繖涓杩囩▼鍙鑳介氳繃鏋氫妇璁$畻锛岃皝绠楃殑蹇锛岃皝鑾疯儨鐨勬傜巼澶с傛敹鐩婅窡鑺傜偣鐨勫伐浣滈噺鏈夊叧锛岃繖灏辨槸宸ヤ綔閲忚瘉鏄庣畻娉曘
涓轰粈涔堣佸紩鍏ュ伐浣滈噺璇佹槑绠楁硶锛
Hash Cash 鐢盇dam Back 鍦1997骞村彂琛锛屼腑鏈鑱棣栨″湪姣旂壒甯佷腑搴旂敤鏉ヨВ鍐冲叡璇嗛棶棰樸
瀹冩渶鍒濈敤鏉ヨВ鍐冲瀮鍦鹃偖浠堕棶棰樸
鍏朵富瑕佽捐℃濇兂鏄閫氳繃鏆村姏鎼滅储锛屾壘鍒颁竴绉岯lock澶撮儴缁勫悎锛堥氳繃璋冩暣nonce锛変娇寰楀祵濂楃殑SHA256鍗曞悜鏁e垪鍊艰緭鍑哄皬浜庝竴涓鐗瑰畾鐨勫硷紙Target锛夈
杩欎釜绠楁硶鏄璁$畻瀵嗛泦鍨嬬畻娉曪紝涓寮濮嬩粠CPU鎸栫熆锛岃浆鑰屼负GPU锛岃浆鑰屼负FPGA锛岃浆鑰屼负ASIC锛屼粠鑰屼娇寰楃畻鍔涘彉寰楅潪甯搁泦涓銆
绠楀姏闆嗕腑灏变細甯︽潵涓涓闂棰橈紝鑻ユ湁涓涓鐭挎睜鐨勭畻鍔涜揪鍒51%锛屽垯瀹冨氨浼氭湁浣滄伓鐨勯庨櫓銆傝繖鏄姣旂壒甯佺瓑浣跨敤宸ヤ綔閲忚瘉鏄庣畻娉曠殑绯荤粺鐨勫紛绔銆傝屼互澶鍧婂垯鍚稿彇浜嗚繖涓鏁欒锛岃繘琛屼簡涓浜涙敼杩涳紝璇炵敓浜咵thash绠楁硶銆
Ethash绠楁硶鍚稿彇浜嗘瘮鐗瑰竵鐨勬暀璁锛屼笓闂ㄨ捐′簡闈炲父涓嶅埄鐢ㄨ$畻鐨勬ā鍨嬶紝瀹冮噰鐢ㄤ簡I/O瀵嗛泦鐨勬ā鍨嬶紝I/O鎱锛岃$畻鍐嶅揩涔熸病鐢ㄣ傝繖鏍凤紝瀵逛笓鐢ㄩ泦鎴愮數璺鍒欎笉鏄閭d箞鏈夋晥銆
璇ョ畻娉曞笹PU鍙嬪ソ銆備竴鏄鑰冭檻濡傛灉鍙鏀鎸丆PU锛屾媴蹇冩槗琚鏈ㄩ┈鏀诲嚮锛涗簩鏄鐜板湪鐨勬樉瀛橀兘寰堝ぇ銆
杞诲瀷瀹㈡埛绔鐨勭畻娉曚笉閫備簬鎸栫熆锛屾槗浜庨獙璇侊紱蹇閫熷惎鍔
绠楁硶涓锛屼富瑕佷緷璧栦簬Keccake256 銆
鏁版嵁婧愰櫎浜嗕紶缁熺殑Block澶撮儴锛岃繕寮曞叆浜嗛殢鏈烘暟闃靛垪DAG锛堟湁鍚戦潪寰鐜鍥撅級锛圴italik鎻愬嚭锛
绉嶅瓙鍊煎緢灏忋傛牴鎹绉嶅瓙鍊肩敓鎴愮紦瀛樺硷紝缂撳瓨灞傜殑鍒濆嬪间负16M锛屾瘡涓涓栦唬澧炲姞128K銆
鍦ㄧ紦瀛樺眰涔嬩笅鏄鐭垮伐浣跨敤鐨勬暟鎹鍊硷紝鏁版嵁灞傜殑鍒濆嬪兼槸1G锛屾瘡涓涓栦唬澧炲姞8M銆傛暣涓鏁版嵁灞傜殑澶у皬鏄128Bytes鐨勭礌鏁板嶃
妗嗘灦涓昏佸垎涓轰袱涓閮ㄥ垎锛屼竴鏄疍AG鐨勭敓鎴愶紝浜屾槸鐢℉ashimoto鏉ヨ$畻鏈缁堢殑缁撴灉銆
DAG鍒嗕负涓変釜灞傛★紝绉嶅瓙灞傦紝缂撳瓨灞傦紝鏁版嵁灞傘備笁涓灞傛℃槸閫愭笎澧炲ぇ鐨勩
绉嶅瓙灞傚緢灏忥紝渚濊禆涓婁釜涓栦唬鐨勭嶅瓙灞傘
缂撳瓨灞傜殑绗涓涓鏁版嵁鏄鏍规嵁绉嶅瓙灞傜敓鎴愮殑锛屽悗闈㈢殑鏍规嵁鍓嶉潰鐨勪竴涓鏉ョ敓鎴愶紝瀹冩槸涓涓涓茶屽寲鐨勮繃绋嬨傚叾鍒濆嬪ぇ灏忔槸16M锛屾瘡涓涓栦唬澧炲姞128K銆傛瘡涓鍏冪礌64瀛楄妭銆
鏁版嵁灞傚氨鏄瑕佺敤鍒扮殑鏁版嵁锛屽叾鍒濆嬪ぇ灏1G锛岀幇鍦ㄧ害2涓狦锛屾瘡涓鍏冪礌128瀛楄妭銆傛暟鎹灞傜殑鍏冪礌渚濊禆缂撳瓨灞傜殑256涓鍏冪礌銆
鏁翠釜娴佺▼鏄鍐呭瓨瀵嗛泦鍨嬨
棣栧厛鏄澶撮儴淇℃伅鍜岄殢鏈烘暟缁撳悎鍦ㄤ竴璧凤紝鍋氫竴涓狵eccak杩愮畻锛岃幏寰楀垵濮嬬殑鍗曞悜鏁e垪鍊糓ix[0]锛128瀛楄妭銆傜劧鍚庯紝閫氳繃鍙﹀栦竴涓鍑芥暟锛屾槧灏勫埌DAG涓婏紝鑾峰彇涓涓鍊硷紝鍐嶄笌Mix[0]娣峰悎寰楀埌Mix[1]锛屽傛ゅ惊鐜64娆★紝寰楀埌Mix[64]锛128瀛楄妭銆
鎺ヤ笅鏉ョ粡杩囧悗澶勭悊杩囩▼锛屽緱鍒 mix final 鍊硷紝32瀛楄妭銆傦紙杩欎釜鍊煎湪鍓嶉潰涓や釜灏忚妭銆 009锛欸HOST鍗忚 銆嬨併 010锛氭惌寤烘祴璇曠綉缁 銆嬮兘鍑虹幇杩囷級
鍐嶇粡杩囪$畻锛屽緱鍑虹粨鏋溿傛妸瀹冨拰鐩鏍囧肩浉姣旇緝锛屽皬浜庡垯鎸栫熆鎴愬姛銆
闅惧害鍊煎ぇ锛岀洰鏍囧煎皬锛屽氨瓒婇毦锛堝墠闈㈤渶瑕佺殑 0 瓒婂氾級銆
杩欎釜杩囩▼涔熸槸鎸栫熆闅撅紝楠岃瘉瀹规槗銆
涓洪槻姝㈢熆鏈猴紝mix function鍑芥暟涔熸湁鏇存柊杩囥
闅惧害鍏寮忚佽句欢鎴鍥俱
鏍规嵁涓婁竴涓鍖哄潡鐨勯毦搴︼紝鏉ユ帹绠椾笅涓涓銆
浠庡叕寮忕湅鍑猴紝闅惧害鐢变笁閮ㄥ垎缁勬垚锛岄栧厛鏄涓婁竴鍖哄潡鐨勯毦搴︼紝鐒跺悗鏄绾挎ч儴鍒嗭紝鏈鍚庢槸闈炵嚎鎬ч儴鍒嗐
闈炵嚎鎬ч儴鍒嗕篃鍙闅惧害鐐稿脊锛屽湪杩囦簡涓涓鐗瑰畾鐨勬椂闂磋妭鐐瑰悗锛岄毦搴︽槸鎸囨暟涓婂崌銆傚傛よ捐★紝鍏惰儗鍚庣殑鐩鐨勬槸锛屽湪浠ュお鍧婄殑椤圭洰鍛ㄦ湡涓锛屽湪澶ч兘浼氱増鏈鍚庣殑涓嬩竴涓鐗堟湰涓锛岃佽浆鎹㈠叡璇嗭紝鐢盤OW鍙樹负POW銆丳OS娣峰悎鍨嬬殑鍗忚銆傚熀閲戜細鐨勬剰鎬濆彲鑳芥槸浣垮緱鎸栫熆鍙樺緱娌℃剰鎬濄
闅惧害鏇茬嚎鍥炬樉绀猴紝2017骞10鏈堬紝闅惧害鏈変竴涓澶х殑涓嬮檷锛屽栧姳涔熺敱5涓鍙樹负3涓銆
鏈鑺備富瑕佷粙缁嶄簡Ethash绠楁硶锛屼笉瓒充箣澶勶紝璇锋壒璇勬寚姝c
鍥藉唴eth鍗佸ぇ鐭挎睜鎺掑悕
浠ュお鍧婄殑鎸栫熆杩囩▼涓庢瘮鐗瑰竵鐨勫嚑涔庢槸涓鏍风殑銆侲TH閫氳繃鎸栫熆浜х敓锛屽钩鍧囨瘡15绉掍骇鐢1涓鍧楋紝鎸栫熆鐨勬椂鍊欙紝鐭垮伐浣跨敤璁$畻鏈哄幓璁$畻涓閬撳嚱鏁拌$畻棰樼殑绛旀堬紝鐩村埌鏈夌熆宸ヨ$畻鍒版g‘绛旀堝嵆瀹屾垚鍖哄潡鐨勬墦鍖呬俊鎭锛岃屼綔涓虹涓涓璁$畻鍑烘潵鐨勭熆宸ュ皢浼氬緱鍒3鏋欵TH鐨勫栧姳銆
濡傛灉鐭垮伐A鐜囧厛绠楀嚭姝g‘鐨勭瓟妗堬紝閭d箞鐭垮伐A灏嗚幏寰椾互澶甯佷綔涓哄栧姳锛屽苟鍦ㄥ叏缃戝箍鎾鍛婅瘔鎵鏈夌熆宸モ滄垜宸茬粡鎶婄瓟妗堢畻鍑烘潵浜嗏濆苟璁╂墍鏈夊湪绛旈樼殑鐭垮伐浠杩涜岄獙璇佸苟鏇存柊姝g‘绛旀堛傚傛灉鐭垮伐B绠楀嚭姝g‘绛旀堬紝閭d箞鍏朵粬鐭垮伐灏嗕細鍋滄㈠綋鍓嶇殑瑙i樿繃绋嬶紝璁板綍姝g‘绛旀堬紝骞跺紑濮嬪仛涓嬩竴閬撻橈紝鐩村埌绠楀嚭姝g‘绛旀堬紝骞朵竴鐩撮噸澶嶆よ繃绋嬨
鐭垮伐鍦ㄨ繖涓娓告垙涓寰堥毦浣滃紛銆備粬浠鏄娌℃硶浼瑁呭伐浣滃張寰楀嚭姝g‘绛旀堛傝繖灏辨槸涓轰粈涔堣繖涓瑙i樼殑杩囩▼琚绉颁负鈥滃伐浣滈噺璇佹槑鈥濓紙POW锛夈
瑙i樼殑杩囩▼澶х害姣12-15绉掞紝鐭垮伐灏变細鎸栧嚭涓涓鍖哄潡銆傚傛灉鐭垮伐鎸栫熆鐨勯熷害杩囧揩鎴栬呰繃鎱锛岀畻娉曚細鑷鍔ㄨ皟鏁撮樼洰鐨勯毦搴︼紝鎶婂嚭鍧楅熷害淇濇寔鍦13绉掑乏鍙炽
鐭垮伐鑾峰彇杩欎簺ETH甯佹槸鏈夐殢鏈烘х殑锛屾寲鐭跨殑鏀剁泭鍙栧喅浜庢姇鍏ョ殑绠楀姏锛屽氨鐩稿綋浣犵殑璁$畻鏈鸿秺澶氾紝浣犵瓟棰樼殑姝g‘鐨勬傜巼涔熷氨瓒婇珮锛屾洿瀹规槗鑾峰緱鍖哄潡濂栧姳銆
1銆 浠ュお鍧
瀹冩槸鍏ㄧ悆棰嗗厛鐨勬瘮鐗瑰竵鏁版嵁鏈嶅姟鎻愪緵鍟嗗拰鐭挎睜鍜岄挶鍖呰В鍐虫柟妗堟彁渚涘晢銆備粠2015骞村紑濮嬶紝鍥㈤槦浠庡尯鍧楁祻瑙堝櫒绛夎屼笟鍩虹璁炬柦鍏ユ墜锛岃嚧鍔涗簬鏋勫缓鍚勪釜瀛愰嗗煙鐨勬柊鏍囧噯銆傚搧鐗屽彲浠ュ湪閽卞寘銆佺熆姹犮佽屾儏銆佽祫璁绛夐嗗煙鐪嬪埌銆
2銆丗2Pool
F2Pool 鏄涓鍥芥渶澶х殑姣旂壒甯佸拰鑾辩壒甯佹寲鐭跨郴缁熺熆姹犱箣涓銆傛暟鎹鏄剧ず锛岄奔姹犵洰鍓嶆槸鍏ㄧ悆绗浜屽ぇ鐭挎睜锛屼粎娆′簬铓傝殎鐭挎睜銆
3銆侀挶鍗
纰ч煶鎴愮珛浜2017骞11鏈堬紝鐢卞師鏍稿績鍥㈤槦鎵撻犮傚洟闃熺殑浜у搧鍜屾妧鏈杈撳嚭鐜板湪鏈嶅姟浜庡叏缃戝ぇ閮ㄥ垎姣旂壒甯佺畻鍔涳紱涓ゅ勾鍐呮墦閫犱簡澶氫釜浜у搧锛岃法瓒婂尯鍧楅摼娴忚堝櫒銆佺熆姹犮侀挶鍖呯瓑澶氫釜鍨傜洿棰嗗煙銆傜ⅶ闊崇熆姹犳槸涓涓涓撲笟鐨勭熆姹狅紝鏀鎸佹墍鏈変富娴佸竵绉嶇殑鎸栫熆銆傜洰鍓嶆敮鎸佺殑甯佺嶅寘鎷锛欱TC銆丅CH銆丅SV銆乑EC銆丩TC銆丒TH銆丏CR銆丏ASH銆乆MR銆
4銆佺伀甯佺熆姹
鐏甯佺熆姹犳槸鍏ㄧ悆棣栦釜闆嗘暟瀛楄祫浜ф寲鎺樹笌浜ゆ槗浜庝竴浣撶殑鐭挎睜骞冲彴銆傚畠閲囩敤鍩轰簬POW鎸栫熆鏈哄埗鐨勫叏鏂板垎閰嶆ā鍨婩PPS銆傚競鍦轰笂澶ч儴鍒嗙熆姹犻噰鐢ㄤ紶缁熺殑PPS缁撶畻鍜屽垎閰嶆ā寮忋傜浉姣斾箣涓嬶紝鐏甯佺殑FPPS妯″紡闄嶄綆浜嗙熆宸ョ殑鎵撳寘璐癸紝姣忎釜鐭垮伐鍙浠ュ炲姞5%宸﹀彸鐨勫埄娑︺傜伀甯佺熆姹犻氳繃杩欎竴涓炬帾锛屽皢鍏朵笌鍏朵粬鐭挎睜鍖哄垎寮鏉ワ紝鍚稿紩鐭垮伐鍏ラ┗銆
5銆佽殏铓佺熆姹
铓傝殎鐭挎睜鏄疊itTaiwan鍒╃敤澶ч噺璧勬簮寮鍙戠殑楂樻晥鏁板瓧璐у竵鐭挎睜銆傝嚧鍔涗簬涓虹熆宸ユ彁渚涙洿鍙嬪ソ鐨勭晫闈銆佹洿瀹屽杽鐨勫姛鑳姐佹洿澶氱殑浣跨敤鏂归潰銆佹洿涓板帤閫忔槑鐨勬敹鐩娿傝揣甯佺殑鍙戝睍鍋氬嚭鏇村氳础鐚銆傝殏铓佺熆姹犳槸涓涓楂樻晥鐨勬暟瀛楄揣甯佺熆姹狅紝鑷村姏浜庝负鐭垮伐鎻愪緵鏇村弸濂界殑鐣岄潰銆佹洿濂界殑鍔熻兘銆佹洿渚挎嵎鐨勪娇鐢ㄥ拰鏇翠赴鍘氶忔槑鐨勬敹鐩娿傝殏铓佺熆姹犱负澶氱嶆暟瀛楄揣甯佹彁渚涙瘮鐗瑰竵銆佽幈鐗瑰竵銆佷互澶鍧婃寲鐭挎湇鍔★紝鏀鎸丳PS銆丳PLNS銆丼OLO绛夊氱嶆敮浠樻柟寮忋
6銆佸井姣旂壒
寰姣旂壒鏄涓瀹朵笓涓氱殑鏁板瓧璐у竵鎶鏈鏈嶅姟鍟嗐傚叾鏈嶅姟鑼冨洿鍖呮嫭鏁板瓧璐у竵浜ゆ槗骞冲彴銆佹暟瀛楄揣甯佺熆姹犮佷簯鎸栫熆鍚堢害銆傛垚绔嬩簬2016骞5鏈堬紝鍚屽勾6鏈堜笂绾挎瘮鐗瑰竵鐭挎睜锛11鏈堜笂绾夸簯鎸栫熆浜у搧銆 2017骞3鏈堬紝寰姣旂壒鑾峰緱鐢盉itTaiwan棰嗘姇鐨2000涓囧厓A杞铻嶈祫锛屼互鎷撳睍浜ゆ槗鎵涓氬姟銆 6鏈堬紝寰姣旂壒鍗冲皢涓婄嚎鏁板瓧璐у竵浜ゆ槗骞冲彴銆
7銆58COIN绗浜岀被鏄鍏朵粬鐭挎睜锛屽備互澶鍧婄熆姹犮丼park鐭挎睜锛涚涓夌被鏄浜ゆ槗鎵鐭挎睜锛屽傜伀甯佺熆姹犮丱K鐭挎睜銆佸竵瀹夌熆姹犮傚竵瀹変綔涓烘柊涓栫晫鐨勨滄暟瀛楃粡娴庢搷浣滅郴缁熲濓紝鍦ㄦ暟瀛楄祫浜т氦鏄撴祦閫氶嗗煙锛屽湪鍖哄潡閾惧競鍦烘暀鑲查嗗煙锛屽湪鍘讳腑蹇冨寲娴侀氭帰绱㈤嗗煙锛岃祫浜ф祦閫氬钩鍙板湪浜戣$畻棰嗗煙锛屽湪甯傚満鍜屾暟瀛楄祫浜уぇ鏁版嵁棰嗗煙锛屽湪閲戣瀺琛嶇敓鍝侀嗗煙锛岀瓑鐢熸佺郴缁燂紝閮藉彇寰椾簡寰堝ソ鐨勬垚缁╋紝涔熷垱閫犱簡鍏ㄧ悆褰卞搷鍔涖傚綋鐒讹紝瀵逛簬鍖哄潡閾惧拰鏁板瓧缁忔祹棰嗗煙鐨勫疄浣撶粡娴庯紝鈥滀簯绠楀姏骞冲彴鈥濓紝鍗崇熆姹狅紝甯佸畨涔熷湪鏋佺煭鐨勬椂闂村唴鍒涢犱簡鍙︿竴绉嶁滃晢涓氬唴娑碘濄
9銆丱KEXPool
鍦ㄥ叕甯冪殑鏁版嵁涓锛孫KExPool浠2019骞10鏈堢殑甯傚満浠介濈害0%杩呴熷彂灞曚负甯傚満浠介濈鍏澶х殑鐭挎睜銆備絾鏄锛屽湪绠楀姏瓒嬪娍鏇茬嚎涓婏紝OKExPool鍦2020骞1鏈堢畻鍔涘嚭鐜板ぇ骞呬笅婊戙傛湁甯傚満浜哄+瀵筆ANews琛ㄧず锛屾帹娴婳KExPool绠楀姏蹇閫熶笅婊戠殑鍘熷洜鍙鑳芥槸鍔犲叆浜嗘洿鍔犱腑蹇冨寲鐨勫皬鐭垮満锛岀洰鍓嶈繕缂轰箯鎶曡祫鑰呭姞鍏ョ畻鍔涚粨鏋勩
铏界劧浜ゆ槗鎵鏅閬嶆槸鐭挎睜棰嗗煙鐨勬柊浜猴紝浣嗕氦鏄撴墍鎸佹湁鐨勭熆姹犱笟鍔$浉瀵逛簬浼犵粺鍏鍙镐粛鏈変竴瀹氱殑澶╃劧浼樺娍銆
10銆丅TCTOP
Lybit鐭挎睜缁忚繃澶氬勾鐨勭ǔ瀹氳繍琛岋紝鏈鍒濇槸涓涓鍏ㄧ綉绠楀姏鏈澶х殑绉佹湁鐭挎睜銆傜幇闈㈠悜甯傚満浠ュお甯侊紝璇氶個鎵鏈夌熆宸ュ垎浜鍏舵妧鏈甯︽潵鐨勬寲鐭挎敹鐩娿傚叏鏂板崌绾ф敼鐗堢殑涔愭瘮鐗圭熆姹犵郴缁熸洿鍔犺创鍚堝㈡埛闇姹傦紝鍐呭规洿涓板瘜锛屾搷浣滄洿绠鍗曘
4. 以太坊是什么丨以太坊开发入门指南
以太坊是什么丨以太坊开发入门指南
很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门。
以太坊是什么
以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
智能合约
什么是智能合约
以太坊上的程序称之为智能合约, 它是代码和数据(状态)的集合。
智能合约可以理解为在区块链上可以自动执行的(由事件驱动的)、以代码形式编写的合同(特殊的交易)。
在比特币脚本中,我们讲到过比特币的交易是可以编程的,但是比特币脚本有很多的限制,能够编写的程序也有限,而以太坊则更加完备(在计算机科学术语中,称它为是“图灵完备的”),让我们就像使用任何高级语言一样来编写几乎可以做任何事情的程序(智能合约)。
智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。
目前除数字货币之外,真正落地的应用还不多(就像移动平台刚开始出来一样),相信1到3年内,各种杀手级会慢慢出现。
编程语言:Solidity
智能合约的默认的编程语言是Solidity,文件扩展名以.sol结尾。
Solidity是和JavaScript相似的语言,用它来开发合约并编译成以太坊虚拟机字节代码。
还有长像Python的智能合约开发语言:Serpent,不过建议大家还是使用Solidity。
Browser-Solidity是一个浏览器的Solidity IDE, 大家可以点进去看看,以后我们更多文章介绍Solidity这个语言。
运行环境:EVM
EVM(Ethereum Virtual Machine)以太坊虚拟机是以太坊中智能合约的运行环境。
Solidity之于EVM,就像之于跟JVM的关系一样,这样大家就容易理解了。
以太坊虚拟机是一个隔离的环境,在EVM内部运行的代码不能跟外部有联系。
而EVM运行在以太坊节点上,当我们把合约部署到以太坊网络上之后,合约就可以在以太坊网络中运行了。
合约的编译
以太坊虚拟机上运行的是合约的字节码形式,需要我们在部署之前先对合约进行编译,可以选择Browser-Solidity Web IDE或solc编译器。
合约的部署
在以太坊上开发应用时,常常要使用到以太坊客户端(钱包)。平时我们在开发中,一般不接触到客户端或钱包的概念,它是什么呢?
以太坊客户端(钱包)
以太坊客户端,其实我们可以把它理解为一个开发者工具,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能。
EVM是由以太坊客户端提供的。
Geth是典型的开发以太坊时使用的客户端,基于Go语言开发。 Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。Geth的使用我们之后会有文章介绍,这里大家先有个概念。
Geth控制台和Chrome浏览器开发者工具里的面的控制台是类似,不过是跑在终端里。
相对于Geth,Mist则是图形化操作界面的以太坊客户端。
如何部署
智能合约的部署是指把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址称为合约账户。
以太坊中有两类账户:
· 外部账户
该类账户被私钥控制(由人控制),没有关联任何代码。
· 合约账户
该类账户被它们的合约代码控制且有代码与之关联。
和比特币使用UTXO的设计不一样,以太坊使用更为简单的账户概念。
两类账户对于EVM来说是一样的。
外部账户与合约账户的区别和关系是这样的:一个外部账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部账户或合约账户。
在两个外部账户之间传送消息是价值转移的过程。但从外部账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算,创建一个新的合约等等)。
只有当外部账户发出指令时,合同账户才会执行相应的操作。
合约部署就是将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上(由实际矿工出块之后,才真正部署成功)。
运行
合约部署之后,当需要调用这个智能合约的方法时只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在EVM中执行了。
Gas
和云计算相似,占用区块链的资源(不管是简单的转账交易,还是合约的部署和执行)同样需要付出相应的费用(天下没有免费的午餐对不对!)。
以太坊上用Gas机制来计费,Gas也可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量和类型,占用的内存等),用来完成运行就需要越多Gas。
任何特定的合约所需的运行合约的Gas数量是固定的,由合约的复杂度决定。
而Gas价格由运行合约的人在提交运行合约请求的时候规定,以确定他愿意为这次交易愿意付出的费用:Gas价格(用以太币计价) * Gas数量。
Gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当EVM执行交易时,Gas将按照特定规则被逐渐消耗,无论执行到什么位置,一旦Gas被耗尽,将会触发异常。当前调用帧所做的所有状态修改都将被回滚, 如果执行结束还有Gas剩余,这些Gas将被返还给发送账户。
如果没有这个限制,就会有人写出无法停止(如:死循环)的合约来阻塞网络。
因此实际上(把前面的内容串起来),我们需要一个有以太币余额的外部账户,来发起一个交易(普通交易或部署、运行一个合约),运行时,矿工收取相应的工作量费用。
以太坊网络
有些着急的同学要问了,没有以太币,要怎么进行智能合约的开发?可以选择以下方式:
选择以太坊官网测试网络Testnet
测试网络中,我们可以很容易获得免费的以太币,缺点是需要发很长时间初始化节点。
使用私有链
创建自己的以太币私有测试网络,通常也称为私有链,我们可以用它来作为一个测试环境来开发、调试和测试智能合约。
通过上面提到的Geth很容易就可以创建一个属于自己的测试网络,以太币想挖多少挖多少,也免去了同步正式网络的整个区块链数据。
使用开发者网络(模式)
相比私有链,开发者网络(模式)下,会自动分配一个有大量余额的开发者账户给我们使用。
使用模拟环境
另一个创建测试网络的方法是使用testrpc,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更方便快捷。而且testrpc可以在启动时帮我们创建10个存有资金的测试账户。
进行合约开发时,可以在testrpc中测试通过后,再部署到Geth节点中去。
更新:testrpc 现在已经并入到Truffle 开发框架中,现在名字是Ganache CLI。
Dapp:去中心化的应用程序
以太坊社区把基于智能合约的应用称为去中心化的应用程序(DecentralizedApp)。如果我们把区块链理解为一个不可篡改的数据库,智能合约理解为和数据库打交道的程序,那就很容易理解Dapp了,一个Dapp不单单有智能合约,比如还需要有一个友好的用户界面和其他的东西。
Truffle
Truffle是Dapp开发框架,他可以帮我们处理掉大量无关紧要的小事情,让我们可以迅速开始写代码-编译-部署-测试-打包DApp这个流程。
总结
我们现在来总结一下,以太坊是平台,它让我们方便的使用区块链技术开发去中心化的应用,在这个应用中,使用Solidity来编写和区块链交互的智能合约,合约编写好后之后,我们需要用以太坊客户端用一个有余额的账户去部署及运行合约(使用Truffle框架可以更好的帮助我们做这些事情了)。为了开发方便,我们可以用Geth或testrpc来搭建一个测试网络。
注:本文中为了方便大家理解,对一些概念做了类比,有些严格来不是准确,不过我也认为对于初学者,也没有必要把每一个概念掌握的很细致和准确,学习是一个逐步深入的过程,很多时候我们会发现,过一段后,我们会对同一个东西有不一样的理解。
5. 区块链技术架构有些什么课程介绍
目前市场上区块链培训课程跨度很大,课程内容和授课形式也是五花八门。
区块链
1、编程基础入门
计算机软硬件基础、字符集及字符编码、HTML+CSS(含HTML5+CSS3)、ECMA + BOM + DOM、jQuery、node.js、Ajax及Express
2、Go编程语言
Go基本语法、流程控制、函数及数据、错误处理、Go面向对象编程、Go并发编程、Go网络编程、Go安全编程、Go进阶编程(goroutine、channel)、数据库MySQL、LevelDB
3、区块链1.0——比特币Bitcoin
比特币原理、比特币系统架构、密码算法(Go语言实现)、共识算法(Go语言实现)、比特币交易原理及交易脚本、比特币RPC编程(node.js实现)、比特币源码解析
4、区块链2.0——以太坊Ethereum
以太坊工作原理及基础架构、以太坊基本概念(账户、交易、Gas)、以太坊钱包Mist及Metamask、以太坊交易、ERC20标准Token开发部署、以太坊开发IDE——remix-ide、智能合约与Solidity、Solidity部署、备份及调用、框架技术:truffle及web3、DApp开发实战、Geth
5、区块链3.0——超级账本之Fabric
超级账本项目介绍、Fabric部署和使用、Fabric配置管理、Fabric架构设计、Fabric CA应用与配置、应用开发实战。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
6. 浠涔堟槸姣旂壒甯侀挶鍖呯殑瀛愬湴鍧鏈変粈涔堢敤
姣旂壒甯佺殑閽卞寘鏄寤虹珛鍦 HD锛堝垎绾х‘瀹氭э級妗嗘灦涔嬩笂鐨, 瀹冨彲浠ヤ骇鐢熶笉涓鏍风殑鍦板潃鍜岀$悊鍦板潃鐨勬柟娉曘 鐢ㄦ埛閽卞寘鐨勬墍鏈夊叕寮鍦板潃閮戒細浠庤繖涓閽卞寘鐨 xPub锛堟墿灞曞叕閽ワ級涓璇炵敓鐨勩 濡傛灉姣忎竴娆¢兘鐢ㄥ埌鍚屼竴涓鍦板潃鎺ユ敹 BTC , 閭d箞姣忎釜浜洪兘鑳藉熷緢鏂逛究鐨勮拷韪鎵鏈変粯娆捐板綍銆 浣跨敤瀛愬湴鍧鏀舵惧氨鑳藉熷湪寰堝ぇ绋嬪害涓婃敼鍠勮繖绉嶆儏鍐碉紝璧峰埌涓涓淇濇姢鐢ㄦ埛鐨勯殣绉佺殑浣滅敤銆傞渶瑕佹敞鎰忕殑鏄锛
1.BTC 閽卞寘涓诲湴鍧璧勪骇鐨勫氨绠楀叕寮忓氨鏄锛氫富鍦板潃璧勪骇+瀛愬湴鍧璧勪骇+鎵鹃浂鍦板潃璧勪骇銆
2.姣忎竴涓鍦板潃閮芥湁鍞涓涓涓涓庝箣瀵瑰簲鐨勬槑鏂囩侀挜锛屼絾鏄鏄涓嶉渶瑕佸崟鐙澶囦唤姣忎釜鍦板潃鐨勭侀挜鐨勶紝澶囦唤浜 BTC 閽卞寘鐨勫姪璁拌瘝灏卞彲浠ヤ簡锛岃繖鏍峰氨鐩稿綋浜庡囦唤浜嗘瘡涓瀛愬湴鍧鐨勭侀挜銆
3涓瀹氫笉瑕佺敤瀛愬湴鍧鎺ユ敹 USDT
鎴戜滑閫氳繃浠ヤ笂鍏充簬浠涔堟槸姣旂壒甯侀挶鍖呯殑瀛愬湴鍧鏈変粈涔堢敤鍐呭逛粙缁嶅悗,鐩镐俊澶у朵細瀵逛粈涔堟槸姣旂壒甯侀挶鍖呯殑瀛愬湴鍧鏈変粈涔堢敤鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
7. 带你揭开比特币的神秘面纱
要吹散比特币周围的迷雾,我们需要把它分为两个板块来分析。 一方面,比特币是一种代币 ,这种代币代表着一种数字概念的所有权,就像是一种虚拟的欠条一样,它由多个代码片段构成。 另一方面,比特币又是一种协议,是一种分散式记账的网络,记录着代币的余额 。这两部分都同时指向我们所说的比特币。
这个系统会让用户在不通过中心授权的情况下互相进行支付活动,这种中心授权就类似于银行或者其他支付网关。这个系统完全属于电子化。比特币并不是被打印出来的,它不像美元、欧元或者人民币这种货币。比特币是由世界上的多台电脑使用免费的软件创建出来的。
比特币是加密货币的第一个案例,它有着传统货币的某些特征,在密码学的基础上进行认证。
一位匿名为中本聪的日本软件开发人员与2008年首次提出了比特币的概念,它是基于数学证明至上的电子支付系统。这个思路就是制造一种独立于中心授权之外的交易方式,它独立于中心授权之外,而且可以以一种安全而又不可更改的方式进行电子转账。
但至今仍然没有人知道到底谁是中本聪。
交易双方使用比特币交易,就类似于使用约定俗成的美元、欧元或日元进行交易一样,不过是通过数字形式进行交易的。以下是比特币最重要的特征:
一、去中心化
比特币最重要的特征就是去中心化。没有任何机构能够控制比特币网络。比特币是由一些代码人员组建的志愿者组织维护的,而且是由世界上的许多计算机编制起来的开放式网络。 比特币吸引了大批组织和个体,尤其是那些不愿意让银行或官方机构掌控自己财产的人群。 有了比特币,整个交易都由分散式和开放式的网络维持着。
二、有限供应
美元、欧元、日元、新元等货币的供应是有限的,因为中央银行可以按照他们的意愿发行货币,而且还可以货币的相对价值。货币持有人(尤其是选择权限有限的公民)会承担这些成本。
而比特币的供应是由基本的算法紧紧控制的。每小时都由新的比特币产生,但是量很小,增长量也会呈现下降趋势,知道总发行量达到2100万。 理论上来说,如果比特币的需求持续上升,而供应不变的话,价值是会增长的 – 这也就是比特币作为一种资产为什么怎么吸引人的原因。
三、假名
传统的电子支付通常具有可识别性(出于认证的目的,以及遵守反洗钱和其他有关法律法规),而 比特币的用户理论上是半匿名的。 一旦提交了交易请求,协议就会检查所有交易记录,并确认转账的人有权限和足额的比特币进行交易。系统自身不知道交易者的身份信息的。
实际上,每个比特币用户都是由其电子钱包的地址来识别的。而且大多数交易都会在法律法规的框架下核实他们的客户身份,之后才被允许进行比特币交易。这种情况下可以对比特币的使用进行跟踪。因为整个网络都是透明的,交易的整个过程对所有人都是可见的。 因此,比特币对于违法犯罪人员、恐怖分子或者其他参与洗钱的人都不是理想的货币。
四、不变性
比特币交易是不可逆转的,这跟其他电子类货币交易有所区别。 这是因为没有任何中间审裁人员说“还钱吧”。如果一笔交易已经在网上有了记录,一个多小时后就不可能在做更改了。
这或许会让人有所担忧,但这也意味着任何通过比特币网络进行的交易都是非常严肃的,不容儿戏。
五、可分性
比特币的最小单位叫中本聪。我们可以想象到,比特币会催生更多的微交易,而这些是传统的电子货币办不到的事。
总之,比特币速度快,利用成本低。而且比特币更加注重交易的私密性。
8. 比特币的概念是什么
比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。
比特币:又称“比特金”,是一种网络虚拟货币,网民可以使用比特币购买一些虚拟物品,比如网络游戏当中的衣服、帽子、装备等,网民之间也有用来购买现实物品的情况。
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。随后比特币网络会新生成一定量的比特币作为赏金,奖励获得答案的人。
(8)比特币代码框架介绍扩展阅读
用户可以买到比特币,同时还可以使用计算机依照算法进行大量的运算来“开采”比特币。在用户“开采”比特币时,需要用电脑搜寻64位的数字就行,然后通过反复解谜密与其他淘金者相互竞争,为比特币网络提供所需的数字,如果用户的电脑成功地创造出一组数字。
比特币是类似电子邮件的电子现金,交易双方需要类似电子邮箱的“比特币钱包”和类似电邮地址的“比特币地址”。和收发电子邮件一样,汇款方通过电脑或智能手机,按收款方地址将比特币直接付给对方。下列表格,列出了免费下载比特币钱包和地址的部分网站。
参考资料
网络-比特币