Cardano智能合约Vesting接收方钱包为空时执行失败的优化方案问询
Plutus Vesting 合约空接收钱包交易失败修复方案
问题根因
Cardano 链上所有交易的手续费必须由交易中包含的用户持有的 UTXO 覆盖,原 Vesting 代码默认将接收方作为交易手续费承担方,空钱包没有可用 UTXO 满足手续费抵扣要求,因此交易执行失败。
可行修改方案
- 调整手续费承担方:修改交易构建逻辑,将手续费承担方指定为资金发放方,构建交易时直接将发放方的 UTXO 纳入交易输入用于抵扣手续费,不需要接收方提供任何 UTXO。
- 脚本内预留手续费:修改 Vesting 资金存入逻辑,要求存入脚本的总金额 = 约定解锁金额 + 预估解锁手续费,解锁时手续费直接从脚本锁定的金额中扣除,剩余部分发放给接收方。
- 新增预充值流程:在触发解锁前,先由发放方向接收方地址转入小额 ADA(通常仅需 0.2~0.5 ADA 即可覆盖手续费+最低 UTXO 要求),待接收方地址有可用 UTXO 后再执行正式解锁交易。
- 优化交易签名规则:修改合约校验逻辑,允许解锁交易仅由发放方单方签名即可执行,手续费从发放方提供的输入 UTXO 中扣除,接收方无需参与签名也无需承担任何交易成本。
- 调整交易输出配置:如果需要保留接收方承担手续费的逻辑,可在解锁交易的输出中额外给接收方补充满足手续费要求的小额 ADA,确保接收方收到的资产足够覆盖本次交易手续费,无需预先持有 ADA。
内容的提问来源于stack exchange,提问作者weera
相关产品推荐
相关产品推荐

