#guard #account #mint #candy #nft #token #machine

mpl-core-candy-guard

Metaplex Candy Guard:Candy Machine 的程序化访问控制

1 个不稳定版本

0.2.1 2024年4月18日

#4 in #candy

自定义许可

330KB
4.5K SLoC

Metaplex Candy Guard


💡 更新

从 Candy Guard v0.2.0 版本开始,initializeupdate 指令的参数序列化逻辑期望一个表示自定义序列化结构的 [u8]。这是为了确保将来添加新的守卫时不会影响客户端。

如果您使用的是 mpl-candy-guard npm 包,可以使用以下方式序列化 CandyMachineData 对象:

import { serialize } from '@metaplex-foundation/mpl-candy-guard';

const data = { ... };
const serializedData = serialize(data);

如果您使用的是 mpl-candy-guard Rust 包,可以使用以下方式序列化 CandyMachineData 结构体:

let data = CandyGuardData { ... };
let mut serialized_data = vec![0; data.size()];
data.save(&mut serialized_data)?;

概述

新的 Candy Guard 程序旨在将 Candy Machine 的访问控制逻辑移除,以处理额外的铸造功能,而 Candy Machine 程序保留其核心铸造功能——NFT 的创建。这不仅提供了清晰的 访问控制铸造逻辑 之间的分离,还提供了一个模块化和灵活的架构,无需修改 Candy Machine 程序即可添加或删除铸造功能。

Candy Guard 上的访问控制封装在代表需要满足的特定规则的个体守卫中,可以启用或禁用。例如,铸造的直播日期表示为 LiveDate 守卫。只有当交易时间在守卫配置的起始时间或之后时,该守卫才满足条件。其他守卫可以验证访问控制的各个方面——例如,确保用户持有特定令牌(令牌门控)。

注意 Candy Guard 程序只能与 Candy Machine Core (Candy Machine V3) 账户一起使用。当 Candy Guard 与 Candy Machine 一起使用时,它成为其铸造权限,铸造只能通过 Candy Guard 完成。

程序如何工作?

image

糖果守护者程序的主要目的是保存薄荷 守护者 的配置,并在用户从糖果机中铸造之前应用它们。如果所有启用的守护者条件都有效,铸造交易将被转发到糖果机。

当收到铸造交易时,程序执行以下步骤

  1. 验证交易是否符合所有启用的守护者。
    • 如果在此点失败任何守护者,交易将受到 BotTax(当 BotTax 守护者启用时)的影响,并且交易将被终止。
  2. 在评估所有守护者都有效后,它将在每个守护者上调用 pre_actions 函数。此函数负责执行任何在铸造 之前 的操作(例如,收取铸造费用)。
  3. 然后,将交易转发到糖果机程序进行 NFT 铸造。
  4. 最后,它将在每个启用的守护者上调用 post_actions 函数。此函数负责执行任何在铸造 之后 的操作(例如,冻结 NFT,更改更新权限)。

守护者 是一个模块化代码片段,可以轻松添加到糖果守护者程序中,为支持特定功能提供极大的灵活性和简单性,而无需直接修改糖果机程序。通过遵循特定的接口支持添加新的守护者,更改被隔离到单个守护者中——例如,每个守护者可以独立创建和修改。这种架构还提供了灵活性,可以在不要求代码更改的情况下启用/禁用守护者,因为每个守护者都有一个启用/禁用“开关”。

糖果守护者程序包含一组可启用/禁用的核心访问控制守护者

  • AddressGate:将铸造限制为单个地址
  • Allocation:指定一组(守护者集)中铸造的最大数量
  • AllowList:使用钱包地址列表来决定谁可以铸造
  • BotTax:对无效交易可配置的税费(金额)
  • EndDate:确定结束铸造的日期
  • FreezeSolPayment:以 SOL 的价格设置铸造,并带有冻结期
  • FreezeTokenPayment:以 spl-token 的金额设置铸造,并带有冻结期
  • Gatekeeper:验证码集成
  • MintLimit:指定每个钱包的铸造数量限制
  • NftBurn:将铸造限制为特定收藏的持有人,需要销毁 NFT
  • NftGate:将铸造限制为特定收藏的持有人
  • NftPayment:将铸造价格设置为指定收藏的 NFT
  • ProgramGate:限制可以包含在铸造交易中的程序
  • RedeemedAmount:根据已铸造的总金额确定铸造的结束
  • SolPayment:以 SOL 的价格设置铸造
  • StartDate:确定铸造的开始日期
  • ThirdPartySigner:要求在交易上有一个额外的签署者
  • TokenBurn:将铸造限制为特定 spl-token 的持有人,需要销毁代币
  • TokenGate:将铸造限制为特定 spl-token 的持有人
  • TokenPayment:以 spl-token 的金额设置铸造价格

除了这些守护者之外,社区中的优秀团队正在制作具有新和酷检查的守护者程序。以下是一些已创建守护者的团队

账户

糖果守护者配置存储在一个单独的账户中。有关已启用守护者的信息存储在账户的“隐藏”部分,以避免不必要的反序列化。

字段 偏移量 大小 描述
0 8 锚账户区分符。
基础 8 32 PubKey用于推导PDA密钥。种子由["candy_guard", base pubkey]定义。
bump 40 1 u8表示推导的bump。
权限 41 32 PubKey控制糖果守护者的权限地址。
隐藏部分 73 ~ 隐藏数据部分以避免不必要的反序列化。该账户部分用于序列化守护者数据。
- 功能 73 8 指示哪些守护者被序列化的功能标志。
- 守护者集合 81 ~ (可选) 一系列序列化的守护者结构。
- 组计数器 ~ 4 u32指定使用的组数。
- ~ ~ (可选) 一系列表示不同守护者集合的Group结构。每个组由以下内容定义:
-- 标签 ~ 6 组的标签。
-- 功能 ~ 8 指示为该组序列化的哪些守护者的功能标志。
-- 守护者集合 ~ ~ (可选) 一系列序列化的守护者结构。

由于启用的守护者和组数是可变的,所以账户大小在update指令期间动态调整,以适应更新的配置。

指令

📄 initialize

此指令创建并初始化一个新的CandyGuard账户。

账户
名称 可写 签名者 描述
candy_guard CandyGuard账户PDA密钥。PDA是通过种子["candy_guard", base pubkey]推导出来的。
基础 用于PDA推导的基本公钥。
权限 糖果守护者权限的公钥。
付款人 交易付款人。
系统程序 SystemProgram账户。
参数
参数 偏移量 大小 描述
数据 0 ~ 序列化的CandyGuardData对象,作为[u8]

该指令使用自定义序列化以保持与先前版本的CandyGuardData结构的向后兼容性。

📄 mint(已弃用)

此指令从由糖果守护者“包装”的糖果机中铸造NFT。只有当交易成功验证后,它才会转发到糖果机。

账户
名称 可写 签名者 描述
candy_guard CandyGuard账户PDA密钥。PDA是通过种子["candy_guard", base pubkey]推导出来的。
candy_machine_program CandyMachine程序ID。
candy_machine CandyMachine账户。
candy_machine_authority_pda 权限PDA密钥(种子["candy_machine", candy_machine pubkey])。
付款人 交易付款人。
nft_metadata NFT的元数据账户。
nft_mint NFT的铸造账户。应在执行指令之前创建该账户。
nft_mint_authority NFT的铸造权限。
nft_master_edition NFT的主版账户。
collection_authority_record 收藏权限记录PDA。
collection_mint 收藏的铸造账户。
collection_metadata 收藏的元数据账户。
collection_master_edition 收藏的Master Edition账户。
collection_update_authority 收藏的更新权限。
token_metadata_program Metaplex TokenMetadata 程序ID。
token_program spl-token 程序ID。
系统程序 SystemProgram账户。
rent Rent 账户。
recent_slothashes SlotHashes 账户。
instruction_sysvar_account Sysvar1nstructions 账户。
remaining accounts (可选) 单个守卫所需的可选账户列表。
参数
参数 偏移量 大小 描述
mint_args 0 ~ [u8] 表示守卫的参数;如果没有参数,则为空 [u8]
label ~ 6 (可选) 代表用于验证守卫的组标签的 string

📄 mint_v2

此指令从由Candy Guard "包装"的Candy Machine中铸造NFT或pNFT。只有当交易成功验证时,它才会转发到Candy Machine。

账户
名称 可写 签名者 描述
candy_guard CandyGuard账户PDA密钥。PDA是通过种子["candy_guard", base pubkey]推导出来的。
candy_machine_program CandyMachine程序ID。
candy_machine CandyMachine账户。
candy_machine_authority_pda 权限PDA密钥(种子["candy_machine", candy_machine pubkey])。
付款人 交易付款人。
minter NFT的所有者(铸造者)。
nft_mint NFT的铸造账户。应在执行指令之前创建该账户。
nft_mint_authority NFT的铸造权限。
nft_metadata NFT的元数据账户。
nft_master_edition NFT的主版账户。
token (可选) NFT代币账户。
token_record (可选) 元数据 TokenRecord 账户(对于pNFT是必需的)
collection_delegate_record 收藏的元数据代理记录。
collection_mint 收藏的铸造账户。
collection_metadata 收藏的元数据账户。
collection_master_edition 收藏的Master Edition账户。
collection_update_authority 收藏的更新权限。
token_metadata_program Metaplex TokenMetadata 程序ID。
spl_token_program spl-token 程序ID。
spl_ata_program (可选) spl 相关代币程序。
系统程序 SystemProgram账户。
sysvar_instructions sysvar::instructions 账户。
recent_slothashes SlotHashes 系统变量集群数据。
authorization_rules_program (可选) 代币授权规则程序。
authorization_rules (可选) 代币授权规则账户。
remaining accounts (可选) 单个守卫所需的可选账户列表。
参数
参数 偏移量 大小 描述
mint_args 0 ~ [u8] 表示守卫的参数;如果没有参数,则为空 [u8]
label ~ 6 (可选) 代表用于验证守卫的组标签的 string

📄 route

此指令将交易路由到守卫,允许执行自定义守卫指令。交易可以包括守卫指令所需的任何其他账户。将接收交易和任何其他参数的守卫指定在 RouteArgs 结构中。

账户
名称 可写 签名者 描述
candy_guard CandyGuard 账户PDA密钥。
candy_machine CandyMachine账户。
付款人 交易付款人。
remaining accounts (可选) 守卫指令所需的可选账户列表。
参数
参数 大小 描述
args RouteArgs 结构。
- guard 1 枚举 GuardType 的值
- data ~ 代表指令参数的 [u8];如果没有参数,则为空 [u8]
label 6 (可选) 表示用于检索守卫集的组标签的字符串。

📄 unwrap

此指令从Candy Machine中移除Candy Guard,将Candy Machine的铸造权限设置为Candy Machine权限。Candy Gard public key 必须与Candy Machine mint_authority 匹配,才能使此指令成功。

账户
名称 可写 签名者 描述
candy_guard CandyGuard 账户PDA密钥。
权限 Candy Guard 权限的公钥。
candy_machine CandyMachine账户。
candy_machine_authority Candy Machine 权限的公钥。
candy_machine_program CandyMachine程序ID。
参数

None。

📄 update

此指令更新Candy Guard配置。由于存在灵活数量的守卫和组可以存在,此指令将相应地调整账户大小,要么增加要么减少账户大小。因此,将会有租金费用或租金lamports的提款。

账户
名称 可写 签名者 描述
candy_guard CandyGuard 账户PDA密钥。
权限 Candy Guard 权限的公钥。
付款人 交易付款人。
系统程序 SystemProgram账户。
参数
参数 偏移量 大小 描述
数据 0 ~ 序列化的CandyGuardData对象,作为[u8]

该指令使用自定义序列化以保持与先前版本的CandyGuardData结构的向后兼容性。

📄 withdraw

此指令从账户中提款租金lamports并关闭它。执行此指令后,Candy Guard账户将不再运行。

账户
名称 可写 签名者 描述
candy_guard Candy Guard 账户。
权限 Candy Guard 权限的公钥。
参数

None。

📄 wrap

本指令为糖果机添加糖果守护者。添加守护者后,只有通过糖果守护者才能进行铸币。

账户
名称 可写 签名者 描述
candy_guard CandyGuard 账户PDA密钥。
权限 Candy Guard 权限的公钥。
candy_machine CandyMachine账户。
candy_machine_authority Candy Machine 权限的公钥。
candy_machine_program CandyMachine程序ID。
参数

None。

守护者

地址门

pub struct AddressGate {
    address: Pubkey,
}

AddressGate 守护者将铸币限制为单个 address — 该地址必须与铸币事务的付款人地址匹配。

分配

pub struct Allocation {
    pub id: u8,
    pub size: u16,
}

Allocation 守护者指定一组(守护者集)中允许的最大铸币数量。 id 配置代表分配的唯一标识 — 更改 id 会重置限制,因为将创建不同的跟踪账户。 size 指示分配的最多铸币数量。

账户
名称 可写 签名者 描述
铸币追踪器 铸币追踪器 PDA。PDA 通过种子 ["allocation", allocation id, candy guard 公钥, candy machine 公钥] 生成。

路由指令

在验证第一个铸币事务之前,需要创建分配 PDA。这通过具有以下账户和 RouteArgsroute 指令来完成。

账户
名称 可写 签名者 描述
证明 PDA 代表分配的 PDA(种子 ["allocation", allocation id, candy guard 公钥, candy machine 公钥])。
权限 糖果守护者权限
系统程序 系统程序账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.分配
- data 0

允许列表

pub struct AllowList {
    pub merkle_root: [u8; 32],
}

AllowList 守护者通过基于 Merkle 树的地址允许列表验证付款人地址。它需要一个 Merkle 树的根作为配置,并且铸币事务必须包含 Merkle 证明的 PDA。如果没有指定证明,事务将失败。

账户
名称 可写 签名者 描述
证明 PDA Merkle 证明的 PDA(种子 ["allow_list", Merkle 树根, 铸币者密钥, candy guard 公钥, candy machine 公钥])。

路由指令

必须在铸币事务之前完成 Merkle 证明验证。这通过以下账户和 RouteArgsroute 指令来完成。

账户
名称 可写 签名者 描述
证明 PDA 代表 Merkle 证明的 PDA(种子 ["allow_list", Merkle 树根, 付款人/铸币者密钥, candy guard 公钥, candy machine 公钥])。
系统程序 系统程序账户。
minter (可选)要验证的铸币者账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.允许列表
- data ~ Merkle 证明哈希值的 Vec

机器人税

pub struct BotTax {
    pub lamports: u64,
    pub last_instruction: bool,
}

BotTax 守护者用于

  • 对无效交易征收罚款。罚款金额由 lamports 配置指定。
  • 验证铸币事务是最后一个交易(last_instruction = true)。

当验证守护者时发生的任何错误都将应用 bot_tax

结束日期

pub struct EndDate {
    pub date: i64,
}

EndDate 守护者用于指定铸币结束的日期。任何在结束日期之后接收到的交易都将失败。

FreezeSolPayment

pub struct FreezeSolPayment {
    pub lamports: u64,
    pub destination: Pubkey,
}

FreezeSolPayment 守卫用于在冻结期间对铸币收取一定数量的 SOL(lamports)。资金将被转入冻结托管账户,直到所有 NFT 解冻,此时可以(解锁)转移到目标账户。

注意:在开始铸币之前,必须使用 initialize 路由指令初始化冻结功能。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination pubkey, candy guard pubkey, candy machine pubkey])。
nft_ata 关联 NFT 的代币账户(种子 [payer pubkey, token program pubkey, nft mint pubkey])。
rule_set (可选)铸成的 pNFT 的授权规则集。

路由指令

initialize:初始化冻结托管 PDA。
账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination pubkey, candy guard pubkey, candy machine pubkey])。
权限 糖果守护者权限。
系统程序 系统程序账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeSolPayment
- data ~
-- ix 1 FreezeInstruction.Initialize
-- period 8 冻结期限(以秒为单位,最长 30 天)
thaw:解冻符合条件的 NFT。
账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination pubkey, candy guard pubkey, candy machine pubkey])。
nft_mint NFT 铸币账户。
owner NFT 持有者的地址。
nft_ata 关联 NFT 的代币账户(种子 [owner pubkey, token program pubkey, nft mint pubkey])。
nft_master_edition NFT的主版账户。
token_program spl-token 程序ID。
token_metadata_program Metaplex TokenMetadata 程序。
以下是 pNFT 所需的账户
nft_metadata NFT的元数据账户。
freeze_pda_ata NFT 的冻结 PDA 关联代币账户。
系统程序 系统程序。
sysvar_instructions Sysvar 指令账户。
spl_ata_program SPL 关联代币账户程序。
owner_token_record 所有者代币记录账户。
freeze_pda_token_record 冻结 PDA 代币记录账户。
authorization_rules_program (可选) 代币授权规则程序。
authorization_rules (可选) 代币授权规则账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeSolPayment
- data 1
-- ix 1 FreezeInstruction.Thaw
unlock_funds:解锁冻结资金。

只有当所有冻结的 NFT 都解冻后,才能启用解锁资金。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination pubkey, candy guard pubkey, candy machine pubkey])。
权限 糖果守护者权限。
destination 接收资金的地址(必须与守卫配置中的 destination 地址匹配)。
系统程序 SystemProgram账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeSolPayment
- data 1
-- ix 1 FreezeInstruction.UnlockFunds

FreezeTokenPayment

pub struct FreezeTokenPayment {
    pub amount: u64,
    pub mint: Pubkey,
    pub destination_ata: Pubkey,
}

FreezeTokenPayment 守卫用于使用指定 spl-token 收取铸币的金额,并带有冻结期。资金将被转入冻结托管账户,直到所有 NFT 解冻,此时可以(解锁)转移到目标账户。

注意:在开始铸币之前,必须使用 initialize 路由指令初始化冻结功能。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination_ata pubkey, candy guard pubkey, candy machine pubkey])。
nft_ata 关联 NFT 的代币账户(种子 [payer pubkey, token program pubkey, nft mint pubkey])。
token_account 持有所需金额的代币账户(种子 [payer pubkey, token program pubkey, mint pubkey])。
freeze_ata 冻结 PDA 的关联代币账户(种子 [freeze PDA pubkey, token program pubkey, nft mint pubkey])。
rule_set (可选)铸成的 pNFT 的授权规则集。

路由指令

initialize:初始化冻结托管 PDA。
账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination_ata pubkey, candy guard pubkey, candy machine pubkey])。
权限 糖果守护者权限。
系统程序 系统程序账户。
freeze_ata 冻结 PDA 的关联代币账户(种子 [freeze PDA pubkey, token program pubkey, nft mint pubkey])。
token_mint 代币铸币账户(必须与守卫配置中的 mint 地址匹配)。
token_program spl-token 程序ID。
associate_token_program 关联代币程序账户。
destination_ata 接收资金的地址(必须与守卫配置中的 destination_ata 地址匹配)。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeTokenPayment
- data 9
-- ix 1 FreezeInstruction.Initialize
-- period 8 冻结期限(以秒为单位,最长 30 天)
thaw:解冻符合条件的 NFT。
账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination_ata pubkey, candy guard pubkey, candy machine pubkey])。
nft_mint NFT 铸币账户。
owner NFT 持有者的地址。
nft_ata 关联 NFT 的代币账户(种子 [owner pubkey, token program pubkey, nft mint pubkey])。
nft_master_edition NFT的主版账户。
token_program spl-token 程序ID。
系统程序 SystemProgram账户。
以下是 pNFT 所需的账户
nft_metadata NFT的元数据账户。
freeze_pda_ata NFT 的冻结 PDA 关联代币账户。
系统程序 系统程序。
sysvar_instructions Sysvar 指令账户。
spl_ata_program SPL 关联代币账户程序。
owner_token_record 所有者代币记录账户。
freeze_pda_token_record 冻结 PDA 代币记录账户。
authorization_rules_program (可选) 代币授权规则程序。
authorization_rules (可选) 代币授权规则账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeTokenPayment
- data 1
-- ix 1 FreezeInstruction.Thaw
unlock_funds:解锁冻结资金。

只有当所有冻结的 NFT 都解冻后,才能启用解锁资金。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结 PDA(种子 ["freeze_escrow", destination_ata pubkey, candy guard pubkey, candy machine pubkey])。
权限 糖果守护者权限。
freeze_ata 冻结 PDA 的关联代币账户(种子 [freeze PDA pubkey, token program pubkey, nft mint pubkey])。
destination_ata 接收资金的地址(必须与守卫配置中的 destination_ata 地址匹配)。
token_program spl-token 程序ID。
系统程序 SystemProgram账户。
参数
参数 大小 描述
args RouteArgs 结构体
- guard 1 守护者类型.FreezeTokenPayment
- data 1
-- ix 1 FreezeInstruction.UnlockFunds

门卫

pub struct Gatekeeper {
    pub gatekeeper_network: Pubkey,
    pub expire_on_use: bool,
}

门卫守卫验证交易付款人是否具有指定网关网络(通常是完成验证码挑战后的 令牌)。expire_on_use 配置用于指示令牌在铸造后是否应该过期。

账户
名称 可写 签名者 描述
gatekeeper_token_account 门卫令牌账户。
gatekeeper_program 门卫程序账户。
network_expire_feature 门卫过期账户。

MintLimit

pub struct MintLimit {
    pub id: u8,
    pub limit: u16,
}

MintLimit 守卫允许为每个地址指定铸造次数的限制。配置中的 id 表示限制的唯一标识符——更改 id 的效果是重新启动限制,因为将创建不同的跟踪账户。指示的 limit 表示允许的最大铸造次数。

账户
名称 可写 签名者 描述
mint_count 铸造计数 PDA。PDA 是使用种子 ["mint_limit", mint guard id, payer key, candy guard pubkey, candy machine pubkey]》推导出来的。

NftBurn

pub struct NftBurn {
    pub required_collection: Pubkey,
}

NftBurn 守卫限制铸造仅限于持有另一个 NFT(令牌)的持有人,要求 NFT 在允许铸造时被烧毁。

账户
名称 可写 签名者 描述
nft_account NFT 的令牌账户。
nft_metadata NFT的元数据账户。
nft_edition NFT的主版账户。
nft_mint_account NFT 的铸造账户。
nft_mint_collection_metadata NFT 的收藏元数据账户。
nft_token_record (可选) NFT 的令牌记录(pNFT)。

NftGate

pub struct NftGate {
    pub required_collection: Pubkey,
}

NftGate 守卫限制铸造仅限于持有指定 required_collection NFT 收藏的持有人。付款人必须至少持有该收藏中的一个 NFT。

账户
名称 可写 签名者 描述
nft_account NFT 的令牌账户。
nft_metadata NFT的元数据账户。

NftPayment

pub struct NftPayment {
    pub required_collection: Pubkey,
    pub destination: Pubkey,
}

NftPayment 守卫是一种支付守卫,它要求为铸造从特定收藏中收取另一个 NFT(令牌)。作为铸造的要求,指定的 NFT 被转移到配置的 destination 地址。

账户
名称 可写 签名者 描述
nft_account NFT 的令牌账户。
nft_metadata NFT的元数据账户。
nft_mint_account NFT 的铸造账户。
destination 接收 NFT 的账户。
destination_ata 目标 PDA 密钥(种子 [destination pubkey, token program id, nft_mint pubkey])。
atoken_progam spl-associate-token 程序。
owner_token_record (可选) 拥有者令牌记录账户(pNFT)。
destination_token_record (可选) 冻结 PDA 令牌记录账户(pNFT)。
authorization_rules_program (可选) 令牌授权规则程序(pNFT)。
authorization_rules (可选) 令牌授权规则账户(pNFT)。

ProgramGate

pub struct ProgramGate {
    pub additional: Vec<Pubkey>,
}

ProgramGate 守卫限制可以出现在铸造交易中的程序。守卫允许铸造所需的程序以及配置中指定的任何其他程序。

RedeemedAmount

pub struct RedeemedAmount {
    pub maximum: u64,
}

RedeemedAmount 守卫在 Candy Machine 的 items_redeemed 数量达到配置的 maximum 数量时停止铸造。

SolPayment

pub struct SolPayment {
    pub lamports: u64,
    pub destination: Pubkey,
}

SolPayment 守卫用于对铸造收取 SOL(拉姆波特)金额。资金被转移到配置的 destination 地址。

账户
名称 可写 签名者 描述
destination 接收资金的地址。

StartDate

pub struct StartDate {
    pub date: i64,
}

StartDate 守卫确定铸造的开始日期。如果没有指定此守卫,则允许铸造——类似于说任何日期都是有效的。

ThirdPartySigner

pub struct ThirdPartySigner {
    pub signer_key: Pubkey,
}

ThirdPartySigner 守卫要求在交易中添加额外签名者。

账户
名称 可写 签名者 描述
signer_key 交易签名者。

TokenBurn

pub struct TokenBurn {
    pub amount: u64,
    pub mint: Pubkey,
}

TokenBurn 限制了代币铸造只能由持有特定 spl-token 的用户进行,并要求销毁这些代币。amount 决定了需要销毁多少代币。

账户
名称 可写 签名者 描述
token_account 持有所需数量的代币账户。
token_mint 代币铸造账户。

TokenGate

pub struct TokenGate {
    pub amount: u64,
    pub mint: Pubkey,
}

TokenGate 限制了代币铸造只能由持有特定 spl-token 的用户进行。 amount 决定了需要多少代币。

账户
名称 可写 签名者 描述
token_account 持有所需数量的代币账户。

TokenPayment

pub struct TokenPayment {
    pub amount: u64,
    pub token_mint: Pubkey,
    pub destination_ata: Pubkey,
}

TokenPayment 限制了代币铸造只能由持有特定 spl-token 的用户进行,并将所需数量的代币转移到 destination_ata 地址。 amount 决定了需要多少代币。

账户
名称 可写 签名者 描述
token_account 持有所需数量的代币账户。
destination_ata 接收代币的 ATA 地址。

依赖项

~41MB
~701K SLoC