Skip to content

Utility Pallet

Utility Moonbeam Banner

概览

通过Substrate的utility pallet,Moonbeam上的用户可以通过2个可用批量extrinsics将多个调用包含在单个交易中,并使用衍生账户发送调用。

本教程将提供utility pallet的概述和示例,关于其中可用的pallet常量的extrinsic和getter。

衍生账户

衍生账户是使用索引从另一个账户衍生出来的账户。这使衍生账户能够派遣交易并使用原账户支付交易费用。由于此账户的私钥是未知的,因此交易必须由pallet的asDerivative extrinsic发起。举例来说,Alice有一个索引为0的衍生账户,如果她使用asDerivative函数转移任何余额,Alice仍将支付交易费,但转移的资金将从索引为0的衍生账户提取。

衍生是通过计算modlpy/utilisuba + originalAddress + index的Blake2哈希来完成的。您可以使用脚本来计算给定原账户和索引的衍生账户

其中一个衍生账户的用例可在XCM-transactor pallet找到。Pallet允许用户从主权账户的衍生账户执行远程跨链调用,这使调用可在单个交易中轻松执行。更多信息,请参考使用XCM-Transactor Pallet进行远程执行教程。

Utility Pallet接口

Extrinsics

Utility pallet提供以下extrinsics(函数):

  • asDerivative(index, call) - 在给定索引数和调用的情况下,通过发送者的索引匿名发送调用
  • batch(calls) - 发送一批派遣的调用。若调用失败,将处理该时间点的任何成功调用,并触发BatchInterrupted事件。若所有调用成功,将触发BatchCompleted。调用次数不得超过限制
  • batchAll(calls) - 发送一批派遣的调用并以原子方式执行。若其中一个调用失败,则整个交易将回滚并失败。调用次数不得超过限制
  • dispatchAs(asOrigin, call) - 派遣一个提供原账户和要派遣调用的函数调用。此调用的派遣源必须为Root

Pallet常量

Utility pallet包含以下只读函数来获取pallet常量:

  • batchedCallsLimit() - 返回批量调用次数限制

使用Batch Extrinsics

您可以使用Polkadot.js Apps接口或通过Polkadot.js API获取batch extrinsics。此示例将向您展示如何从Polkadot.js Apps使用batch extrinsic。如果您使用Polkadot.js API,您可以通过api.tx.utility.batch接口获取utility pallet。更多关于使用API批量处理交易,请参考Polkadot.js API Library页面。

首先,您可以前往Polkadot.js Apps并连接至Moonbase Alpha。此操作流程也同样适用于Moonbeam和Moonriver。

您可以发送任何调用的组合,如余额转账、民主、质押以及更多。

举个简单的例子,您可以选择余额转账。点击Developer下拉菜单,选择Extrinsics并执行以下步骤:

  1. 选择提交batch extrinsic的账户

  2. submit the following extrinsic菜单处选择utility

  3. 选择batch extrinsic

  4. 首个调用的字段将会自动填充,要添加第二个调用可点击Add item

  5. 关于首个调用,选择balances

  6. 选择transfer extrinsic

  7. 输入接收资金的账户

  8. value字段处输入要发送的DEV Token数量,确保您的账户为18位数位

  9. 关于第二个调用,您可以重复操作步骤5至步骤8

  10. 点击Submit Transaction立即发送调用

Send batch transaction

接下来,您将需要输入您的密码并点击Sign and Submit。随后,您可以在Subscan上查看extrinsic。

注意事项

作为参考,您可以在Subscan上查看此示例的确切extrinsic

如果您查看extrinsic页面底部的Events标签,您应该看到几个事件,包括2个balances (Transfer)事件、2个utility (ItemCompleted)事件和1个包含批量处理交易详细信息的utility (BatchCompleted)事件。