@coinbarrel/sdk 1.1.0 → 1.3.0
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.
- package/README.md +305 -253
- package/dist/accounts.js +33 -25
- package/dist/accounts.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +21 -17
- package/dist/constants.js.map +1 -1
- package/dist/create.d.ts +26 -0
- package/dist/create.d.ts.map +1 -0
- package/dist/create.js +101 -0
- package/dist/create.js.map +1 -0
- package/dist/curve.js +57 -50
- package/dist/curve.js.map +1 -1
- package/dist/index.d.ts +48 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +126 -22
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +12 -31
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +60 -95
- package/dist/metadata.js.map +1 -1
- package/dist/pda.js +36 -23
- package/dist/pda.js.map +1 -1
- package/dist/pool.js +61 -54
- package/dist/pool.js.map +1 -1
- package/dist/rewards.d.ts +21 -0
- package/dist/rewards.d.ts.map +1 -0
- package/dist/rewards.js +98 -0
- package/dist/rewards.js.map +1 -0
- package/dist/types.d.ts +33 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -3
package/dist/metadata.d.ts
CHANGED
|
@@ -15,23 +15,22 @@ export interface TokenMetadata {
|
|
|
15
15
|
uri: string;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Off-chain token metadata JSON (common Metaplex-style schema).
|
|
19
|
+
*
|
|
20
|
+
* This is intentionally permissive since creators may include extra fields.
|
|
19
21
|
*/
|
|
20
22
|
export interface TokenMetadataJson extends TokenMetadata {
|
|
21
|
-
/**
|
|
23
|
+
/** Short description */
|
|
22
24
|
description?: string;
|
|
23
|
-
/** Image URL
|
|
25
|
+
/** Image URL */
|
|
24
26
|
image?: string;
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/**
|
|
27
|
+
/** Project website / external URL */
|
|
28
|
+
external_url?: string;
|
|
29
|
+
/** Common socials */
|
|
28
30
|
twitter?: string;
|
|
29
|
-
/** Telegram link */
|
|
30
31
|
telegram?: string;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/** Raw JSON data from URI */
|
|
34
|
-
raw?: Record<string, unknown>;
|
|
32
|
+
website?: string;
|
|
33
|
+
[key: string]: unknown;
|
|
35
34
|
}
|
|
36
35
|
/**
|
|
37
36
|
* Derive Metaplex metadata PDA for a token mint
|
|
@@ -67,27 +66,9 @@ export declare function parseMetaplexMetadata(data: Buffer): TokenMetadata | nul
|
|
|
67
66
|
*/
|
|
68
67
|
export declare function getTokenMetadata(connection: Connection, mint: PublicKey): Promise<TokenMetadata | null>;
|
|
69
68
|
/**
|
|
70
|
-
* Fetch
|
|
71
|
-
*
|
|
72
|
-
* This fetches the on-chain metadata and then fetches the JSON from the URI
|
|
73
|
-
* to get the image, description, and social links.
|
|
74
|
-
*
|
|
75
|
-
* @param connection - Solana RPC connection
|
|
76
|
-
* @param mint - Token mint address
|
|
77
|
-
* @param fetchOptions - Optional fetch options (timeout, etc.)
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* const metadata = await getTokenMetadataJson(connection, tokenMint);
|
|
82
|
-
* if (metadata) {
|
|
83
|
-
* console.log(metadata.name); // "My Token"
|
|
84
|
-
* console.log(metadata.image); // "https://..." or "ipfs://..."
|
|
85
|
-
* console.log(metadata.description); // "A cool token"
|
|
86
|
-
* console.log(metadata.twitter); // "@mytoken"
|
|
87
|
-
* }
|
|
88
|
-
* ```
|
|
69
|
+
* Fetch on-chain Metaplex metadata and then fetch the off-chain JSON pointed to by the URI.
|
|
89
70
|
*/
|
|
90
|
-
export declare function getTokenMetadataJson(connection: Connection, mint: PublicKey,
|
|
71
|
+
export declare function getTokenMetadataJson(connection: Connection, mint: PublicKey, options?: {
|
|
91
72
|
timeoutMs?: number;
|
|
92
73
|
}): Promise<TokenMetadataJson | null>;
|
|
93
74
|
/**
|
package/dist/metadata.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKxD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACZ;AAED
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKxD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAMzD;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA0BxE;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACrC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,SAAS,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAa/B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,GAC5B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA4DnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAAE,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC,CAuC5C"}
|
package/dist/metadata.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Token Metadata Fetching
|
|
3
4
|
* Read Metaplex token metadata for CoinBarrel tokens
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getMetadataPda = getMetadataPda;
|
|
8
|
+
exports.parseMetaplexMetadata = parseMetaplexMetadata;
|
|
9
|
+
exports.getTokenMetadata = getTokenMetadata;
|
|
10
|
+
exports.getTokenMetadataJson = getTokenMetadataJson;
|
|
11
|
+
exports.batchGetTokenMetadata = batchGetTokenMetadata;
|
|
12
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
13
|
+
const constants_js_1 = require("./constants.js");
|
|
7
14
|
// ============= PDA =============
|
|
8
15
|
/**
|
|
9
16
|
* Derive Metaplex metadata PDA for a token mint
|
|
10
17
|
*/
|
|
11
|
-
|
|
12
|
-
const [pda] = PublicKey.findProgramAddressSync([Buffer.from('metadata'), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], TOKEN_METADATA_PROGRAM_ID);
|
|
18
|
+
function getMetadataPda(mint) {
|
|
19
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('metadata'), constants_js_1.TOKEN_METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()], constants_js_1.TOKEN_METADATA_PROGRAM_ID);
|
|
13
20
|
return pda;
|
|
14
21
|
}
|
|
15
22
|
// ============= Parsing =============
|
|
@@ -38,7 +45,7 @@ function readLengthPrefixedString(data, offset) {
|
|
|
38
45
|
* - symbol: 4 bytes length + string
|
|
39
46
|
* - uri: 4 bytes length + string
|
|
40
47
|
*/
|
|
41
|
-
|
|
48
|
+
function parseMetaplexMetadata(data) {
|
|
42
49
|
try {
|
|
43
50
|
if (!data || data.length < 65)
|
|
44
51
|
return null;
|
|
@@ -79,7 +86,7 @@ export function parseMetaplexMetadata(data) {
|
|
|
79
86
|
* }
|
|
80
87
|
* ```
|
|
81
88
|
*/
|
|
82
|
-
|
|
89
|
+
async function getTokenMetadata(connection, mint) {
|
|
83
90
|
try {
|
|
84
91
|
const metadataPda = getMetadataPda(mint);
|
|
85
92
|
const accountInfo = await connection.getAccountInfo(metadataPda);
|
|
@@ -93,103 +100,61 @@ export async function getTokenMetadata(connection, mint) {
|
|
|
93
100
|
}
|
|
94
101
|
}
|
|
95
102
|
/**
|
|
96
|
-
* Fetch
|
|
97
|
-
*
|
|
98
|
-
* This fetches the on-chain metadata and then fetches the JSON from the URI
|
|
99
|
-
* to get the image, description, and social links.
|
|
100
|
-
*
|
|
101
|
-
* @param connection - Solana RPC connection
|
|
102
|
-
* @param mint - Token mint address
|
|
103
|
-
* @param fetchOptions - Optional fetch options (timeout, etc.)
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* const metadata = await getTokenMetadataJson(connection, tokenMint);
|
|
108
|
-
* if (metadata) {
|
|
109
|
-
* console.log(metadata.name); // "My Token"
|
|
110
|
-
* console.log(metadata.image); // "https://..." or "ipfs://..."
|
|
111
|
-
* console.log(metadata.description); // "A cool token"
|
|
112
|
-
* console.log(metadata.twitter); // "@mytoken"
|
|
113
|
-
* }
|
|
114
|
-
* ```
|
|
103
|
+
* Fetch on-chain Metaplex metadata and then fetch the off-chain JSON pointed to by the URI.
|
|
115
104
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (!onChainMetadata) {
|
|
105
|
+
async function getTokenMetadataJson(connection, mint, options) {
|
|
106
|
+
const meta = await getTokenMetadata(connection, mint);
|
|
107
|
+
if (!meta)
|
|
120
108
|
return null;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return onChainMetadata;
|
|
125
|
-
}
|
|
126
|
-
// Fetch JSON from URI
|
|
109
|
+
const uri = (meta.uri ?? '').replace(/\0/g, '').trim();
|
|
110
|
+
if (!uri)
|
|
111
|
+
return { ...meta };
|
|
127
112
|
try {
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
const timeout =
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
const response = await fetch(fetchUrl, {
|
|
138
|
-
signal: controller.signal,
|
|
139
|
-
headers: {
|
|
140
|
-
'Accept': 'application/json',
|
|
141
|
-
},
|
|
113
|
+
const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
|
|
114
|
+
const timeoutMs = options?.timeoutMs;
|
|
115
|
+
const timeout = controller && typeof timeoutMs === 'number' && timeoutMs > 0
|
|
116
|
+
? setTimeout(() => controller.abort(), timeoutMs)
|
|
117
|
+
: null;
|
|
118
|
+
const resp = await fetch(uri, {
|
|
119
|
+
signal: controller?.signal,
|
|
120
|
+
headers: { accept: 'application/json' },
|
|
142
121
|
});
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
122
|
+
if (!resp.ok)
|
|
123
|
+
return { ...meta };
|
|
124
|
+
const json = (await resp.json());
|
|
125
|
+
if (timeout)
|
|
126
|
+
clearTimeout(timeout);
|
|
127
|
+
// Best-effort map of common social fields
|
|
128
|
+
const properties = json.properties && typeof json.properties === 'object'
|
|
129
|
+
? json.properties
|
|
130
|
+
: undefined;
|
|
131
|
+
const extensions = (json.extensions && typeof json.extensions === 'object'
|
|
132
|
+
? json.extensions
|
|
133
|
+
: undefined) ||
|
|
134
|
+
(properties?.extensions && typeof properties.extensions === 'object'
|
|
135
|
+
? properties.extensions
|
|
136
|
+
: undefined);
|
|
137
|
+
const twitter = (typeof json.twitter === 'string' && json.twitter) ||
|
|
138
|
+
(typeof extensions?.twitter === 'string' && extensions.twitter) ||
|
|
139
|
+
undefined;
|
|
140
|
+
const telegram = (typeof json.telegram === 'string' && json.telegram) ||
|
|
141
|
+
(typeof extensions?.telegram === 'string' && extensions.telegram) ||
|
|
142
|
+
undefined;
|
|
143
|
+
const website = (typeof json.website === 'string' && json.website) ||
|
|
144
|
+
(typeof extensions?.website === 'string' && extensions.website) ||
|
|
145
|
+
undefined;
|
|
150
146
|
return {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
website
|
|
157
|
-
extractFromExtensions(json, 'website'),
|
|
158
|
-
twitter: extractFromExtensions(json, 'twitter'),
|
|
159
|
-
telegram: extractFromExtensions(json, 'telegram'),
|
|
160
|
-
discord: extractFromExtensions(json, 'discord'),
|
|
161
|
-
raw: json,
|
|
147
|
+
...meta,
|
|
148
|
+
...json,
|
|
149
|
+
// ensure we always surface these normalized keys when available
|
|
150
|
+
twitter,
|
|
151
|
+
telegram,
|
|
152
|
+
website,
|
|
162
153
|
};
|
|
163
154
|
}
|
|
164
155
|
catch {
|
|
165
|
-
|
|
166
|
-
return onChainMetadata;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Extract a string from an object, trying multiple keys
|
|
171
|
-
*/
|
|
172
|
-
function extractString(obj, keys) {
|
|
173
|
-
for (const key of keys) {
|
|
174
|
-
const value = obj[key];
|
|
175
|
-
if (typeof value === 'string' && value.trim()) {
|
|
176
|
-
return value.trim();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return undefined;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Extract a field from the `extensions` object (common in Metaplex metadata)
|
|
183
|
-
*/
|
|
184
|
-
function extractFromExtensions(obj, key) {
|
|
185
|
-
const extensions = obj.extensions;
|
|
186
|
-
if (extensions && typeof extensions === 'object' && extensions !== null) {
|
|
187
|
-
const value = extensions[key];
|
|
188
|
-
if (typeof value === 'string' && value.trim()) {
|
|
189
|
-
return value.trim();
|
|
190
|
-
}
|
|
156
|
+
return { ...meta };
|
|
191
157
|
}
|
|
192
|
-
return undefined;
|
|
193
158
|
}
|
|
194
159
|
/**
|
|
195
160
|
* Batch fetch metadata for multiple tokens
|
|
@@ -210,7 +175,7 @@ function extractFromExtensions(obj, key) {
|
|
|
210
175
|
* }
|
|
211
176
|
* ```
|
|
212
177
|
*/
|
|
213
|
-
|
|
178
|
+
async function batchGetTokenMetadata(connection, mints) {
|
|
214
179
|
const results = new Map();
|
|
215
180
|
if (mints.length === 0) {
|
|
216
181
|
return results;
|
package/dist/metadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/pda.js
CHANGED
|
@@ -1,77 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* PDA Derivation Helpers
|
|
3
4
|
* All Program Derived Addresses for CoinBarrel AMM
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getBondingCurvePda = getBondingCurvePda;
|
|
8
|
+
exports.getBondingAuthorityPda = getBondingAuthorityPda;
|
|
9
|
+
exports.getSolEscrowPda = getSolEscrowPda;
|
|
10
|
+
exports.getPoolPda = getPoolPda;
|
|
11
|
+
exports.getPoolAuthorityPda = getPoolAuthorityPda;
|
|
12
|
+
exports.getVaultPda = getVaultPda;
|
|
13
|
+
exports.getPoolWsolVaultPda = getPoolWsolVaultPda;
|
|
14
|
+
exports.getPoolTokenVaultPda = getPoolTokenVaultPda;
|
|
15
|
+
exports.getLpMintPda = getLpMintPda;
|
|
16
|
+
exports.getLpVaultPda = getLpVaultPda;
|
|
17
|
+
exports.getHolderRewardPda = getHolderRewardPda;
|
|
18
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
19
|
+
const constants_js_1 = require("./constants.js");
|
|
7
20
|
// ============= Bonding Curve PDAs =============
|
|
8
21
|
/**
|
|
9
22
|
* Derive bonding curve PDA for a token mint
|
|
10
23
|
*/
|
|
11
|
-
|
|
12
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING, mint.toBuffer()], programId);
|
|
24
|
+
function getBondingCurvePda(mint, programId) {
|
|
25
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.BONDING, mint.toBuffer()], programId);
|
|
13
26
|
return pda;
|
|
14
27
|
}
|
|
15
28
|
/**
|
|
16
29
|
* Derive bonding authority PDA (signs transfers from curve)
|
|
17
30
|
*/
|
|
18
|
-
|
|
19
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING_AUTHORITY, bondingCurve.toBuffer()], programId);
|
|
31
|
+
function getBondingAuthorityPda(bondingCurve, programId) {
|
|
32
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.BONDING_AUTHORITY, bondingCurve.toBuffer()], programId);
|
|
20
33
|
return pda;
|
|
21
34
|
}
|
|
22
35
|
/**
|
|
23
36
|
* Derive SOL escrow PDA for bonding curve
|
|
24
37
|
*/
|
|
25
|
-
|
|
26
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING_SOL, bondingCurve.toBuffer()], programId);
|
|
38
|
+
function getSolEscrowPda(bondingCurve, programId) {
|
|
39
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.BONDING_SOL, bondingCurve.toBuffer()], programId);
|
|
27
40
|
return pda;
|
|
28
41
|
}
|
|
29
42
|
// ============= AMM Pool PDAs =============
|
|
30
43
|
/**
|
|
31
44
|
* Derive pool PDA for a WSOL <-> Token pair
|
|
32
45
|
*/
|
|
33
|
-
|
|
34
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.POOL, NATIVE_MINT.toBuffer(), tokenMint.toBuffer()], programId);
|
|
46
|
+
function getPoolPda(tokenMint, programId) {
|
|
47
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.POOL, constants_js_1.NATIVE_MINT.toBuffer(), tokenMint.toBuffer()], programId);
|
|
35
48
|
return pda;
|
|
36
49
|
}
|
|
37
50
|
/**
|
|
38
51
|
* Derive pool authority PDA (signs transfers from pool vaults)
|
|
39
52
|
*/
|
|
40
|
-
|
|
41
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.AUTHORITY, pool.toBuffer()], programId);
|
|
53
|
+
function getPoolAuthorityPda(pool, programId) {
|
|
54
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.AUTHORITY, pool.toBuffer()], programId);
|
|
42
55
|
return pda;
|
|
43
56
|
}
|
|
44
57
|
/**
|
|
45
58
|
* Derive vault PDA for a pool + mint
|
|
46
59
|
*/
|
|
47
|
-
|
|
48
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.VAULT, pool.toBuffer(), mint.toBuffer()], programId);
|
|
60
|
+
function getVaultPda(pool, mint, programId) {
|
|
61
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.VAULT, pool.toBuffer(), mint.toBuffer()], programId);
|
|
49
62
|
return pda;
|
|
50
63
|
}
|
|
51
64
|
/**
|
|
52
65
|
* Derive WSOL vault PDA for a pool
|
|
53
66
|
*/
|
|
54
|
-
|
|
55
|
-
return getVaultPda(pool, NATIVE_MINT, programId);
|
|
67
|
+
function getPoolWsolVaultPda(pool, programId) {
|
|
68
|
+
return getVaultPda(pool, constants_js_1.NATIVE_MINT, programId);
|
|
56
69
|
}
|
|
57
70
|
/**
|
|
58
71
|
* Derive token vault PDA for a pool
|
|
59
72
|
*/
|
|
60
|
-
|
|
73
|
+
function getPoolTokenVaultPda(pool, tokenMint, programId) {
|
|
61
74
|
return getVaultPda(pool, tokenMint, programId);
|
|
62
75
|
}
|
|
63
76
|
/**
|
|
64
77
|
* Derive LP mint PDA for a pool
|
|
65
78
|
*/
|
|
66
|
-
|
|
67
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.LP_MINT, pool.toBuffer()], programId);
|
|
79
|
+
function getLpMintPda(pool, programId) {
|
|
80
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.LP_MINT, pool.toBuffer()], programId);
|
|
68
81
|
return pda;
|
|
69
82
|
}
|
|
70
83
|
/**
|
|
71
84
|
* Derive LP vault PDA (holds burned/locked LP tokens)
|
|
72
85
|
*/
|
|
73
|
-
|
|
74
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.LP_VAULT, pool.toBuffer()], programId);
|
|
86
|
+
function getLpVaultPda(pool, programId) {
|
|
87
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.LP_VAULT, pool.toBuffer()], programId);
|
|
75
88
|
return pda;
|
|
76
89
|
}
|
|
77
90
|
// ============= Holder Reward PDAs =============
|
|
@@ -79,8 +92,8 @@ export function getLpVaultPda(pool, programId) {
|
|
|
79
92
|
* Derive holder reward account PDA for a user + token
|
|
80
93
|
* Used for tracking holder rewards across buys/sells
|
|
81
94
|
*/
|
|
82
|
-
|
|
83
|
-
const [pda] = PublicKey.findProgramAddressSync([SEEDS.HOLDER_REWARD, tokenMint.toBuffer(), holder.toBuffer()], programId);
|
|
95
|
+
function getHolderRewardPda(tokenMint, holder, programId) {
|
|
96
|
+
const [pda] = web3_js_1.PublicKey.findProgramAddressSync([constants_js_1.SEEDS.HOLDER_REWARD, tokenMint.toBuffer(), holder.toBuffer()], programId);
|
|
84
97
|
return pda;
|
|
85
98
|
}
|
|
86
99
|
//# sourceMappingURL=pda.js.map
|
package/dist/pda.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pda.js","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"pda.js","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"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"}
|