一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。
区块链-以太坊白皮书一:
了解一个项目最普遍的渠道来自白皮书,这里大致介绍下以太坊的白皮书。
以太坊的目的是基于脚本、竞争币和链上元协议(on-chain meta-protocol)概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、特性完备的、易于开发的和协同的应用。以太坊通过建立终极的抽象的基础层-内置有图灵完备编程语言的区块链-使得任何人都能够创建合约和去中心化应用并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。域名币的主体框架只需要两行代码就可以实现,诸如货币和信誉系统等其它协议只需要不到二十行代码就可以实现。智能合约-包含价值而且只有满足某些条件才能打开的加密箱子-也能在我们的平台上创建,并且因为图灵完备性、价值知晓(value-awareness)、区块链知晓(blockchain-awareness)和多状态所增加的力量而比比特币脚本所能提供的智能合约强大得多。
以太坊参考bitcoin的各种优劣,优化脚本,支持图灵完备语言,以太坊称为一个平台,类似我们理解的Windows操作系统,各种应用基于平台开发发布。之前说到过,bitcoin类似是一个银行交易系统,那么以太坊就是一个银行核心系统,各种外围系统围绕核心开发实现。
以太坊的账户比bitcoin复杂,外部账户和合约账户,每个账户由20字节的地址来表示。
以太坊中的消息类似bitcoin中的交易,具体有三点不同之处:
1.以太坊的消息可以由外部实体或者合约创建,然而比特币的交易只能从外部创建。
2.以太坊消息可以选择包含数据。
3.如果以太坊消息的接受者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念。
交易之前已经解释过,那么具体的交易理解为,存储从外部账户发出消息的签名数据包,包含了:
1.消息的接收者。
2.用于确认发送者签名。
3.账户余额,startgas、gasprice值(防止代码出现恶意行为或者无限循环,startgas是限制、gasprice是每一步计算步骤的支付矿工给用,一旦gas用尽,恢复初始状态,已经支付的交易费用不回收,如有剩余gas则返回发送者。)
4.创建合约有单独的交易类型和消息类型,那么合约地址根据账号随机数和交易数据hash计算后得出。
消息机制使得财产合约和外部账户有相同权利,合约可充当各类角色。白皮书中有一个例子:
用户可以使去中心化组织(一个合约)的一个成员成为一个中介账户(另一个合约),为一个偏执的使用定制的基于量子证明的兰波特签名(第三个合约)的个人和一个自身使用由五个私钥保证安全的账户(第四个合约)的共同签名实体提供居间服务。以太坊平台的强大之处在于去中心化的组织和代理合约不需要关心合约的每一参与方是什么类型的账户。
以太坊的函数转换:
转换函数:APPLY(S,TX) -> S',具体定义如下:(和之前的文章重复)
1.检查交易的格式是否正确(即有正确数值)、签名是否有效和随机数是否与发送者账户的随机数匹配。如否,返回错误。
2.计算交易费用:fee=STARTGAS * GASPRICE,并从签名中确定发送者的地址。从发送者的账户中减去交易费用和增加发送者的随机数。如果账户余额不足,返回错误。
3.设定初值GAS = STARTGAS,并根据交易中的字节数减去一定量的瓦斯值。
4.从发送者的账户转移价值到接收者账户。如果接收账户还不存在,创建此账户。如果接收账户是一个合约,运行合约的代码,直到代码运行结束或者瓦斯用完。
5.如果因为发送者账户没有足够的钱或者代码执行耗尽瓦斯导致价值转移失败,恢复原来的状态,但是还需要支付交易费用,交易费用加至矿工账户。
6.否则,将所有剩余的瓦斯归还给发送者,消耗掉的瓦斯作为交易费用发送给矿工。
转换函数处理过程:
1.检查交易是否有效、格式是否正确。
2.检查交易发送者至少有2000*0.001=2个以太币。如果有,从发送者账户中减去2个以太币。
3.初始设定gas=2000,假设交易长为170字节,每字节的费用是5,减去850,所以还剩1150。
4.从发送者账户减去10个以太币,为合约账户增加10个以太币。
5.运行代码。在这个合约中,运行代码很简单:它检查合约存储器索引为2处是否已使用,注意到它未被使用,然后将其值置为CHARLIE。假设这消耗了187单位的瓦斯,于是剩余的瓦斯为1150 - 187 = 963。
6. 向发送者的账户增加963*0.001=0.963个以太币,返回最终状态。 如果没有合约接收交易,那么所有的交易费用就等于GASPRICE乘以交易的字节长度,交易的数据就与交易费用无关了。另外,需要注意的是,合约发起的消息可以对它们产生的计算分配瓦斯限额,如果子计算的瓦斯用完了,它只恢复到消息发出时的状态。因此,就像交易一样,合约也可以通过对它产生的子计算设置严格的限制,保护它们的计算资源。
本文由币乎(bihu.com)优质内容计划支持。
之前写了点东西,随着对区块链的理解,发现有些理解的并不透,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:
领取专属 10元无门槛券
私享最新 技术干货