@x402api/agent-wallet-core 0.1.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 +12 -0
- package/dist/balances.d.ts +32 -0
- package/dist/balances.d.ts.map +1 -0
- package/dist/balances.js +278 -0
- package/dist/balances.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +71 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +209 -0
- package/dist/notifications.js.map +1 -0
- package/dist/payment/attempt-store.d.ts +49 -0
- package/dist/payment/attempt-store.d.ts.map +1 -0
- package/dist/payment/attempt-store.js +283 -0
- package/dist/payment/attempt-store.js.map +1 -0
- package/dist/payment/authorize.d.ts +22 -0
- package/dist/payment/authorize.d.ts.map +1 -0
- package/dist/payment/authorize.js +386 -0
- package/dist/payment/authorize.js.map +1 -0
- package/dist/payment/contracts.d.ts +36 -0
- package/dist/payment/contracts.d.ts.map +1 -0
- package/dist/payment/contracts.js +132 -0
- package/dist/payment/contracts.js.map +1 -0
- package/dist/protocol/base.d.ts +78 -0
- package/dist/protocol/base.d.ts.map +1 -0
- package/dist/protocol/base.js +459 -0
- package/dist/protocol/base.js.map +1 -0
- package/dist/protocol/external-recipient.d.ts +22 -0
- package/dist/protocol/external-recipient.d.ts.map +1 -0
- package/dist/protocol/external-recipient.js +149 -0
- package/dist/protocol/external-recipient.js.map +1 -0
- package/dist/protocol/http.d.ts +52 -0
- package/dist/protocol/http.d.ts.map +1 -0
- package/dist/protocol/http.js +283 -0
- package/dist/protocol/http.js.map +1 -0
- package/dist/protocol/solana.d.ts +147 -0
- package/dist/protocol/solana.d.ts.map +1 -0
- package/dist/protocol/solana.js +549 -0
- package/dist/protocol/solana.js.map +1 -0
- package/dist/protocol/tron.d.ts +130 -0
- package/dist/protocol/tron.d.ts.map +1 -0
- package/dist/protocol/tron.js +539 -0
- package/dist/protocol/tron.js.map +1 -0
- package/dist/storage/keystore.d.ts +51 -0
- package/dist/storage/keystore.d.ts.map +1 -0
- package/dist/storage/keystore.js +317 -0
- package/dist/storage/keystore.js.map +1 -0
- package/dist/storage/paths.d.ts +8 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +22 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/private-files.d.ts +8 -0
- package/dist/storage/private-files.d.ts.map +1 -0
- package/dist/storage/private-files.js +83 -0
- package/dist/storage/private-files.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/protocol/solana.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
import { createPaymentPayload, } from "./http.js";
|
|
2
|
+
import { verifyExternalRecipientDeclaration } from "./external-recipient.js";
|
|
3
|
+
export const SOLANA_MAINNET_NETWORK = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
4
|
+
export const SOLANA_USDC_MAINNET_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
|
5
|
+
export const SOLANA_USDT_MAINNET_MINT = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB";
|
|
6
|
+
export const SOLANA_TOKEN_PROGRAM = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
7
|
+
export const SOLANA_ASSOCIATED_TOKEN_PROGRAM = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
|
|
8
|
+
export const SOLANA_COMPUTE_BUDGET_PROGRAM = "ComputeBudget111111111111111111111111111111";
|
|
9
|
+
export const SOLANA_MEMO_PROGRAM = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
|
|
10
|
+
export const SOLANA_USDT_BUYER_FUNDED_PROFILE = "com.k1hub.x402.solana-buyer-funded.v1";
|
|
11
|
+
const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
12
|
+
const BASE58_INDEX = new Map([...BASE58].map((character, index) => [character, index]));
|
|
13
|
+
const FIELD = (1n << 255n) - 19n;
|
|
14
|
+
const D = mod(-121665n * modPow(121666n, FIELD - 2n, FIELD), FIELD);
|
|
15
|
+
const MEMO = /^k1h:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
16
|
+
const DECIMAL = /^(?:0|[1-9][0-9]{0,19})$/;
|
|
17
|
+
const SOLANA_ISSUER_NATIVE_STABLECOIN_MINTS = new Set([
|
|
18
|
+
SOLANA_USDC_MAINNET_MINT,
|
|
19
|
+
SOLANA_USDT_MAINNET_MINT,
|
|
20
|
+
]);
|
|
21
|
+
function mod(value, modulus) {
|
|
22
|
+
const result = value % modulus;
|
|
23
|
+
return result < 0n ? result + modulus : result;
|
|
24
|
+
}
|
|
25
|
+
function modPow(base, exponent, modulus) {
|
|
26
|
+
let result = 1n;
|
|
27
|
+
let current = mod(base, modulus);
|
|
28
|
+
let remaining = exponent;
|
|
29
|
+
while (remaining > 0n) {
|
|
30
|
+
if (remaining & 1n)
|
|
31
|
+
result = (result * current) % modulus;
|
|
32
|
+
current = (current * current) % modulus;
|
|
33
|
+
remaining >>= 1n;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function isCurvePoint(value) {
|
|
38
|
+
if (value.length !== 32)
|
|
39
|
+
return false;
|
|
40
|
+
let encodedY = 0n;
|
|
41
|
+
for (let index = value.length - 1; index >= 0; index -= 1) {
|
|
42
|
+
encodedY = (encodedY << 8n) | BigInt(value[index]);
|
|
43
|
+
}
|
|
44
|
+
const y = encodedY & ((1n << 255n) - 1n);
|
|
45
|
+
const sign = encodedY >> 255n;
|
|
46
|
+
if (y >= FIELD)
|
|
47
|
+
return false;
|
|
48
|
+
const ySquared = mod(y * y, FIELD);
|
|
49
|
+
const numerator = mod(ySquared - 1n, FIELD);
|
|
50
|
+
const denominator = mod(D * ySquared + 1n, FIELD);
|
|
51
|
+
const xSquared = mod(numerator * modPow(denominator, FIELD - 2n, FIELD), FIELD);
|
|
52
|
+
let x = modPow(xSquared, (FIELD + 3n) / 8n, FIELD);
|
|
53
|
+
if (mod(x * x - xSquared, FIELD) !== 0n) {
|
|
54
|
+
x = mod(x * modPow(2n, (FIELD - 1n) / 4n, FIELD), FIELD);
|
|
55
|
+
}
|
|
56
|
+
return mod(x * x - xSquared, FIELD) === 0n && !(x === 0n && sign === 1n);
|
|
57
|
+
}
|
|
58
|
+
export function decodeSolanaBase58(value) {
|
|
59
|
+
if (typeof value !== "string" || value.length < 32 || value.length > 44) {
|
|
60
|
+
throw new Error("Solana address is not bounded base58");
|
|
61
|
+
}
|
|
62
|
+
let number = 0n;
|
|
63
|
+
for (const character of value) {
|
|
64
|
+
const digit = BASE58_INDEX.get(character);
|
|
65
|
+
if (digit === undefined)
|
|
66
|
+
throw new Error("Solana address is not base58");
|
|
67
|
+
number = number * 58n + BigInt(digit);
|
|
68
|
+
}
|
|
69
|
+
const bytes = [];
|
|
70
|
+
while (number > 0n) {
|
|
71
|
+
bytes.push(Number(number & 255n));
|
|
72
|
+
number >>= 8n;
|
|
73
|
+
}
|
|
74
|
+
bytes.reverse();
|
|
75
|
+
const zeros = value.length - value.replace(/^1+/, "").length;
|
|
76
|
+
const result = new Uint8Array(zeros + bytes.length);
|
|
77
|
+
result.set(bytes, zeros);
|
|
78
|
+
if (result.length !== 32 || encodeSolanaBase58(result) !== value) {
|
|
79
|
+
throw new Error("Solana address is not canonical 32-byte base58");
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
export function encodeSolanaBase58(value) {
|
|
84
|
+
let number = 0n;
|
|
85
|
+
for (const byte of value)
|
|
86
|
+
number = (number << 8n) | BigInt(byte);
|
|
87
|
+
let encoded = "";
|
|
88
|
+
while (number > 0n) {
|
|
89
|
+
const digit = Number(number % 58n);
|
|
90
|
+
encoded = BASE58[digit] + encoded;
|
|
91
|
+
number /= 58n;
|
|
92
|
+
}
|
|
93
|
+
let zeros = 0;
|
|
94
|
+
while (zeros < value.length && value[zeros] === 0)
|
|
95
|
+
zeros += 1;
|
|
96
|
+
return "1".repeat(zeros) + encoded;
|
|
97
|
+
}
|
|
98
|
+
function concatenate(...values) {
|
|
99
|
+
const result = new Uint8Array(values.reduce((length, value) => length + value.length, 0));
|
|
100
|
+
let offset = 0;
|
|
101
|
+
for (const value of values) {
|
|
102
|
+
result.set(value, offset);
|
|
103
|
+
offset += value.length;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
function shortvec(value) {
|
|
108
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > 0xffff) {
|
|
109
|
+
throw new Error("short-vector value is invalid");
|
|
110
|
+
}
|
|
111
|
+
const result = [];
|
|
112
|
+
let remaining = value;
|
|
113
|
+
do {
|
|
114
|
+
let element = remaining & 0x7f;
|
|
115
|
+
remaining >>= 7;
|
|
116
|
+
if (remaining > 0)
|
|
117
|
+
element |= 0x80;
|
|
118
|
+
result.push(element);
|
|
119
|
+
} while (remaining > 0);
|
|
120
|
+
return Uint8Array.from(result);
|
|
121
|
+
}
|
|
122
|
+
function littleEndian(value, length) {
|
|
123
|
+
const result = new Uint8Array(length);
|
|
124
|
+
let remaining = value;
|
|
125
|
+
for (let index = 0; index < length; index += 1) {
|
|
126
|
+
result[index] = Number(remaining & 255n);
|
|
127
|
+
remaining >>= 8n;
|
|
128
|
+
}
|
|
129
|
+
if (remaining !== 0n)
|
|
130
|
+
throw new Error("integer exceeds binary field");
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
async function programAddress(seeds, program) {
|
|
134
|
+
const marker = new TextEncoder().encode("ProgramDerivedAddress");
|
|
135
|
+
for (let bump = 255; bump >= 0; bump -= 1) {
|
|
136
|
+
const input = concatenate(...seeds, Uint8Array.of(bump), program, marker);
|
|
137
|
+
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", input.slice().buffer));
|
|
138
|
+
if (!isCurvePoint(digest))
|
|
139
|
+
return digest;
|
|
140
|
+
}
|
|
141
|
+
throw new Error("unable to derive Solana program address");
|
|
142
|
+
}
|
|
143
|
+
export async function solanaAssociatedTokenAddress(options) {
|
|
144
|
+
const tokenProgram = decodeSolanaBase58(SOLANA_TOKEN_PROGRAM);
|
|
145
|
+
const address = await programAddress([
|
|
146
|
+
decodeSolanaBase58(options.owner),
|
|
147
|
+
tokenProgram,
|
|
148
|
+
decodeSolanaBase58(options.mint),
|
|
149
|
+
], decodeSolanaBase58(SOLANA_ASSOCIATED_TOKEN_PROGRAM));
|
|
150
|
+
return encodeSolanaBase58(address);
|
|
151
|
+
}
|
|
152
|
+
function instruction(programIndex, accountIndices, data) {
|
|
153
|
+
return concatenate(Uint8Array.of(programIndex), shortvec(accountIndices.length), Uint8Array.from(accountIndices), shortvec(data.length), data);
|
|
154
|
+
}
|
|
155
|
+
function toBase64(value) {
|
|
156
|
+
let binary = "";
|
|
157
|
+
for (const byte of value)
|
|
158
|
+
binary += String.fromCharCode(byte);
|
|
159
|
+
return btoa(binary);
|
|
160
|
+
}
|
|
161
|
+
function fromBase64(value) {
|
|
162
|
+
if (typeof value !== "string" ||
|
|
163
|
+
value.length === 0 ||
|
|
164
|
+
value.length > 2_000 ||
|
|
165
|
+
!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)) {
|
|
166
|
+
throw new Error("wallet returned noncanonical base64");
|
|
167
|
+
}
|
|
168
|
+
const binary = atob(value);
|
|
169
|
+
if (btoa(binary) !== value)
|
|
170
|
+
throw new Error("wallet returned invalid base64");
|
|
171
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
172
|
+
}
|
|
173
|
+
export class RawSolanaVersionedTransaction {
|
|
174
|
+
messageBytes;
|
|
175
|
+
version = 0;
|
|
176
|
+
message;
|
|
177
|
+
signatures;
|
|
178
|
+
constructor(messageBytes, signatures) {
|
|
179
|
+
this.messageBytes = messageBytes;
|
|
180
|
+
this.signatures = signatures?.map((signature) => signature.slice()) ?? [
|
|
181
|
+
new Uint8Array(64),
|
|
182
|
+
];
|
|
183
|
+
this.message = {
|
|
184
|
+
version: 0,
|
|
185
|
+
serialize: () => this.messageBytes.slice(),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
serialize() {
|
|
189
|
+
if (![1, 2].includes(this.signatures.length) ||
|
|
190
|
+
this.signatures.some((signature) => signature.length !== 64)) {
|
|
191
|
+
throw new Error("Solana transaction signature vector is invalid");
|
|
192
|
+
}
|
|
193
|
+
return concatenate(shortvec(this.signatures.length), ...this.signatures, this.messageBytes);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export class InjectedSolanaWalletTransport {
|
|
197
|
+
provider;
|
|
198
|
+
payer = null;
|
|
199
|
+
constructor(provider) {
|
|
200
|
+
this.provider = provider;
|
|
201
|
+
}
|
|
202
|
+
async connect(network) {
|
|
203
|
+
if (network !== SOLANA_MAINNET_NETWORK)
|
|
204
|
+
throw new Error("network is invalid");
|
|
205
|
+
const connected = await this.provider.connect();
|
|
206
|
+
const payer = connected.publicKey.toString();
|
|
207
|
+
decodeSolanaBase58(payer);
|
|
208
|
+
this.payer = payer;
|
|
209
|
+
return payer;
|
|
210
|
+
}
|
|
211
|
+
async signTransaction(options) {
|
|
212
|
+
if (this.payer === null)
|
|
213
|
+
throw new Error("Solana wallet is not connected");
|
|
214
|
+
const raw = fromBase64(options.transactionBase64);
|
|
215
|
+
const signatureCount = raw[0];
|
|
216
|
+
if (signatureCount === undefined ||
|
|
217
|
+
![1, 2].includes(signatureCount) ||
|
|
218
|
+
raw.length < 1 + signatureCount * 64 + 1) {
|
|
219
|
+
throw new Error("Solana transaction signature vector is invalid");
|
|
220
|
+
}
|
|
221
|
+
const messageOffset = 1 + signatureCount * 64;
|
|
222
|
+
const signatures = Array.from({ length: signatureCount }, (_, index) => raw.slice(1 + index * 64, 1 + (index + 1) * 64));
|
|
223
|
+
const transaction = new RawSolanaVersionedTransaction(raw.slice(messageOffset), signatures);
|
|
224
|
+
const signed = await this.provider.signTransaction(transaction);
|
|
225
|
+
return toBase64(signed.serialize());
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function validateSponsoredRequirement(accepted) {
|
|
229
|
+
if (accepted.scheme !== "exact" ||
|
|
230
|
+
accepted.network !== SOLANA_MAINNET_NETWORK ||
|
|
231
|
+
accepted.asset !== SOLANA_USDT_MAINNET_MINT ||
|
|
232
|
+
!DECIMAL.test(accepted.amount) ||
|
|
233
|
+
accepted.amount === "0" ||
|
|
234
|
+
typeof accepted.extra.feePayer !== "string" ||
|
|
235
|
+
typeof accepted.extra.memo !== "string" ||
|
|
236
|
+
!MEMO.test(accepted.extra.memo)) {
|
|
237
|
+
throw new Error("requirement is not native Solana USDt exact");
|
|
238
|
+
}
|
|
239
|
+
decodeSolanaBase58(accepted.asset);
|
|
240
|
+
decodeSolanaBase58(accepted.payTo);
|
|
241
|
+
decodeSolanaBase58(accepted.extra.feePayer);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Build the dormant tenant-sponsored Solana transaction profile.
|
|
245
|
+
*
|
|
246
|
+
* @deprecated V1 uses `buildBuyerFundedSolanaUsdtTransaction`. This helper is
|
|
247
|
+
* retained only for managed-wallet regression and the isolated payment lab.
|
|
248
|
+
*/
|
|
249
|
+
export async function buildSolanaUsdtTransaction(options) {
|
|
250
|
+
const { accepted, payer, recentBlockhash } = options;
|
|
251
|
+
validateSponsoredRequirement(accepted);
|
|
252
|
+
decodeSolanaBase58(payer);
|
|
253
|
+
if (payer === accepted.payTo || payer === accepted.extra.feePayer) {
|
|
254
|
+
throw new Error("payer, recipient, and fee payer must be distinct");
|
|
255
|
+
}
|
|
256
|
+
const amount = BigInt(accepted.amount);
|
|
257
|
+
const computeLimit = options.computeUnitLimit ?? 20_000;
|
|
258
|
+
const computePrice = options.computeUnitPriceMicroLamports ?? 1;
|
|
259
|
+
if (!Number.isSafeInteger(computeLimit) ||
|
|
260
|
+
computeLimit < 1 ||
|
|
261
|
+
computeLimit > 200_000 ||
|
|
262
|
+
!Number.isSafeInteger(computePrice) ||
|
|
263
|
+
computePrice < 0 ||
|
|
264
|
+
computePrice > 1_000_000) {
|
|
265
|
+
throw new Error("Solana compute budget is outside the client ceiling");
|
|
266
|
+
}
|
|
267
|
+
const [source, destination] = await Promise.all([
|
|
268
|
+
solanaAssociatedTokenAddress({
|
|
269
|
+
owner: payer,
|
|
270
|
+
mint: accepted.asset,
|
|
271
|
+
}),
|
|
272
|
+
solanaAssociatedTokenAddress({
|
|
273
|
+
owner: accepted.payTo,
|
|
274
|
+
mint: accepted.asset,
|
|
275
|
+
}),
|
|
276
|
+
]);
|
|
277
|
+
const accountKeys = [
|
|
278
|
+
String(accepted.extra.feePayer),
|
|
279
|
+
payer,
|
|
280
|
+
source,
|
|
281
|
+
destination,
|
|
282
|
+
accepted.asset,
|
|
283
|
+
SOLANA_COMPUTE_BUDGET_PROGRAM,
|
|
284
|
+
SOLANA_TOKEN_PROGRAM,
|
|
285
|
+
SOLANA_MEMO_PROGRAM,
|
|
286
|
+
].map(decodeSolanaBase58);
|
|
287
|
+
const compiledInstructions = [
|
|
288
|
+
instruction(5, [], concatenate(Uint8Array.of(2), littleEndian(BigInt(computeLimit), 4))),
|
|
289
|
+
instruction(5, [], concatenate(Uint8Array.of(3), littleEndian(BigInt(computePrice), 8))),
|
|
290
|
+
instruction(6, [2, 4, 3, 1], concatenate(Uint8Array.of(12), littleEndian(amount, 8), Uint8Array.of(6))),
|
|
291
|
+
instruction(7, [], new TextEncoder().encode(String(accepted.extra.memo))),
|
|
292
|
+
];
|
|
293
|
+
const message = concatenate(Uint8Array.of(0x80, 2, 1, 4), shortvec(accountKeys.length), ...accountKeys, decodeSolanaBase58(recentBlockhash), shortvec(compiledInstructions.length), ...compiledInstructions, shortvec(0));
|
|
294
|
+
const transaction = concatenate(shortvec(2), new Uint8Array(128), message);
|
|
295
|
+
if (transaction.length > 1_232)
|
|
296
|
+
throw new Error("transaction exceeds packet size");
|
|
297
|
+
return { message, transaction };
|
|
298
|
+
}
|
|
299
|
+
function verifySponsoredWalletTransaction(options) {
|
|
300
|
+
const { unsigned, signed, message } = options;
|
|
301
|
+
if (signed.length !== unsigned.length || signed.length > 1_232) {
|
|
302
|
+
throw new Error("wallet changed the transaction size");
|
|
303
|
+
}
|
|
304
|
+
if (signed[0] !== 2 || signed.slice(129).toString() !== message.toString()) {
|
|
305
|
+
throw new Error("wallet changed the frozen Solana message");
|
|
306
|
+
}
|
|
307
|
+
if (signed.slice(1, 65).some((value) => value !== 0) ||
|
|
308
|
+
signed.slice(65, 129).every((value) => value === 0)) {
|
|
309
|
+
throw new Error("wallet changed the sponsor slot or omitted its signature");
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
function validateBuyerFundedRequirement(accepted) {
|
|
313
|
+
if (accepted.scheme !== "exact" ||
|
|
314
|
+
accepted.network !== SOLANA_MAINNET_NETWORK ||
|
|
315
|
+
!SOLANA_ISSUER_NATIVE_STABLECOIN_MINTS.has(accepted.asset) ||
|
|
316
|
+
!DECIMAL.test(accepted.amount) ||
|
|
317
|
+
accepted.amount === "0" ||
|
|
318
|
+
typeof accepted.extra !== "object" ||
|
|
319
|
+
accepted.extra === null ||
|
|
320
|
+
Object.keys(accepted.extra).sort().join(",") !== "memo,payloadProfile" ||
|
|
321
|
+
accepted.extra.payloadProfile !== SOLANA_USDT_BUYER_FUNDED_PROFILE ||
|
|
322
|
+
typeof accepted.extra.memo !== "string" ||
|
|
323
|
+
!MEMO.test(accepted.extra.memo)) {
|
|
324
|
+
throw new Error("requirement is not buyer-funded issuer-native Solana USDC or USDT exact");
|
|
325
|
+
}
|
|
326
|
+
decodeSolanaBase58(accepted.asset);
|
|
327
|
+
decodeSolanaBase58(accepted.payTo);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Build an exact V1 buyer-funded issuer-native Solana stablecoin transaction.
|
|
331
|
+
*
|
|
332
|
+
* The connected buyer is both the SPL token authority and the only transaction
|
|
333
|
+
* signer/fee payer. The frozen v0 message contains exactly two compute-budget
|
|
334
|
+
* instructions, one `TransferChecked`, and the challenge memo.
|
|
335
|
+
*/
|
|
336
|
+
export async function buildBuyerFundedSolanaPayment(options) {
|
|
337
|
+
const { accepted, payer, recentBlockhash } = options;
|
|
338
|
+
validateBuyerFundedRequirement(accepted);
|
|
339
|
+
decodeSolanaBase58(payer);
|
|
340
|
+
decodeSolanaBase58(recentBlockhash);
|
|
341
|
+
if (payer === accepted.payTo) {
|
|
342
|
+
throw new Error("payer and recipient must be distinct");
|
|
343
|
+
}
|
|
344
|
+
const amount = BigInt(accepted.amount);
|
|
345
|
+
const computeLimit = options.computeUnitLimit ?? 20_000;
|
|
346
|
+
const computePrice = options.computeUnitPriceMicroLamports ?? 1;
|
|
347
|
+
if (!Number.isSafeInteger(computeLimit) ||
|
|
348
|
+
computeLimit < 1 ||
|
|
349
|
+
computeLimit > 200_000 ||
|
|
350
|
+
!Number.isSafeInteger(computePrice) ||
|
|
351
|
+
computePrice < 0 ||
|
|
352
|
+
computePrice > 1_000_000) {
|
|
353
|
+
throw new Error("Solana compute budget is outside the client ceiling");
|
|
354
|
+
}
|
|
355
|
+
const [source, destination] = await Promise.all([
|
|
356
|
+
solanaAssociatedTokenAddress({ owner: payer, mint: accepted.asset }),
|
|
357
|
+
solanaAssociatedTokenAddress({
|
|
358
|
+
owner: accepted.payTo,
|
|
359
|
+
mint: accepted.asset,
|
|
360
|
+
}),
|
|
361
|
+
]);
|
|
362
|
+
const accountKeys = [
|
|
363
|
+
payer,
|
|
364
|
+
source,
|
|
365
|
+
destination,
|
|
366
|
+
accepted.asset,
|
|
367
|
+
SOLANA_COMPUTE_BUDGET_PROGRAM,
|
|
368
|
+
SOLANA_TOKEN_PROGRAM,
|
|
369
|
+
SOLANA_MEMO_PROGRAM,
|
|
370
|
+
].map(decodeSolanaBase58);
|
|
371
|
+
const compiledInstructions = [
|
|
372
|
+
instruction(4, [], concatenate(Uint8Array.of(2), littleEndian(BigInt(computeLimit), 4))),
|
|
373
|
+
instruction(4, [], concatenate(Uint8Array.of(3), littleEndian(BigInt(computePrice), 8))),
|
|
374
|
+
instruction(5, [1, 3, 2, 0], concatenate(Uint8Array.of(12), littleEndian(amount, 8), Uint8Array.of(6))),
|
|
375
|
+
instruction(6, [], new TextEncoder().encode(String(accepted.extra.memo))),
|
|
376
|
+
];
|
|
377
|
+
const message = concatenate(Uint8Array.of(0x80, 1, 0, 4), shortvec(accountKeys.length), ...accountKeys, decodeSolanaBase58(recentBlockhash), shortvec(compiledInstructions.length), ...compiledInstructions, shortvec(0));
|
|
378
|
+
const transaction = concatenate(shortvec(1), new Uint8Array(64), message);
|
|
379
|
+
if (transaction.length > 1_232) {
|
|
380
|
+
throw new Error("transaction exceeds packet size");
|
|
381
|
+
}
|
|
382
|
+
return { message, transaction };
|
|
383
|
+
}
|
|
384
|
+
/** @deprecated Use `buildBuyerFundedSolanaPayment`; retained for compatibility. */
|
|
385
|
+
export const buildBuyerFundedSolanaUsdtTransaction = buildBuyerFundedSolanaPayment;
|
|
386
|
+
function verifyBuyerFundedWalletTransaction(options) {
|
|
387
|
+
const { unsigned, signed, message } = options;
|
|
388
|
+
if (signed.length !== unsigned.length || signed.length > 1_232) {
|
|
389
|
+
throw new Error("wallet changed the transaction size");
|
|
390
|
+
}
|
|
391
|
+
if (signed[0] !== 1 || signed.slice(65).toString() !== message.toString()) {
|
|
392
|
+
throw new Error("wallet changed the frozen Solana message");
|
|
393
|
+
}
|
|
394
|
+
if (signed.slice(1, 65).every((value) => value === 0)) {
|
|
395
|
+
throw new Error("wallet omitted the buyer transaction signature");
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
export class ConnectedSolanaWalletRpcTransport {
|
|
399
|
+
provider;
|
|
400
|
+
account;
|
|
401
|
+
constructor(provider, account) {
|
|
402
|
+
this.provider = provider;
|
|
403
|
+
this.account = account;
|
|
404
|
+
}
|
|
405
|
+
async connect(network) {
|
|
406
|
+
if (network !== SOLANA_MAINNET_NETWORK)
|
|
407
|
+
throw new Error("network is invalid");
|
|
408
|
+
const account = await this.account();
|
|
409
|
+
decodeSolanaBase58(account);
|
|
410
|
+
return account;
|
|
411
|
+
}
|
|
412
|
+
async signTransaction(options) {
|
|
413
|
+
const result = await this.provider.request({
|
|
414
|
+
method: "solana_signTransaction",
|
|
415
|
+
params: { transaction: options.transactionBase64 },
|
|
416
|
+
}, options.network);
|
|
417
|
+
if (typeof result === "string")
|
|
418
|
+
return result;
|
|
419
|
+
if (typeof result === "object" &&
|
|
420
|
+
result !== null &&
|
|
421
|
+
"transaction" in result &&
|
|
422
|
+
typeof result.transaction === "string") {
|
|
423
|
+
return result.transaction;
|
|
424
|
+
}
|
|
425
|
+
throw new Error("Solana wallet returned no signed transaction");
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
export class SolanaJsonRpc {
|
|
429
|
+
endpoint;
|
|
430
|
+
constructor(endpoint) {
|
|
431
|
+
this.endpoint = endpoint;
|
|
432
|
+
const parsed = new URL(endpoint);
|
|
433
|
+
if (parsed.protocol !== "https:" || parsed.username || parsed.password) {
|
|
434
|
+
throw new Error("Solana browser RPC must be a fixed HTTPS endpoint");
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
async latestBlockhash() {
|
|
438
|
+
const response = await fetch(this.endpoint, {
|
|
439
|
+
method: "POST",
|
|
440
|
+
headers: { "Content-Type": "application/json" },
|
|
441
|
+
body: JSON.stringify({
|
|
442
|
+
jsonrpc: "2.0",
|
|
443
|
+
id: 1,
|
|
444
|
+
method: "getLatestBlockhash",
|
|
445
|
+
params: [{ commitment: "confirmed" }],
|
|
446
|
+
}),
|
|
447
|
+
cache: "no-store",
|
|
448
|
+
redirect: "error",
|
|
449
|
+
});
|
|
450
|
+
if (!response.ok)
|
|
451
|
+
throw new Error("Solana RPC is unavailable");
|
|
452
|
+
const document = await response.json();
|
|
453
|
+
const blockhash = typeof document === "object" &&
|
|
454
|
+
document !== null &&
|
|
455
|
+
"result" in document &&
|
|
456
|
+
typeof document.result === "object" &&
|
|
457
|
+
document.result !== null &&
|
|
458
|
+
"value" in document.result &&
|
|
459
|
+
typeof document.result.value === "object" &&
|
|
460
|
+
document.result.value !== null &&
|
|
461
|
+
"blockhash" in document.result.value
|
|
462
|
+
? document.result.value.blockhash
|
|
463
|
+
: null;
|
|
464
|
+
if (typeof blockhash !== "string") {
|
|
465
|
+
throw new Error("Solana RPC returned no recent blockhash");
|
|
466
|
+
}
|
|
467
|
+
decodeSolanaBase58(blockhash);
|
|
468
|
+
return blockhash;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
export async function createSolanaPayment(options) {
|
|
472
|
+
const { accepted, paymentRequired } = options;
|
|
473
|
+
validateBuyerFundedRequirement(accepted);
|
|
474
|
+
await verifyExternalRecipientDeclaration({
|
|
475
|
+
paymentRequired,
|
|
476
|
+
accepted,
|
|
477
|
+
});
|
|
478
|
+
const payer = await options.wallet.connect(SOLANA_MAINNET_NETWORK);
|
|
479
|
+
const recentBlockhash = await options.rpc.latestBlockhash();
|
|
480
|
+
const { message, transaction } = await buildBuyerFundedSolanaPayment({
|
|
481
|
+
accepted,
|
|
482
|
+
payer,
|
|
483
|
+
recentBlockhash,
|
|
484
|
+
});
|
|
485
|
+
const signed = fromBase64(await options.wallet.signTransaction({
|
|
486
|
+
network: SOLANA_MAINNET_NETWORK,
|
|
487
|
+
transactionBase64: toBase64(transaction),
|
|
488
|
+
}));
|
|
489
|
+
verifyBuyerFundedWalletTransaction({
|
|
490
|
+
unsigned: transaction,
|
|
491
|
+
signed,
|
|
492
|
+
message,
|
|
493
|
+
});
|
|
494
|
+
return createPaymentPayload({
|
|
495
|
+
paymentRequired,
|
|
496
|
+
accepted,
|
|
497
|
+
paymentIdentifier: options.buyerPaymentIdentifier,
|
|
498
|
+
schemePayload: { transaction: toBase64(signed) },
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
export const createSolanaUsdcPayment = createSolanaPayment;
|
|
502
|
+
export const createSolanaUsdtPayment = createSolanaPayment;
|
|
503
|
+
export const createBuyerFundedSolanaPayment = createSolanaPayment;
|
|
504
|
+
export const createBuyerFundedSolanaUsdtPayment = createSolanaPayment;
|
|
505
|
+
/**
|
|
506
|
+
* @deprecated Isolated tenant-sponsored payment-lab helper. It is not part of
|
|
507
|
+
* the external-wallet V1 product path.
|
|
508
|
+
*/
|
|
509
|
+
export async function createSolanaUsdtLabPayment(options) {
|
|
510
|
+
const { accepted, admission, paymentRequired } = options;
|
|
511
|
+
validateSponsoredRequirement(accepted);
|
|
512
|
+
const now = options.now ?? new Date();
|
|
513
|
+
const expiresAt = new Date(admission.expiresAt);
|
|
514
|
+
if (admission.kind !== "tenant-sponsored-solana-payment-lab-v1" ||
|
|
515
|
+
admission.asset !== SOLANA_USDT_MAINNET_MINT ||
|
|
516
|
+
admission.resourceUrl !== paymentRequired.resource.url ||
|
|
517
|
+
admission.recipient !== accepted.payTo ||
|
|
518
|
+
admission.amountAtomic !== accepted.amount ||
|
|
519
|
+
!DECIMAL.test(admission.amountAtomic) ||
|
|
520
|
+
Number.isNaN(expiresAt.valueOf()) ||
|
|
521
|
+
expiresAt <= now) {
|
|
522
|
+
throw new Error("Solana payment-lab admission does not match the challenge");
|
|
523
|
+
}
|
|
524
|
+
const payer = await options.wallet.connect(SOLANA_MAINNET_NETWORK);
|
|
525
|
+
if (payer !== admission.payer) {
|
|
526
|
+
throw new Error("connected Solana wallet is not the admitted lab payer");
|
|
527
|
+
}
|
|
528
|
+
const { message, transaction } = await buildSolanaUsdtTransaction({
|
|
529
|
+
accepted,
|
|
530
|
+
payer,
|
|
531
|
+
recentBlockhash: await options.rpc.latestBlockhash(),
|
|
532
|
+
});
|
|
533
|
+
const signed = fromBase64(await options.wallet.signTransaction({
|
|
534
|
+
network: SOLANA_MAINNET_NETWORK,
|
|
535
|
+
transactionBase64: toBase64(transaction),
|
|
536
|
+
}));
|
|
537
|
+
verifySponsoredWalletTransaction({
|
|
538
|
+
unsigned: transaction,
|
|
539
|
+
signed,
|
|
540
|
+
message,
|
|
541
|
+
});
|
|
542
|
+
return createPaymentPayload({
|
|
543
|
+
paymentRequired,
|
|
544
|
+
accepted,
|
|
545
|
+
paymentIdentifier: options.buyerPaymentIdentifier,
|
|
546
|
+
schemePayload: { transaction: toBase64(signed) },
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=solana.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/protocol/solana.ts"],"names":[],"mappings":"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"}
|