01

概述

EOSIO区块链的设计需要许多在特权权限级别运行的智能合约,以支持区块生产者注册和投票、CPU和网络带宽的代币质押、RAM购买、multi-sig等功能。这些智能合约被称为bios、system、msig、wrap(以前称为sudo)和代币合约。

下面介绍了在EOS中的五个基础的智能合约:eosio.bios、eosio.system、eosio.token、eosio.msig和eosio.wrap

02

eosio.bios

(一) eosio.bios合约概述

bios的全称是 Basic Input/Output System (基本输入输出系统)。eosio.bios合约是eos的系统启动合约。该合约是eos许多命令的基础合约,该合约允许账户直接通过eosio账户控制eos私链。eosio.bios合约是一个最低限度的系统合约,它只提供对引导链至关重要的操作,没有其他操作。

(二)eosio.bios合约模块介绍

eosio.bios合约在EOSIO系统中负责初始化和配置区块链网络,并管理生产者节点、权限设置、系统参数等。以下是eosio.bios合约的主要模块介绍:

1、生产者注册模块

eosio.bios合约的生产者注册模块用于启动和配置区块链网络,包括生产者节点的注册和权限设置等关键任务。在EOS网络中,生产者是负责生产出区块的节点,他们通过eosio.bios合约进行注册,并可以通过合约进行撤销注册或更新信息。生产者会根据其持有的资产数量进行定期轮换,而选择下一个生产者的规则也通过该模块进行设置。生产者注册模块是eosio.bios合约的重要组成部分,用于管理区块链的出块生产者。

2、初始化模块

eosio.bios合约的初始化模块用于设置系统合约、资源分配、系统参数和权限等关键要素,为区块链网络构建了初始状态。这样确保了区块链网络的正确配置和启动,并为后续的操作和交易提供必要的基础。初始化模块通过合约的部署、资源创建、参数设置和权限配置等一系列步骤,使EOSIO系统进入可用和可操作的状态。它为EOSIO系统的各种功能和机制打下了坚实的基础,为区块链网络的正常运行和发展奠定了重要基础。

3、权限模块

eosio.bios合约的权限模块用于设置和更新系统账户的权限。这些权限控制着系统账户的操作范围和能力。通过eosio.bios合约,系统管理员可以更新账户的权限,但只有具有足够权限的账户才能修改其他账户的权限。权限修改需要进行签名验证,确保权限修改操作的合法性和可靠性。

03

eosio.system

(一)eosio.system合约概述

eosio.system是EOSIO中最重要的系统合约之一,它实现了区块链上所有用户账户和交易的管理。通过该合约,用户可以创建新账户、投票选择区块生产者、购买RAM资源等。此外,eosio.system还包括资源管理模块(Rex)和抵押模块(Stake),允许用户向网络提供计算能力和存储空间,并获得相应奖励。

(二)eosio.system合约模块介绍

eosio.system合约在EOSIO系统中负责管理和维护EOSIO区块链网络的核心功能。它包含了几个关键模块,用于实现账户管理、资源配额、生产者选举和投票等功能。以下是对eosio.system合约的各个模块进行详细介绍:

1、账户管理模块

eosio.system合约的账户管理模块用于创建账户、账户授权、账户注销等。eosio.system合约允许账户创建者通过执行newaccount操作来创建新的账户,执行rmvaccount操作来注销账户。合约还提供了updateauth操作,用于更新账户的权限和密钥对。

2、资源管理模块

eosio.system合约的资源管理模块用于资源分配、RAM交易、资源抵押赎回等。eosio.system合约实现了资源配额的分配,包括CPU、NET和RAM。账户需要抵押EOS来获获取资源配额。合约还提供了buyram和sellram操作,用于账户购买和出售RAM资源。同时,通过delegatebw和undelegatebw操作,账户可以抵押和赎回自己的资源。

3、生产者选举模块

eosio.system合约的生产者选举模块用于注册生产者等。eosio.system合约允许验证节点通过regproducer操作将自己注册为生产者,并参与区块的生产。另外,系统将根据生产者的得票数和一定的轮换规则,更新生产者节点的顺序,确保区块的连续产生和网络的稳定运行。

4、投票模块

eosio.system合约的投票模块用于抵押投票、代理投票、取消投票等。eosio.system合约允许用户通过voteproducer操作给超级节点投票,也可通过取消抵押资源的方式取消投票。eosio.system合约还允许账户进行代理投票,即先投票给代理,再由代理投票给生产者,代理的作用就是替别人做出选择投票,本身不需要抵押。注意:合约只允许用户选择一种投票方式:直接投票或者代理投票。

5、系统参数设置模块

eosio.system合约的系统参数设置模块用于设置账号资源限制、设置出块间隔、设置特权开关、设置系统参数、设置通胀率等。由于EOS网络中的资源有限,合约通过setalimits操作设置账号资源的最大限制,避免资源滥用。为了平衡区块链网络的性能、安全性和稳定性,合约还允许通过setprods操作设置区块的出块间隔。合约允许账户设置特权开关,设置成功后,该账户成为特权帐户,可以跳过标准授权检查执行交易。合约通过setparams操作对链参数eosio::blockchain_parameter进行设置。合约还允许账户通过setinflation操作进行通胀率设置,用以实现产块奖励与代币增发。

04

eosio.token

(一)eosio.token合约概述

eosio.token合约是EOSIO系统中的一个标准代币合约。该合约允许用户为基于eosio的区块链创建、发布和管理token的结构和操作,为用户和开发者提供了构建了基于EOSIO的代币经济体系的基础。

(二)eosio.token合约模块介绍

eosio.token合约在EOSIO系统中负责创建代币、发行代币、转账代币等功能。它包含了几个关键模块,用于实现创建代币、发行代币、转账代币、查询代币余额等功能。以下是对eosio.token合约的各个模块进行详细介绍:

1、创建代币模块

eosio.token合约用于账户创建新的代币,在创建代币之前,用户需要设置代币的总量、符号(symbol)和精度(precision),以便确保代币被正确地识别和转移。这些参数既可以在创建代币时设置,也可以在未来进行修改。创建代币将生成一个新的系统账户,用于管理该代币的余额和转账记录。

2、发行代币模块

eosio.token合约提供了发行(issue)代币的操作,允许授权账户发行额定数量的代币到指定账户,同时,发行操作需要指定接收代币的账户、发行的数量、代币符号等参数。并在调用发行操作后,验证权限并确保发行数量不超过代币的最大供应量,最后,在代币发行记录中创建新的代币,并将相应数量的代币转账给指定的账户。发行的代币数量将会反映在接收账户的代币余额中。

3、转账代币模块

eosio.token合约用于账户间进行代币的转账操作,通过执行transfer操作来实现。转账操作需要检查转账发起者的权限以及转账发起者账户是否有足够的代币余额来执行转账操作,确保其具备执行转账操作的权限,验证通过后,转账操作还需要指定发送方、接收方和转账数量,转账成功会扣除发送方账户的代币余额并增加接收方账户的代币余额。

4、查询代币余额模块

eosio.token合约用于查询代币余额的操作,允许账户查询自己或其他账户的代币余额。

05

eosio.msig

(一)eosio.msig合约概述

eosio.msig合约是eos的提案合约,EOS持有人可以使用合约方法提出一个提案,其他人可以表决通过或者不通过这个提案,通过这个合约能实现交易的多重签名方案。作为多签名合约,eosio.msig支持将一个交易分成多个步骤,并且在每个步骤中都需要经过特定数量的账户签名确认后才能继续下一步。这有效地防止了一些非法操作和攻击,确保了交易执行的可靠性。

(二)eosio.msig合约模块介绍

eosio.msig合约作为EOSIO系统中的一个多重签名合约,扩展了系统合约的功能,使多个账户能够协作进行事务的授权和执行。为用户提供了一种安全和可靠的方式来管理和执行需要多个参与者授权的交易。以下是eosio.msig合约的主要模块:

1、创建提案模块

创建提案模块允许提案创建者使用合约中的propose操作创建一个新的提案,指定提案的名称、执行交易的权限和生效时间等参数,将需要执行的事务封装为一个提案。提案可以包含一系列的操作,可以是转账、权限修改或其他合约操作。

2、审核模块

审核模块允许账户使用合约的approve或unapprove操作来表示对提案的审核。approve操作表示账户同意提案,而unapprove操作则表示账户撤销对提案的同意。每个账户只能以投票的方式参与提案的审核。

3、执行模块

执行模块用于检查提案是否获得了足够的批准票数。一旦提案达到指定的授权阈值,可由任何授权账户执行提案,若提案未达到预设的批准阈值,则无法执行,同时,被调用的合约会对调用者的权限进行验证,以确保只有具备相应权限的账户才能成功执行操作,执行成功后,执行模块会对涉及的账户、数据和状态进行相应的更新,同时,提案将被标记为已完成,并从待执行列表中移除。提案完成后,相应的操作将被永久写入区块链,成为不可逆转的交易。

4、取消提案模块

取消提案模块允许发起提案的账户随时取消尚未达到授权阈值的提案,并进行修改、取消或者延迟提议的执行时间,同时,解除已参与的投票,并将提案从待执行列表中移除。这些特性使得EOS账户具有更大的控制权和可调性,有助于提高交易和操作的安全性和可靠性。

06

eosio.wrap

(一)eosio.wrap合约概述

eosio.wrap系统合约允许区块生产者绕过授权检查或在15/21生产者批准的情况下运行特权操作,从而简化了区块生产者的超级用户操作。使这些操作更易于审核。使用eosio.wrap合约可以方便地在EOSIO平台上运行以太坊智能合约,并使得各种类型的DApps更加灵活和可扩展。eosio.wrap系统合约为开发者们提供了一种将区块链技术应用到实际场景中的创新方式。

(二)eosio.wrap合约模块介绍

eosio.wrap合约提供了与其他智能合约进行交互的接口。eosio.wrap合约允许用户将普通的EOSIO事务封装为特殊的交易,以便在已部署的智能合约上执行。以下是eosio.wrap合约的主要模块:

1、执行模块

eosio.wrap合约实现的唯一操作是exec操作。此操作允许执行事务,该事务通过trx参数和执行事务的executor帐户以json格式的打包事务的形式传递给exec方法。同样的“执行人”账户也将用于支付执行交易所需的RAM和CPU费用。eosio.wrap合约允许区块生产者在绕过常规授权检查的同时执行事务,前置条件是需要eosio.wrap的授权,它需要是一个特权帐户,后置条件是延迟的事务RAM使用计费给“执行者”,这项操作简化了区块生产者的超级用户操作。