主页 > imtokenapp > 以太坊智能合约的关键概念和设计要点

以太坊智能合约的关键概念和设计要点

imtokenapp 2023-11-16 05:10:34

前言:本文是学习笔记的第四篇,重点分析智能合约的技术构成和设计要点。 一些基本概念不会基于前面章节的内容进行解释,但会加强和扩展与智能合约开发相关的重要概念。 解释。 同时,还将演示在实际环境中创建一个简单的智能合约,包括框架设计和代码编写、本地部署、测试等完整的实战操作。

一、智能合约的定义

智能合约可以简单地看作是一种计算机协议或程序,部署后无需人为干预即可自行执行、自行验证。 具有以下基本属性:

1)合约的执行会产生可验证的证据,保证合约运行的有效性

2) 合约部署前,其相关条款和执行逻辑已经制定,一旦部署,不可更改

3) 合约通常会提供一个用户界面供用户与合约进行交互,这些交互遵循定制化的逻辑

同时,合约有很多优点以太坊有智能账户吗,其中被认为是最重要的推广: 1)去中心化的权力,合约对的监督和仲裁都由系统自己完成; 2)执行效率对应较低的运营成本,多方交互成本和违约成本,以及人员成本都会降低。

2. 强化以太坊智能合约的关键概念

(一)合约账户

前面提到,以太坊区块链中存在账户的概念:所有外部账户和合约账户,所有外部账户创建合约账户,完成智能合约的部署。

外部账户由一对私钥和公钥标识。 每个账户都有一个地址,也就是公钥的最后20个字节。 每个账户对的地址和私钥被编码成一个“密钥文件”并被加密。 私钥用于对外部账户的所有交易进行签名,加密使用的密钥是创建账户时输入的密码。

sitejianshu.com 以太坊账户创建_sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗

合约账户是智能合约的实际载体,具有以下特点:

可以存储以太币;

可以支持智能合约代码;

可以响应其他用户或合约执行本智能合约的请求以太坊有智能账户吗,并返回结果;

可以调用其他智能合约。

这里还有两个概念需要注意

sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗_sitejianshu.com 以太坊账户创建

(2) 以太坊和天然气

以太坊是整个以太坊区块链自我驱动的基本激励体系,类似于比特币。 所有在以太坊上的账户管理操作和智能合约的部署和执行都需要以太坊支付才能运作。以太坊也是由矿工生产的,由两部分组成

sitehtzkw.com 以太坊账户创建_sitejianshu.com 以太坊账户创建_以太坊有智能账户吗

sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗_sitejianshu.com 以太坊账户创建

Gas 是指在以太坊上执行智能合约的每一步所支付费用的基本单位。 Gas相当于部署和执行智能合约所需要的燃料,而燃料的价格最终会转化为以太坊的价值来体现,所以以太坊广场上的所有用户都需要通过挖矿或购买以太币来补充燃料。

与Gas相关的是以下概念

sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗_sitejianshu.com 以太坊账户创建

在以下三种情况下会发生耗气

1)当需要进行特定的内部抽象操作时

2)当进行slave消息调用或合约创建时

3)当需要增加账户内存使用量时,尤其是缴费账户内存使用量应为32字节的整数倍,以确保使用的内存全部包含在计费范围内。 如果使用 33 字节,则需要支付两个 32 字节的费用。

(3) 智能合约的执行抽象

sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗_sitejianshu.com 以太坊账户创建

以太坊可以看作是对所有有状态对象的管理。 每个对象的状态都会随着新区块的产生而变化,并记录在以太坊区块链上。 以太坊的状态转移可以定义为如下公式

(σ', g', s, l, r, o) = F 状态转换 (σ, g, I)

假设以太坊网络状态为σ,合约运行剩余gas为g,信息元组I包含信息

ia:当前代码的合约地址

io:发起合约交易的发起者地址

Ip:用户为本次交易设置的gas价格

id:本次交易的输入数据,输入数据为数组

is:执行本合约的账户地址

四:合约账户余额

以太坊有智能账户吗_sitehtzkw.com 以太坊账户创建_sitejianshu.com 以太坊账户创建

Ib:执行虚拟机代码所需的数组

IH:当前区块的数据头

Iε:当前执行的CALL操作和CREATE操作的数量

上式左边为合约执行后的状态变化,其中σ'为系统运行后的状态,g'为运行后剩余的Gas,s为执行终止操作的合约列表, l为记录序列,r为运行后返回的Gas,o为合约运行后产生的输出。

关键F状态转换是不断迭代系统临时状态和虚拟机临时状态的过程,迭代次数由两个条件决定:

1)系统状态是否有异常导致虚拟机停止工作,如gas不足、无效指令、虚拟机栈容量不足等。

2)虚拟机在正常状态下停止工作,如所有指令执行完毕,返回结果。

(4) 部署过程

在以太坊上部署和运行智能合约需要以下步骤:

sitehtzkw.com 以太坊账户创建_sitejianshu.com 以太坊账户创建_以太坊有智能账户吗

1)启动一个以太坊节点(比如geth)

2)编写智能合约(例如使用Solidity智能合约语言)

3)使用sloc编译器将写好的合约代码转化为以太坊虚拟机bitcode

4) 将编译好的合约代码部署到互联网上(需要消耗以太坊购买的Gas),合约发起账户需要使用外部账户签署待部署的合约,合约代码存储在以太坊区块链上之后经矿工确认。 之后,用户可以获得合约的地址和调用合约所需的接口。

5)使用web3.js库提供的JavaScript API接口调用合约(这一步也会消耗以太坊)。

基本流程可以抽象如下图所示

sitehtzkw.com 以太坊账户创建_以太坊有智能账户吗_sitejianshu.com 以太坊账户创建

3. 智能合约设计与实战(待补充)

内容包括:

环境准备和工具选择

简单的智能合约框架设计和部署

智能合约执行测试和问题