Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Bank 预编译合约参考

摘要

Stable SDK 中的 x/bank 模块仅提供基本的代币管理功能。 你可以不受限制地向任何账户转移任何代币,但无法委托其他账户来转移你的代币。 出于这些原因,bank 预编译合约在 Stable SDK 现有的 x/bank 模块基础上提供了额外的授权和委托功能。

目录

  1. 概念
  2. 配置
  3. 方法
  4. 事件

概念

该预编译合约提供 ERC-20 标准方法——例如用于转账的 transferbalanceOf,以及用于委托的 transferFromapproveallowance。你可以直接调用这些方法,无需注册合约地址。

但是,在使用 mintburn 方法之前,x/precompile 模块必须将合约地址加入白名单并进行注册。

func (p *Precompile) mint(
  ctx sdk.Context,
  contract *vm.Contract,
  denom string,
  method *abi.Method,
  stateDB vm.StateDB,
  args []interface{},
) ([]byte, error) {
  // ...
 
  // mint method is only allowed for the registered caller contract
  if _, err := precompilecommon.CheckPermissions(ctx, p.precompileKeeper, contract.CallerAddress, CallerPermissions); err != nil {
    return nil, err
  }

这一额外的验证流程保证了调用该预编译合约的代币合约是经过授权的。

要在 x/precompile 模块白名单中注册代币合约地址及其 denom,你必须提交一个治理提案。

配置

合约地址和 gas 费用是预定义的。

合约地址

  • 0x0000000000000000000000000000000000001003 用于 STABLE(治理代币)

方法

mint

铸造请求数量的新代币并转移到该账户。 要铸造的代币数量必须大于零。

当代币成功铸造并转移到账户时,将发出 PrecompiledBankMint 事件。

注意:

  • 禁止铸造治理代币。
  • 调用 mint 方法的调用方合约必须在 x/precompile 模块中注册。

输入

名称类型描述
toaddress接收铸造代币的地址
amountuint256要铸造的代币数量

输出

名称类型描述
successbool如果代币成功铸造并转移到账户,则为 true

burn

从账户中销毁请求数量的代币。 要销毁的代币数量必须大于零。

当代币成功销毁时,将发出 PrecompiledBankBurn 事件。

注意:

  • 禁止销毁治理代币。
  • 调用 burn 方法的调用方合约必须在 x/precompile 模块中注册。

输入

名称类型描述
fromaddress要销毁代币的地址
amountuint256要销毁的代币数量

输出

名称类型描述
successbool如果代币成功销毁,则为 true

transfer

将请求数量的代币从发送方转移给接收方。 代币必须被设置为可发送。要转移的代币数量必须大于零。

当代币成功转移时,将发出 PrecompiledBankTransfer 事件。

输入

名称类型描述
toaddress接收代币的地址
amountuint256要转移的代币数量

输出

名称类型描述
successbool如果代币成功转移,则为 true

transferFrom

由授权的支出方在授权额度范围内将请求数量的代币从所有者转移给接收方。 代币必须被设置为可发送。 要转移的代币数量必须大于零,且小于或等于当前授权额度。

当代币成功转移时,将发出 PrecompiledBankTransfer 事件。

输入

名称类型描述
fromaddress转出代币的地址
toaddress接收代币的地址
amountuint256要转移的代币数量

输出

名称类型描述
successbool如果代币成功转移,则为 true

multiTransfer

将代币从单个账户转移到多个账户。 代币必须被设置为可发送。 转移给每个接收方的代币数量必须大于零。

当代币成功转移时,将为每个接收方发出 PrecompiledBankTransfer 事件。

输入

名称类型描述
toaddress[]接收转移代币的地址
amountuint256[]转移给每个接收方的代币数量

输出

名称类型描述
successbool如果代币成功转移给每个接收方,则为 true

approve

授权支出方从所有者的账户转移代币。 要授权的代币数量必须大于零。

当授权成功设置时,将发出 PrecompiledBankApproval 事件。

输入

名称类型描述
spenderaddress要授权的地址
valueuint256要授权的代币数量

输出

名称类型描述
successbool如果授权成功设置,则为 true

revoke

撤销支出方从所有者转移代币的授权。

当授权成功撤销时,将发出 PrecompiledBankRevoke 事件。

输入

名称类型描述
spenderaddress要撤销的地址

输出

名称类型描述
successbool如果授权成功撤销,则为 true

balanceOf

返回账户中的代币余额。

输入

名称类型描述
accountaddress获取代币余额的地址

输出

名称类型描述
balanceuint256账户中的代币数量

totalSupply

返回代币的总供应量。

输入

输出

名称类型描述
totalSupplyuint256代币总量

allowance

返回支出方仍被允许从所有者处提取的代币数量。

输入

名称类型描述
owneraddress所有者的地址
spenderaddress支出方的地址

输出

名称类型描述
amountuint256已授权的代币数量

事件

该预编译合约发出的所有事件都以 PrecompiledBank 为前缀。 为避免歧义,调用该预编译合约的代币合约应避免使用具有相同前缀的事件名称。

PrecompiledBankMint

名称类型是否索引描述
fromaddressY铸造代币的地址
toaddressY接收铸造代币的地址
amountuint256N铸造的代币数量

PrecompiledBankBurn

名称类型是否索引描述
fromaddressY销毁代币的地址
toaddressY此方法中未使用
amountuint256N销毁的代币数量

PrecompiledBankTransfer

名称类型是否索引描述
fromaddressY转移代币的地址
toaddressY接收转移代币的地址
amountuint256N转移的代币数量

PrecompiledBankApproval

名称类型是否索引描述
owneraddressY授权代币的地址
spenderaddressY要授权的地址
valueuint256N已授权的代币数量

PrecompiledBankRevoke

名称类型是否索引描述
owneraddressY撤销代币的地址
spenderaddressY要撤销的地址
valueuint256N已授权的代币数量