Utility Pallet¶
概览¶
通过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并执行以下步骤:
-
选择提交
batch
extrinsic的账户 -
在submit the following extrinsic菜单处选择utility
-
选择batch extrinsic
-
首个调用的字段将会自动填充,要添加第二个调用可点击Add item
-
关于首个调用,选择balances
-
选择transfer extrinsic
-
输入接收资金的账户
-
在value字段处输入要发送的DEV Token数量,确保您的账户为18位数位
-
关于第二个调用,您可以重复操作步骤5至步骤8
-
点击Submit Transaction立即发送调用
接下来,您将需要输入您的密码并点击Sign and Submit。随后,您可以在Subscan上查看extrinsic。
注意事项
作为参考,您可以在Subscan上查看此示例的确切extrinsic。
如果您查看extrinsic页面底部的Events标签,您应该看到几个事件,包括2个balances (Transfer)
事件、2个utility (ItemCompleted)
事件和1个包含批量处理交易详细信息的utility (BatchCompleted)
事件。
Created: August 11, 2022