Leçon 3

了解FA1.2合约

欢迎参加代币化课程第三课的学习。在部署好完整的代币合约后,我们将对合约代码进行逐步分析,了解不同的元素。本课旨在让您深入了解FA1.2代币合约是如何构建的。

1. 管理员(Admin)合约

我们的代币合约中的Admin合约类负责定义管理权限。它包括一个单一的入口点:setAdministrator。此入口点允许当前管理员分配新的管理员。

Python
class Admin(sp.Contract):
    def __init__(self, administrator):
        self.init(administrator=administrator)

    @sp.entrypointdef setAdministrator(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.administrator = params

使用setAdministrator函数用于验证只有当前管理员可以执行此函数。如果验证失败,则拒绝该操作。如果验证通过,则继续分配新的管理员。

2. 暂停(Pause)合约

合约Pause类提供了一种暂停和取消暂停合约操作的机制,它包括一个入口点setPause,可以更改合约的暂停状态。

Python
class Pause(sp.Contract):
    def __init__(self):
        self.init(paused=False)

    @sp.entrypointdef setPause(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.paused = params

函数setPause首先检查操作是否由管理员执行。若是,则更新合约的暂停状态。

3. 铸币(Mint)合约

使用Mint合约类可以增加代币供应量。它带有一个名为mint的入口点,可以增加总供应量并更新特定地址的余额。

Python
class Mint(sp.Contract):
    @sp.entrypointdef mint(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.total_supply += params.value
        self.data.balances[params.address].balance += params.value

mint函数首先验证发送者是否为管理员。若是,则增加总供应量和指定地址的余额。

4. 销毁(Burn)合约

Burn合约类用于减少代币供应。它有一个burn入口点,用于减少总供应和特定地址的余额。

Python
class Burn(sp.Contract):
    @sp.entrypointdef burn(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.total_supply -= params.value
        self.data.balances[params.address].balance -= params.value

burn函数的操作类似于mint函数,但用途是减少总供应和指定地址的余额。

以下代码可以让管理员销毁Bob代币。

Python
  sc.h2("Admin burns Bob token")
        c1.burn(address=bob.address, value=1).run(sender=admin)

5. 修改元数据(ChangeMetadata)合约

ChangeMetadata合约类用于更新合约的元数据。它包括函数update_metadata,用于更新元数据中的键值对。

Python
class ChangeMetadata(sp.Contract):
    @sp.entrypointdef update_metadata(self, key, value):
        sp.verify(sp.sender == self.data.administrator)
        self.data.metadata[key] = value

与前面的函数类似,update_metadata函数验证发送者是否是管理员。若是,则会更新元数据中指定的键值对。

在下一课中,我们将深入研究包含所有这些功能的最终合约Fa1_2TestFull。我们将学习该合约如何将我们今天讨论的所有类结合起来,并增强代币功能。请继续关注!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 3

了解FA1.2合约

欢迎参加代币化课程第三课的学习。在部署好完整的代币合约后,我们将对合约代码进行逐步分析,了解不同的元素。本课旨在让您深入了解FA1.2代币合约是如何构建的。

1. 管理员(Admin)合约

我们的代币合约中的Admin合约类负责定义管理权限。它包括一个单一的入口点:setAdministrator。此入口点允许当前管理员分配新的管理员。

Python
class Admin(sp.Contract):
    def __init__(self, administrator):
        self.init(administrator=administrator)

    @sp.entrypointdef setAdministrator(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.administrator = params

使用setAdministrator函数用于验证只有当前管理员可以执行此函数。如果验证失败,则拒绝该操作。如果验证通过,则继续分配新的管理员。

2. 暂停(Pause)合约

合约Pause类提供了一种暂停和取消暂停合约操作的机制,它包括一个入口点setPause,可以更改合约的暂停状态。

Python
class Pause(sp.Contract):
    def __init__(self):
        self.init(paused=False)

    @sp.entrypointdef setPause(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.paused = params

函数setPause首先检查操作是否由管理员执行。若是,则更新合约的暂停状态。

3. 铸币(Mint)合约

使用Mint合约类可以增加代币供应量。它带有一个名为mint的入口点,可以增加总供应量并更新特定地址的余额。

Python
class Mint(sp.Contract):
    @sp.entrypointdef mint(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.total_supply += params.value
        self.data.balances[params.address].balance += params.value

mint函数首先验证发送者是否为管理员。若是,则增加总供应量和指定地址的余额。

4. 销毁(Burn)合约

Burn合约类用于减少代币供应。它有一个burn入口点,用于减少总供应和特定地址的余额。

Python
class Burn(sp.Contract):
    @sp.entrypointdef burn(self, params):
        sp.verify(sp.sender == self.data.administrator)
        self.data.total_supply -= params.value
        self.data.balances[params.address].balance -= params.value

burn函数的操作类似于mint函数,但用途是减少总供应和指定地址的余额。

以下代码可以让管理员销毁Bob代币。

Python
  sc.h2("Admin burns Bob token")
        c1.burn(address=bob.address, value=1).run(sender=admin)

5. 修改元数据(ChangeMetadata)合约

ChangeMetadata合约类用于更新合约的元数据。它包括函数update_metadata,用于更新元数据中的键值对。

Python
class ChangeMetadata(sp.Contract):
    @sp.entrypointdef update_metadata(self, key, value):
        sp.verify(sp.sender == self.data.administrator)
        self.data.metadata[key] = value

与前面的函数类似,update_metadata函数验证发送者是否是管理员。若是,则会更新元数据中指定的键值对。

在下一课中,我们将深入研究包含所有这些功能的最终合约Fa1_2TestFull。我们将学习该合约如何将我们今天讨论的所有类结合起来,并增强代币功能。请继续关注!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.