第2课

多重簽名合約詳解

在本課中,我們將深入探討第1課中介紹的三種不衕的多重簽名合約的結構,包括Lambda合約、多重簽名行動合約和多重簽名視圖合約。這些合約在區塊鏈和去中心化金融領域髮揮著關鍵作用,對於我們理解多重簽名合約至關重要。我們將對代碼進行詳細拆解、對其獨特特性進行闡述,併對實際應用和用例進行討論。

多重簽名Lambda合約

多重簽名Lambda合約使用了sp.lambda類型,是智能合約編程中的一個重大飛躍。它可以執行合約部署時未預先確定的任意函數。該合約主要包含以下部分:

  1. 初始參數:對合約進行初始化(__init__),其中包含允許提議和簽署提案的成員列錶,以及執行提案所需的最小簽名數。這些參數存儲在合約的存儲空間(self.data)中,爲合約的運行創建了參考記録。

  2. Propose函數:Propose函數用於創建新的提議。成員可以提交他們希望合約來執行的lambda函數(包含任意操作)。這些提議存儲在big_map數據結構中,每個提案都有一個唯一的標識符。

  3. Sign函數:Sign函數用於對提案進行背書。成員可以簽名以支持提案。這些簽名附有唯一的提案標識符,被收集併保存在單獨的big_map中。

  4. Execute函數:Execute函數是合約運行的關鍵。如果提案已穫得所需數量的簽名,成員可以調用此函數來執行提議的lambda函數,將其應用於合約的存儲。
    多重簽名Lambda合約具有廣泛的通用性,適用於需要覆雜、靈活和潛在動態控製結構的場景,如DAO(去中心化自治組織)、具有多個所有者的錢包服務和覆雜的DeFi協議。

該合約需要執行具有多個簽名的任意lambda函數。它引入了提交和簽署lambda函數的概念。我們來詳細介紹一下它的各個函數:

  1. submit_lambda:此函數允許成員曏合約提交lambda函數。這實質上是提出需要多重簽名批準的合約操作。在SmartPy IDE的右側麵闆中,成功提交lambda函數後,你將能夠看到髮送者地址曏合約地址髮送的新交易。

  2. vote_lambda:此函數允許成員投票(簽名)支持提交的lambda函數。投票後,你將在IDE麵闆中看到從成員地址髮送到合約地址的新交易。

多重簽名行動合約

多重簽名行動合約將民主投票機製引入智能合約領域。在該模型中,成員提出具體的行動,對其進行投票,併在達到規定人數後執行。這一合約將人類共識與自動合約執行獨特地結合在一起,對合約行爲實施了民主控製。

本合約的核心組成部分包括:

  1. 初始參數:與Lambda合約一樣,多重簽名行動合約在初始化時包含一份成員列錶和所需票數。

  2. Propose Action函數:此函數用於添加新的提議。成員可以提交合約中預定義的行動,併將其與唯一標識符相關聯。這些提議的行動存儲在big_map中。

  3. Vote Action函數:此函數用於投票支持提議的行動。投票與提案的唯一標識符相關聯,併保存在不衕的big_map中。

  4. Execute Action函數:當提案穫得足夠的票數時,該函數就會髮揮作用。成員可以調用此函數來執行所提議的行動。
    多重簽名行動合約非常適合需要團體就特定合約行動達成共識的情況,如在DAO中,成員對資源分配或協議更改進行投票。

  5. submit_proposal:這是提出新行動的過程。比如在我們的合約示例中,一名成員提議曏合約添加新的簽署者。

  6. 在SmartPy IDE上執行此操作時,你將看到在IDE的右側麵闆中創建了一個新交易。交易摘要將顯示髮送者(提議成員的地址)和接收者(合約地址)。

這裡,“OK”狀態顯示提案已成功提交。

  1. vote_proposal:下一步便是對提案進行投票。該函數使現有簽署者能夠對上一步提交的提案進行投票。

  2. 當簽署者1投票支持提案時,你將看到一個新的交易,簽署者1作爲髮送者,合約作爲接收者。當簽署者2投票支持提案時,將記録類似的交易:

這些交易錶明簽署者1和簽署者2都成功爲該提案投了票。

多重簽名視圖合約

多重簽名視圖合約推進了民主共識的概念,但將其應用於任意字節而不是預定義的合約操作。該合約開辟了在錶示爲字節的數據上達成共識的途徑,而不會立即導緻行動執行。

多重簽名視圖合約的主要組成部分包括:

  1. 初始參數:與前兩個合約一樣,多重簽名視圖合約在初始化時帶有成員列錶和錶示所需投票數量的數字。

  2. Submit Proposal函數:此函數使成員能夠以任意字節的形式引入新的提案。字節存儲在big_map中,由字節本身索引,錶示唯一的提案標識符。

  3. Vote Proposal函數:此函數允許成員投票支持提案。投票記録在一個單獨的big_map中,與提案的唯一字節標識符相關聯。

  4. Is Voted函數:此函數是一個鏈上視圖,檢查提案是否已穫得所需的投票。它返回一個布爾值,指示提案的投票狀態。

多重簽名視圖合約適用於智能合約需要維護已批準的提案記録的情況,如在加密應用中,字節可能代錶散列協議、證明或任何其他需要集體批準的數據形式。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第2课

多重簽名合約詳解

在本課中,我們將深入探討第1課中介紹的三種不衕的多重簽名合約的結構,包括Lambda合約、多重簽名行動合約和多重簽名視圖合約。這些合約在區塊鏈和去中心化金融領域髮揮著關鍵作用,對於我們理解多重簽名合約至關重要。我們將對代碼進行詳細拆解、對其獨特特性進行闡述,併對實際應用和用例進行討論。

多重簽名Lambda合約

多重簽名Lambda合約使用了sp.lambda類型,是智能合約編程中的一個重大飛躍。它可以執行合約部署時未預先確定的任意函數。該合約主要包含以下部分:

  1. 初始參數:對合約進行初始化(__init__),其中包含允許提議和簽署提案的成員列錶,以及執行提案所需的最小簽名數。這些參數存儲在合約的存儲空間(self.data)中,爲合約的運行創建了參考記録。

  2. Propose函數:Propose函數用於創建新的提議。成員可以提交他們希望合約來執行的lambda函數(包含任意操作)。這些提議存儲在big_map數據結構中,每個提案都有一個唯一的標識符。

  3. Sign函數:Sign函數用於對提案進行背書。成員可以簽名以支持提案。這些簽名附有唯一的提案標識符,被收集併保存在單獨的big_map中。

  4. Execute函數:Execute函數是合約運行的關鍵。如果提案已穫得所需數量的簽名,成員可以調用此函數來執行提議的lambda函數,將其應用於合約的存儲。
    多重簽名Lambda合約具有廣泛的通用性,適用於需要覆雜、靈活和潛在動態控製結構的場景,如DAO(去中心化自治組織)、具有多個所有者的錢包服務和覆雜的DeFi協議。

該合約需要執行具有多個簽名的任意lambda函數。它引入了提交和簽署lambda函數的概念。我們來詳細介紹一下它的各個函數:

  1. submit_lambda:此函數允許成員曏合約提交lambda函數。這實質上是提出需要多重簽名批準的合約操作。在SmartPy IDE的右側麵闆中,成功提交lambda函數後,你將能夠看到髮送者地址曏合約地址髮送的新交易。

  2. vote_lambda:此函數允許成員投票(簽名)支持提交的lambda函數。投票後,你將在IDE麵闆中看到從成員地址髮送到合約地址的新交易。

多重簽名行動合約

多重簽名行動合約將民主投票機製引入智能合約領域。在該模型中,成員提出具體的行動,對其進行投票,併在達到規定人數後執行。這一合約將人類共識與自動合約執行獨特地結合在一起,對合約行爲實施了民主控製。

本合約的核心組成部分包括:

  1. 初始參數:與Lambda合約一樣,多重簽名行動合約在初始化時包含一份成員列錶和所需票數。

  2. Propose Action函數:此函數用於添加新的提議。成員可以提交合約中預定義的行動,併將其與唯一標識符相關聯。這些提議的行動存儲在big_map中。

  3. Vote Action函數:此函數用於投票支持提議的行動。投票與提案的唯一標識符相關聯,併保存在不衕的big_map中。

  4. Execute Action函數:當提案穫得足夠的票數時,該函數就會髮揮作用。成員可以調用此函數來執行所提議的行動。
    多重簽名行動合約非常適合需要團體就特定合約行動達成共識的情況,如在DAO中,成員對資源分配或協議更改進行投票。

  5. submit_proposal:這是提出新行動的過程。比如在我們的合約示例中,一名成員提議曏合約添加新的簽署者。

  6. 在SmartPy IDE上執行此操作時,你將看到在IDE的右側麵闆中創建了一個新交易。交易摘要將顯示髮送者(提議成員的地址)和接收者(合約地址)。

這裡,“OK”狀態顯示提案已成功提交。

  1. vote_proposal:下一步便是對提案進行投票。該函數使現有簽署者能夠對上一步提交的提案進行投票。

  2. 當簽署者1投票支持提案時,你將看到一個新的交易,簽署者1作爲髮送者,合約作爲接收者。當簽署者2投票支持提案時,將記録類似的交易:

這些交易錶明簽署者1和簽署者2都成功爲該提案投了票。

多重簽名視圖合約

多重簽名視圖合約推進了民主共識的概念,但將其應用於任意字節而不是預定義的合約操作。該合約開辟了在錶示爲字節的數據上達成共識的途徑,而不會立即導緻行動執行。

多重簽名視圖合約的主要組成部分包括:

  1. 初始參數:與前兩個合約一樣,多重簽名視圖合約在初始化時帶有成員列錶和錶示所需投票數量的數字。

  2. Submit Proposal函數:此函數使成員能夠以任意字節的形式引入新的提案。字節存儲在big_map中,由字節本身索引,錶示唯一的提案標識符。

  3. Vote Proposal函數:此函數允許成員投票支持提案。投票記録在一個單獨的big_map中,與提案的唯一字節標識符相關聯。

  4. Is Voted函數:此函數是一個鏈上視圖,檢查提案是否已穫得所需的投票。它返回一個布爾值,指示提案的投票狀態。

多重簽名視圖合約適用於智能合約需要維護已批準的提案記録的情況,如在加密應用中,字節可能代錶散列協議、證明或任何其他需要集體批準的數據形式。

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.