Sputnik v2 DAO调用deposit_and_stake质押超24N失败问题求助
Sputnik DAO V2 调用deposit_and_stake质押功能故障解决方案
故障根因
deposit_and_stake方法本身不读取args参数内的amount字段,而是直接取交易附带的NEAR转账额作为质押资金,你之前在args内填写的金额参数完全无效- 调用仅使用提案保证金的原因是未在提案的FunctionCall配置中正确声明DAO金库需要支出的金额:Sputnik DAO只会将提案actions内
deposit字段标注的金额从金库转出执行调用,你创建提案时附带的--amount对应的是提案保证金,属于你个人抵押的资金,和DAO金库支出无关 - 命令行报错的核心原因有两个:一是手动填写了
submission_time字段,该字段由合约自动生成,手动传入的固定时间不符合校验规则;二是args字段传了空字符串,Sputnik DAO要求args必须是base64编码的JSON对象,空参数需传入空JSON的base64编码e30= - 前端自定义调用表单的24N限制是前端默认的交互校验限制,不属于合约层限制,可轻松绕过
可落地解决方案
命令行提交正确提案
使用以下格式调用即可正常创建质押提案,提案通过后DAO会自动从金库转出对应金额执行质押:
near call chaintyping-test2.sputnikv2.testnet add_proposal '{ "proposal": { "description": "5 NEAR委托质押至staked.pool.f863973.m0", "kind": { "FunctionCall": { "receiver_id": "staked.pool.f863973.m0", "actions": [ { "method_name": "deposit_and_stake", "args": "e30=", "deposit": "5000000000000000000000000", "gas": "75000000000000" } ] } } } }' --accountId mic.testnet --amount 1
*参数说明:
args字段传e30=,是空JSON对象{}的base64编码,符合合约参数要求- 末尾的
--amount 1是创建提案的个人保证金,按DAO的提案规则填写对应金额即可,和DAO支出的质押金额无关 actions内的deposit字段就是DAO金库要支出的质押金额,无24N上限限制,只要DAO金库余额足够即可正常执行*
前端绕过24N限制方案
如果优先使用前端操作,打开浏览器开发者工具,找到自定义调用的金额输入框对应的DOM元素,删除元素上的max属性限制,即可输入超过24N的金额,提交时注意args参数留空不需要填写任何内容。
长期优化方案
如果DAO有频繁的质押需求,可以自定义DAO提案模板,固化质押对应的接收地址、方法名、gas等固定参数,仅保留质押金额作为可输入项,可省掉每次填写自定义调用参数的步骤,也可直接去掉默认的金额上限校验。
内容的提问来源于stack exchange,提问作者o-mic-o
相关产品推荐
相关产品推荐

