多籤账戶簡介
多籤账戶(multisig)可以在基於Substrate的區塊鏈上創建。一個多籤账戶由一個或多個地址和一個閾值組成。閾值定義了需要達成共識的籤名者(參與地址)數量,同意提交外源(Extrinsic)才能成功調用。
例如,Alice、Bob和Charlie建立了一個閾值爲2的多籤账戶。這意味着即使Charlie不同意,Alice和Bob也可以執行任何調用。同樣,Charlie和Bob也可以執行任何調用而不需要Alice的同意。閾值通常是小於成員總數的數字,也可以等於成員總數,但這意味着他們都必須同意。
注:更多關於多籤账戶的信息
請查閱此幫助頁面(詳情請參見:
https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account)“如何創建多籤账戶”部分。我們建議你在Polkadot的測試網絡Westend(詳情請參見:
https://wiki.polkadot.network/docs/maintain-networks#westend-test-network)上嘗試教程。
多籤账戶有以下幾種用途:
- 保護你的資金:使用額外的籤名者作爲雙重身份驗證機制來保護你的資金安全。一個籤名者可以位於一台計算機上,另一個可以位於另一台計算機上或者冷存儲設備上。這會降低你與鏈的交互速度,但安全性可以提高很多。
- 決策委員會:企業和基金會等法人實體使用多重籤名來共同管理實體的資金。
- 群體參與治理:一個多籤账戶可以執行與普通账戶相同的操作。在Kusama的治理中,多籤账戶可以作爲一個議會成員,社區成員可以作爲一個實體進行投票。
多籤账戶創建後無法修改。要更改成員集合或閾值,需要解除當前的多籤账戶並創建一個新账戶。因此,多籤账戶地址具有確定性,也就是說你總是可以通過知道成員和閾值來計算出多籤账戶的地址,而不需要账戶存在。這意味着可以向一個尚不存在的地址發送通證,如果指定爲接受者的實體以相同的閾值組成一個新的多重籤名账戶時,他們就可以立刻使用這些通證。
編者注:
這段話的意思是可以把多重籤名账戶地址想象成一個保險箱,這個保險箱有一個特殊的鎖,需要多把鑰匙才能打开。這些鑰匙分別屬於不同的人,他們都是這個保險箱的共同擁有者。這個保險箱裏面放着一些錢,只有當達到一定數量的人同意時,才能取出這些錢。
多重籤名账戶地址的生成方法是固定的,也就是說,只要知道了這個保險箱裏有幾把鑰匙,還有需要幾個人同意才能取錢,就可以算出這個保險箱的編號,而不用等到保險箱真的造好了。這樣做的好處是,可以先給一個還沒造好的保險箱打錢,然後等到指定的人以同樣的條件造了一個新的保險箱後,他們就可以馬上用這些錢。
使用Polkadot-JS UI創建多籤账戶
账戶(Accounts)選項卡的多籤交易
注:參閱視頻教程
請參閱此視頻教程(詳情請參見:https://youtu.be/-cPiKMslZqI),了解如何在Polkadot-JS UI(詳情請參見:
https://polkadot.js.org/apps/#/accounts)的账戶(Accounts)選項卡上使用多籤账戶進行交易。
你可以直接在Polkadot-JS UI(詳情請參見:
https://polkadot.js.org/apps/#/accounts)的账戶(Accounts)選項卡上創建多籤账戶,並使用此账戶發送資金。更多信息,請參閱此幫助文章(詳情請參見:
https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account)。
外源(Extrinsic)選項卡的多籤交易
多籤账戶可進行三種類型的操作:
- 執行【asMulti】調用。用於开始或結束一個多重籤名交易。
- 審批【approveAsMulti】調用。用於審批一個外源(Extrinsic)操作,並傳遞給下一個籤名者(有關更多信息,請參見下面的示例)。
- 取消【cancelAsMulti】調用。
注:請查閱此頁面(詳情請參見:
https://polkadot.js.org/docs/substrate/extrinsics/#multisig),了解更多有關多籤账戶操作的詳細信息。
在只需要一次審批的情況下,應使用便捷方法【as_multi_threshold_1】。該函數僅將其他籤名者和原始調用作爲參數。請注意,Polkadot-JS UI不支持此調用,因爲不可能創建【閾值=1】的多籤账戶。如果你想創建一個閾值爲1的多籤账戶,可以使用由Parity Technologies开發的txwrapper-core(詳情請參見:
https://github.com/paritytech/txwrapper-core)。這裏有一個詳細的多重籤名示例(詳情請參見:
https://github.com/paritytech/txwrapper-core/tree/main/packages/txwrapper-examples/multisig),你可以嘗試並更改它,以了解其工作原理。
但除了簡單的一次審批外,在執行之前,你可能還需要一個以上的籤名者審批調用。當你創建新的調用或審批多重籤名時,你需要存入一筆小額保證金。存款將保留在合約中,直到調用被執行。存款是爲了建立多重籤名調用在鏈上佔用的存儲空間的經濟成本,防止用戶創建永遠不會執行的懸空多重籤名操作。存款將被保留在調用者的账戶中,因此多籤錢包中的參與者應該要有備用資金。
存款取決於閾值【threshold】參數,計算公式如下:
存款=存款基數+閾值*存款因子
其中,存款基數(depositBase)和存款因子(depositFactor)是Runtime代碼中設置的鏈常量(以DOT爲單位)。當前,存款基數等於20.088DOT,存款因子等於0.032DOT。
注:視頻教程(使用多籤账戶示例)
請參閱本視頻教程(詳情請參見:https://youtu.be/T0vIuJcTJeQ),了解如何使用Polkadot-JS UI(詳情請參見:
https://polkadot.js.org/apps/#/explorer)中的外源(Extrinsic)選項卡與多籤账戶進行交易。
讓我們以波卡上的多重籤名爲例,假設籤名閾值爲2,有3名籤名者:Charlie、Dan和Eleanor。首先,Charlie將通過調用【multisig.asMulti】外源(Extrinsic)在鏈上創建多重籤名交易。在本例中,他要進行的是一個余額轉账(【balances.transferKeepAlive】extrinsic),從多重籤名账戶CDE轉账到Frank的账戶。在這個過程中,Charlie需要存入【DepositBase+(2*DepositFactor)=20.152DOT】的保證金,同時等待Dan或Eleanor中的任一人審批該余額轉账調用,使用【multisig.approveAsMulti】或【multisig.asMulti】外源(Extrinsic)。
如果Dan提交【multisig.approveAsMulti】外源(Extrinsic),他就審批了Charlie的調用,但會將最終審批權交給Eleanor。因此,在這種情況下,盡管多重籤名的閾值是2,所有3/3個籤名者都需要參與交易審批。Eleanor需要提交【multisig.asMulti】或【multisig.approveAsMulti】外源(Extrinsic),以從CDE账戶向Frank轉移資金。
或者,Dan或Eleanor可以在Charlie之後提交【multisig.asMulti】外源(Extrinsic)以轉移資金。在這種情況下,2/3的籤名者將參與交易審批。審批Charlie調用的账戶無需支付保證金,一旦轉账成功或取消,Charlie將收到他的保證金。要取消交易,Dan或Eleanor可以使用【multisig.cancelAsMulti】外源(Extrinsic)。
請注意,多重籤名是確定性的,這意味着多重籤名地址是根據籤名者的地址和多重籤名錢包的閾值生成的。無論籤名者账戶的順序如何,多重籤名的地址始終相同,因爲账戶地址按升序排序。
注:提供給多重籤名錢包的地址是經過排序的
公鑰籤名者的錢包地址按字節逐位比較並升序排序後,用於生成多重籤名地址。例如,考慮以下三個地址:A、B和C,分別以【5FUGT】【5HMfS】和【5GhKJ】开頭。如果我們按照特定順序(首先是A,然後是B和C)創建ABC多重籤名錢包,實際的账戶順序將是ACB。在外源(Extrinsic)選項卡中,如果我們使用C發起多重籤名調用,其他籤名者的順序將首先是A,然後是B。如果我們首先放置B,然後是A,交易將失敗。
在使用Polkadot-JS UI(詳情請參見:
https://polkadot.js.org/apps/#/accounts)的外源(Extrinsic)選項卡執行多重籤名交易時,這會產生一些影響。如果其他籤名者的順序錯誤,交易將失敗。如果直接從账戶(Accounts)選項卡執行多重籤名,則不會發生此問題(建議使用該方法)。Polkadot-JS UI支持多籤账戶,可在账戶生成(Account Generation)頁面(詳情請參見:
https://wiki.polkadot.network/docs/learn-account-generation#multi-signature-accounts)文檔中找到相關信息。關於更多創建多籤账戶以及如何使用Polkadot-JS UI中的账戶(Accounts)選項卡(詳情請參見:https://youtu.be/-cPiKMslZqI)和外源(Extrinsic)選項卡(詳情請參見:https://youtu.be/T0vIuJcTJeQ)進行交易,你可以查閱我們的視頻教程。
多重籤名與Multix工具
注:視頻教程
有關如何使用Multix(詳情請參見:
https://multix.chainsafe.io/?network=kusama)進行多籤账戶操作的更多信息,請參閱本視頻教程(詳情請參見:
https://www.youtube.com/watch?v=APxPsawebJw)和本文(詳情請參見:
https://blog.chainsafe.io/multix-a-simple-interface-to-manage-complex-multisigs-on-polkadot-97328be26f9d?gi=abd0f3fbabb7)
Multix工具(詳情請參見:
https://multix.chainsafe.io/?network=kusama)是一個易於使用的界面,用於管理復雜的多重籤名。該工具是开源的波卡/Kusama技術堆棧(詳情請參見:
https://wiki.polkadot.network/docs/build-open-source#user-interface)的一部分。與Polkadot-JS UI相比,Multix除了用戶友好外,還具有多項優勢:
- 當有人創建多籤账戶時,所有籤名者都會在其界面上看到多籤账戶。
- 無需傳遞調用數據以確認交易。此類信息會從鏈上檢索,並顯示給用戶。
- 借助純代理(pure proxies)(詳情請參見:
https://wiki.polkadot.network/docs/learn-proxies#anonymous-proxy-pure-proxy)的強大功能,可以添加和刪除籤名者或調整閾值,而無需創建新的多重籤名,並且Multix提供了一個直觀的界面來處理純代理。
解碼多重籤名調用數據
注:在籤署交易之前,了解籤署內容的具體細節非常重要。請查閱幫助文檔中的"如何使用多籤账戶"(詳情請參見:
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。