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

miraplex-candy-guard

Metaplex Candy Guard:Candy Machine的编程访问控制

1 个稳定版本

1.0.2 2023年5月23日
1.0.1 2023年5月24日

#5 in #candy


用于 miraplex-sugar-cli

自定义许可证

235KB
3.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

Candy Guard 程序的主要目的是在用户从糖果机铸造之前,持有铸造 守卫 的配置并应用它们。如果所有启用的守卫条件都有效,则铸造事务将被转发到 Candy Machine。

收到铸造事务时,程序执行以下步骤

  1. 对事务进行所有启用的守卫的验证。
    • 如果在此点守卫失败,则事务将受到 BotTax (当启用 BotTax 守卫时) 的影响,并将终止事务。
  2. 在验证所有守卫都有效后,它将在每个守卫上调用 pre_actions 函数。此函数负责在铸造之前执行任何操作(例如,为铸造收取付款)。
  3. 然后,事务被转发到 Candy Machine 程序以铸造 NFT。
  4. 最后,它将在每个启用的守卫上调用 post_actions 函数。此函数负责在铸造之后执行任何操作(例如,冻结 NFT,更改更新权限)。

守卫 是一个模块化代码块,可以轻松添加到 Candy Guard 程序中,提供极大的灵活性和简单性,以支持特定功能而无需直接修改 Candy Machine 程序。通过遵循特定接口添加新守卫是支持的,更改仅限于单个守卫 - 例如,每个守卫可以单独创建和修改。此架构还提供了灵活性,可以在不要求代码更改的情况下启用/禁用守卫,因为每个守卫都有一个启用/禁用 "开关"。

Candy Guard 程序包含一组可启用/禁用的核心访问控制守卫

  • 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 金额设置铸造价格

随着这些守卫程序的推出,社区中的优秀团队也在开发新的、酷炫的检查机制。以下是几个创建守卫程序的团队:

账户

Candy Guard的配置存储在单个账户中。启用的守卫相关信息存储在账户的“隐藏”部分,以避免不必要的反序列化。

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

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

指令

📄 initialize

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

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

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

📄 mint(已弃用)

此指令从由Candy Guard“包装”的Candy Machine中铸造NFT。只有在交易成功验证后,才会将其转发到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])。
付款人 交易付款人。
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 收藏主版账号。
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 收藏主版账号。
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 Guard的 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。
参数

无。

📄 update

此指令更新Candy Guard配置。由于存在可变数量的守卫和组,此指令将相应地调整账户大小,无论是增加还是减少账户大小。因此,可能会有租金费用或租金lamports的提取。

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

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

📄 withdraw

此指令将租金lamports从账户中提取并关闭它。执行此指令后,Candy Guard账户将无法正常运作。

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

无。

📄 wrap

此指令向Candy Machine添加Candy Guard。添加守卫后,只能通过Candy Guard进行铸币。

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

无。

守卫

AddressGate

pub struct AddressGate {
    address: Pubkey,
}

AddressGate守卫将铸币限制为单个address——地址必须与铸币交易的付款人地址匹配。

分配

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

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

账户
名称 可写 签名者 描述
mint_tracker 铸币跟踪PDA。PDA是通过种子["allocation", allocation id, candy guard pubkey, candy machine pubkey]派生的。

路由指令

在验证第一个铸币交易之前需要创建分配PDA。这是通过以下账户和RouteArgsroute指令完成的:

账户
名称 可写 签名者 描述
proof_pda 表示分配的PDA(种子["allocation", merke tree root, payer key, candy guard pubkey, candy machine pubkey])。
权限 Candy Guard权限
系统程序 系统程序账户。
参数
参数 大小 描述
args RouteArgs结构体
- guard 1 GuardType.分配
- data 0

允许列表

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

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

账户
名称 可写 签名者 描述
proof_pda Merkle证明的PDA(种子["allow_list", merke tree root, payer key, candy guard pubkey, candy machine pubkey])。

路由指令

在铸币交易之前需要完成Merkle证明验证。这是通过以下账户和RouteArgsroute指令完成的:

账户
名称 可写 签名者 描述
proof_pda 表示Merkle证明的PDA(种子["allow_list", merke tree root, payer key, candy guard pubkey, candy machine pubkey])。
系统程序 系统程序账户。
minter (可选)要验证的铸币者账户。
参数
参数 大小 描述
args RouteArgs结构体
- guard 1 GuardType.允许列表
- data ~ Merkle证明哈希值的Vec

BotTax

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

BotTax守卫用于

  • 对无效交易收取罚款。罚款的价值由的lamports配置指定。
  • 验证铸造交易是否是最后一条交易(last_instruction = true)。

bot_tax应用于在验证守卫时发生的任何错误。

EndDate

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])。
权限 Candy Guard权限。
系统程序 系统程序账户。
参数
参数 大小 描述
args RouteArgs结构体
- guard 1 GuardType.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 GuardType.FreezeSolPayment
- data 1
-- ix 1 FreezeInstruction.Thaw
unlock_funds:解锁冻结的资金。

解锁资金仅在所有冻结的NFT解冻后启用。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结PDA(种子 ["freeze_escrow", destination pubkey, candy guard pubkey, candy machine pubkey])。
权限 Candy Guard权限。
destination 接收资金的地址(必须与守卫配置中的destination地址匹配)。
系统程序 SystemProgram账户。
参数
参数 大小 描述
args RouteArgs结构体
- guard 1 GuardType.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])。
权限 Candy Guard权限。
系统程序 系统程序账户。
freeze_ata 冻结PDA的关联令牌账户(种子 [freeze PDA pubkey, token program pubkey, nft mint pubkey])。
token_mint 代币铸造账户(必须与守卫配置中的 mint 地址匹配)。
token_program spl-token 程序ID。
关联代币程序 关联代币程序账户。
destination_ata 接收资金的地址(必须与守卫配置中的 destination_ata 地址匹配)。
参数
参数 大小 描述
args RouteArgs结构体
- guard 1 GuardType.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 GuardType.FreezeTokenPayment
- data 1
-- ix 1 FreezeInstruction.Thaw
unlock_funds:解锁冻结的资金。

解锁资金仅在所有冻结的NFT解冻后启用。

账户
名称 可写 签名者 描述
freeze_pda 接收资金的冻结PDA(种子 ["freeze_escrow", destination_ata pubkey, candy guard pubkey, candy machine pubkey])。
权限 Candy Guard权限。
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 GuardType.FreezeTokenPayment
- data 1
-- ix 1 FreezeInstruction.UnlockFunds

守卫者

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

Gatekeeper 守卫验证交易付款人是否拥有指定网关网络的 代币 —— 在大多数情况下,完成验证码挑战后的 代币。使用 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 守卫限制 mint 交易中可以使用的程序。守卫允许 mint 所需的必要程序以及配置中指定的任何其他程序。

RedeemedAmount

pub struct RedeemedAmount {
    pub maximum: u64,
}

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

SolPayment

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

《SolPayment》守卫用于为铸造支付SOL(lamports)金额。资金将转移到配置的《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地址。

依赖项

~28–39MB
~632K SLoC