智能合約可以批准多重簽名錢包上的待處理交易嗎?
假設我有一個像 Gnosis Safe 這樣的多重簽名錢包,它需要(比如說)兩個或三個簽名者來批准任何給定的交易。換句話說,多重簽名錢包有自己的錢包地址,並且必須有 2 或 3 個其他錢包地址批准任何交易。
我想要的是讓這些“其他”錢包中的一個真正成為智能合約。該合約的所有者當然會啟動合約並將其置於活動狀態。在活動狀態下,它會自動批准其他錢包所有者為此多重簽名錢包發起的任何交易。智能合約還具有合約所有者可以將其從活動狀態中取出的功能,這樣就不會批准任何交易。
流程如下:假設我們有一個多重簽名錢包(例如 Gnosis Safe),有兩個所有者:1.“John”和 2.“智能合約”。John 決定將 1 Eth 發送到另一個錢包,因此 John 使用連接到 Gnosis Safe 多重簽名錢包的 Metamask 創建並簽署此交易。接下來,John 使用其他一些軟體(比如一個簡單的 Javascript 或 python 中的 web3 腳本)呼叫智能合約中的一個函式,請求批准該交易。智能合約驗證請求是否來自 John,並驗證智能合約處於活動狀態。因此,它獲取交易並對其進行簽名。現在交易已經完成。
如果智能合約的所有者決定他們不希望 John 進行更多交易,那麼他們可以將合約設置為非活動狀態,現在 John 不能再進行任何交易。
這在智能合約中可行嗎?對於 John 呼叫請求批准的函式,交易資訊是如何傳遞的,或者智能合約是否可以使用其他方式來訪問該待處理交易?智能合約如何批准此交易?
最後,假設我想擁有 Eth、BSC、Avax 和 Polygon 鏈的這種能力。我認為這意味著我必須在每個鏈上執行這個智能合約的一個版本?
是的,我有充分的理由詢問這是否可能。這與監管和稅收問題有關。
我只能非常具體地回答保險箱,因為這高度依賴於智能合約錢包。
使用保險箱有 2 種可能的方法。
從 Safe 的 1.3.0 版本開始,可以添加Guard。當它處於“非活動”狀態時,可以控制這個守衛來阻止任何交易。
另一種解決方案是在控制活動或非活動狀態的合約上實施 EIP-1271(舊版)。該合約將
isValidSignature
在狀態中呼叫時恢復,inactive
否則將恢復預期值。這是一個如何使用 Guard 方法或 EIP-1271 簽名來完成此操作的範例:https ://gist.github.com/rmeissner/26bae7deaac62db764abc9a03902094e