055-79000-下一代智能合同和分散应用平台
首先开篇部分讲一下2009年年中我们村全球社会化实验比特币的一些问题。例如,比特币没有内在价值,但它是区块链领域的一个创举。那么,以太坊要做什么?它计划提供一种在区块链使用的图灵完整编程语言,也就是我们现在所知的智能合约。
第1章比特币的基本概念
2009年,中本聪首次实施分布式货币。它通过公钥加密来管理所有权,并通过公式算法来跟踪谁拥有货币,也就是我们所知道的工作量证明。工作量证明解决了两个问题。首先,他解决了网络中节点同意更新比特币账本的问题。第二,他允许自由进入共识进程机制,并解决了谁将影响共识的政治问题。但是有一个问题,节点的权重和它的计算能力成正比。
比特币的状态转换系统
实际上,比特币的账本可以认为是一个状态转移系统,其中有一个由比特币现有的所有所有权状态组成的“状态”和一个状态转移函数。“状态”是生成的和未使用的货币的集合(未使用的交易输出或UTXO)。每个UTXO都有一个名称和一个所有者,这实质上是一个加密公钥。一个事务包含一个或多个输入,每个输入包含对现有UTXO的引用和由与所有者地址相关的私钥生成的加密签名,以及一个或多个输出,每个输出都被添加到新的UTXO。
采矿
比特币的分布式共识要求网络中的节点不断尝试生成“块”交易包。网络每10分钟生成一个块,每个块都有一个时间戳、一个随机数、对前一个块的引用以及自上次生成以来所有交易的列表。
这里不详细介绍挖矿的概念。可以去查比特币白皮书。或者阅读中本聪的比特币白皮书。
然后是恶意攻击。因为比特币是密码安全的,所以攻击会针对系统中没有密码保护的部分:交易序列。其实是双花款。
1.向商家发送比特币并购买一些产品(例如NFT或数字收藏),
2:等待货物送达3:创建另一个交易,将刚才的比特币发送到另一个账户。
4.尝试说服网络,这是第一笔交易,而不是发送给自己的交易。
正常的工作顺序应该是,例如,发生1个事务。几分钟后,挖掘器将事务包含在一个块中,例如,块27,000。1小时后,大约产生5个新区块,都指向这个交易,然后商家会发货。但是如果攻击者发起攻击,他必须首先生成另一个版本的“27000”块,然后将父块指向26999,然后他必须生成一个新的27001-27005指向自己的27000块。因为比特币的规则是默认最新的块是最长的一个,所以攻击者希望比其他块更长,所以他要有比其他网络更强的计算能力(
默克尔树
因为比特币是以多级数据结构存储的,所以块的“hash”其实只是块头的hash,包含时间戳、随机数、上一个块hash、Merkle数的数据结构的根hash。Merkle数是一棵二叉树,由一组根节点组成,每个节点是两个子节点的散列,最后一个是单个根节点,代表树的顶部。如果一个恶意用户想改变虚假事务来替换Merkle树的底部,就会引起上面的节点改变,最后改变整个根,所以可以很容易地判断他是否是有效的事务。
目前由于Merkle tree协议,前一个节点存储了所有的账簿,到2014年已经占用了15GB的磁盘空间,于是出现了一种“轻节点”,即只存储头块和它们相关交易的分支。
其他区块链的应用
Namecoin创建于2010年,名为分布式名称注册数据库。比如人家用“张三”存储账号,别人再用张三这个名字注册就不被识别了,因为他的方法是先档模式。
Colorcoin,这是一种允许人们在比特币链上创建自己的数字货币的协议。人们创造的数字货币是用一种不同的颜色来区分的(实际上它被命名为一种颜色的UTXO)。
以上两个案例说明了在比特币网络上创建共识协议的方式。第一种有一个缺点,就是要建立一个独立的网络,比较困难。第二个是应用太小,无法保证自身安全,因为神V认为分布式共识技术的应用会遵循幂律分布。
脚本
虽然可以在比特币上实现一个简单的脚本,但它仍然存在以下缺陷:
1.缺乏图灵完备性。它不支持所有计算。缺少的是类循环。
2.价值盲0UTXO无法精细控制可撤销金额。
3.状态缺失——UTXO只有两种状态:用完和没用完。
4.区块链盲,UTXO对区块链数据(随机数,时间戳,区块哈希)视而不见。
综上所述,以太坊就是要构建一个新的区块链,可以用脚本来构建元协议,而且协议不限,脚本简单,标准化。
以太坊
以太坊的区块链网络本质上是通过构建终极抽象基础层来实现的:一种内置图灵的完整编程语言,允许任何人编写智能合约和分布式计算程序。这些程序可以为所有权、交易格式和状态转换功能制定自己的规则。
一台房账户
在以太坊中,状态是由“账户”组成的,每个账户都有一个20字节的地址,状态转换是账户之间的值和信息的直接传递。包含4个字段:
1,用于确定每笔交易只能处理一次的计算机的随机数。
2.对账
3.客户的合同代码
4.账户的存储
“以太”是以太坊内部主要的加密燃料,用来支付交易费用。账户分为两种类型,由私钥控制的外部账户和由合同代码控制的合同账户。所有外部账户都没有代码,人们从所有外部账户发送消息来创建和签署交易;在契约账户中,契约账户每收到一条消息,代码就被激活,依次允许内部存储读写、发送其他消息或创建契约。
和消息事务。以太坊中的“交易”一词是指所有外部账户发送的带有消息的签名数据包。交易内容包括:1 .邮件的收件人
2.能够证明发送者身份的签名
3.一定数量的以太币从发送者转移到接收者
4.可选数据字段。
5.可选数据字段。
6.tartgas的值表示执行事务时可以运行的最大计算步骤数。
7.GASPRICE值,表示发送方为每个计算步骤支付的费用。对于6和7,主要是为了防止代码中出现意外和恶意的无限循环,因为每一步都需要耗费气费。
新闻
合同能够向其他合同发送“消息”。消息是从未序列化过的虚拟对象,只存在于以太坊执行环境中。邮件包含:
1.消息的发送者
2.邮件的收件人
3.与消息一起传送的以太坊号
4.可选数据字段
5.起始气体值
事实上,消息是一个事务,它是由契约而不是外部参与者产生的。一条消息将使接收者的帐户运行它的代码。
以太坊的状态转移函数
1.检查交易是否构造良好(例如,它具有正确的值),签名是否正确,随机数是否与发送方帐户的随机数匹配。否则,将返回一个错误。
2.通过STARTGAS * GASPRICE计算交易成本,确定发生地址来自签名,从发件人账户中减去成本,同时增加发件人随机数。如果没有足够的余额,将返回一个错误。
3.初始化GAS=STARTGAS,并在事务中支付确定的每字节GAS数。
4.将交易金额从汇款人账户转移到收款人账户。如果收件人的帐户不存在,请创建一个。如果接收方的帐户是合同,则运行的合同代码要么完成,要么用完所有的汽油。
5.如果转账失败是因为发送方钱不够,或者密码没气了,恢复除已付费用外的所有状态变化,将费用支付到矿工账户。
6.反之,将剩余费用改由发送方承担,将消耗的费用支付给矿工。
比如这一段就很重要。明白了就明白了以太坊的交易逻辑。
假设合约的存储从空开始,发送交易:10以太坊,2000gas,0.001 gasprice,64字节,其中字节0-31代表数字2,字节32-63代表字符串CHARLIE。
1.检查交易是否有效且组织良好。
2.检查交易发送方至少有2000 * 0.001=2以太币,从其账户中扣除2以太币。
3.初始gas=2000,假设事务为170字节,每字节5gas,减去850gas,剩下1150 gas。
4.从寄件人账户减去10以太币,加到合约账户。
5.检查是否使用了合约账户的存储索引2,如果没有,则将存储索引2的数据设置为CHARLIE。假设花了187气,剩下的就是1150-187=963气。
6.将963 * 0.0001=0.963以太币返回发送方账户,同时返回结果状态。
执行代码
以太坊契约中的代码是用低级的基于栈的字节码编写的,称为“EVM代码”。它由一些列字节组成,每个字节代表一个操作,然后是程序计数器1。知道代码循环的结束或错误或停止。这些操作可以访问三种类型的数据存储:
1.堆栈,后进先出容器,数据在其中压入和压出。
2.内存,一个无限扩展的字节数组
3.契约的长期存储是一种键值存储,不同于计算后的堆栈和内存重置,会保存很长时间。
EVM执行时,其完整的计算状态可以由元组(block_state,transaction,message,code,memory,stack,pc,gas)定义,其中block_state表示账户的全局状态,包含余额和存储。在每一轮执行之前,可以通过指令找到所有元组的定义。然后,在运行时,您可以更改元组的定义,将gas减少1,将PC th增加1。
区块链和采矿
以太坊的区块链类似于比特币,但也有区别。以太坊的区块链不仅包含交易列表和最新状态副本,还包含方块数和难度。
他的数据结构用的是Patricia树而不是Merkle树,比比特币效率高一点,节省5-20倍的空间。
app应用
一般来说,有三种应用。现在我们知道以太坊有成千上万的应用。
第一类是金融程序,包括电子货币、金融衍生品、对冲合同、储蓄钱包、雇佣合同等等。
第二种半金融应用
第三种网上竞价、分布式治理等应用。
令牌系统:这里就不多说了。我什么都知道,但是我需要补充一点,以太坊的好处是可以用货币支付交易费用,因为所有的应用都可以直接使用以太坊进行交易。这就使得以太坊有了价值,也就是说在它上面运行的应用越多,以太坊的价值就越大。
示例应用程序
1.金融衍生品和币值稳定的货币。他们太多了。搜一把。
2.前段时间流行的身份和信誉系统,比如DNS和域名系统。
3.分散式文件存储。
4.分散的自治组织、人民等。
5.商店钱包,metamask。
6.作物保险
7.分散数据反馈,谢林碧
8.智能多重签名托管
9.云计算
10.点对点赌博
1.预测市场
12.连锁起来集中市场,uni等。
总结:
以太坊最初的想法是加密货币的升级版,通过高度的编程语言提供一些高级功能,而且是图灵完全的,可以支持任何类型的应用和合约。相信以太坊将非常适合作为未来大量金融和非金融协议的基础层。