four-flap-meme-sdk 1.4.20 → 1.4.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/flap/portal-bundle-merkle/encryption.d.ts +16 -0
  2. package/dist/flap/portal-bundle-merkle/encryption.js +146 -0
  3. package/dist/index.d.ts +0 -1
  4. package/dist/index.js +0 -1
  5. package/package.json +3 -38
  6. package/dist/sol/constants.d.ts +0 -126
  7. package/dist/sol/constants.js +0 -145
  8. package/dist/sol/dex/index.d.ts +0 -8
  9. package/dist/sol/dex/index.js +0 -12
  10. package/dist/sol/dex/meteora/client.d.ts +0 -76
  11. package/dist/sol/dex/meteora/client.js +0 -219
  12. package/dist/sol/dex/meteora/damm-v1-bundle.d.ts +0 -61
  13. package/dist/sol/dex/meteora/damm-v1-bundle.js +0 -112
  14. package/dist/sol/dex/meteora/damm-v1.d.ts +0 -118
  15. package/dist/sol/dex/meteora/damm-v1.js +0 -315
  16. package/dist/sol/dex/meteora/damm-v2-bundle.d.ts +0 -82
  17. package/dist/sol/dex/meteora/damm-v2-bundle.js +0 -242
  18. package/dist/sol/dex/meteora/damm-v2.d.ts +0 -172
  19. package/dist/sol/dex/meteora/damm-v2.js +0 -632
  20. package/dist/sol/dex/meteora/dbc-bundle.d.ts +0 -123
  21. package/dist/sol/dex/meteora/dbc-bundle.js +0 -304
  22. package/dist/sol/dex/meteora/dbc.d.ts +0 -192
  23. package/dist/sol/dex/meteora/dbc.js +0 -619
  24. package/dist/sol/dex/meteora/dlmm-bundle.d.ts +0 -39
  25. package/dist/sol/dex/meteora/dlmm-bundle.js +0 -189
  26. package/dist/sol/dex/meteora/dlmm.d.ts +0 -157
  27. package/dist/sol/dex/meteora/dlmm.js +0 -671
  28. package/dist/sol/dex/meteora/index.d.ts +0 -25
  29. package/dist/sol/dex/meteora/index.js +0 -65
  30. package/dist/sol/dex/meteora/types.d.ts +0 -787
  31. package/dist/sol/dex/meteora/types.js +0 -110
  32. package/dist/sol/dex/orca/index.d.ts +0 -10
  33. package/dist/sol/dex/orca/index.js +0 -16
  34. package/dist/sol/dex/orca/orca-bundle.d.ts +0 -41
  35. package/dist/sol/dex/orca/orca-bundle.js +0 -173
  36. package/dist/sol/dex/orca/orca.d.ts +0 -65
  37. package/dist/sol/dex/orca/orca.js +0 -474
  38. package/dist/sol/dex/orca/types.d.ts +0 -263
  39. package/dist/sol/dex/orca/types.js +0 -38
  40. package/dist/sol/dex/orca/wavebreak-bundle.d.ts +0 -34
  41. package/dist/sol/dex/orca/wavebreak-bundle.js +0 -198
  42. package/dist/sol/dex/orca/wavebreak-types.d.ts +0 -227
  43. package/dist/sol/dex/orca/wavebreak-types.js +0 -23
  44. package/dist/sol/dex/orca/wavebreak.d.ts +0 -78
  45. package/dist/sol/dex/orca/wavebreak.js +0 -497
  46. package/dist/sol/dex/pump/index.d.ts +0 -9
  47. package/dist/sol/dex/pump/index.js +0 -14
  48. package/dist/sol/dex/pump/pump-bundle.d.ts +0 -92
  49. package/dist/sol/dex/pump/pump-bundle.js +0 -383
  50. package/dist/sol/dex/pump/pump-swap-bundle.d.ts +0 -103
  51. package/dist/sol/dex/pump/pump-swap-bundle.js +0 -380
  52. package/dist/sol/dex/pump/pump-swap.d.ts +0 -46
  53. package/dist/sol/dex/pump/pump-swap.js +0 -199
  54. package/dist/sol/dex/pump/pump.d.ts +0 -35
  55. package/dist/sol/dex/pump/pump.js +0 -352
  56. package/dist/sol/dex/pump/types.d.ts +0 -215
  57. package/dist/sol/dex/pump/types.js +0 -5
  58. package/dist/sol/dex/raydium/index.d.ts +0 -8
  59. package/dist/sol/dex/raydium/index.js +0 -12
  60. package/dist/sol/dex/raydium/launchlab.d.ts +0 -68
  61. package/dist/sol/dex/raydium/launchlab.js +0 -210
  62. package/dist/sol/dex/raydium/raydium-bundle.d.ts +0 -64
  63. package/dist/sol/dex/raydium/raydium-bundle.js +0 -324
  64. package/dist/sol/dex/raydium/raydium.d.ts +0 -40
  65. package/dist/sol/dex/raydium/raydium.js +0 -366
  66. package/dist/sol/dex/raydium/types.d.ts +0 -240
  67. package/dist/sol/dex/raydium/types.js +0 -5
  68. package/dist/sol/index.d.ts +0 -10
  69. package/dist/sol/index.js +0 -16
  70. package/dist/sol/jito/bundle.d.ts +0 -90
  71. package/dist/sol/jito/bundle.js +0 -263
  72. package/dist/sol/jito/index.d.ts +0 -7
  73. package/dist/sol/jito/index.js +0 -7
  74. package/dist/sol/jito/tip.d.ts +0 -51
  75. package/dist/sol/jito/tip.js +0 -83
  76. package/dist/sol/jito/types.d.ts +0 -100
  77. package/dist/sol/jito/types.js +0 -5
  78. package/dist/sol/token/create-complete.d.ts +0 -115
  79. package/dist/sol/token/create-complete.js +0 -235
  80. package/dist/sol/token/create-token.d.ts +0 -57
  81. package/dist/sol/token/create-token.js +0 -230
  82. package/dist/sol/token/index.d.ts +0 -9
  83. package/dist/sol/token/index.js +0 -14
  84. package/dist/sol/token/metadata-upload.d.ts +0 -86
  85. package/dist/sol/token/metadata-upload.js +0 -173
  86. package/dist/sol/token/metadata.d.ts +0 -92
  87. package/dist/sol/token/metadata.js +0 -274
  88. package/dist/sol/token/types.d.ts +0 -153
  89. package/dist/sol/token/types.js +0 -5
  90. package/dist/sol/types.d.ts +0 -176
  91. package/dist/sol/types.js +0 -7
  92. package/dist/sol/utils/balance.d.ts +0 -160
  93. package/dist/sol/utils/balance.js +0 -638
  94. package/dist/sol/utils/connection.d.ts +0 -78
  95. package/dist/sol/utils/connection.js +0 -168
  96. package/dist/sol/utils/index.d.ts +0 -9
  97. package/dist/sol/utils/index.js +0 -9
  98. package/dist/sol/utils/lp-inspect.d.ts +0 -129
  99. package/dist/sol/utils/lp-inspect.js +0 -900
  100. package/dist/sol/utils/transfer.d.ts +0 -125
  101. package/dist/sol/utils/transfer.js +0 -220
  102. package/dist/sol/utils/wallet.d.ts +0 -107
  103. package/dist/sol/utils/wallet.js +0 -210
@@ -1,115 +0,0 @@
1
- /**
2
- * 完整代币创建流程
3
- * 包括:上传元数据 → 创建 Mint → 创建 Metadata → Mint 初始供应
4
- * @module sol/token/create-complete
5
- */
6
- import { Connection, Keypair, PublicKey } from '@solana/web3.js';
7
- import type { TokenStandard } from './types.js';
8
- /**
9
- * 完整代币创建参数
10
- */
11
- export interface CreateTokenCompleteParams {
12
- /** 代币名称 */
13
- name: string;
14
- /** 代币符号 */
15
- symbol: string;
16
- /** 代币描述 */
17
- description: string;
18
- /** 精度(小数位数) */
19
- decimals: number;
20
- /** 初始供应量(不含精度,如 1000000 表示 100万) */
21
- initialSupply: bigint;
22
- /** 图片 Buffer(用于上传 IPFS) */
23
- imageBuffer?: Buffer | Uint8Array;
24
- /** 图片 File 对象(浏览器环境) */
25
- imageFile?: File;
26
- /** 已上传的元数据 CID(如果已有,则不需要上传) */
27
- metadataCid?: string;
28
- /** 创建者 Keypair */
29
- creator: Keypair;
30
- /** Mint 权限(默认为 creator) */
31
- mintAuthority?: PublicKey;
32
- /** 冻结权限(null 表示不可冻结) */
33
- freezeAuthority?: PublicKey | null;
34
- /** 代币标准(默认 TOKEN_2022) */
35
- tokenStandard?: TokenStandard;
36
- /** 社交链接 */
37
- social?: {
38
- telegram?: string;
39
- twitter?: string;
40
- website?: string;
41
- };
42
- }
43
- /**
44
- * 完整代币创建结果
45
- */
46
- export interface CreateTokenCompleteResult {
47
- success: boolean;
48
- /** Mint 地址 */
49
- mint?: string;
50
- /** Mint Keypair(需要保存用于后续操作) */
51
- mintKeypair?: Keypair;
52
- /** Metadata 账户地址 */
53
- metadataAddress?: string;
54
- /** 元数据 URI(IPFS) */
55
- metadataUri?: string;
56
- /** 创建者 ATA 地址 */
57
- creatorAta?: string;
58
- /** 签名后的交易列表(按顺序提交) */
59
- signedTransactions?: Array<{
60
- data: string;
61
- signature: string;
62
- description: string;
63
- }>;
64
- /** blockhash */
65
- recentBlockhash?: string;
66
- /** 最后有效区块高度 */
67
- lastValidBlockHeight?: number;
68
- /** 错误信息 */
69
- error?: string;
70
- }
71
- /**
72
- * 创建完整代币(上传元数据 + 创建 Mint + 创建 Metadata + Mint 初始供应)
73
- *
74
- * 流程:
75
- * 1. 上传图片和元数据到 IPFS(使用 Flap 官方接口)
76
- * 2. 创建 Mint 账户 + Mint 初始供应量
77
- * 3. 创建 Metaplex Metadata 账户
78
- *
79
- * @param connection Solana 连接
80
- * @param params 创建参数
81
- */
82
- export declare function createTokenComplete(connection: Connection, params: CreateTokenCompleteParams): Promise<CreateTokenCompleteResult>;
83
- /**
84
- * 创建代币(不上传元数据,使用已有 URI)
85
- * 适用于元数据已经上传的情况
86
- */
87
- export declare function createTokenWithUri(connection: Connection, params: {
88
- name: string;
89
- symbol: string;
90
- metadataUri: string;
91
- decimals: number;
92
- initialSupply: bigint;
93
- creator: Keypair;
94
- mintAuthority?: PublicKey;
95
- freezeAuthority?: PublicKey | null;
96
- tokenStandard?: TokenStandard;
97
- }): Promise<CreateTokenCompleteResult>;
98
- /**
99
- * 将创建结果转换为后端 API 格式
100
- */
101
- export declare function toBackendCreateTokenRequest(result: CreateTokenCompleteResult): {
102
- mint: string;
103
- metadataAddress: string;
104
- metadataUri: string;
105
- imageUri?: string;
106
- creatorAta: string;
107
- transactions: Array<{
108
- data: string;
109
- signature: string;
110
- description: string;
111
- }>;
112
- recentBlockhash: string;
113
- lastValidBlockHeight: number;
114
- timestamp: number;
115
- } | null;
@@ -1,235 +0,0 @@
1
- /**
2
- * 完整代币创建流程
3
- * 包括:上传元数据 → 创建 Mint → 创建 Metadata → Mint 初始供应
4
- * @module sol/token/create-complete
5
- */
6
- import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync, } from '@solana/spl-token';
7
- import { signCreateTokenTransaction } from './create-token.js';
8
- import { signCreateMetadataTransaction } from './metadata.js';
9
- import { uploadTokenMetadata, uploadTokenMetadataFromFile, cidToUri } from './metadata-upload.js';
10
- /**
11
- * 创建完整代币(上传元数据 + 创建 Mint + 创建 Metadata + Mint 初始供应)
12
- *
13
- * 流程:
14
- * 1. 上传图片和元数据到 IPFS(使用 Flap 官方接口)
15
- * 2. 创建 Mint 账户 + Mint 初始供应量
16
- * 3. 创建 Metaplex Metadata 账户
17
- *
18
- * @param connection Solana 连接
19
- * @param params 创建参数
20
- */
21
- export async function createTokenComplete(connection, params) {
22
- try {
23
- const { name, symbol, description, decimals, initialSupply, imageBuffer, imageFile, metadataCid, creator, mintAuthority = creator.publicKey, freezeAuthority = creator.publicKey, tokenStandard = 'TOKEN_2022', social, } = params;
24
- // ==================== Step 1: 上传元数据 ====================
25
- let metadataUri;
26
- if (metadataCid) {
27
- // 已有元数据 CID
28
- metadataUri = cidToUri(metadataCid);
29
- }
30
- else if (imageBuffer) {
31
- // 上传图片和元数据(使用 Flap 官方 IPFS 接口)
32
- const uploadResult = await uploadTokenMetadata(imageBuffer, {
33
- name,
34
- symbol,
35
- description,
36
- creator: creator.publicKey.toBase58(),
37
- telegram: social?.telegram,
38
- twitter: social?.twitter,
39
- website: social?.website,
40
- });
41
- if (!uploadResult.success) {
42
- return {
43
- success: false,
44
- error: `IPFS upload failed: ${uploadResult.error}`,
45
- };
46
- }
47
- metadataUri = uploadResult.uri;
48
- }
49
- else if (imageFile) {
50
- // 从 File 对象上传(浏览器环境)
51
- const uploadResult = await uploadTokenMetadataFromFile(imageFile, {
52
- name,
53
- symbol,
54
- description,
55
- creator: creator.publicKey.toBase58(),
56
- telegram: social?.telegram,
57
- twitter: social?.twitter,
58
- website: social?.website,
59
- });
60
- if (!uploadResult.success) {
61
- return {
62
- success: false,
63
- error: `IPFS upload failed: ${uploadResult.error}`,
64
- };
65
- }
66
- metadataUri = uploadResult.uri;
67
- }
68
- else {
69
- return {
70
- success: false,
71
- error: 'Either metadataCid, imageBuffer, or imageFile is required',
72
- };
73
- }
74
- // ==================== Step 2: 创建 Mint + Mint To ====================
75
- const createTokenResult = await signCreateTokenTransaction(connection, {
76
- creator,
77
- decimals,
78
- initialSupply,
79
- mintAuthority,
80
- freezeAuthority,
81
- tokenStandard,
82
- });
83
- const mintKeypair = createTokenResult.mintKeypair;
84
- const mintAddress = createTokenResult.mintAddress;
85
- // ==================== Step 3: 创建 Metadata ====================
86
- const metadataResult = await signCreateMetadataTransaction(connection, {
87
- mint: mintKeypair.publicKey,
88
- mintAuthority: creator,
89
- payer: creator,
90
- name,
91
- symbol,
92
- uri: metadataUri,
93
- sellerFeeBasisPoints: 0,
94
- creators: [
95
- {
96
- address: creator.publicKey,
97
- verified: true,
98
- share: 100,
99
- },
100
- ],
101
- isMutable: true,
102
- });
103
- if (!metadataResult.success) {
104
- return {
105
- success: false,
106
- error: `Metadata creation failed: ${metadataResult.error}`,
107
- };
108
- }
109
- // ==================== 获取 ATA 地址 ====================
110
- const programId = tokenStandard === 'TOKEN_2022' ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;
111
- const creatorAta = getAssociatedTokenAddressSync(mintKeypair.publicKey, creator.publicKey, false, programId, ASSOCIATED_TOKEN_PROGRAM_ID);
112
- // ==================== 组装结果 ====================
113
- return {
114
- success: true,
115
- mint: mintAddress,
116
- mintKeypair,
117
- metadataAddress: metadataResult.metadataAddress,
118
- metadataUri,
119
- creatorAta: creatorAta.toBase58(),
120
- signedTransactions: [
121
- {
122
- data: createTokenResult.signedTransaction.data,
123
- signature: createTokenResult.signedTransaction.signature,
124
- description: 'Create Mint + Mint Initial Supply',
125
- },
126
- {
127
- data: metadataResult.signedTransaction.data,
128
- signature: metadataResult.signedTransaction.signature,
129
- description: 'Create Metadata',
130
- },
131
- ],
132
- recentBlockhash: createTokenResult.recentBlockhash,
133
- lastValidBlockHeight: createTokenResult.lastValidBlockHeight,
134
- };
135
- }
136
- catch (error) {
137
- return {
138
- success: false,
139
- error: error.message,
140
- };
141
- }
142
- }
143
- /**
144
- * 创建代币(不上传元数据,使用已有 URI)
145
- * 适用于元数据已经上传的情况
146
- */
147
- export async function createTokenWithUri(connection, params) {
148
- try {
149
- const { name, symbol, metadataUri, decimals, initialSupply, creator, mintAuthority = creator.publicKey, freezeAuthority = creator.publicKey, tokenStandard = 'TOKEN_2022', } = params;
150
- // 创建 Mint + Mint To
151
- const createTokenResult = await signCreateTokenTransaction(connection, {
152
- creator,
153
- decimals,
154
- initialSupply,
155
- mintAuthority,
156
- freezeAuthority,
157
- tokenStandard,
158
- });
159
- const mintKeypair = createTokenResult.mintKeypair;
160
- const mintAddress = createTokenResult.mintAddress;
161
- // 创建 Metadata
162
- const metadataResult = await signCreateMetadataTransaction(connection, {
163
- mint: mintKeypair.publicKey,
164
- mintAuthority: creator,
165
- payer: creator,
166
- name,
167
- symbol,
168
- uri: metadataUri,
169
- sellerFeeBasisPoints: 0,
170
- creators: [
171
- {
172
- address: creator.publicKey,
173
- verified: true,
174
- share: 100,
175
- },
176
- ],
177
- isMutable: true,
178
- });
179
- if (!metadataResult.success) {
180
- return {
181
- success: false,
182
- error: `Metadata creation failed: ${metadataResult.error}`,
183
- };
184
- }
185
- // 获取 ATA 地址
186
- const programId = tokenStandard === 'TOKEN_2022' ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;
187
- const creatorAta = getAssociatedTokenAddressSync(mintKeypair.publicKey, creator.publicKey, false, programId, ASSOCIATED_TOKEN_PROGRAM_ID);
188
- return {
189
- success: true,
190
- mint: mintAddress,
191
- mintKeypair,
192
- metadataAddress: metadataResult.metadataAddress,
193
- metadataUri,
194
- creatorAta: creatorAta.toBase58(),
195
- signedTransactions: [
196
- {
197
- data: createTokenResult.signedTransaction.data,
198
- signature: createTokenResult.signedTransaction.signature,
199
- description: 'Create Mint + Mint Initial Supply',
200
- },
201
- {
202
- data: metadataResult.signedTransaction.data,
203
- signature: metadataResult.signedTransaction.signature,
204
- description: 'Create Metadata',
205
- },
206
- ],
207
- recentBlockhash: createTokenResult.recentBlockhash,
208
- lastValidBlockHeight: createTokenResult.lastValidBlockHeight,
209
- };
210
- }
211
- catch (error) {
212
- return {
213
- success: false,
214
- error: error.message,
215
- };
216
- }
217
- }
218
- /**
219
- * 将创建结果转换为后端 API 格式
220
- */
221
- export function toBackendCreateTokenRequest(result) {
222
- if (!result.success || !result.signedTransactions) {
223
- return null;
224
- }
225
- return {
226
- mint: result.mint,
227
- metadataAddress: result.metadataAddress,
228
- metadataUri: result.metadataUri,
229
- creatorAta: result.creatorAta,
230
- transactions: result.signedTransactions,
231
- recentBlockhash: result.recentBlockhash,
232
- lastValidBlockHeight: result.lastValidBlockHeight,
233
- timestamp: Date.now(),
234
- };
235
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * Token-2022 / SPL Token 创建
3
- * SDK 只负责构建和签名交易,提交到后端广播
4
- * @module sol/token/create-token
5
- */
6
- import { Connection, Keypair, PublicKey } from '@solana/web3.js';
7
- import type { TokenStandard, Token2022Extensions, MintToParams, MintToResult } from './types.js';
8
- /**
9
- * 构建并签名创建代币交易(不含 Metaplex 元数据)
10
- * @param connection Solana 连接
11
- * @param params 创建参数
12
- * @returns 签名后的交易数据
13
- */
14
- export declare function signCreateTokenTransaction(connection: Connection, params: {
15
- creator: Keypair;
16
- decimals: number;
17
- initialSupply: bigint;
18
- mintAuthority?: PublicKey;
19
- freezeAuthority?: PublicKey | null;
20
- tokenStandard?: TokenStandard;
21
- extensions?: Token2022Extensions;
22
- }): Promise<{
23
- mintKeypair: Keypair;
24
- mintAddress: string;
25
- signedTransaction: {
26
- data: string;
27
- signature: string;
28
- };
29
- recentBlockhash: string;
30
- lastValidBlockHeight: number;
31
- }>;
32
- /**
33
- * 构建并签名 Mint To 交易
34
- * @param connection Solana 连接
35
- * @param params Mint To 参数
36
- */
37
- export declare function signMintToTransaction(connection: Connection, params: MintToParams): Promise<MintToResult>;
38
- /**
39
- * 批量 Mint To(多个地址)
40
- */
41
- export declare function signBatchMintToTransaction(connection: Connection, params: {
42
- mint: string;
43
- mintAuthority: Keypair;
44
- distributions: Array<{
45
- destination: string;
46
- amount: bigint;
47
- }>;
48
- tokenStandard?: TokenStandard;
49
- }): Promise<{
50
- success: boolean;
51
- signedTransaction?: {
52
- data: string;
53
- signature: string;
54
- };
55
- ataAddresses?: string[];
56
- error?: string;
57
- }>;
@@ -1,230 +0,0 @@
1
- /**
2
- * Token-2022 / SPL Token 创建
3
- * SDK 只负责构建和签名交易,提交到后端广播
4
- * @module sol/token/create-token
5
- */
6
- import { Keypair, PublicKey, SystemProgram, Transaction, } from '@solana/web3.js';
7
- import { TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, createInitializeMintInstruction, createAssociatedTokenAccountInstruction, createMintToInstruction, getAssociatedTokenAddressSync, getMintLen, ExtensionType, createInitializeTransferFeeConfigInstruction, createInitializeNonTransferableMintInstruction, createInitializePermanentDelegateInstruction, } from '@solana/spl-token';
8
- import { ACCOUNT_SIZE } from '../constants.js';
9
- /**
10
- * 获取 Token Program ID
11
- */
12
- function getTokenProgramId(standard = 'TOKEN_2022') {
13
- return standard === 'TOKEN_2022' ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;
14
- }
15
- /**
16
- * 计算 Mint 账户大小(包括扩展)
17
- */
18
- function calculateMintSize(extensions) {
19
- if (!extensions) {
20
- return getMintLen([]);
21
- }
22
- const extensionTypes = [];
23
- if (extensions.transferFee) {
24
- extensionTypes.push(ExtensionType.TransferFeeConfig);
25
- }
26
- if (extensions.nonTransferable) {
27
- extensionTypes.push(ExtensionType.NonTransferable);
28
- }
29
- if (extensions.permanentDelegate) {
30
- extensionTypes.push(ExtensionType.PermanentDelegate);
31
- }
32
- return getMintLen(extensionTypes);
33
- }
34
- /**
35
- * 构建创建 Mint 账户的指令
36
- */
37
- async function buildCreateMintInstructions(connection, payer, mintKeypair, mintAuthority, freezeAuthority, decimals, tokenStandard, extensions) {
38
- const instructions = [];
39
- const programId = getTokenProgramId(tokenStandard);
40
- // 计算账户大小和租金
41
- const mintSize = tokenStandard === 'TOKEN_2022'
42
- ? calculateMintSize(extensions)
43
- : ACCOUNT_SIZE.MINT;
44
- const lamports = await connection.getMinimumBalanceForRentExemption(mintSize);
45
- // 1. 创建账户
46
- instructions.push(SystemProgram.createAccount({
47
- fromPubkey: payer,
48
- newAccountPubkey: mintKeypair.publicKey,
49
- space: mintSize,
50
- lamports,
51
- programId,
52
- }));
53
- // 2. 初始化扩展(Token-2022 only,必须在 InitializeMint 之前)
54
- if (tokenStandard === 'TOKEN_2022' && extensions) {
55
- // 转账手续费
56
- if (extensions.transferFee) {
57
- instructions.push(createInitializeTransferFeeConfigInstruction(mintKeypair.publicKey, mintAuthority, // transferFeeConfigAuthority
58
- mintAuthority, // withdrawWithheldAuthority
59
- extensions.transferFee.feeBasisPoints, extensions.transferFee.maxFee, programId));
60
- }
61
- // 不可转让
62
- if (extensions.nonTransferable) {
63
- instructions.push(createInitializeNonTransferableMintInstruction(mintKeypair.publicKey, programId));
64
- }
65
- // 永久代理
66
- if (extensions.permanentDelegate) {
67
- instructions.push(createInitializePermanentDelegateInstruction(mintKeypair.publicKey, extensions.permanentDelegate, programId));
68
- }
69
- }
70
- // 3. 初始化 Mint
71
- instructions.push(createInitializeMintInstruction(mintKeypair.publicKey, decimals, mintAuthority, freezeAuthority, programId));
72
- return instructions;
73
- }
74
- /**
75
- * 构建创建 ATA 和 Mint To 的指令
76
- */
77
- function buildMintToInstructions(mint, destination, mintAuthority, amount, tokenStandard, payer) {
78
- const instructions = [];
79
- const programId = getTokenProgramId(tokenStandard);
80
- // 获取 ATA 地址
81
- const ata = getAssociatedTokenAddressSync(mint, destination, false, programId, ASSOCIATED_TOKEN_PROGRAM_ID);
82
- // 1. 创建 ATA(如果不存在)
83
- instructions.push(createAssociatedTokenAccountInstruction(payer, ata, destination, mint, programId, ASSOCIATED_TOKEN_PROGRAM_ID));
84
- // 2. Mint To
85
- instructions.push(createMintToInstruction(mint, ata, mintAuthority, amount, [], programId));
86
- return instructions;
87
- }
88
- /**
89
- * 构建并签名创建代币交易(不含 Metaplex 元数据)
90
- * @param connection Solana 连接
91
- * @param params 创建参数
92
- * @returns 签名后的交易数据
93
- */
94
- export async function signCreateTokenTransaction(connection, params) {
95
- const { creator, decimals, initialSupply, mintAuthority = creator.publicKey, freezeAuthority = creator.publicKey, tokenStandard = 'TOKEN_2022', extensions, } = params;
96
- // 生成 Mint Keypair
97
- const mintKeypair = Keypair.generate();
98
- const programId = getTokenProgramId(tokenStandard);
99
- // 获取 blockhash
100
- const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('finalized');
101
- // 构建指令
102
- const instructions = [];
103
- // 1. 创建 Mint
104
- const createMintIxs = await buildCreateMintInstructions(connection, creator.publicKey, mintKeypair, mintAuthority, freezeAuthority, decimals, tokenStandard, extensions);
105
- instructions.push(...createMintIxs);
106
- // 2. 创建 ATA 并 Mint 初始供应量
107
- if (initialSupply > 0) {
108
- const mintToIxs = buildMintToInstructions(mintKeypair.publicKey, creator.publicKey, // mint 到创建者
109
- mintAuthority, initialSupply * BigInt(10 ** decimals), tokenStandard, creator.publicKey);
110
- instructions.push(...mintToIxs);
111
- }
112
- // 构建交易
113
- const transaction = new Transaction();
114
- transaction.add(...instructions);
115
- transaction.recentBlockhash = blockhash;
116
- transaction.feePayer = creator.publicKey;
117
- // 签名(需要 creator 和 mintKeypair)
118
- transaction.sign(creator, mintKeypair);
119
- const serialized = transaction.serialize();
120
- return {
121
- mintKeypair,
122
- mintAddress: mintKeypair.publicKey.toBase58(),
123
- signedTransaction: {
124
- data: Buffer.from(serialized).toString('base64'),
125
- signature: transaction.signature ? Buffer.from(transaction.signature).toString('base64') : '',
126
- },
127
- recentBlockhash: blockhash,
128
- lastValidBlockHeight,
129
- };
130
- }
131
- /**
132
- * 构建并签名 Mint To 交易
133
- * @param connection Solana 连接
134
- * @param params Mint To 参数
135
- */
136
- export async function signMintToTransaction(connection, params) {
137
- try {
138
- const { mint, destination, amount, mintAuthority, tokenStandard = 'TOKEN_2022', } = params;
139
- const programId = getTokenProgramId(tokenStandard);
140
- const mintPubkey = new PublicKey(mint);
141
- const destinationPubkey = new PublicKey(destination);
142
- // 获取 ATA 地址
143
- const ata = getAssociatedTokenAddressSync(mintPubkey, destinationPubkey, false, programId, ASSOCIATED_TOKEN_PROGRAM_ID);
144
- const { blockhash } = await connection.getLatestBlockhash('finalized');
145
- // 构建交易
146
- const transaction = new Transaction();
147
- // 检查 ATA 是否存在
148
- const ataInfo = await connection.getAccountInfo(ata);
149
- if (!ataInfo) {
150
- // 创建 ATA
151
- transaction.add(createAssociatedTokenAccountInstruction(mintAuthority.publicKey, ata, destinationPubkey, mintPubkey, programId, ASSOCIATED_TOKEN_PROGRAM_ID));
152
- }
153
- // Mint To
154
- transaction.add(createMintToInstruction(mintPubkey, ata, mintAuthority.publicKey, amount, [], programId));
155
- transaction.recentBlockhash = blockhash;
156
- transaction.feePayer = mintAuthority.publicKey;
157
- transaction.sign(mintAuthority);
158
- const serialized = transaction.serialize();
159
- return {
160
- success: true,
161
- ataAddress: ata.toBase58(),
162
- signedTransaction: {
163
- data: Buffer.from(serialized).toString('base64'),
164
- signature: transaction.signature ? Buffer.from(transaction.signature).toString('base64') : '',
165
- },
166
- };
167
- }
168
- catch (error) {
169
- return {
170
- success: false,
171
- error: error.message,
172
- };
173
- }
174
- }
175
- /**
176
- * 批量 Mint To(多个地址)
177
- */
178
- export async function signBatchMintToTransaction(connection, params) {
179
- try {
180
- const { mint, mintAuthority, distributions, tokenStandard = 'TOKEN_2022', } = params;
181
- if (distributions.length === 0) {
182
- return { success: false, error: 'No distributions provided' };
183
- }
184
- if (distributions.length > 10) {
185
- return { success: false, error: 'Too many distributions. Max 10 per transaction.' };
186
- }
187
- const programId = getTokenProgramId(tokenStandard);
188
- const mintPubkey = new PublicKey(mint);
189
- const { blockhash } = await connection.getLatestBlockhash('finalized');
190
- const transaction = new Transaction();
191
- const ataAddresses = [];
192
- // 批量获取 ATA 信息
193
- const atas = distributions.map(d => {
194
- const destPubkey = new PublicKey(d.destination);
195
- return getAssociatedTokenAddressSync(mintPubkey, destPubkey, false, programId, ASSOCIATED_TOKEN_PROGRAM_ID);
196
- });
197
- const ataInfos = await connection.getMultipleAccountsInfo(atas);
198
- for (let i = 0; i < distributions.length; i++) {
199
- const dist = distributions[i];
200
- const ata = atas[i];
201
- const ataInfo = ataInfos[i];
202
- const destPubkey = new PublicKey(dist.destination);
203
- ataAddresses.push(ata.toBase58());
204
- // 创建 ATA(如果不存在)
205
- if (!ataInfo) {
206
- transaction.add(createAssociatedTokenAccountInstruction(mintAuthority.publicKey, ata, destPubkey, mintPubkey, programId, ASSOCIATED_TOKEN_PROGRAM_ID));
207
- }
208
- // Mint To
209
- transaction.add(createMintToInstruction(mintPubkey, ata, mintAuthority.publicKey, dist.amount, [], programId));
210
- }
211
- transaction.recentBlockhash = blockhash;
212
- transaction.feePayer = mintAuthority.publicKey;
213
- transaction.sign(mintAuthority);
214
- const serialized = transaction.serialize();
215
- return {
216
- success: true,
217
- signedTransaction: {
218
- data: Buffer.from(serialized).toString('base64'),
219
- signature: transaction.signature ? Buffer.from(transaction.signature).toString('base64') : '',
220
- },
221
- ataAddresses,
222
- };
223
- }
224
- catch (error) {
225
- return {
226
- success: false,
227
- error: error.message,
228
- };
229
- }
230
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Token 创建模块
3
- * @module sol/token
4
- */
5
- export * from './types.js';
6
- export * from './metadata-upload.js';
7
- export * from './create-token.js';
8
- export * from './metadata.js';
9
- export * from './create-complete.js';
@@ -1,14 +0,0 @@
1
- /**
2
- * Token 创建模块
3
- * @module sol/token
4
- */
5
- // 类型导出
6
- export * from './types.js';
7
- // 元数据上传
8
- export * from './metadata-upload.js';
9
- // 代币创建
10
- export * from './create-token.js';
11
- // Metaplex 元数据
12
- export * from './metadata.js';
13
- // 完整创建流程
14
- export * from './create-complete.js';