前端要能完成以下流程:
前端注意事项
data
(ABI-encoded)时,推荐前端提供「模板」,例如代币转账模板(选择 token 合约、输入接收方与数量,然后自动生成 transfer
的 data),以减少用户填错 raw hex 的概率。confirmations[txId][owner]
)。require(msg.sender == address(this))
),并通过多签交易去变更 owner;也可把这些函数删除,只保留能通过执行交易来调用 upgrade
/gov
合约的能力;executeTransaction
是否在 CEI 模式并且有 nonReentrant
?(本例有)为加深理解,我们可以逐级练习:
addOwner
/ removeOwner
/ changeRequirement
;要求这些方法只能由合约自身调用(即 require(msg.sender == address(this))
)。然后通过 multisig 提案变更 owner。addOwner
、removeOwner
、changeRequirement
)并达到 confirmations,加入一个延迟(比如 48 小时)后才能执行;让普通转账仍可即时执行。实现思路:在 submitTransaction
标记它是否为敏感 tx(或检查目标是否为合约自身),并存储 readyTimestamp
,executeTransaction
时检查时间是否到。这涉及 EIP-712 签名标准与防重放。实现后可显著减少 confirmations 所需的链上操作次数。
Q: 多签能否直接调用 ERC20 的 transfer
?
A: 可以,通过构造 data = abi.encodeWithSignature("transfer(address,uint256)", to, amount)
并把 destination
指为 token 合约地址,value 为 0。多签合约会 call
token 合约执行这一方法。
Q: 为何要 txn.executed = true
在 call 之前?
A: 防止在外部 call 中被重入导致重复执行(CEI 模式)。我们也加了 nonReentrant
做双重保险。
Q: 多签是否应支持智能合约 owners?
A: 可以,但如果 owner 是合约,要确保它能以受控方式签署/确认(例如通过 Gnosis Safe 的合约模块)。测试时加入合约 owners 会更复杂。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。