主页 > imtoken钱包官网下载2.0 > 以太坊上的去中心化应用

以太坊上的去中心化应用

imtoken钱包官网下载2.0 2023-03-01 05:36:17

什么是以太坊

自2008年比特币出现以来,数字货币逐渐获得认可。 随着应用的扩展,人们发现比特币的设计只适用于虚拟场景。 由于非图灵就绪性的存在,缺乏保护状态的账户概念,以及POW挖矿机制带来的资源浪费和效率问题,在很多区块链应用场景中并不适用。 人们需要一个新的基于区块链的、具有图灵完备性、高效共识机制、支持更多应用场景的智能合约开发平台。 以太坊就是在这种情况下应运而生的。

以太坊的目的是整合和改进脚本、山寨币和链上元协议等概念,使开发人员能够创建基于任意共识、可扩展、标准化、图灵完备、易于开发和协作的应用程序。

以太坊是一个通用的全球区块链,可以管理金融和非金融类型应用程序的状态。 以太坊的新颖之处在于它神奇的计算机网络,它支持一种新型的软件应用程序,真正去中心化的应用程序。 将信任逻辑嵌入到小程序中,并在区块链上运行。 与比特币相比,以太坊建立了全新的密码学技术基础框架,在其上更易于开发应用,对轻客户端友好,同时让应用共享可生存的经济环境和可靠的区块链安全。

以太坊是一种平台和编程语言,包括数字货币以太币(Ether),以及用于构建和分发分布式应用程序的以太脚本(EtherScript)。

以太坊和众所周知的数字货币比特币有很多相似之处。 两者都是不可伪造的数字货币,并且都以去中心化的方式运作,以确保货币供应不受单一方控制。 以太坊的另一半重要特性是提供完整的编程语言环境,有时称为以太脚本。 计算机如何执行一段代码是没有歧义的。 在同样的条件下,一段代码总会按照既定的步骤执行。 这个特点正是人类现行的法律和契约所缺失的。 使用以太坊脚本,我们可以毫无歧义地制定合约。

从底层来看,以太坊也是一个基于密码学的多层开源技术协议。 它的不同功能模块在设计上完全集成,作为一个整体,它是一个创建和部署去中心化应用程序的综合平台。 同时,以太坊也是区块链和智能合约的完美结合。 它是智能合约的完整解决方案。 它被设计成一个通用的去中心化平台,拥有一整套可以扩展其功能的工具。 在P2P网络、加密、HttpClient等技术的支持下,实现了类似于比特币的区块链。 它通过工作量证明机制达成共识,由矿工挖矿,通过制定新的网络协议实现区块链的同步等操作。 与比特币不同的是,以太坊上可以任意编写智能合约,通过智能合约实现强大的功能,实现去中心化应用的开发。 部署在以太坊上的智能合约运行在以太坊专用的虚拟机上,通过以太坊虚拟机和RPC接口与底层区块链进行交互。

以太坊的整体架构

1. DApp、DAO

2. 智能合约

3. Solidity/Serpent/LLL,账户管理,区块链管理,验证模块

4.EVM、密码模块、共识模块、挖矿模块

5.网络管理、P2P网络、数据库、RPC服务器

以太坊技术

#以太坊核心概念

1.以太坊虚拟机

以太坊虚拟机 (EVM) 是以太坊中智能合约的运行时环境。 这是以太坊项目的又一重大创新。 有人说 EVM 是“在区块链之上”,而实际上它是由许多互连的计算机组成的。 任何人都可以上传程序并让它们自动执行,同时确保每个程序的当前和所有先前状态始终公开可见。 这些程序在区块链上运行,并严格按照 EVM 定义的方式继续执行。 因此任何人都可以为所有权、交易格式和状态转换功能创建业务逻辑。

2.账户

2019年以太坊减产时间_2023年以太坊退回pow_siteshilian.com 以太坊pow

以太坊中有两种类型的账户,它们共享相同的地址空间。 外部账户,由公私密钥对控制。 合约账户,此类账户由账户中存储的代码控制。 外部账户地址由公钥确定,合约账户地址由合约创建者的地址和合约创建时该地址发送的交易数量计算得出。 两种账户的唯一区别是外部账户没有代码,人们可以通过创建和签署交易从外部账户发送消息。 每当合约账户收到一条消息时,合约内部的代码就会被激活,允许它读取、写入内部存储、发送其他消息以及创建合约。

一个以太坊账户由 4 个部分组成:

1、随机数,用于确定每笔交易只能处理一次的柜台;

2、账户当前以太币余额;

3、账户的合约代码(如有);

4.账户存储(默认为空)。

3.新闻

以太坊消息传递与比特币交易有些相似,但两者之间有 3 个重要区别。

1)以太坊消息可以由外部实体或合约创建,而比特币交易只能在外部创建。

2) 以太坊消息可以选择性地包含数据。

3)如果以太坊消息的接收者是合约账户,可以选择响应,也就是说以太坊消息也包含了函数的概念。

4.交易

以太坊中的“交易”是指存储从外部账户发送的消息的签名数据包。 交易包含消息的接收者、识别发送者的签名、以太币中的帐户余额、要发送的数据以及称为 STARTGAS 和 GASPRICE 的两个值。 为了防止代码中的指数爆炸和无限循环,每个交易都需要对执行代码发出的计算步骤进行限制。 STARTGAS是通过需要支付的燃料来限制计算步数,GASPRICE是每一步计算需要支付给矿工的燃料价格。

5. 煤气

以太坊上的每笔交易都会收取一定数量的 Gas。 设置Gas的目的是为了限制交易执行所需的工作量,并为交易的执行付出代价。 当EVM执行一笔交易时,Gas会按照一定的规则逐渐消耗。 Gas价格由交易创建者设定

发送账户需要预付交易手续费=GASPRICE * Gas​​量。

siteshilian.com 以太坊pow_2023年以太坊退回pow_2019年以太坊减产时间

如果执行后还有Gas剩余,则将Gas返还给发送账户。 无论在哪里执行,一旦Gas耗尽,都会触发out-of-gas异常。 同时,将回滚当前调用框架所做的所有状态修改。

6. 存储、主存和栈

每个账户都有一个永久的内存区域,称为storage,以key-value的形式存在,key和value的长度都是256。在合约中,不能遍历账户的storage。 与主存和栈相比,storage的读操作开销比较大,storage的修改代价更大。 合约只能读写自己的存储。

第二个内存区域称为主内存。 每次调用消息时,合约执行都会有一个新的清除主内存。 主存可以按字节寻址,但读写的最小单位是32字节。 操作主存的开销随着主存的增长而变大。

EVM 不是基于寄存器的,而是基于堆栈的虚拟机。 所以所有的计算都在一个叫做栈的区域中进行。 堆栈最多有 1024 个元素,每个元素有 256 位。 对栈的访问仅限于栈顶,允许将栈顶的 16 个元素之一复制到栈顶,或者交换栈顶的 16 个元素之一。 所有其他操作只能获取栈顶的一个或几个元素,并将结果压入栈顶。 当然,你可以把栈中的元素放入存储器或主存中。 但是不可能只访问栈中指定深度的元素。 在此之前,必须从堆栈中删除指定深度以上的所有元素。

7.指令集

EVM 的指令集故意保持在最低限度,以避免可能导致共识问题的错误。 所有指令都对256位的基本数据单元进行操作,具有常用的算术、位、逻辑和比较运算,还可以进行条件跳转和无条件跳转。 此外,合约可以访问当前区块的相关属性,例如它的编号和时间戳。

8.消息调用

合约可以通过消息调用调用其他合约,或者发送以太币给非合约账户。 消息调用与交易非常相似,它们都有源、目的地、数据有效负载、以太币、gas 和返回数据。 实际上,每笔交易都可以看作是一次顶层的消息调用,一次会产生更多的消息调用。

合约可以决定剩余 Gas 的分配。 比如内部消息调用使用了多少Gas,或者预留了多少Gas。 如果在内部消息调用过程中发生了 out-of-gas 异常或其他异常,将通知合约并将错误代码压入堆栈。 这种情况只是内部消息调用的gas耗尽。 在solidity中,这种情况下发起调用的合约默认会触发一个人为的异常,这个异常会打印出调用栈。

如前所述,被调用合约(以及调用合约)将拥有新的主内存并可以访问调用有效负载。 呼叫有效载荷存储在称为呼叫数据的单独区域中。 调用执行后,返回的数据会存放在调用者预先分配的一块内存中。 调用层数限制为1024。所以对于更复杂的操作,我们应该使用循环而不是递归。

9.代码调用和库

以太坊中有一种特殊类型的消息调用,称为 calldata。 它与消息调用几乎完全相同,只是从目标地址加载的代码将在调用合约的上下文中运行。 这意味着合约可以在运行时从另一个地址动态加载代码。 存储、当前地址和余额都指向调用合约,只有代码是从被调用地址中获取的。 这允许 Solidity 实现“库”。 可复用的库代码可以应用于合约的存储,可以用来实现复杂的数据结构,让智能合约更加强大。

以太坊中的状态转换

以太坊的状态转换是指以太坊在一笔交易(TX)发生时,从一个正确的状态(S)到下一个正确的状态(S')的转换过程。 对于交易来说,为了防止代码的指数级爆炸和死循环,每个交易都需要限制执行代码导致的计算步数。 STARTGAS是limit,GASPRICE是矿工每一步计算需要支付的手续费价格。

以太坊的状态转移函数为APPLY(S,TX)---->S',可以定义如下:

siteshilian.com 以太坊pow_2023年以太坊退回pow_2019年以太坊减产时间

1) 检查交易格式是否正确,签名是否有效,以及随机数是否与发送方账户的随机数匹配。 如果不是,则返回错误。

2)计算交易手续费fee = STARTGAS * GASPRICE,由签名确定发送方地址。 从发送者的账户中减去交易费用并增加发送者的随机数。 如果账户余额不足,则返回错误。

3)设置初始值Gas = STARTGAS,根据交易的字节数减去一定量的gas值。

4) 将价值从发送者的账户转移到接收者的账户。 如果接收帐户尚不存在,请创建它。 如果收款账户是合约,则运行合约的代码,直到代码用完或者gas用完。

5)如果由于发送方账户手续费不足或代码执行燃料耗尽导致价值转移失败,将恢复原状,但仍需支付交易手续费,交易手续费将添加到矿工的账户。

6) 如果代码执行成功,剩余的gas将全部返还给发送者,消耗的gas将作为交易费用发送给矿工。

例如,假设一个合约有如下代码:

如果 ! contract.storage[msg.data[0]]:contract.storage[msg.data[0]]=msg.data[1]

应该注意的是,实际上合约代码是用底层的以太坊虚拟机 (EVM) 代码编写的。 上述合约是用高级语言Serpent编写的,可以编译成EVM代码。

假设一开始合约存储为空,发送了一笔价值为10 Ether,燃料为2000,燃料价格为0.001 Ether,两个数据字段值为[2,'CHARLIE']的交易后,流程状态转移函数如下:

1) 检查交易是否有效且格式正确。

2) 检查交易发送方是否至少有2000x0.001=2 ETH。 如果是这样,从发送者的账户中减去 2 个以太币。

3)初始设置Gas=20002023年以太坊退回pow,假设交易长度为170字节,每字节费用为5,减去850,所以还剩1150。

4) 从发送者账户中减去10 ETH,向合约账户中添加10 ETH。

5) 运行代码。 在这个合约中,运行代码很简单:它检查合约内存索引 2 是否被使用,注意到它没有被使用,并将它的值设置为 CHARLIE。 假设此人消耗了 187 单位燃料,则剩余燃料为 1150-187 = 963。

6) 向发送者账户添加963x0.001=0.963 ETH,返回最终状态。

2023年以太坊退回pow_siteshilian.com 以太坊pow_2019年以太坊减产时间

如果没有合约接收交易,则所有交易手续费=GASPRICE x 交易字节长度,交易数据与交易手续费无关。

由合约发起的消息可以为它们产生的计算分配气体限制,如果子计算用完气体,它只会恢复到发送消息时的状态。 因此,就像交易一样,合约也可以通过对其生成的计算设置严格限制来保护其计算资源。

以太坊客户端

以 4 种语言编写的以太坊客户端

1. Go语言实现的客户端Geth;

2. C++实现的客户端Eth;

3. Python实现的客户端Pyethapp;

4.客户端段EthereumJ用java实现。

以太坊智能合约

#智能合约

以太坊是一个内置了图灵完备编程语言的区块链。通过建立一个抽象的基础层,任何人都可以创建合约和去中心化应用程序,并设置他们自由定义的所有权规则、交易方式和状态转换函数。 搭建一个token的主框架只需两行代码即可实现,其他协议如货币、信誉系统等不到20行代码即可实现。 智能合约就像一个加密的盒子,里面装着价值,只有在以太坊平台上满足一定的条件才能打开,而且因为图灵完备、价值感知、区块链感知)和记录多种状态,比智能合约强大得多比特币脚本可以提供。

#开发语言

以太坊的软件开发语言是其最大的特点之一,因为编程区块链是一个主要目标。 以太坊有 4 种专用语言:Serpent(受 Python 启发)、Solidity(受 JavaScript 启发)、Mutant(受 Go 启发)和 LLL(受 Lisp 启发),所有这些语言都是为面向合约的编程而设计的。

Serpent 被设计得尽可能简洁明了,结合了低级语言的效率优势和编程风格的易用性。

Solidity 是以太坊的首选语言。 它内置了 Serpent 的所有功能,但语法类似于 JavaScript。 Solidity充分利用了现有数百万程序已经掌握JavaScript的优势,降低了学习门槛,易于掌握和使用。

以太坊区块链的另一个关键特征是它的“图灵完备性”。 保证以太坊可以解决所有计算机问题。 更确切地说,它是“半”图灵完备的,因为它通过对计算量设置上限来避免完全图灵完备语言的不停问题。 另外,以太坊有账户的概念,这使得在交易可视化和账户状态查询方面具有实时性。

2019年以太坊减产时间_siteshilian.com 以太坊pow_2023年以太坊退回pow

在比特币上,由于只有UTXO,没有账户概念,我们需要导入区块链数据库,分析所有交易,查询交易,才能提取出某个用户在区块链上的交易状态。 另一方面,以太坊可以根据实时区块链上的一个地址实时查看当前账户状态和交易状态。

# 代码执行

以太坊合约的代码是用一种基于堆栈的低级字节码语言编写的,称为“以太坊虚拟机代码”或“EVM 代码”。 该代码由一系列字节组成,每个字节代表一个操作。

一般来说,代码执行是一个死循环,程序计数器每加一(初始值为零)就执行一次操作,直到代码执行完或遇到错误、STOP或RETURN指令。 操作可以访问3中存放数据的空间:

1.栈,一种后进先出的数据存储方式,出栈的基本单位是32位;

2.内存,可无限扩展的字节队列'

3. 合约长期存储2023年以太坊退回pow,key/value存储,key和value都是32字节大小。

与计算完成时重置的堆栈和内存不同,存储内容会保留很长时间。

代码可以像块头数据一样访问已发送和已接收消息中的值、数据,并且代码可以返回数据的字节队列作为输出。 EVM 代码的正式执行模型非常简单。 以太坊虚拟机运行时,其完整的计算机状态可以通过元组(block_state、transaction、message、code、memory、stack、pc、gas)来定义,其中block_state是一个全局的,包含了所有的账户余额和存储状态。 每条指令如何影响元组是通过在每轮执行中调出代码的 pc(程序计数器)字节来定义的。 例如,ADD 弹出 2 个元素并将它们的总和压入堆栈,将 Gas 减 1 并增加 pc; stack 弹出栈顶的两个元素,将第二个元素按第一个元素Contract存储位置定义的进出,同时减少Gas值最多200,pc加1。

以太坊上的去中心化应用

#什么是DApp

DApp 由智能合约和客户端代码组成。 智能合约就像加密的价值盒子。 它只有在满足一定条件的情况下才能打开,它封装了一些逻辑、规则、处理步骤或双方之间的协议。

从架构的角度来看,DApp 与传统的 Web 应用程序非常相似。 主要区别在于:在传统的网络应用程序中,客户端由 JavaScript 代码组成,由用户在自己的浏览器中执行; 服务器端代码由主机运行。 但在DApp中,其智能逻辑运行在区块链上,客户端代码运行在专门的浏览器Mist中。

#应用实例

Augur:( ) 一个去中心化的预测系统。

Maker:()一个金融去中心化的自治组织。

WeiFund:正在开发中的去中心化众筹平台。

Boardroom:一个正在开发中的 DAO 管理平台。

. . . . . . . . . . . . . .