区块链基础知识
  i3y35feTUhLs 2023年11月02日 62 0

去中心化应用(decentralized application,DAPP)也是一种以网络为基础的互联网应用,顾名思义,去中心化应用不需要特定企业或个人作为服务端为某个应用及其用户提供服务支持。去中心化应用是在点对点的网络上运行,并且应用的源代码是开源的,此外由于不再需要特定企业或个人提供服务,所以网络中不存在能够完全控制DApp的节点。


区块链式结构

链(chain):链是由区块按照发生的时间顺序,通过区块的哈希值串联而成,是区块交易记录及状态变化的日志记录。

链下(off-chain):区块链系统从功能角度讲,是一个价值交换的网络,链下是指不存储于区块链上的数据。

无代币区块链(token-less blockchain):即区块链并不通过代币进行价值交换,一般出现在不需要在节点之间转移价值并且仅在不同的已被信任方之间共享数据的情况下,如私有链。

创世区块(Genesis block):区块链中的第一个区块被称为“创世”区块。创世区块一般用于初始化,不带有交易信息。

区块高度(block height):一个区块的高度是指在区块链中它和创世区块之间的块数。

分叉(fork):在区块链中,由矿工挖出区块并将其链接到主链上,一般来讲同一时间内只产生一个区块,如果发生用以时间内有两个区块同时被生成的情况,就会在全网中出现两个长度相同、区块里的交易信息相同但矿工签名不同或者交易排序不同的区块链,这种情况叫做分叉。

软分叉(soft fork):指在区块链获取中心化网络中向前兼容的分叉。向前兼容意味着,当新共识规则发布后,在去中心化架构中节点不一定要升级到新的共识规则,因为软分叉的新规则仍旧符合老的规则,所以未升级的节点仍旧能够接受新的规则。

硬分叉(hard fork):指在区块链或去中心化网络中不向前兼容的分叉,硬分叉对加密货币使用的技术进行永久更改,这种变化使得所有的新数据块与原来的块不同,旧版本不会接受新版本创建的区块,要实现硬分叉所有用户都需要切换到新版本协议上。如果新的硬分叉失败,所有用户将回到原始数据块。

幽灵协议(ghost protocol):通过幽灵协议,区块可以包含不只是他们父块的哈希值,也包含其父块的父块的其他子块(被称为叔块)的陈腐区块的哈希值,这确保陈腐区块仍然有助于区块链的安全性,并能够获得一定比例的区块奖励,减少了大型矿工在区块链上的中心化倾向问题。

孤块(orphan block):孤块是一个被遗弃的数据块。因为很多节点都在维护区块链并同时创建新的区块,但是一次只能有一个被继续继承,而其他被遗弃的数据块就是孤块。

陈腐区块(stale block):是父块的父块的其他子块,或更一般的说是祖先的其他子块,但不是自己的祖先,如果A是B的是一个叔块,那B是A的侄块。

哈希树:在计算机科学中,哈希树(或哈希特里)是一种持久性数据结构,旨在替换纯函数式编程中的哈希表。在其基本形式中,哈希树在tire中存储其键的哈希值(被视为位串),其中实际键和(可选)值存储在tire的“最终”节点中。

对于数,当一个质数不够用的时候,可以加上第二个质数,用两个mod来确定该数据在库中的位置。对于一个质数x,它的mod有【0..x-1】x种,所以对于两个质数x和y,能存储的无一重复的数据有x*y个,其实也就是开一个x*y的二维数组。但是当数据极其多时,用两个质数去mod显然也有不够的时候,就还要再加一个。为了便于查找,选取最小的十个质数,也就是2,3,5,7,11,13,17,19,23,29来mod,已经远远超出longint了。也就是说,如果开一个十维数组,那么去到一个数的效率就是O(1) 。但是那样太浪费空间了,就可以用到树。同一节点中的子节点,从左到右代表不同的余数结果。例如、;第二层节点下有三个子节点,那么从左到右分别代表:除3余0,除3余1和除3 余2。对质数的余数决定了处理的路径。例如:某个数来到第二层子节点,那么他要做取余操作,然后再决定从哪个子节点向下搜寻。如果这个数是12那么他需要从第一个子节点向下搜索,如果这个数是7,那么它需要从第二个子节点向下搜索,如果这个数是32那么它需要从第三个子节点向下搜索。

哈希树的建立:选择质数分辨算法来建立一棵哈希树,选择从2开始的连续质数来建立一个十层的哈希树,第一层为根节点,根节点下有2个节点,第二层的每个节点下有3个节点;以此类推,即每层节点的子节点数目为连续的质数。到第十层,每个节点下面有29个子节点。同一节点中的子节点,从左到右代表不同余数结果。其实也可以把所有的键-值节点放在第十层的叶节点处,这第十层的满节点数就包含了所有的整数个数,但是如果这样处理的话,所有的非叶子节点作为键-值节点的索引,这样使树结构庞大,浪费空间。

查找:哈希树的节点查找过程和插入过程类似,就是对关键字用质数取余,根据余数确定下一节点的分叉路径,直到找到目标节点。如最小哈希树在从4G个对象中找出所匹配的对象,比较次数不超过10次。也就是说最多属于0(10)。在实际应用中,调整了质数的范围,使得比较次数一般不超过5次,也就是输最多属于0(5)。因此可以根据自身需要在时间和空间上寻求一个平衡点。

删除:哈希树的删除过程也很简单,哈希树在删除的时候,并不作任何结构调整。只是先查到需要删除的节点,然后把此节点的“占位标记”置位false即可(即表示此节点为空节点,并不进行物理删除)。

优点:1.结构简单

从哈希树的结构来说,非常的简单。每层节点的子节点个数为连续的质数。子节点可以随时创建。因此哈希树的结构是动态的,也不像某些哈希算法那样需要长时间的初始化过程。哈希树也没有必要为不存在的关键字提前分配空间。需要注意的是哈希树是一个单向增加的结构,及随着所要存储的数据量增加而增大。即时数据量减少到原来的数据量,哈希树的总结点数不会减少。这样做的目的是为了避免结构的调整带来的额外损耗。

2.   查找迅速。

    从算法过程我们可以看出,对于整数,哈希树层级最多能增加到10。因此最多只需要誓词取余和比较操作,就可以知道这个对象是否存在。在这个算法逻辑上决定了哈希树的优越性。

一般的树状结构,往往随着层次和层次中节点数的增加而导致更多的比较操作。操作次数可以说无法准确确定上限。而哈希树的查找次数和元素个数没有关系。如果元素的连续关键字总个数在计算机的整数(32bit)所能表示的最大范围内,那么比较次数就不会超过10次,通常低于这个数值。

3.   结构不变

从删除算法中我们可以看出,哈希树在删除的时候,并不作任何结构调整。这也是它的一个非常好的优点。常规树结构在增加元素和删除元素的时候都要做一定的结构调整,否则它们将退化为链表结构,而导致查找效率的降低。哈希树采取的是一种“见缝插针”的算法,从来不用担心退化的问题,也不必为优化结构而采取额外的操作,因此大大解约了操作时间。

缺点:哈希树不支持排序,没有顺序特性。如果在此基础上不作任何改进的话并试图通过遍历来实现排序,那么操作效率将远远低于其他类型的数据结构。

哈希树的结构如下:

struct Node 

{  

    keyType      key ; 

    //用occupied来表示节点是否被占据。如果节点的关键字(key)有效,

    //那么occupied应该设置位true,否则设置为false。

    bool         occupied ;   

      //我们用subNodes[i]来表示节点的第i个子节点的地址。

    struct Node* subNodes[1] ;

} ; 

 

智能合约:智能合约,smart contract,是一种旨在以信息化方式传播、验证和执行合同的计算机协议。

 分布式系统对一致性的要求:

总的来说,分布式系统对一致性的要求是每个节点都能产生同样的结果或者从其它节点那里同步到当前的状态,这是最基本的要求。达到高度一致性后的分布式计算机系统看起来就像是构建出了一台性能非常卓越的机器。出于对系统可用性以及实用性方面的考虑,就分布式系统而言,一般还希望节点在达成一致性时能满足以下要求。

(1) 分布式系统要限时返回一致性的状态结果。

(2) 分布式系统中的每个节点都要返回合法的状态结果。

(3) 分布式系统要有一定的故障容忍的特性。

   在分布式系统中,对任何可以达成一致的信息都称呼为“提案proposal”这就像之前讨论区块链技术的时候习惯把这些信息称为“交易”一样。共识算法要解决的就是通过什么样的一个过程才能使尽可能多的节点对分布式系统中的提案达成一致的意见。为此,共识算法中最关键的部分还是汇总、排序、传播到分布式系统中的提案。需要注意的是,共识算法泛指达成分布式系统一致共识的一类算法,而不是具体的某个算法。另外,“共识”和“一致性”是两个经常联系到一起适用的词汇,但严格来说,两者的含义并不完全相同。如前面所述,一致性指分布式系统中多个节点都能完成数据状态的同步。然而,共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。这样看来的话,一致性比较偏向于描述结果状态,共识则更偏向于描述一种手段。

  事实上,在网络可靠、存在节点失效(即使这样的节点非常少)的最小异步模型系统中,并不存在一个可以直接解决一致性问题的确定性共识算法。这就是分布式系统的FLP不可能原理。FLP不可能定理告诉设计者,试图为异步分布式系统设计在任意场景下都能实现达成共识的共识算法最终都将会是徒劳的,如果允许节点存在故障失效的情况,那么异步式分布式系统就无法确保一致性和共识性在有限时间内完成。既然如此,那么有没有可能性在付出一些代价的基础上尽量的达成全网一致性共识呢?这就要用另一个定理来回答,这就是CAP定理。

CAP定理说的是在分布式计算机体系中没有办法同时做到一致性(consistency)、可用性(availability)和分区容忍性(partition tolerance),但是在设计中可以弱化对某个特性的支持。

CAP定理中,一致性指的是一种强一致性,即所有节点都能在相同的时刻得到同样的数据;CAP定理中,可用性指的是在有限时间内任何正常工作的节点都能成功地响应接收到的每个请求;CAP定理中,分区容忍性指的是在因为网络故障而导致系统发生分区的情况下,系统仍能正常运行。即使无法保障节点与节点之间的通信。

常见的共识算法可以分为两类,一类是能够解决网络拜占庭错误的算法-BFT(Byzantine fault tolerance)类算法,另一类则是不能够解决网络拜占庭错误,而只是针对普通节点错误的算法-CFT(crash fault tolerance)类算法。

解决拜占庭将军问题可以使用Castro和liskov于1999年提出的经典又实用的BFT类算法-PBFT(practical Byzantine fault tolerance)算法。

PBFT算法用在分布式系统中实现的就是当系统内2/3以上的节点可以正常工作时,整个系统就可以正常工作。换句话说,PBFT算法支持分布式计算机系统实现拜占庭容错,即可以容忍分布式系统中不超过1/3的节点发生“叛变”。

Paxos算法和raft算法是在早些年常见于分布式服务器集群中的共识算法。

工作量证明算法PoW:

Proof of work 工作量证明算法的设计精华在于,产生一个新的合法区块需要矿工花费掉一些时间、精力和财力,因为矿工不仅需要购置算力强大的挖矿机器,还要按照规定的格式填充区块数据,更要通过运行大量的哈希计算来寻找一个合适的Nonce值。这个合适的Nonce值就是矿工的工作量证明。

一般可以认为,一个区块被矿工挖出之后载经历连续5个区块的挖出(大约1小时),则这个区块内包含的交易就可以被认为是经过明确确认且不可修改的。而一些核心开发者则指出,区块链至少需要在其最后面的120个区块的保护才能得以避免主链不受来自潜在的更长、已经花掉新产生的币的区块链的威胁。

工作量证明算法的自身有着一些其他共识算法无法比拟的优点。其一,实现了高度的全网去中心化,没有矿工能够对区块的产生实行干预。其二,矿工节点的参与条件宽松,不需要经过机构的认证,拥有较高算力的矿工节点能够更快的找到Nonce值。其三,在容错方面,允许全网有50%的节点出错。

当然,工作量证明算法也有一些固有的缺点。首先就是它需要矿工付出大量的数学运算来夺取记账权,这样会导致比较高的资源消耗(主要就是电力资源消耗)。然后,受到区块链分叉情况以及网络连接关系等的影响,达成一致共识的周期一般较长,因此性能效率比较低。最后,工作量证明算法需要大量的算力投入,目前比特币系统已经吸引了来自全球的大部分算力,着深深的影到了其他适用工作量证明机制的区块链应用。

股权权益证明算法PoS(proof of stake):

在PoS下,想参与到挖矿竞争的队伍中来就先要在区块链网络上投入一定量的代币。这部分代币当然还归自己所有,相当于是交给网络的押金,也可以看做是入股网络的股份。这就好像入股某公司一样,公司一般都会根据持股人的入股时间和股份含量分配给持股人一定的利息。

PoS中还加入了奖惩的办法,投入代币的人基本都是希望参与挖矿竞争的人,如果他们能按照系统的规定去运作新区块的产生,那么他们就会得到应有的奖励(也就是矿工费),而如果他们打包的区块在其他节点那里因无法通过验证而驳回,那么对应的矿工就会被施以惩罚(从持有的代币中扣费)。从利益的角度出发,投入代币的矿工一般都希望得到一定的奖励,而不是“赔本赚吆喝”,所以自然也就失去了破坏系统共识的出发点。

大体上,PoS的运作流程可以描述为以下五步:

(1)投入一定量的代币,成为候选矿工。

(2)每过一定的时间间隔,PoS在这些候选矿工里按照持币多少的顺序挑选一个,并赋予生成区块的权力。

(3)这个被挑选到的矿工对前面发生的交易进行打包以及工作量证明,然后将打包的区块广播出去,所有接收到的节点对区块进行验证。

(4)如果被挑选到的矿工没能顺利地产生区块(找到工作量证明的解时间过长或者拒绝为这些交易产生区块),那么PoS就在持币矿工里面再挑选下一个矿工赋予生成区块的权力,这样逐个挑选赋权,直到顺利打包出区块。

(5)PoS的过程就是以此类推,当然还是以目前最长的链为主区块链进行延长。

从这个运作流程来看,POS改进了不少PoW中原有的缺点,比如在PoW中众多的矿工参与挖矿算力竞争,只有竞争胜利的矿工所打包的区块才会被其他节点认可,而其他失败的矿工就会白白付出算力,到头来什么也得不到,先撇去时间浪费不说,单单是无用的算力付出就已经消耗掉了大量的能源。PoS不需要矿工们参加竞争,二是通过在候选矿工中选择一个并赋予打包权的方式确定由谁负责打包区块。POS中打包的区块同样包含工作量证明,这样,主链依旧是累积了最大挖矿难度的链,区块链的安全也依旧能够得以保障。

最后,在PoS共识算法还有一个“币龄”的概念。币龄是针对在区块链网络中持有代币的候选矿工而言的,和持有代币的利息计算有关。大概的意思就是每个币每天都会增加1个币龄,如果某位矿工成功挖矿一个区块,那么他所持有的代币币龄就会清空一次,同时清空计数器加1,如果清空计数器计数达到了365,那么这名候选矿工的持币就会到账一定的利息。

委托的股权权益证明算法DPoS:

从“委托的股权权益证明算法(delegated proof of stake,DPoS)”这个名字就可以看出,它其实和PoS共识算法存在着某种关联,其实DPoS共识算法就是以PoS共识算法为基础并进行了改良而得来的。

在PoS共识算法中,持有代币的候选矿工是整个算法体系中的股东,在PDoS共识算法中保留了这个股东的角色,同时又增加了受委托股权权益人的角色。所谓受委托股权权益人(又称见证人),即通过股东推选出来的一部分人,由他们对某一权益人挖出的区块进行见证。

见证的过程其实就是节点在接收到区块后的验证过程。一般在PoS以及PoW中新区快要经过后面几个区块的算力累计后才可被认为是无法修改的,这样做的弊端就是区块达成最终一致性的时间过长。DPoS共识算法中经过受委托股权权益人的见证后区块就已经达到了最终一致性,不再强制需要后续区块的算力累计。

DPoS共识算法对体系中的受委托股权权益人提出了如下三点要求。

(1)受委托股权权益人的数量有最低下限和最高上限,由具体的应用是实际情况而定,这些委托权益人由全部股东投票选出。

(2)为了快点对新区块进行见证,受委托股权权益人所处的节点要尽量避免出现故障的情况。

(3)受委托股权权益人还要做到尽可能的将新区块广播给更多的节点。

受委托股权权益人的劳动不会白白付出,每见证一个区块,他还会从股东那里分到一点奖励。DPoS共识算法在区块链技术应用中不仅很好地实现了去中心化,同时也借鉴了一些中心化应用系统中的关键优势。


图灵完备性:图灵完备性一词源于引入图灵机概念的数学家盖伦·图灵。图灵机是他提出的一种抽象数学计算模型,大概的想法是人能通过纸和笔进行的所有数学运算都可以进行抽象,然后交给一个可执行计算的机器代替人们进行这些数学运算。

在可计算性理论中,如果数据的一系列操作规则(如指令集、编程语言等)可以用来实现对图灵机的模拟,那么这些操作规则就是具有图灵完备性的。ETH相对于比特币是具有图灵完备性的,因为比特币仅仅能作为一种使用数字加密货币的收支系统,而ETH则支持通过自主编写智能合约的方式实现将区块链技术放到更多的应用场景中。

在Ethereum中还设计有一个特殊的概念-叔区块,这是与比特币有所不同的另一个方面。在比特币系统中,一个矿工挖矿成功后,他会将系统发放给挖矿者的奖励全部收入囊中,而其他参与挖矿的矿工则一无所获。Ethereum不会完全放弃挖矿失败的矿工所产生的废区块,这些废区块就是叔区块,叔区块也会根据一定的规则得到相应的奖励。

智能合约运行在Ethereum虚拟机(Ethereum Virtual Machine,EVM)中,也就是说,Ethereum虚拟机才是智能合约真正的运行环境。运行在Ethereum虚拟机中的智能合约在接受了来自外部的请求后,会根据已经编写在代码中的逻辑来执行这个交易,当然也可以调用其他合约。智能合约在运行后有可能会修改Ethereum节点对应账本的状态,一旦修改成功并被网络中大部分的节点达成共识,那么修改的将无法被伪造或篡改,这一点正是利用了区块链账本难以伪造数据的特性。

可以将Ethereum虚拟机看做是一个轻量级的虚拟机环境,类似与运行java语言的JVM(java virtual machine)。编写好的java程序要被编译为字节码才能直接被JVM读取,JVM的作用就是根据字节码执行相应的功能。同样的,Ethereum虚拟机直接读取的也是编写好的智能合约程序被编译为Ethereum虚拟机字节码(EVM byte code)之后的结果,编译的过程会由特定的编译器来完成。

Ethereum虚拟机不需要单独安装,它会随着Ethereum核心客户端的安装而被安装到计算机上,所有的Ethereum节点在运行核心客户端的时候同样也就运行了Ethereum虚拟机。

就像比特币地址一样,以太坊的账户也产生于一对由公钥和私钥组成的密钥,不过,以太坊是直接采用公钥的后20位来作为账户地址,这和比特币地址是经由公钥计算双哈希而得来的有所不同。根据账户是否保存有智能合约,可以将以太坊账户分为外部所有帐户类型(externally owned accounts,EOA)和合约账户(contracts accounts)类型两种。

以太坊中支持的交易可以分为三种类型。首先就是转账交易,以太坊提供了以太币,因此也支持从一个账户往另一个账户转账以太币的功能,完成转账交易需要提供发送方账户、接收方账户和数额。

部署智能合约也算是一种交易,既然以太坊中的交易指的是包含签名的数据包,那么部署智能合约就可以算作是一种只有合约部署者账户以及合约程序的二进制编码的一种交易。

最后一种交易当属执行智能合约中的方法,与部署智能合约类似,执行智能合约中的方法可以算作是一种只有合约执行者账户、合约中具体被调用的方法及传入到方法中的参数的一种交易。

在以太坊中,以太币除了可以用于收付款以及作为给矿工的矿工费奖励外,还可以用于购买燃料(gas)。使用燃料的情况主要出现于智能合约的部署及调用等和智能合约相关的操作中,在这些操作中使用Gas支付一定的费用。

除了“状态”这一概念外,以太坊还创新性地提出了“收据”这一概念。以太坊中的收据实际上就是在交易完成后进行的数据统计与记录,相当于交易的特征数据。

在以太坊中,Gas同以太币一样都是用于计量数字货币的数额。在比特币系统的设计中,为了鼓励矿工尽快将交易打包,会在发起交易时设置一定的交易费,交易费以一定数额的比特币的形式从用户钱包中扣除,并且交易费是可以选择性支付的,可以支付或不支付。以太坊借鉴了比特币中交易费的概念,并在此基础上进行了扩展。对于以太坊,无论是创建智能合约还是执行智能合约,这些操作都离不开一些小额费用的支付,也就是Gas燃料。

智能合约中的每一个交易都需要包含Gas上限和Gas单价这两个属性,这里的Gas单价由矿工决定,并且一般都不会高于以太坊客户端默认的Gas单价。如果用户提交的Gas单价低于矿工决定的Gas单价,矿工有权拒绝挖走这个交易,利用Gas的单价可以自己进行设置的属性,一些用户往往为了使自己的交易优先被打包而设置一个较高的Gas单价。

当某个账户在发起一个智能合约中的交易时,如果交易使用的Gas少于或等于智能合约中设定的Gas上限,则交易继续进行,但是如果Gas总数超过上限或者Gas总数大于账户的余额,则执行的过程会被中断并撤销所有更改(状态回滚)。

支付一定数额的Gas能起到很大的作用,当然不仅仅包括激励矿工尽快地将交易打包,除此之外,还可以限制智能合约在执行时的复杂程度。举例而言,如果在智能合约中含有一个非常复杂的逻辑,或者是含有多个无意义的重复逻辑乃至于含有一个恶意的死循环,这些都是一些不理想的存在,这时Gas的另一个作用就显现出来了,它能对这样的行为产生一个约束。

决定Gas量的因素是以太坊智能合约在执行时所需要的计算量,相当于是算力资源的消耗,这是以太坊对Gas的规定(只要某个步骤会消耗矿工的计算资源则该步骤就一定要有个明码标价。例如,发起一次普通装张交易会需要贡献的Gas数量是21000个,而执行一次SHA-256哈希计算会消耗20个Gas)。

需要注意的是,尽管在运行同一段智能合约时所使用的Gas数量是固定不变的,但是由于以太币兑换真实货币的汇率存在波动,所以汇率和Gas单价共同决定了执行一段智能合约时所需要付出的真实货币成本。

从以太坊的角度来看,Gas机制的引入非常有价值。首先,通过Gas,矿工能收获更多的创收,其次,Gas也鼓励了开发者尽量多做一些逻辑上的思考,然后编写出消耗算力资源更少的智能合约。

 梅克尔-帕特里夏树(merkle-Patricia tree)中节点很多,有值节点、枝干节点、叶子节点和指针节点,另外还有最终的根节点。值节点和枝干节点比较特殊,没有key-value键值对结构,但是叶子节点和指针节点却非常相似。区分叶子节点和指针节点最好的办法就是在经过十六进制编码的key前面加上适当的前缀。以太坊在叶子节点和指针节点的key之前加上一个十六进制的字符,用0或1代表指针节点(也可根据0或1区分长度的就行),用2或3代表叶子节点(同样根据2或3 区分长度的奇偶性)。

比特币系统相当于是从无到有地构建了一个区中心化的数字货币系统,需要开发团队构思网络的结构、节点之间采用的通信协议、交易和区块的数据包结构以及共识算法的原理等。

以太坊本身也是一个去中心化的应用,准确的来说是去中心化应用的开发平台和运行平台。以太坊和比特币系统虽然功能上有着很大的差别,但是本质上,以太坊还是借鉴了比特币系统最核心的设计,比如采用P2P的网络结构、矿工节点为争夺区块的打包权而彼此之间具有竞争关系、交易数据被打包成区块的形式在节点间传播,以及采用区块链账本的形式记录交易数据等。

作为区块链2.0架构的代表产物,以太坊不再像比特币系统那样只能实现固定的逻辑(如比特币系统就是实现了转账交易的功能),最突出的改进应当就是加入了对智能合约的支持,以及为了运行合约而增加的以太坊虚拟机。

智能合约和以太坊虚拟机正好可以作为外部成品DApp和以太坊进行数据层面交流的中阶层。智能合约可以实现DApp的主要逻辑,从而让DApp只要负责与用户的交互就好了。

成品智能合约是由需要运行该合约的对应节点保存在本地的区块链账本上,在运行时要被编译为以太坊虚拟机的字节码文件,通过以太坊虚拟机来运行。不但通过编写智能合约能够实现众筹合约、担保合约、融资租赁合约以及期货合约等各种形式的合约,而且合约也不局限于是金融类的合约还是非金融类的合约。

比特币系统具有全球范围内的网络。每个想尝试使用比特币系统的人都可以不限制地接入比特币网络中成为其中的一员。在区块链技术领域,这种完全对外开放、没有权限管理机制也不需要身份认证的网络类型可以称之为“公有链网络”或“公有链类型的网络”。在公有链网络中,不仅所有人可以人以参与使用,而且可以任意查看所有发生的数据,因此网络完全公开透明。

以太坊原生支持公有链网络,只要下载了能够接入网络的客户端软件以及创建好了账户,就能参与到网络的运行中。一些参与到网络中的节点可能运行着这份智能合约,而另一些节点可能运行这另一份智能合约,只要合约是运行在公有链网络中,产生的交易都将会被打包成区块并有节点保存到同一条区块链账本上,此外,所有的节点也都遵循着相同的共识机制。

公有链网络最明显的特征是节点数量不可控又不固定。在全网范围内,散布着众多的节点。用户能够控制的节点只有本身所代表的一个或数个节点而已。除了节点数量和状态不可控外,也无法保证某个或哪些节点一定是恶意节点。一些使用公有链网络的区块链应用都有明显的共同特征,例如,有大量的用户在参与以及应用数据对所有参与者公开等。

以太坊也支持私有链网络。私有链网络和公有链网络是一个相对的概念。顾名思义,私有链网络就是网络只针对特定组织内的成员开放而不是对所有想加入的人都开放。为了实现只允许特定的人加入,私有链网络中最明显的就是加入了权限管理和身份认证功能,因此,在私有链网络中节点的数量和状态就成为可控的了。

在以太坊中可以自行搭建私有链网络。一般搭建私有链网络的目的无非就是为了测试智能合约,其实以太坊本身也提供了两个测试网络进行智能合约的测试,但这两个测试网络都是公有链类型的网络。既然私有链网络中成员节点的数量和状态成为了可控的,那么也就意味着可以抛弃一些依靠算力竞争决定区块打包权的共识算法转而使用更节能的共识算法了,这些算法可以是PoS、DPoS、PBFT等。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
i3y35feTUhLs
作者其他文章 更多