veilioexchange 0.1.0 → 0.2.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 +48 -1
- package/dist/cjs/solana/auction.d.ts +180 -0
- package/dist/cjs/solana/auction.d.ts.map +1 -0
- package/dist/cjs/solana/auction.js +457 -0
- package/dist/cjs/solana/auction.js.map +1 -0
- package/dist/cjs/solana/client.d.ts +75 -0
- package/dist/cjs/solana/client.d.ts.map +1 -0
- package/dist/cjs/solana/client.js +281 -0
- package/dist/cjs/solana/client.js.map +1 -0
- package/dist/cjs/solana/escrow.d.ts +140 -0
- package/dist/cjs/solana/escrow.d.ts.map +1 -0
- package/dist/cjs/solana/escrow.js +354 -0
- package/dist/cjs/solana/escrow.js.map +1 -0
- package/dist/cjs/solana/index.d.ts +9 -0
- package/dist/cjs/solana/index.d.ts.map +1 -0
- package/dist/cjs/solana/index.js +32 -0
- package/dist/cjs/solana/index.js.map +1 -0
- package/dist/cjs/solana/registry.d.ts +100 -0
- package/dist/cjs/solana/registry.d.ts.map +1 -0
- package/dist/cjs/solana/registry.js +278 -0
- package/dist/cjs/solana/registry.js.map +1 -0
- package/dist/esm/solana/auction.d.ts +180 -0
- package/dist/esm/solana/auction.d.ts.map +1 -0
- package/dist/esm/solana/auction.js +438 -0
- package/dist/esm/solana/auction.js.map +1 -0
- package/dist/esm/solana/client.d.ts +75 -0
- package/dist/esm/solana/client.d.ts.map +1 -0
- package/dist/esm/solana/client.js +274 -0
- package/dist/esm/solana/client.js.map +1 -0
- package/dist/esm/solana/escrow.d.ts +140 -0
- package/dist/esm/solana/escrow.d.ts.map +1 -0
- package/dist/esm/solana/escrow.js +339 -0
- package/dist/esm/solana/escrow.js.map +1 -0
- package/dist/esm/solana/index.d.ts +9 -0
- package/dist/esm/solana/index.d.ts.map +1 -0
- package/dist/esm/solana/index.js +9 -0
- package/dist/esm/solana/index.js.map +1 -0
- package/dist/esm/solana/registry.d.ts +100 -0
- package/dist/esm/solana/registry.d.ts.map +1 -0
- package/dist/esm/solana/registry.js +264 -0
- package/dist/esm/solana/registry.js.map +1 -0
- package/package.json +30 -4
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VEILIO Solana Services Escrow Client & Program Interface
|
|
4
|
+
*
|
|
5
|
+
* Implements client-side PDA derivation, Anchor instruction serialization,
|
|
6
|
+
* account deserialization, fee calculations, and transaction verification
|
|
7
|
+
* for the dedicated Solana Devnet VeilServiceEscrow program.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SOLANA_SERVICE_ESCROW_STATUS_MAP = exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID = exports.MAX_FEE_BPS = exports.MAX_DELIVERABLE_REF_LEN = exports.VAULT_SEED = exports.ESCROW_SEED = void 0;
|
|
11
|
+
exports.findEscrowOrderPda = findEscrowOrderPda;
|
|
12
|
+
exports.findVaultPda = findVaultPda;
|
|
13
|
+
exports.createDepositServiceOrderInstruction = createDepositServiceOrderInstruction;
|
|
14
|
+
exports.createSubmitDeliveryInstruction = createSubmitDeliveryInstruction;
|
|
15
|
+
exports.createReleaseFundsInstruction = createReleaseFundsInstruction;
|
|
16
|
+
exports.createCancelOrRefundInstruction = createCancelOrRefundInstruction;
|
|
17
|
+
exports.createDisputeOrderInstruction = createDisputeOrderInstruction;
|
|
18
|
+
exports.createResolveDisputeInstruction = createResolveDisputeInstruction;
|
|
19
|
+
exports.decodeEscrowOrderAccount = decodeEscrowOrderAccount;
|
|
20
|
+
exports.calculateSolanaServicePayouts = calculateSolanaServicePayouts;
|
|
21
|
+
exports.formatLamportsToSol = formatLamportsToSol;
|
|
22
|
+
exports.parseSolToLamports = parseSolToLamports;
|
|
23
|
+
const registry_js_1 = require("./registry.js");
|
|
24
|
+
// Canonical Seeds & Limits
|
|
25
|
+
exports.ESCROW_SEED = Buffer.from('service_escrow');
|
|
26
|
+
exports.VAULT_SEED = Buffer.from('service_vault');
|
|
27
|
+
exports.MAX_DELIVERABLE_REF_LEN = 200;
|
|
28
|
+
exports.MAX_FEE_BPS = 500; // 5%
|
|
29
|
+
// Default Program ID (can be overridden via NEXT_PUBLIC_SOLANA_SERVICE_ESCROW_PROGRAM_ID)
|
|
30
|
+
exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID = '5Vj4y8BT74PDe5VwLuDp9agTR5ak4vtZdwxnBfRW3R8s';
|
|
31
|
+
exports.SOLANA_SERVICE_ESCROW_STATUS_MAP = {
|
|
32
|
+
0: 'None',
|
|
33
|
+
1: 'Funded',
|
|
34
|
+
2: 'Delivered',
|
|
35
|
+
3: 'Released',
|
|
36
|
+
4: 'Refunded',
|
|
37
|
+
5: 'Disputed',
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Derives the EscrowOrder account PDA: [b"service_escrow", order_id]
|
|
41
|
+
*/
|
|
42
|
+
function findEscrowOrderPda(orderId, programId = exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID) {
|
|
43
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(orderId);
|
|
44
|
+
return (0, registry_js_1.findProgramDerivedAddress)([exports.ESCROW_SEED, orderIdBytes], programId);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Derives the Vault account PDA holding SOL lamports: [b"service_vault", order_id]
|
|
48
|
+
*/
|
|
49
|
+
function findVaultPda(orderId, programId = exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID) {
|
|
50
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(orderId);
|
|
51
|
+
return (0, registry_js_1.findProgramDerivedAddress)([exports.VAULT_SEED, orderIdBytes], programId);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Encodes the deposit instruction:
|
|
55
|
+
* accounts: [escrow_order (mut, pda), vault (mut, pda), buyer (signer, mut), system_program]
|
|
56
|
+
*/
|
|
57
|
+
function createDepositServiceOrderInstruction(params) {
|
|
58
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
59
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
60
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
61
|
+
const { pda: vaultPda } = findVaultPda(orderIdBytes, programId);
|
|
62
|
+
const amount = BigInt(params.amountLamports);
|
|
63
|
+
if (amount <= 0n)
|
|
64
|
+
throw new Error('Deposit amount must be greater than zero');
|
|
65
|
+
if (params.seller === params.buyer)
|
|
66
|
+
throw new Error('Buyer cannot be seller');
|
|
67
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'deposit');
|
|
68
|
+
const sellerBytes = Buffer.from((0, registry_js_1.decodeBase58)(params.seller));
|
|
69
|
+
const reviewerBytes = Buffer.from((0, registry_js_1.decodeBase58)(params.reviewer));
|
|
70
|
+
const feeRecipientBytes = Buffer.from((0, registry_js_1.decodeBase58)(params.feeRecipient));
|
|
71
|
+
const amountBuf = Buffer.alloc(8);
|
|
72
|
+
amountBuf.writeBigUInt64LE(amount);
|
|
73
|
+
const deadlineBuf = Buffer.alloc(8);
|
|
74
|
+
deadlineBuf.writeBigInt64LE(BigInt(params.deadline));
|
|
75
|
+
const data = Buffer.concat([
|
|
76
|
+
discriminator,
|
|
77
|
+
orderIdBytes,
|
|
78
|
+
sellerBytes,
|
|
79
|
+
reviewerBytes,
|
|
80
|
+
feeRecipientBytes,
|
|
81
|
+
amountBuf,
|
|
82
|
+
deadlineBuf,
|
|
83
|
+
]);
|
|
84
|
+
const keys = [
|
|
85
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
86
|
+
{ pubkey: vaultPda, isSigner: false, isWritable: true },
|
|
87
|
+
{ pubkey: params.buyer, isSigner: true, isWritable: true },
|
|
88
|
+
{ pubkey: registry_js_1.SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
89
|
+
];
|
|
90
|
+
return {
|
|
91
|
+
programId,
|
|
92
|
+
accounts: keys,
|
|
93
|
+
keys,
|
|
94
|
+
data: Buffer.from(data),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Encodes the submit_delivery instruction:
|
|
99
|
+
* accounts: [escrow_order (mut), seller (signer)]
|
|
100
|
+
*/
|
|
101
|
+
function createSubmitDeliveryInstruction(params) {
|
|
102
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
103
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
104
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
105
|
+
const refStr = params.deliverableReference.trim();
|
|
106
|
+
if (!refStr)
|
|
107
|
+
throw new Error('Deliverable reference cannot be empty');
|
|
108
|
+
const refBuf = Buffer.from(refStr, 'utf8');
|
|
109
|
+
if (refBuf.length > exports.MAX_DELIVERABLE_REF_LEN) {
|
|
110
|
+
throw new Error(`Deliverable reference exceeds ${exports.MAX_DELIVERABLE_REF_LEN} bytes`);
|
|
111
|
+
}
|
|
112
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'submit_delivery');
|
|
113
|
+
const lenBuf = Buffer.alloc(4);
|
|
114
|
+
lenBuf.writeUInt32LE(refBuf.length);
|
|
115
|
+
const data = Buffer.concat([discriminator, lenBuf, refBuf]);
|
|
116
|
+
const keys = [
|
|
117
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
118
|
+
{ pubkey: params.seller, isSigner: true, isWritable: false },
|
|
119
|
+
];
|
|
120
|
+
return {
|
|
121
|
+
programId,
|
|
122
|
+
accounts: keys,
|
|
123
|
+
keys,
|
|
124
|
+
data: Buffer.from(data),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Encodes the release_funds instruction:
|
|
129
|
+
* accounts: [escrow_order (mut), vault (mut), buyer (signer), seller (mut), fee_recipient (mut)]
|
|
130
|
+
*/
|
|
131
|
+
function createReleaseFundsInstruction(params) {
|
|
132
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
133
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
134
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
135
|
+
const { pda: vaultPda } = findVaultPda(orderIdBytes, programId);
|
|
136
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'release_funds');
|
|
137
|
+
const keys = [
|
|
138
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
139
|
+
{ pubkey: vaultPda, isSigner: false, isWritable: true },
|
|
140
|
+
{ pubkey: params.buyer, isSigner: true, isWritable: false },
|
|
141
|
+
{ pubkey: params.seller, isSigner: false, isWritable: true },
|
|
142
|
+
{ pubkey: params.feeRecipient, isSigner: false, isWritable: true },
|
|
143
|
+
{ pubkey: registry_js_1.SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
144
|
+
];
|
|
145
|
+
return {
|
|
146
|
+
programId,
|
|
147
|
+
accounts: keys,
|
|
148
|
+
keys,
|
|
149
|
+
data: Buffer.from(discriminator),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Encodes the cancel_or_refund instruction:
|
|
154
|
+
* accounts: [escrow_order (mut), vault (mut), caller (signer), buyer (mut), system_program]
|
|
155
|
+
*/
|
|
156
|
+
function createCancelOrRefundInstruction(params) {
|
|
157
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
158
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
159
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
160
|
+
const { pda: vaultPda } = findVaultPda(orderIdBytes, programId);
|
|
161
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'cancel_or_refund');
|
|
162
|
+
const reasonBuf = Buffer.from(params.reason.trim() || 'Order cancelled', 'utf8');
|
|
163
|
+
const lenBuf = Buffer.alloc(4);
|
|
164
|
+
lenBuf.writeUInt32LE(reasonBuf.length);
|
|
165
|
+
const data = Buffer.concat([discriminator, lenBuf, reasonBuf]);
|
|
166
|
+
const keys = [
|
|
167
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
168
|
+
{ pubkey: vaultPda, isSigner: false, isWritable: true },
|
|
169
|
+
{ pubkey: params.caller, isSigner: true, isWritable: false },
|
|
170
|
+
{ pubkey: params.buyer, isSigner: false, isWritable: true },
|
|
171
|
+
{ pubkey: registry_js_1.SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
172
|
+
];
|
|
173
|
+
return {
|
|
174
|
+
programId,
|
|
175
|
+
accounts: keys,
|
|
176
|
+
keys,
|
|
177
|
+
data: Buffer.from(data),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Encodes the dispute instruction:
|
|
182
|
+
* accounts: [escrow_order (mut), caller (signer)]
|
|
183
|
+
*/
|
|
184
|
+
function createDisputeOrderInstruction(params) {
|
|
185
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
186
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
187
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
188
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'dispute');
|
|
189
|
+
const reasonBuf = Buffer.from(params.reason.trim() || 'Dispute opened', 'utf8');
|
|
190
|
+
const lenBuf = Buffer.alloc(4);
|
|
191
|
+
lenBuf.writeUInt32LE(reasonBuf.length);
|
|
192
|
+
const data = Buffer.concat([discriminator, lenBuf, reasonBuf]);
|
|
193
|
+
const keys = [
|
|
194
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
195
|
+
{ pubkey: params.caller, isSigner: true, isWritable: false },
|
|
196
|
+
];
|
|
197
|
+
return {
|
|
198
|
+
programId,
|
|
199
|
+
accounts: keys,
|
|
200
|
+
keys,
|
|
201
|
+
data: Buffer.from(data),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Encodes the resolve_dispute instruction:
|
|
206
|
+
* accounts: [escrow_order (mut), vault (mut), reviewer (signer), buyer (mut), seller (mut), fee_recipient (mut)]
|
|
207
|
+
*/
|
|
208
|
+
function createResolveDisputeInstruction(params) {
|
|
209
|
+
const programId = params.programId || exports.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
|
|
210
|
+
const orderIdBytes = (0, registry_js_1.normalizeBytes32)(params.orderId);
|
|
211
|
+
const { pda: escrowOrderPda } = findEscrowOrderPda(orderIdBytes, programId);
|
|
212
|
+
const { pda: vaultPda } = findVaultPda(orderIdBytes, programId);
|
|
213
|
+
if (params.splitToBuyerPercent < 0 || params.splitToBuyerPercent > 100) {
|
|
214
|
+
throw new Error('Split percentage must be between 0 and 100');
|
|
215
|
+
}
|
|
216
|
+
const discriminator = (0, registry_js_1.getAnchorDiscriminator)('global', 'resolve_dispute');
|
|
217
|
+
const splitBuf = Buffer.from([params.splitToBuyerPercent]);
|
|
218
|
+
const data = Buffer.concat([discriminator, splitBuf]);
|
|
219
|
+
const keys = [
|
|
220
|
+
{ pubkey: escrowOrderPda, isSigner: false, isWritable: true },
|
|
221
|
+
{ pubkey: vaultPda, isSigner: false, isWritable: true },
|
|
222
|
+
{ pubkey: params.reviewer, isSigner: true, isWritable: false },
|
|
223
|
+
{ pubkey: params.buyer, isSigner: false, isWritable: true },
|
|
224
|
+
{ pubkey: params.seller, isSigner: false, isWritable: true },
|
|
225
|
+
{ pubkey: params.feeRecipient, isSigner: false, isWritable: true },
|
|
226
|
+
{ pubkey: registry_js_1.SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
227
|
+
];
|
|
228
|
+
return {
|
|
229
|
+
programId,
|
|
230
|
+
accounts: keys,
|
|
231
|
+
keys,
|
|
232
|
+
data: Buffer.from(data),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Decodes serialized EscrowOrder account buffer.
|
|
237
|
+
*/
|
|
238
|
+
function decodeEscrowOrderAccount(buffer) {
|
|
239
|
+
const buf = Buffer.from(buffer);
|
|
240
|
+
const expectedDiscriminator = (0, registry_js_1.getAnchorDiscriminator)('account', 'EscrowOrder');
|
|
241
|
+
if (buf.length < 8 + 32 * 4 + 32 + 8 + 2 + 8 + 1 + 8 + 8 + 4 + 1 + 1) {
|
|
242
|
+
throw new Error(`Truncated account buffer length: ${buf.length}`);
|
|
243
|
+
}
|
|
244
|
+
const accountDiscriminator = buf.subarray(0, 8);
|
|
245
|
+
if (!accountDiscriminator.equals(expectedDiscriminator)) {
|
|
246
|
+
throw new Error('Invalid account discriminator for EscrowOrder');
|
|
247
|
+
}
|
|
248
|
+
let offset = 8;
|
|
249
|
+
const buyer = (0, registry_js_1.encodeBase58)(buf.subarray(offset, offset + 32));
|
|
250
|
+
offset += 32;
|
|
251
|
+
const seller = (0, registry_js_1.encodeBase58)(buf.subarray(offset, offset + 32));
|
|
252
|
+
offset += 32;
|
|
253
|
+
const reviewer = (0, registry_js_1.encodeBase58)(buf.subarray(offset, offset + 32));
|
|
254
|
+
offset += 32;
|
|
255
|
+
const feeRecipient = (0, registry_js_1.encodeBase58)(buf.subarray(offset, offset + 32));
|
|
256
|
+
offset += 32;
|
|
257
|
+
const orderIdBytes = new Uint8Array(buf.subarray(offset, offset + 32));
|
|
258
|
+
const orderIdHex = '0x' + Buffer.from(orderIdBytes).toString('hex');
|
|
259
|
+
offset += 32;
|
|
260
|
+
const amountLamports = buf.readBigUInt64LE(offset);
|
|
261
|
+
offset += 8;
|
|
262
|
+
const feeBasisPoints = buf.readUInt16LE(offset);
|
|
263
|
+
offset += 2;
|
|
264
|
+
const deadline = Number(buf.readBigInt64LE(offset));
|
|
265
|
+
offset += 8;
|
|
266
|
+
const statusNum = buf.readUInt8(offset);
|
|
267
|
+
const status = exports.SOLANA_SERVICE_ESCROW_STATUS_MAP[statusNum] || 'None';
|
|
268
|
+
offset += 1;
|
|
269
|
+
const createdAt = Number(buf.readBigInt64LE(offset));
|
|
270
|
+
offset += 8;
|
|
271
|
+
const settledAt = Number(buf.readBigInt64LE(offset));
|
|
272
|
+
offset += 8;
|
|
273
|
+
const strLen = buf.readUInt32LE(offset);
|
|
274
|
+
offset += 4;
|
|
275
|
+
const deliverableReference = buf.subarray(offset, offset + strLen).toString('utf8');
|
|
276
|
+
offset += strLen;
|
|
277
|
+
const bump = buf.readUInt8(offset);
|
|
278
|
+
offset += 1;
|
|
279
|
+
const vaultBump = buf.readUInt8(offset);
|
|
280
|
+
const solDecimals = 9;
|
|
281
|
+
const amountSol = (Number(amountLamports) / 10 ** solDecimals).toFixed(4);
|
|
282
|
+
return {
|
|
283
|
+
buyer,
|
|
284
|
+
seller,
|
|
285
|
+
reviewer,
|
|
286
|
+
feeRecipient,
|
|
287
|
+
orderIdHex,
|
|
288
|
+
orderIdBytes,
|
|
289
|
+
amountLamports,
|
|
290
|
+
amountSol,
|
|
291
|
+
feeBasisPoints,
|
|
292
|
+
deadline,
|
|
293
|
+
status,
|
|
294
|
+
createdAt,
|
|
295
|
+
settledAt,
|
|
296
|
+
deliverableReference,
|
|
297
|
+
bump,
|
|
298
|
+
vaultBump,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Calculates exact platform fee and payouts for Solana lamports.
|
|
303
|
+
* Strict parity with EVM: 500 bps (5%) platform fee deducted from seller gross award.
|
|
304
|
+
* Buyer refunds are 100% fee-free.
|
|
305
|
+
*/
|
|
306
|
+
function calculateSolanaServicePayouts(totalLamports, splitToBuyerPercent = 0, feeBps = 500) {
|
|
307
|
+
const total = BigInt(totalLamports);
|
|
308
|
+
const buyerPercent = BigInt(Math.min(Math.max(splitToBuyerPercent, 0), 100));
|
|
309
|
+
const buyerRefundLamports = (total * buyerPercent) / 100n;
|
|
310
|
+
const sellerGrossLamports = total - buyerRefundLamports;
|
|
311
|
+
// Platform fee applies only to seller gross
|
|
312
|
+
const platformFeeLamports = (sellerGrossLamports * BigInt(feeBps)) / 10000n;
|
|
313
|
+
const sellerNetPayoutLamports = sellerGrossLamports - platformFeeLamports;
|
|
314
|
+
return {
|
|
315
|
+
buyerRefundLamports,
|
|
316
|
+
sellerGrossLamports,
|
|
317
|
+
platformFeeLamports,
|
|
318
|
+
sellerNetPayoutLamports,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Lossless conversion of lamports to a high-precision SOL string without floating-point errors.
|
|
323
|
+
*/
|
|
324
|
+
function formatLamportsToSol(lamports) {
|
|
325
|
+
const value = BigInt(lamports);
|
|
326
|
+
const negative = value < 0n;
|
|
327
|
+
const absVal = negative ? -value : value;
|
|
328
|
+
const intPart = absVal / 1000000000n;
|
|
329
|
+
const rem = absVal % 1000000000n;
|
|
330
|
+
if (rem === 0n) {
|
|
331
|
+
return (negative ? '-' : '') + intPart.toString();
|
|
332
|
+
}
|
|
333
|
+
const frac = rem.toString().padStart(9, '0').replace(/0+$/, '');
|
|
334
|
+
return (negative ? '-' : '') + `${intPart}.${frac}`;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Lossless conversion of SOL string to lamports bigint without floating-point inaccuracies.
|
|
338
|
+
*/
|
|
339
|
+
function parseSolToLamports(sol) {
|
|
340
|
+
const trimmed = sol.trim();
|
|
341
|
+
if (!trimmed || !/^-?\d+(\.\d+)?$/.test(trimmed)) {
|
|
342
|
+
throw new Error(`Invalid SOL amount string: "${sol}"`);
|
|
343
|
+
}
|
|
344
|
+
const negative = trimmed.startsWith('-');
|
|
345
|
+
const unsigned = negative ? trimmed.slice(1) : trimmed;
|
|
346
|
+
const [intStr, fracStr = ''] = unsigned.split('.');
|
|
347
|
+
if (fracStr.length > 9) {
|
|
348
|
+
throw new Error(`SOL amount has more than 9 decimal places: "${sol}"`);
|
|
349
|
+
}
|
|
350
|
+
const paddedFrac = fracStr.padEnd(9, '0');
|
|
351
|
+
const lamports = BigInt(intStr) * 1000000000n + BigInt(paddedFrac);
|
|
352
|
+
return negative ? -lamports : lamports;
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=escrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../src/solana/escrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VEILIO on Solana Devnet. Import from "veilioexchange/solana".
|
|
3
|
+
* Requires the optional peer dependency @solana/web3.js and Node.js 18+.
|
|
4
|
+
*/
|
|
5
|
+
export * from './client.js';
|
|
6
|
+
export * from './auction.js';
|
|
7
|
+
export * from './escrow.js';
|
|
8
|
+
export { SYSTEM_PROGRAM_ID, decodeBase58, encodeBase58, findProgramDerivedAddress, getAnchorDiscriminator, normalizeBytes32, type SolanaAccountMeta, type SolanaCompiledInstruction, } from './registry.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solana/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.normalizeBytes32 = exports.getAnchorDiscriminator = exports.findProgramDerivedAddress = exports.encodeBase58 = exports.decodeBase58 = exports.SYSTEM_PROGRAM_ID = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* VEILIO on Solana Devnet. Import from "veilioexchange/solana".
|
|
20
|
+
* Requires the optional peer dependency @solana/web3.js and Node.js 18+.
|
|
21
|
+
*/
|
|
22
|
+
__exportStar(require("./client.js"), exports);
|
|
23
|
+
__exportStar(require("./auction.js"), exports);
|
|
24
|
+
__exportStar(require("./escrow.js"), exports);
|
|
25
|
+
var registry_js_1 = require("./registry.js");
|
|
26
|
+
Object.defineProperty(exports, "SYSTEM_PROGRAM_ID", { enumerable: true, get: function () { return registry_js_1.SYSTEM_PROGRAM_ID; } });
|
|
27
|
+
Object.defineProperty(exports, "decodeBase58", { enumerable: true, get: function () { return registry_js_1.decodeBase58; } });
|
|
28
|
+
Object.defineProperty(exports, "encodeBase58", { enumerable: true, get: function () { return registry_js_1.encodeBase58; } });
|
|
29
|
+
Object.defineProperty(exports, "findProgramDerivedAddress", { enumerable: true, get: function () { return registry_js_1.findProgramDerivedAddress; } });
|
|
30
|
+
Object.defineProperty(exports, "getAnchorDiscriminator", { enumerable: true, get: function () { return registry_js_1.getAnchorDiscriminator; } });
|
|
31
|
+
Object.defineProperty(exports, "normalizeBytes32", { enumerable: true, get: function () { return registry_js_1.normalizeBytes32; } });
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/solana/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAC5B,6CASuB;AARrB,gHAAA,iBAAiB,OAAA;AACjB,2GAAA,YAAY,OAAA;AACZ,2GAAA,YAAY,OAAA;AACZ,wHAAA,yBAAyB,OAAA;AACzB,qHAAA,sBAAsB,OAAA;AACtB,+GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VEILIO Solana Service Registry Client & Program Interface
|
|
3
|
+
*
|
|
4
|
+
* Provides client-side PDA derivation, Anchor instruction encoding,
|
|
5
|
+
* account deserialization, and validation for the on-chain Solana Devnet
|
|
6
|
+
* Veilio Service Registry program.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SERVICE_SEED: Buffer<ArrayBuffer>;
|
|
9
|
+
export declare const MAX_METADATA_URI_LEN = 200;
|
|
10
|
+
export declare const SERVICE_RECORD_ACCOUNT_SIZE = 326;
|
|
11
|
+
export declare const DEFAULT_SOLANA_SERVICE_REGISTRY_PROGRAM_ID = "6CMoJyQmBobLTk4M9ZoygMShRB6A6i77e6viq2Lew2KY";
|
|
12
|
+
export declare const SYSTEM_PROGRAM_ID = "11111111111111111111111111111111";
|
|
13
|
+
/**
|
|
14
|
+
* Encodes a buffer/Uint8Array to Base58 string.
|
|
15
|
+
*/
|
|
16
|
+
export declare function encodeBase58(source: Uint8Array | Buffer): string;
|
|
17
|
+
/**
|
|
18
|
+
* Decodes a Base58 string to Uint8Array.
|
|
19
|
+
*/
|
|
20
|
+
export declare function decodeBase58(str: string): Uint8Array;
|
|
21
|
+
/** Solana PDA derivation (delegates to @solana/web3.js). */
|
|
22
|
+
export declare function findProgramDerivedAddress(seeds: readonly (Uint8Array | Buffer)[], programId: string): {
|
|
23
|
+
pda: string;
|
|
24
|
+
bump: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Computes Anchor 8-byte instruction or account discriminator using SHA-256.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAnchorDiscriminator(namespace: 'global' | 'account', name: string): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Validates 32-byte hash or ID (hex string or Uint8Array).
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeBytes32(input: string | Uint8Array): Buffer;
|
|
34
|
+
/**
|
|
35
|
+
* Derives the deterministic PDA for a seller-owned service record on Solana.
|
|
36
|
+
* Formula: sha256([SERVICE_SEED, seller, service_id, bump, program_id, "ProgramDerivedAddress"])
|
|
37
|
+
*/
|
|
38
|
+
export declare function findServiceRecordPda(serviceId: string | Uint8Array, seller: string, programId?: string): {
|
|
39
|
+
pda: string;
|
|
40
|
+
bump: number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Retrieves the configured Solana Service Registry program ID.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getSolanaServiceRegistryProgramId(): string;
|
|
46
|
+
export interface SolanaAccountMeta {
|
|
47
|
+
pubkey: string;
|
|
48
|
+
isSigner: boolean;
|
|
49
|
+
isWritable: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface SolanaCompiledInstruction {
|
|
52
|
+
programId: string;
|
|
53
|
+
accounts: SolanaAccountMeta[];
|
|
54
|
+
keys?: SolanaAccountMeta[];
|
|
55
|
+
data: Buffer;
|
|
56
|
+
}
|
|
57
|
+
export interface ServiceRecordState {
|
|
58
|
+
seller: string;
|
|
59
|
+
serviceId: string;
|
|
60
|
+
metadataHash: string;
|
|
61
|
+
metadataUri: string;
|
|
62
|
+
active: boolean;
|
|
63
|
+
registeredAt: number;
|
|
64
|
+
updatedAt: number;
|
|
65
|
+
bump: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Builds the Solana instruction for `register_service`.
|
|
69
|
+
*/
|
|
70
|
+
export declare function createRegisterServiceInstruction(params: {
|
|
71
|
+
programId?: string;
|
|
72
|
+
seller: string;
|
|
73
|
+
serviceId: string | Uint8Array;
|
|
74
|
+
metadataHash: string | Uint8Array;
|
|
75
|
+
metadataUri: string;
|
|
76
|
+
}): SolanaCompiledInstruction;
|
|
77
|
+
/**
|
|
78
|
+
* Builds the Solana instruction for `update_service_metadata`.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createUpdateServiceMetadataInstruction(params: {
|
|
81
|
+
programId?: string;
|
|
82
|
+
seller: string;
|
|
83
|
+
serviceId: string | Uint8Array;
|
|
84
|
+
newMetadataHash: string | Uint8Array;
|
|
85
|
+
newMetadataUri: string;
|
|
86
|
+
}): SolanaCompiledInstruction;
|
|
87
|
+
/**
|
|
88
|
+
* Builds the Solana instruction for `set_service_status`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function createSetServiceStatusInstruction(params: {
|
|
91
|
+
programId?: string;
|
|
92
|
+
seller: string;
|
|
93
|
+
serviceId: string | Uint8Array;
|
|
94
|
+
active: boolean;
|
|
95
|
+
}): SolanaCompiledInstruction;
|
|
96
|
+
/**
|
|
97
|
+
* Decodes an Anchor `ServiceRecord` account buffer from Solana Devnet RPC.
|
|
98
|
+
*/
|
|
99
|
+
export declare function decodeServiceRecordAccount(data: Buffer | Uint8Array): ServiceRecordState;
|
|
100
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/solana/registry.ts"],"names":[],"mappings":"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"}
|