我试图创建一个函数或外部函数,它不收取原始交易费,而是完全免费的。我认为也许权重为 0 就可以解决,但仍然需要花费代币,
#[weight = 0]
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过 rpc 调用来调整状态,该调用做了一些计算但没有修改状态 我如何创建一个免费的函数/外部函数,无需任何交易费用?rpc调用是否可以调整状态?
使用 Substrate 这实际上非常简单。
您只需传递Pays::No给函数的权重即可。
就像这样:
#[weight = (100_000, DispatchClass::Normal, Pays::No)]
Run Code Online (Sandbox Code Playgroud)
这里元组描述:
DispatchClass函数的 . 默认选择是NormalPays选项决定呼叫者是否支付费用。请注意,如果您创建一个用户不支付任何费用的外部函数,您的区块链将立即容易受到 DDOS 攻击,因为任何用户都可以免费向此函数发送垃圾邮件。
您将需要在区块链上构建其他验证层,以确保只有对此函数的有效调用才会传播到其他节点。
看看这里: https: //github.com/paritytech/polkadot/blob/master/runtime/common/src/claims.rs#L386
在这种情况下,我们有一些语句,在将调用传递到其他节点之前,我们会验证进行调用的用户是否正确签署了这些语句:
https://github.com/paritytech/polkadot/blob/master/runtime/common/src/claims.rs#L592
因此,如果您希望您的区块链通过这样的免费功能是安全的,您也必须这样做。
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |