发行类型
Genesis 联合曲线创作者费
Last updated April 24, 2026
创作者费是 Genesis 联合曲线上的可选每次兑换费用,在每次买入和卖出时累积到配置的钱包。
本指南涵盖内容
- 发行时配置创作者费钱包
- 将费用重定向到特定钱包或 Agent PDA
- 检查 bucket 中累积了多少费用
- 在活跃曲线期间认领累积费用
- 从 Raydium CPMM 池认领毕业后的费用
摘要
创作者费是 Genesis 联合曲线上的可选每次兑换费用,应用于每次买入和卖出的 SOL 侧。费用累积在 bucket 账户(creatorFeeAccrued)中而非立即转账——通过 Metaplex API(推荐)一次调用认领,或使用链上指令按 bucket 认领。
- 配置 — 在曲线创建时的
launch对象中设置creatorFeeWallet;省略时默认为发行钱包 - 累积 —
creatorFeeAccrued在每次兑换时增加;费用不按次转账 - 推荐认领路径 —
POST /v1/creator-rewards/claim(或 SDK 中的claimCreatorRewards)聚合钱包的所有联合曲线和 Raydium bucket,并返回准备好签名的交易 - 活跃曲线认领(手动) —
claimBondingCurveCreatorFeeV2在曲线活跃时收取累积费用 - 毕业后认领(手动) — 两步流程:
collectRaydiumCpmmFeesWithCreatorFeeV2从 Raydium 池收集 LP 费用到 Genesis bucket,然后claimRaydiumCreatorFeeV2将 bucket 余额转移到创作者钱包
关于创作者费如何与兑换定价和协议兑换费交互,请参阅运作原理——手续费结构。
快速开始
本节介绍通过 Metaplex API(推荐)或覆盖活跃曲线和毕业后 Raydium 阶段的低级链上指令来配置和认领创作者费的最少步骤。
快速参考
下表汇总了每条费用指令的调用时机、所需账户及其对创作者费生命周期的影响。
| 指令 | 使用时机 | 必需账户 | 输出 / 效果 |
|---|---|---|---|
createAndRegisterLaunch(设置 creatorFeeWallet) | 曲线创建时 | 创作者钱包、发行签名者 | 在 bucket 上配置费用钱包 |
claimCreatorRewards(API / SDK) | 任何时候——推荐路径 | 创作者费钱包(以及可选的 payer) | 返回一次调用即可认领所有符合条件 bucket 的已签名交易 |
fetchBondingCurveBucketV2(读取 creatorFeeAccrued) | 活跃曲线期间任何时候 | Bucket PDA | 当前累积费用余额(lamports) |
claimBondingCurveCreatorFeeV2 | 活跃曲线——收取累积费用 | Genesis 账户、bucket PDA、base mint、创作者费钱包 | 累积 SOL 转移到创作者钱包 |
collectRaydiumCpmmFeesWithCreatorFeeV2 | 毕业后——收割 LP 费用 | Genesis 账户、Raydium 池 PDA、Raydium bucket PDA | LP 费用从 Raydium 池移至 Genesis bucket |
claimRaydiumCreatorFeeV2 | 毕业后——认领 bucket 余额 | Genesis 账户、Raydium bucket PDA、base/quote mint、创作者费钱包 | Bucket 余额转移到创作者钱包 |
跳转至: 发行时配置 · 重定向到钱包 · Agent PDA · 与首次购买组合 · 检查累积费用(曲线) · 通过 API 认领 · 无奖励情况 · 活跃曲线期间认领 · 检查 Raydium 费用 · 从 Raydium 收集 · 毕业后认领
- 调用
createAndRegisterLaunch时在launch对象中设置creatorFeeWallet - 发行后读取
bucket.creatorFeeAccrued监控累积费用 - 通过 API 或 SDK 调用
claimCreatorRewards,一次调用即可跨所有 bucket 认领 - 在活跃曲线期间的手动控制下,调用
claimBondingCurveCreatorFeeV2收取累积费用 - 在毕业后手动认领时,调用
collectRaydiumCpmmFeesWithCreatorFeeV2从 Raydium 池收集 LP 费用,然后调用claimRaydiumCreatorFeeV2将 bucket 余额转移到创作者钱包
前置条件
您需要 Genesis SDK、已配置的 Umi 实例和已充值的 Solana 钱包。
- 已安装
@metaplex-foundation/genesisSDK - 配置了密钥对身份的 Umi 实例——详见通过 Metaplex API 发行联合曲线
- 用于支付交易费用的已充值 Solana 钱包
发行时配置创作者费
创作者费在传递给 createAndRegisterLaunch(或 createLaunch)的 launch 对象中配置。creatorFeeWallet 字段是可选的——省略时发行钱包默认接收所有费用。完整发行流程请参阅通过 Metaplex API 发行联合曲线。
将创作者费重定向到特定钱包
将 creatorFeeWallet 设置为任意钱包地址,将累积费用引导到发行钱包以外的地址。
1import { createAndRegisterLaunch } from '@metaplex-foundation/genesis/api';
2
3const result = await createAndRegisterLaunch(umi, {}, {
4 wallet: umi.identity.publicKey,
5 launchType: 'bondingCurve',
6 token: {
7 name: 'My Token',
8 symbol: 'MTK',
9 image: 'https://gateway.irys.xyz/your-image-id',
10 },
11 launch: {
12 creatorFeeWallet: 'FeeRecipientWalletAddress...',
13 },
14});
创作者费钱包在曲线创建时设定,曲线上线后无法更改。
Agent 发行——自动 PDA 路由
代表 Metaplex Agent 发行时,创作者费自动路由到 Agent 的 PDA,无需手动设置 creatorFeeWallet。完整 Agent 发行流程——Core execute 封装和 setToken 关联——请参阅创建 Agent 代币。
将创作者费与首次购买组合
可以同时配置创作者费钱包和首次购买。首次购买始终免费——不收取协议费或创作者费。之后所有兑换正常收取创作者费。
launch: {
creatorFeeWallet: 'FeeRecipientWalletAddress...',
firstBuyAmount: 0.5, // 0.5 SOL,首次购买者免费
},
检查累积的创作者费
BondingCurveBucketV2 账户上的 creatorFeeAccrued 字段追踪自上次认领以来累积的 SOL 总量。使用 fetchBondingCurveBucketV2 读取:
1import {
2 findBondingCurveBucketV2Pda,
3 fetchBondingCurveBucketV2,
4} from '@metaplex-foundation/genesis';
5import { isSome, publicKey } from '@metaplex-foundation/umi';
6
7const genesisAccount = publicKey('YOUR_GENESIS_ACCOUNT_PUBKEY');
8const baseMint = publicKey('TOKEN_MINT_PUBKEY');
9
10const [bucketPda] = findBondingCurveBucketV2Pda(umi, {
11 genesisAccount,
12 bucketIndex: 0,
13});
14
15const bucket = await fetchBondingCurveBucketV2(umi, bucketPda);
16console.log('Creator fees accrued (lamports):', bucket.creatorFeeAccrued);
17console.log('Creator fees claimed to date (lamports):', bucket.creatorFeeClaimed);
18
19// 从 bucket 扩展中读取配置的创作者费钱包
20const creatorFeeExt = bucket.extensions.creatorFee;
21const creatorFeeWallet = isSome(creatorFeeExt) ? creatorFeeExt.value.wallet : null;
22console.log('Creator fee wallet:', creatorFeeWallet?.toString() ?? 'none configured');
通过 Metaplex API 认领(推荐)
POST /v1/creator-rewards/claim 一次调用即可认领钱包有资格获得的所有未认领的联合曲线和 Raydium 奖励。该端点返回钱包(或指定的 payer)需要签名并提交的 base64 编码 Solana 交易。JavaScript SDK 通过 @metaplex-foundation/genesis 的 claimCreatorRewards 公开相同的调用。
1import { claimCreatorRewards } from '@metaplex-foundation/genesis'
2import { base58 } from '@metaplex-foundation/umi/serializers'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import { keypairIdentity } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.mainnet-beta.solana.com')
7const keypair = umi.eddsa.createKeypairFromSecretKey(mySecretKeyBytes)
8umi.use(keypairIdentity(keypair))
9
10const result = await claimCreatorRewards(umi, {}, {
11 wallet: umi.identity.publicKey,
12 network: 'solana-mainnet',
13 // payer is optional — defaults to `wallet` on the server.
14 // Set it to have a different wallet cover rent and transaction fees.
15 // payer: umi.identity.publicKey,
16})
17
18for (const tx of result.transactions) {
19 const signed = await umi.identity.signTransaction(tx)
20 const signature = await umi.rpc.sendTransaction(signed, {
21 preflightCommitment: 'confirmed',
22 })
23 await umi.rpc.confirmTransaction(signature, {
24 strategy: { type: 'blockhash', ...result.blockhash },
25 commitment: 'confirmed',
26 })
27 console.log('Claimed:', base58.deserialize(signature)[0])
28}
29
30// Claimed: 5uGGYEMmjP2HpyFCvLPNpVDSQEBtUE3LR6ZQFqhJxQSh5FbKacSyN8nQmAJowuFs6BTCdwzoFyyJz8Y2hQx8kPxo
31// Claimed: 3TAroVovEap1ZEAJYq3WiDZoMK3GU3soCdrhvZJNg6b9EANqvWrVcDGNffm7mD8wvtpR7ynWQBcbrmz8AK6nrhfy
1# Claim creator rewards. Response contains base64-encoded transactions
2# the wallet (or payer) must sign and send.
3curl -X POST https://api.metaplex.com/v1/creator-rewards/claim \
4 -H "Content-Type: application/json" \
5 -d '{
6 "wallet": "CREATOR_FEE_WALLET_ADDRESS_HERE",
7 "network": "solana-mainnet"
8 }'
9
10# Add "payer" when the creator fee wallet does not hold SOL (e.g. an agent PDA):
11# "payer": "PAYER_WALLET_ADDRESS_HERE"
| 字段 | 类型 | 必填 | 备注 |
|---|---|---|---|
wallet | PublicKey | string | 是 | 要认领的创作者费钱包。 |
network | SvmNetwork | 否 | 'solana-mainnet'(默认)或 'solana-devnet'。 |
payer | PublicKey | string | 否 | 承担返回交易的费用和租金的钱包。默认为 wallet。当创作者费钱包不持有 SOL 时使用——例如 agent PDA 或冷钱包。 |
SDK 返回反序列化的 Umi Transaction 以及构建它们时使用的区块哈希。始终使用返回的区块哈希确认每个交易——不要用新获取的区块哈希替换它,否则会出现确认竞争。完整的 HTTP schema 请参阅 Claim Creator Rewards (API)。
处理无奖励情况
当钱包没有可认领内容时,端点返回 HTTP 400 和 { "error": { "message": "No rewards available to claim" } }——它不会返回带有空 transactions 数组的成功响应。SDK 将其呈现为 GenesisApiError,因此调用方必须捕获错误并基于 err.message(或 err.statusCode === 400)进行分支,而非让错误向上传播。
1import {
2 claimCreatorRewards,
3 isGenesisApiError,
4 isGenesisApiNetworkError,
5} from '@metaplex-foundation/genesis'
6
7// Assumes umi is configured with a keypair identity.
8
9try {
10 const result = await claimCreatorRewards(umi, {}, {
11 wallet: umi.identity.publicKey,
12 network: 'solana-mainnet',
13 })
14 console.log(`Claimable transactions: ${result.transactions.length}`)
15} catch (err) {
16 if (isGenesisApiError(err)) {
17 // The API returns HTTP 400 with
18 // { "error": { "message": "No rewards available to claim" } }
19 // when the wallet has no unclaimed creator rewards. Match on the message
20 // (or statusCode === 400) to handle this as a success case rather than a
21 // failure.
22 if (err.message === 'No rewards available to claim') {
23 console.log('Nothing to claim right now.')
24 } else {
25 console.error('API error:', err.statusCode, err.message)
26 }
27 } else if (isGenesisApiNetworkError(err)) {
28 console.error('Network error:', err.cause.message)
29 } else {
30 throw err
31 }
32}
33
34// Nothing to claim right now.
上述 API 路径是所有生产认领流程的推荐集成方式。下方的按 bucket 链上指令仍可用于高级场景——针对特定 bucket、完全在客户端构建交易,或在无法访问 Metaplex API 网络的情况下运行。
在活跃曲线期间认领创作者费
claimBondingCurveCreatorFeeV2 将所有累积的创作者费从 bucket 转移到配置的创作者费钱包。可在曲线活跃期间任何时间调用。
1import { claimBondingCurveCreatorFeeV2 } from '@metaplex-foundation/genesis';
2import { isSome } from '@metaplex-foundation/umi';
3
4// 认领前从 bucket 扩展读取创作者费钱包。
5const creatorFeeExt = bucket.extensions.creatorFee;
6if (!isSome(creatorFeeExt)) throw new Error('No creator fee configured on this bucket');
7const creatorFeeWallet = creatorFeeExt.value.wallet;
8
9const result = await claimBondingCurveCreatorFeeV2(umi, {
10 genesisAccount,
11 bucket: bucketPda,
12 baseMint,
13 creatorFeeWallet,
14}).sendAndConfirm(umi);
15
16console.log('Creator fees claimed:', result.signature);
claimBondingCurveCreatorFeeV2 是无需许可的——任何钱包都可以调用它,但 SOL 始终发送到配置的创作者费钱包,而非调用方。
毕业后认领创作者费
联合曲线毕业后,流动性迁移到 Raydium CPMM 池,创作者费继续从 LP 交易活动中累积。毕业后费用收取是一个两步流程:首先从 Raydium 池收集累积的 LP 交易费用到 Genesis RaydiumCpmmBucketV2 bucket,然后认领 bucket 余额到创作者钱包。
检查累积的 Raydium 创作者费
RaydiumCpmmBucketV2 账户暴露了类似于 BondingCurveBucketV2 的 creatorFeeAccrued 和 creatorFeeClaimed 字段。使用 findRaydiumCpmmBucketV2Pda 和 fetchRaydiumCpmmBucketV2 进行派生和获取。
1import {
2 findRaydiumCpmmBucketV2Pda,
3 fetchRaydiumCpmmBucketV2,
4} from '@metaplex-foundation/genesis';
5import { isSome, publicKey } from '@metaplex-foundation/umi';
6
7const genesisAccount = publicKey('YOUR_GENESIS_ACCOUNT_PUBKEY');
8
9const [raydiumBucketPda] = findRaydiumCpmmBucketV2Pda(umi, {
10 genesisAccount,
11 bucketIndex: 0,
12});
13
14const raydiumBucket = await fetchRaydiumCpmmBucketV2(umi, raydiumBucketPda);
15const claimable = raydiumBucket.creatorFeeAccrued - raydiumBucket.creatorFeeClaimed;
16console.log('Claimable Raydium creator fees (lamports):', claimable);
17
18const creatorFeeExt = raydiumBucket.extensions.creatorFee;
19const creatorFeeWallet = isSome(creatorFeeExt) ? creatorFeeExt.value.wallet : null;
20console.log('Creator fee wallet:', creatorFeeWallet?.toString() ?? 'none configured');
raydiumBucket.creatorFeeAccrued 仅反映已从 Raydium 池收集到 bucket 中的费用。Raydium 池本身可能持有额外的未收集 LP 费用——在读取最终可认领余额之前,运行 collectRaydiumCpmmFeesWithCreatorFeeV2 将其移至 bucket。
步骤 1 — 从 Raydium CPMM 池收集费用
collectRaydiumCpmmFeesWithCreatorFeeV2 从 Raydium CPMM 池收集累积的 LP 交易费用,将其记入 RaydiumCpmmBucketV2 bucket 签名者的代币账户,并更新 creatorFeeAccrued。必须在认领之前运行此步骤——在从 Raydium 收集费用之前,没有可认领的内容。
使用 deriveRaydiumPDAsV2 从 base mint 和 bucket 地址计算所有必需的 Raydium 池账户。传递 creatorFee: true 以选择创作者费 AMM 配置。
1import {
2 collectRaydiumCpmmFeesWithCreatorFeeV2,
3 deriveRaydiumPDAsV2,
4 findRaydiumCpmmBucketV2Pda,
5} from '@metaplex-foundation/genesis';
6import { publicKey } from '@metaplex-foundation/umi';
7
8const baseMint = publicKey('TOKEN_MINT_PUBKEY');
9const quoteMint = publicKey('So11111111111111111111111111111111111111112'); // wSOL
10
11const [raydiumBucketPda] = findRaydiumCpmmBucketV2Pda(umi, {
12 genesisAccount,
13 bucketIndex: 0,
14});
15
16const pdas = deriveRaydiumPDAsV2(umi, baseMint, raydiumBucketPda, {
17 quoteMint,
18 env: 'mainnet', // or 'devnet'
19 creatorFee: true,
20});
21
22await collectRaydiumCpmmFeesWithCreatorFeeV2(umi, {
23 baseMint,
24 quoteMint,
25 genesisAccount,
26 poolState: pdas.poolState,
27 raydiumCpmmBucket: raydiumBucketPda,
28 ammConfig: pdas.ammConfig,
29 poolAuthority: pdas.poolAuthority,
30 baseVault: pdas.baseVault,
31 quoteVault: pdas.quoteVault,
32 raydiumProgram: pdas.raydiumProgram,
33}).sendAndConfirm(umi);
34
35console.log('Raydium LP fees collected into Genesis bucket');
collectRaydiumCpmmFeesWithCreatorFeeV2 是无需许可的——任何钱包都可以调用。收集的费用流入 Genesis bucket 签名者的代币账户,并在下次 bucket 获取时反映在 creatorFeeAccrued 中。
步骤 2 — 认领费用到创作者钱包
claimRaydiumCreatorFeeV2 将 RaydiumCpmmBucketV2 bucket 中累积的余额转移到配置的创作者费钱包。在收集后运行,或在 bucket 持有来自先前收集的未认领余额时随时运行。
1import {
2 claimRaydiumCreatorFeeV2,
3 fetchRaydiumCpmmBucketV2,
4 findRaydiumCpmmBucketV2Pda,
5} from '@metaplex-foundation/genesis';
6import { isSome, publicKey } from '@metaplex-foundation/umi';
7
8const [raydiumBucketPda] = findRaydiumCpmmBucketV2Pda(umi, {
9 genesisAccount,
10 bucketIndex: 0,
11});
12
13// 收集后重新获取以取得更新的 creatorFeeAccrued。
14const raydiumBucket = await fetchRaydiumCpmmBucketV2(umi, raydiumBucketPda);
15
16const creatorFeeExt = raydiumBucket.extensions.creatorFee;
17if (!isSome(creatorFeeExt)) throw new Error('No creator fee configured on this Raydium bucket');
18const creatorFeeWallet = creatorFeeExt.value.wallet;
19
20await claimRaydiumCreatorFeeV2(umi, {
21 genesisAccount: raydiumBucket.bucket.genesis,
22 bucket: raydiumBucketPda,
23 baseMint: raydiumBucket.bucket.baseMint,
24 quoteMint: raydiumBucket.bucket.quoteMint,
25 creatorFeeWallet,
26}).sendAndConfirm(umi);
27
28console.log('Raydium creator fees claimed to:', creatorFeeWallet.toString());
claimRaydiumCreatorFeeV2 是无需许可的——任何钱包都可以触发认领,但 SOL(作为 wSOL)始终发送到配置的创作者费钱包,而非调用方。
收集与认领合并流程
将两个构建器链式组合在单个交易中完成收集和认领。如果池中没有未收集的费用且 bucket 余额为零,请跳过两条指令以避免无效交易。
1import {
2 collectRaydiumCpmmFeesWithCreatorFeeV2,
3 claimRaydiumCreatorFeeV2,
4 deriveRaydiumPDAsV2,
5 fetchRaydiumCpmmBucketV2,
6 findRaydiumCpmmBucketV2Pda,
7} from '@metaplex-foundation/genesis';
8import { isSome, publicKey, transactionBuilder } from '@metaplex-foundation/umi';
9
10const baseMint = publicKey('TOKEN_MINT_PUBKEY');
11const quoteMint = publicKey('So11111111111111111111111111111111111111112');
12const genesisAccount = publicKey('YOUR_GENESIS_ACCOUNT_PUBKEY');
13
14const [raydiumBucketPda] = findRaydiumCpmmBucketV2Pda(umi, {
15 genesisAccount,
16 bucketIndex: 0,
17});
18
19const raydiumBucket = await fetchRaydiumCpmmBucketV2(umi, raydiumBucketPda);
20
21const creatorFeeExt = raydiumBucket.extensions.creatorFee;
22if (!isSome(creatorFeeExt)) throw new Error('No creator fee configured');
23const creatorFeeWallet = creatorFeeExt.value.wallet;
24
25const pdas = deriveRaydiumPDAsV2(umi, baseMint, raydiumBucketPda, {
26 quoteMint,
27 env: 'mainnet', // or 'devnet'
28 creatorFee: true,
29});
30
31await transactionBuilder()
32 .add(collectRaydiumCpmmFeesWithCreatorFeeV2(umi, {
33 baseMint,
34 quoteMint,
35 genesisAccount,
36 poolState: pdas.poolState,
37 raydiumCpmmBucket: raydiumBucketPda,
38 ammConfig: pdas.ammConfig,
39 poolAuthority: pdas.poolAuthority,
40 baseVault: pdas.baseVault,
41 quoteVault: pdas.quoteVault,
42 raydiumProgram: pdas.raydiumProgram,
43 }))
44 .add(claimRaydiumCreatorFeeV2(umi, {
45 genesisAccount,
46 bucket: raydiumBucketPda,
47 baseMint,
48 quoteMint,
49 creatorFeeWallet,
50 }))
51 .sendAndConfirm(umi);
52
53console.log('Raydium creator fees collected and claimed to:', creatorFeeWallet.toString());
注意事项
以下注意事项涵盖费用时机、推荐的 API 认领路径、无需许可的链上认领、两步毕业后流程以及首次购买费用豁免。
- 创作者费在每次兑换时累积到 bucket(
creatorFeeAccrued),不会立即转账——需通过 API/SDK 或链上指令显式认领;creatorFeeClaimed追踪迄今累积认领的总额 claimCreatorRewards(API/SDK)将钱包有资格获得的所有联合曲线和 Raydium bucket 聚合到一次调用中;当没有可认领内容时,返回 HTTP400和"No rewards available to claim",而不是空的交易数组- 链上认领指令(
claimBondingCurveCreatorFeeV2、collectRaydiumCpmmFeesWithCreatorFeeV2、claimRaydiumCreatorFeeV2)均无需许可:任何钱包都可以触发,但 SOL 始终流向配置的创作者费钱包,而非调用方 - 毕业后费用需要按顺序两个步骤:
collectRaydiumCpmmFeesWithCreatorFeeV2(从 Raydium 池收集 → Genesis bucket),然后claimRaydiumCreatorFeeV2(bucket → 创作者钱包);两者可合并到单个交易中,API 路径也会替您封装这两步 creatorFeeAccrued和creatorFeeClaimed同时存在于BondingCurveBucketV2(活跃曲线)和RaydiumCpmmBucketV2(毕业后)上;分别使用fetchBondingCurveBucketV2和fetchRaydiumCpmmBucketV2creatorFeeWallet未设置时默认为发行钱包;曲线创建后无法更改- 首次购买机制仅对指定的初始购买豁免所有费用(协议费和创作者费);之后所有兑换正常收取创作者费
- 创作者费应用于每次兑换的 SOL 侧,无论方向(买入或卖出);不与协议兑换费复利
- 当前费率请参阅 Genesis 协议费用页面
- 兑换侧上下文——读取 bucket 状态、计算报价和执行交易——请参阅联合曲线兑换集成
FAQ
未设置 creatorFeeWallet 时默认的创作者费钱包是什么?
默认的创作者费钱包是发行钱包——签署 createLaunch 调用的钱包。在 launch 对象中显式设置 creatorFeeWallet 可将费用重定向到任何其他地址。
创作者费是在每次兑换时转账的吗?
不是。创作者费在每次兑换时累积到 bucket(creatorFeeAccrued),不会立即转账。通过 API 或 SDK 调用 claimCreatorRewards 一次性跨所有 bucket 收集,或使用链上指令(活跃曲线期间使用 claimBondingCurveCreatorFeeV2;毕业后先使用 collectRaydiumCpmmFeesWithCreatorFeeV2,再使用 claimRaydiumCreatorFeeV2)进行更低级别的控制。
应该使用 API 还是链上认领指令?
日常认领请使用 API(claimCreatorRewards)——它将钱包有资格获得的所有联合曲线和 Raydium bucket 聚合到一次调用中,并返回准备好签名的交易。当您需要针对特定 bucket、自己构建交易或在无法访问 Metaplex API 网络的情况下运行时,请使用按 bucket 的链上指令(claimBondingCurveCreatorFeeV2、collectRaydiumCpmmFeesWithCreatorFeeV2、claimRaydiumCreatorFeeV2)。
没有可认领的奖励时会发生什么?
claimCreatorRewards 端点返回 HTTP 400 和 {"error":{"message":"No rewards available to claim"}}。SDK 将其呈现为 GenesisApiError。将其视为非异常结果——检查 err.message(或 err.statusCode === 400)并进行分支处理,而非让错误向上传播。请参阅处理无奖励情况。
可选的 payer 字段有什么用?
payer 承担返回的认领交易的交易费和租金。默认为被认领的钱包。当创作者费钱包不持有 SOL 时(例如 agent PDA 或冷钱包),将其设置为不同的地址。payer 必须签署返回的交易;创作者费收件人仍会收到认领的 SOL。
任何人都可以调用 claimBondingCurveCreatorFeeV2 或 claimRaydiumCreatorFeeV2 吗?
是的。三条无需许可的费用指令横跨活跃曲线和毕业后两个阶段——collectRaydiumCpmmFeesWithCreatorFeeV2 和 claimBondingCurveCreatorFeeV2(活跃曲线)以及 claimRaydiumCreatorFeeV2(毕业后)。任何钱包都可以触发,但 SOL 始终发送到配置的创作者费钱包,而非调用方。
collectRaydiumCpmmFeesWithCreatorFeeV2 和 claimRaydiumCreatorFeeV2 有什么区别?
collectRaydiumCpmmFeesWithCreatorFeeV2 从 Raydium CPMM 池中拉取累积的 LP 交易费用到 Genesis RaydiumCpmmBucketV2 bucket——这会更新 bucket 上的 creatorFeeAccrued。claimRaydiumCreatorFeeV2 然后将该 bucket 余额转移到创作者费钱包。必须先运行收集再运行认领;没有收集,就没有 bucket 余额可认领。
为什么我的 Raydium bucket 上的 creatorFeeAccrued 在池活跃时为零?
RaydiumCpmmBucketV2 上的 creatorFeeAccrued 仅反映通过 collectRaydiumCpmmFeesWithCreatorFeeV2 从 Raydium 收集到 Genesis bucket 的费用。LP 交易费用首先在 Raydium 池状态内累积——直到运行收集指令,它们才会出现在 Genesis bucket 中。
首次购买需要支付创作者费吗?
不需要。配置首次购买时,协议兑换费和创作者费均对该一次性初始购买豁免。之后所有兑换正常支付创作者费。
如何检查已累积了多少创作者费?
活跃曲线期间,使用 fetchBondingCurveBucketV2 从 BondingCurveBucketV2 读取 creatorFeeAccrued 字段。毕业后,使用 fetchRaydiumCpmmBucketV2 从 RaydiumCpmmBucketV2 读取 creatorFeeAccrued。详见检查累积的创作者费和检查累积的 Raydium 创作者费。
发行后可以更改创作者费钱包吗?
不可以。创作者费钱包在曲线创建时设定,曲线上线后无法更改。
