比特币
POW共识
即工作量证明:POW共识是按劳分配;即谁付出的算力越多获得记账权的可能性就越大; 具体表现为: 区块链网络中的所有节点竞争记账,谁先解决出工作量谜题就可以获取记账权(写入区块到区块链的权利)该难题为:找到一个nonce值使得新区块头的哈希值小于某个特定值。最先计算出的节点获得记账权,将上一个区块到现在的所有交易写入到区块链中。比特币出块的速度是被设计为平均每十分钟出一个块所以,计算难度会被动态调整。(每出2016个区块全网就会统计时间,来调整难度) 奖励机制:每出一个区块记账人会获得比特币的奖励(出新块的奖励)除此记账者之外还有区块链上的交易费作为奖励激励。比特币的奖励机制为每出21000块出新块的奖励减半即差不多四年左右出新块的奖励就减半。
比特币交易
UTXO模型
比特币交易基于UTXO模型(未花费的交易输出)。UTXO是包含了比特币,或者说比特币放在UTXO中,一般交易者都有一个UTXO集,每个UTXO里面包含的比特币数量不一定一样。由此比特币交易是一种找零机制。当交易时发送者会发送一个价值大于交易金额的UTXO(没有大额的UTXO的话可以凑集几个小额的UTXO来交易),然后输出分为两部分一个是交易接受者一个是自己。所以UTXO消耗以后产生新的数额不定的UTXO。 为保障交易的安全可靠,交易时有签名认证机制的锁定脚本和解锁脚本。当发起一个交易时发送交易信息大体内容如图 然后下面分为in和out两块 in主要说明发送者的信息即(这个UTXO是从哪来的) 主要包含 引用该UTXO的交易ID(txid) 引用UTXO交易的输出中的序号(vout) 然后就是解锁脚本scriptSig:里面包含了发送者的私钥签名和公钥 out主要说明要生成几个UTXO发送给谁 value:比特币的数量 n:UTXO的序号从0开始 然后就是锁定脚本:包含命令(OP_DUP)和接受者的公钥哈希
每次交易使用的UTXO都需要发送者用包含自己私钥签名和公钥的解锁脚本来证明这个UTXO是发送者拥有的,即确定发送者的身份
签名的验证
通过压栈的方式首先将解锁脚本来解锁对应的锁定脚本 1,首先压入解锁脚本中的, 2,再压公钥PubK(A), 3,然后压入对应的锁脚本首先是OP_DUP这条命令是将PubK(A)复制一次放在栈顶, 4,再压入进行哈希的命令OP_HASH160将栈顶的PubK(A)进行哈希计算得到公钥hash, 5,然后再压入锁定脚本中的公钥hash 6,再压入检查是否相同的命令OP_EQUALVERIFY,相同的话就移除上面两个元素 7,然后现在栈内还剩下PubK(A)然后压入最后一条检查签名的命令 OP_CHECKSIG
以太坊
POS共识
权益证明与POW不同POS是根据节点的质押的保证金(代币,资产,名声等有价值属性的东西)来竞选记账权,价值越高获得记账权的概率越大即股权机制,收益主要为交易费,和质押资产的利息,股权机制下有一个名词币龄。当对赌一个新的区块,在这个区块成功产生后抵押资本中每个币每天可以产生一个币龄在下一个区块出现时被清零每清零365个币龄获得0.05个币的利息(年利率为5%时) PoS的运作流程有以下5步: 第一步:投入一定量代币,成为候选矿工; 第二步:一定时间内,PoS就会在按照持币多少的顺序选择一个矿工,并给予其生成区块的权利; 第三步:被选中的矿工需要将前面发生的交易进行和工作量证明进行打包放入区块中,随后将区块广播出去,所有接收到区块的节点对区块进行验证; 第四步:如果被挑选的矿工不能顺利产生区块,PoS则会在候选矿工中再挑选一个并给予其生成区块的权力,以此类推,逐个挑选,直到能顺利产生区块; 第五步:PoS通过上述的方法进行运作,并以最长链作为主区块链进行延长。相比于PoW,PoS的一个好处就是,矿工们不用花大量的算力(人力、财力、物力)去竞争挖矿,而是通过PoS中的选择机制来赋予挖矿权力,这使得矿工们不会出现在PoW中因挖不到矿而损失了大量的人力、财力、物力。在PoS中,仍保留了工作量证明,因此主链仍然是累计了最大挖矿难度的链,区块链的安全也因此得以保障。
以太坊账户体系
与比特币不同,以太坊采用的是基于账户的模型,与现实中银行账户相似。系统中显示记录每个账户以太币的数量,转账是否合法只需要查看转账者账户中以太币是否足够即可,同时也不需要每次全部转账。以太坊的每个帐户都有一个与它关联的状态和一个20字节的地址。以太坊的地址是一个160位比特的标识符,用于识别帐户。
以太坊账户类型
以太坊包含两种账户类型:外部账户和合约账户。外部账户由私人密钥控制,没有与之相关的代码。合约账户由其合约代码控制,并具有与其相关的代码。 外部账户可以通过创建和使用其私人密钥签署一项交易,向其他外部账户或其他合约账户发送消息。两个外部账户之间的消息只是一种价值转移。但从一个外部帐户到一个合约账户的消息会激活合约账户的代码,使它能够执行各种操作(例如转移代币、写入内存、生成新的代币、执行一些计算、创建新合约等)。与外部账户不同,合约账户不能自行启动新的交易。相反,合约账户只能根据它们收到的其他交易(从外部账户或从另一个合约账户)进行交易。
账户状态
(1)nonce 如果帐户是一个外部帐户,这个数字代表从帐户地址发送的交易数量。如果帐户是一个合约帐户,nonce是帐户创建的合约数量。 (2)balance 这个地址拥有的Wei(以太坊货币单位)数量,每个以太币有1e+18 Wei。 (3)storageRoot 一个Merkle Patricia树根节点的哈希,它对帐户的存储内容的哈希值进行编码,并默认为空。 (4)codeHash EVM(以太坊虚拟机)的哈希值代码。对于合约帐户,这是一个被哈希后并存储为codeHash的代码。对于外部帐户,codeHash字段是空字符串的哈希。
交易与消息
外部账号向其他账户发送一个签名的数据包,每一笔交易都会改变以太坊的状态,都将被序列化,经矿工验证广播后记入区块链,因此,交易是异步的,可以即时返回的值只有transaction hash。交易可以分为创建合约和传递消息两类。一个交易的完成可能会需要触发多条消息及消息调用。 外部账户之间 交易包含: 1,交易的收款人 2,可以证明这是付款人发送给收款人的交易签名 3,value交易的数量(单位wei)与以太币的进制为1*10e18 4,gaslimit交易时允许的最大消耗量 5,gasprice,交易发送者指定的单位gas的价格(用以太币计算) 外部账号和合约账户间 两个账户间传递的数据和值(以太币)。不一定会改变以太坊的状态,只存在于以太坊执行环境的虚拟对象,不会被序列化也不会被记入区块链,消息是同步的,可以即时得到返回值。消息包含: (1)消息的发送者(隐式的) (2)消息的接收者 (3)VALUE,随消息传递到合约地址的以太币数量(wei) (4)可选数据字段,作为合约的输入 (5)STARTGAS,用来限制这个消息触发的代码执行能消耗的最大gas数量 消息和交易的关系 交易和消息是相互重合的而不是包含关系 当不使用合约账户来直接转账的话就只属于交易,不属于消息;而当通过外部账户调用合约代码往一个账户转账时就既属于消息与又属于交易; 当外部账户调用合约账户来创建合约时就只属于消息;
智能合约
智能合约是分布式的程序脚本,类似自动化的程序合同,在符合设置的条件后触发自动执行。其主要优势包括在处理代码逻辑时的更高效率,归功于它能够采用完全自动化的流程,不需要任何人为参与,只要满足智能合约代码所列出的要求即可。节省时间,降低成本,安全可信,交易准确,能排除任何第三方干扰,进一步增强了网络的去中心化。缺点就是缺乏法律监管,人为的代码程序错误和实施有困难。
合约创建
当外部账户发起交易触发合约账户而消息调用指定目标为以太坊空集时就会创建合约,合约的地址的创建者地址和该地址的交易数即nonce来计算得到。发起者支付gas燃料,由挖出该交易区块的矿工所收取。创建合约时每个操作会消耗燃料,当创建期间燃料耗尽所有创建操作会回滚,之前消耗的的gas不会返回。(外部账户直接触发合约账户) 另外就合约账户也能创建合约具体表现为,外部账户触发合约账户来创建合约此时合约账户是作为消息的发送者新合约地址由合约地址的nonce,期间gas由外部账户所支付。(外部账户通过触发合约账户做消息调用来触发另一个合约账户创建合约) 合约调用 外部账户发消息触发合约账户 合约账户被触发了来发消息调用另一个地址的合约账户
代币
在以太坊系统中,存在作为基础货币的Ether(以太),以及同样可以作为货币使用的Token(代币)。以太坊与其他加密货币的主要不同在于,以太坊不是单纯的货币,而是一个环境/平台。在这个平台上,任何人都可以利用区块链的技术,通过去中心化应用)。 如果把以太坊理解成互联网,DAPPS则是在上面运行的网页。DAPPS是去中心化的,意味着它不属于某个人,而是属于一群人。DAPPS发布的方式通常是采用被称为ICO的众筹方式。简单来说,你需要用你的以太来购买相应DAPP的一些tokens。 token分为两类: 一种是Usage-token:作为一个DAPP的原生货币支付该币获得对应DAPP的服务 另外一种是work-token:这是一种股权机制证明,有该权益可以有投票权 ERC-20 ERC-20标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。任何ERC-20代币都能立即兼容以太坊钱包(几乎所有支持以太币的钱包,包括Jaxx、MEW、imToken等),由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着在很多情况下,这些代币都是可以立即进行交易的。简单理解就是,ERC20是开发者在自己的tokens中必须采用的一套具体的公式/方法,从而确保不同DAPP的token与ERC20标准兼容。 ERC-20标准规定了各个代币的基本功能,非常方便第三方使用,在开发人员的编程下,5分钟就可以发行一个ERC-20代币。因为它可以快速发币,而且使用又方便,因此空投币和空气币基本上就是利用ERC-20标准开发的。基于ERC-20标准开发的同种代币价值都是相同的,它们可以进行互换。ERC-20代币就类似于人民币,你的100元和我的100元是没有区别的,价值都是100元,并且这两张100元可以进行互换。有了这套标准,相当于全世界都使用人民币,而不用去别的国家还要计算汇率换成别的货币。想象下,每个Dapp都有不同格式的币,那对于这些应用的交互简直是种灾难。
波场
DPOS共识
DPOS属一种投票选举机制,当你拥有一个TRX波场币时你就有一个选票,然后通过投票来选定记账人,选取票数最高的27人来轮流记账,波场出块速度是3秒一块,每六个小时为一个出块轮在出块轮最后六秒不出快作为一个维护期来清理选票决定下一个出块轮的出块顺序。 产块机制 每个块都会将上一块的hash作为父hash,然后将本块数据用自己的私钥签名填入区块中,同时被填入区块的还有记账人的地址,区块高度,区块生成的时刻等数据。通过每个区块保存了上个区块hash值的方式,从而在逻辑上将区块相互关联了起来,最后组成了一条链的结构。 激励机制 每一个新块会提供32个波场币的奖励给到记账人(包括27个记账人和一百个几张候选人总共是127人) 具体分配数量由得票的数量比例所决定。
|