Lección 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函数:此函数是一个链上视图,检查提案是否已获得所需的投票。它返回一个布尔值,指示提案的投票状态。

多重签名视图合约适用于智能合约需要维护已批准的提案记录的情况,如在加密应用中,字节可能代表散列协议、证明或任何其他需要集体批准的数据形式。

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 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函数:此函数是一个链上视图,检查提案是否已获得所需的投票。它返回一个布尔值,指示提案的投票状态。

多重签名视图合约适用于智能合约需要维护已批准的提案记录的情况,如在加密应用中,字节可能代表散列协议、证明或任何其他需要集体批准的数据形式。

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.