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.
Files changed (42) hide show
  1. package/README.md +48 -1
  2. package/dist/cjs/solana/auction.d.ts +180 -0
  3. package/dist/cjs/solana/auction.d.ts.map +1 -0
  4. package/dist/cjs/solana/auction.js +457 -0
  5. package/dist/cjs/solana/auction.js.map +1 -0
  6. package/dist/cjs/solana/client.d.ts +75 -0
  7. package/dist/cjs/solana/client.d.ts.map +1 -0
  8. package/dist/cjs/solana/client.js +281 -0
  9. package/dist/cjs/solana/client.js.map +1 -0
  10. package/dist/cjs/solana/escrow.d.ts +140 -0
  11. package/dist/cjs/solana/escrow.d.ts.map +1 -0
  12. package/dist/cjs/solana/escrow.js +354 -0
  13. package/dist/cjs/solana/escrow.js.map +1 -0
  14. package/dist/cjs/solana/index.d.ts +9 -0
  15. package/dist/cjs/solana/index.d.ts.map +1 -0
  16. package/dist/cjs/solana/index.js +32 -0
  17. package/dist/cjs/solana/index.js.map +1 -0
  18. package/dist/cjs/solana/registry.d.ts +100 -0
  19. package/dist/cjs/solana/registry.d.ts.map +1 -0
  20. package/dist/cjs/solana/registry.js +278 -0
  21. package/dist/cjs/solana/registry.js.map +1 -0
  22. package/dist/esm/solana/auction.d.ts +180 -0
  23. package/dist/esm/solana/auction.d.ts.map +1 -0
  24. package/dist/esm/solana/auction.js +438 -0
  25. package/dist/esm/solana/auction.js.map +1 -0
  26. package/dist/esm/solana/client.d.ts +75 -0
  27. package/dist/esm/solana/client.d.ts.map +1 -0
  28. package/dist/esm/solana/client.js +274 -0
  29. package/dist/esm/solana/client.js.map +1 -0
  30. package/dist/esm/solana/escrow.d.ts +140 -0
  31. package/dist/esm/solana/escrow.d.ts.map +1 -0
  32. package/dist/esm/solana/escrow.js +339 -0
  33. package/dist/esm/solana/escrow.js.map +1 -0
  34. package/dist/esm/solana/index.d.ts +9 -0
  35. package/dist/esm/solana/index.d.ts.map +1 -0
  36. package/dist/esm/solana/index.js +9 -0
  37. package/dist/esm/solana/index.js.map +1 -0
  38. package/dist/esm/solana/registry.d.ts +100 -0
  39. package/dist/esm/solana/registry.d.ts.map +1 -0
  40. package/dist/esm/solana/registry.js +264 -0
  41. package/dist/esm/solana/registry.js.map +1 -0
  42. package/package.json +30 -4
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keypairSigner = keypairSigner;
4
+ exports.toSolanaOrderId = toSolanaOrderId;
5
+ exports.solToLamports = solToLamports;
6
+ exports.assertSolanaAddress = assertSolanaAddress;
7
+ exports.createVeilioSolanaClient = createVeilioSolanaClient;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const errors_js_1 = require("../errors.js");
11
+ const auction_js_1 = require("./auction.js");
12
+ const escrow_js_1 = require("./escrow.js");
13
+ const registry_js_1 = require("./registry.js");
14
+ /** Wraps a Keypair (e.g. an agent's devnet key) as a SolanaSigner. */
15
+ function keypairSigner(keypair) {
16
+ return {
17
+ publicKey: keypair.publicKey,
18
+ async signTransaction(transaction) {
19
+ transaction.partialSign(keypair);
20
+ return transaction;
21
+ },
22
+ };
23
+ }
24
+ /**
25
+ * Encodes an order ID into the 32-byte seed the escrow program expects.
26
+ * Accepts a 64-char hex string as-is; otherwise UTF-8 bytes right-padded with zeros
27
+ * (same encoding the EVM escrow uses), up to 32 bytes.
28
+ */
29
+ function toSolanaOrderId(orderId) {
30
+ const hex = orderId.startsWith('0x') ? orderId.slice(2) : orderId;
31
+ if (/^[0-9a-fA-F]{64}$/.test(hex))
32
+ return hex.toLowerCase();
33
+ const bytes = Buffer.from(orderId, 'utf8');
34
+ if (bytes.length === 0 || bytes.length > 32) {
35
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'orderId must be 1 to 32 bytes of UTF-8, or 32 bytes of hex.' });
36
+ }
37
+ return Buffer.concat([bytes, Buffer.alloc(32 - bytes.length)]).toString('hex');
38
+ }
39
+ /** Converts a decimal SOL string to lamports without floating-point rounding. */
40
+ function solToLamports(sol) {
41
+ const trimmed = sol.trim();
42
+ if (!/^\d+(\.\d{1,9})?$/.test(trimmed)) {
43
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: `Invalid SOL amount: "${sol}" (max 9 decimals).` });
44
+ }
45
+ const [whole, fraction = ''] = trimmed.split('.');
46
+ return BigInt(whole) * BigInt(web3_js_1.LAMPORTS_PER_SOL) + BigInt(fraction.padEnd(9, '0'));
47
+ }
48
+ /**
49
+ * Validates a base58 address. A lowercased address often still decodes to 32 bytes, so it would
50
+ * silently point at the wrong account; real addresses with no uppercase letter are vanishingly rare.
51
+ */
52
+ function assertSolanaAddress(label, value) {
53
+ let valid = true;
54
+ try {
55
+ new web3_js_1.PublicKey(value);
56
+ }
57
+ catch {
58
+ valid = false;
59
+ }
60
+ if (!valid || value === value.toLowerCase()) {
61
+ throw new errors_js_1.VeilioSdkError({
62
+ code: 'INVALID_INPUT',
63
+ message: `${label} is not a valid Solana address. Base58 is case-sensitive: never lowercase it.`,
64
+ });
65
+ }
66
+ }
67
+ function toTransactionInstruction(ix) {
68
+ return new web3_js_1.TransactionInstruction({
69
+ programId: new web3_js_1.PublicKey(ix.programId),
70
+ keys: ix.accounts.map((meta) => ({
71
+ pubkey: new web3_js_1.PublicKey(meta.pubkey),
72
+ isSigner: meta.isSigner,
73
+ isWritable: meta.isWritable,
74
+ })),
75
+ data: Buffer.from(ix.data),
76
+ });
77
+ }
78
+ /**
79
+ * High-level client for VEILIO on Solana Devnet: sealed-bid auctions and service escrow.
80
+ * Node.js 18+ (uses node:crypto and Buffer).
81
+ */
82
+ function createVeilioSolanaClient(options) {
83
+ const { connection } = options;
84
+ const commitment = options.commitment ?? 'confirmed';
85
+ const auctionProgramId = options.auctionProgramId ?? auction_js_1.DEFAULT_SOLANA_AUCTION_PROGRAM_ID;
86
+ const escrowProgramId = options.escrowProgramId ?? escrow_js_1.DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID;
87
+ function requireSigner() {
88
+ if (!options.signer) {
89
+ throw new errors_js_1.VeilioSdkError({ code: 'WALLET_REQUIRED', message: 'A Solana signer is required to send transactions.' });
90
+ }
91
+ return options.signer;
92
+ }
93
+ async function send(ix) {
94
+ const signer = requireSigner();
95
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash(commitment);
96
+ const tx = new web3_js_1.Transaction({ feePayer: signer.publicKey, blockhash, lastValidBlockHeight }).add(toTransactionInstruction(ix));
97
+ const signed = await signer.signTransaction(tx);
98
+ const signature = await connection.sendRawTransaction(signed.serialize());
99
+ const result = await connection.confirmTransaction({ signature, blockhash, lastValidBlockHeight }, commitment);
100
+ if (result.value.err) {
101
+ throw new errors_js_1.VeilioSdkError({
102
+ code: 'TRANSACTION_REVERTED',
103
+ message: `Solana transaction failed: ${JSON.stringify(result.value.err)}`,
104
+ context: { signature },
105
+ });
106
+ }
107
+ return signature;
108
+ }
109
+ // ---------------------------------------------------------------- Auctions
110
+ async function getAuction(auctionId) {
111
+ const { pda } = (0, auction_js_1.findAuctionPda)(BigInt(auctionId), auctionProgramId);
112
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
113
+ return account ? (0, auction_js_1.decodeAuctionStateAccount)(account.data) : null;
114
+ }
115
+ async function listAuctions() {
116
+ const discriminator = (0, registry_js_1.encodeBase58)((0, registry_js_1.getAnchorDiscriminator)('account', 'AuctionStateAccount'));
117
+ const accounts = await connection.getProgramAccounts(new web3_js_1.PublicKey(auctionProgramId), {
118
+ commitment,
119
+ filters: [{ memcmp: { offset: 0, bytes: discriminator } }],
120
+ });
121
+ const auctions = [];
122
+ for (const { pubkey, account } of accounts) {
123
+ try {
124
+ auctions.push({ ...(0, auction_js_1.decodeAuctionStateAccount)(account.data), address: pubkey.toBase58() });
125
+ }
126
+ catch {
127
+ // Skip accounts from an older layout instead of failing the whole listing.
128
+ }
129
+ }
130
+ return auctions.sort((a, b) => Number(b.auctionId - a.auctionId));
131
+ }
132
+ function prepareBid(auctionId, maxBidSol) {
133
+ const bidder = requireSigner().publicKey.toBase58();
134
+ const id = BigInt(auctionId);
135
+ const maxBidLamports = solToLamports(maxBidSol);
136
+ if (id < 0n || maxBidLamports <= 0n) {
137
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'auctionId must be >= 0 and maxBid must be positive.' });
138
+ }
139
+ const salt = (0, node_crypto_1.randomBytes)(32);
140
+ const { pda: auctionPda } = (0, auction_js_1.findAuctionPda)(id, auctionProgramId);
141
+ const commitmentHash = (0, auction_js_1.computeSealedBidCommitment)({ auctionPubkey: auctionPda, bidderPubkey: bidder, maxBidLamports, salt });
142
+ return {
143
+ auctionId: id.toString(),
144
+ bidder,
145
+ maxBidLamports: maxBidLamports.toString(),
146
+ salt: salt.toString('hex'),
147
+ commitment: commitmentHash.toString('hex'),
148
+ programId: auctionProgramId,
149
+ };
150
+ }
151
+ /** Commits the sealed bid. Deposit must cover the max bid; over-deposit to hide your ceiling. */
152
+ async function commitBid(prepared, depositSol) {
153
+ const depositLamports = solToLamports(depositSol);
154
+ if (depositLamports < BigInt(prepared.maxBidLamports)) {
155
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'Deposit must cover the maximum bid.' });
156
+ }
157
+ return send((0, auction_js_1.createCommitBidInstruction)({
158
+ programId: prepared.programId,
159
+ auctionId: BigInt(prepared.auctionId),
160
+ bidder: prepared.bidder,
161
+ commitment: Buffer.from(prepared.commitment, 'hex'),
162
+ depositLamports,
163
+ }));
164
+ }
165
+ async function revealBid(prepared) {
166
+ return send((0, auction_js_1.createRevealBidInstruction)({
167
+ programId: prepared.programId,
168
+ auctionId: BigInt(prepared.auctionId),
169
+ bidder: prepared.bidder,
170
+ maxBidLamports: BigInt(prepared.maxBidLamports),
171
+ salt: Buffer.from(prepared.salt, 'hex'),
172
+ }));
173
+ }
174
+ /** Winner accepts the asset during inspection, releasing payment to the seller. */
175
+ async function acceptDataset(auctionId, seller) {
176
+ return send((0, auction_js_1.createAcceptDatasetInstruction)({
177
+ programId: auctionProgramId,
178
+ auctionId: BigInt(auctionId),
179
+ seller,
180
+ winner: requireSigner().publicKey.toBase58(),
181
+ }));
182
+ }
183
+ /** Losing bidders reclaim their deposit after settlement. */
184
+ async function claimRefund(auctionId) {
185
+ return send((0, auction_js_1.createClaimRefundInstruction)({
186
+ programId: auctionProgramId,
187
+ auctionId: BigInt(auctionId),
188
+ bidder: requireSigner().publicKey.toBase58(),
189
+ }));
190
+ }
191
+ // ---------------------------------------------------------- Service escrow
192
+ async function getEscrowOrder(orderId) {
193
+ const { pda } = (0, escrow_js_1.findEscrowOrderPda)(toSolanaOrderId(orderId), escrowProgramId);
194
+ const account = await connection.getAccountInfo(new web3_js_1.PublicKey(pda), commitment);
195
+ return account ? (0, escrow_js_1.decodeEscrowOrderAccount)(account.data) : null;
196
+ }
197
+ async function deposit(input) {
198
+ if (input.reviewer === escrowProgramId || input.reviewer === auctionProgramId) {
199
+ throw new errors_js_1.VeilioSdkError({
200
+ code: 'INVALID_INPUT',
201
+ message: 'reviewer must be a wallet that can sign; a program ID can never resolve a dispute.',
202
+ });
203
+ }
204
+ for (const [label, value] of [['seller', input.seller], ['reviewer', input.reviewer], ['feeRecipient', input.feeRecipient]]) {
205
+ assertSolanaAddress(label, value);
206
+ }
207
+ if (input.deadline <= Math.floor(Date.now() / 1000)) {
208
+ throw new errors_js_1.VeilioSdkError({ code: 'INVALID_INPUT', message: 'Deadline must be in the future.' });
209
+ }
210
+ return send((0, escrow_js_1.createDepositServiceOrderInstruction)({
211
+ programId: escrowProgramId,
212
+ buyer: requireSigner().publicKey.toBase58(),
213
+ seller: input.seller,
214
+ reviewer: input.reviewer,
215
+ feeRecipient: input.feeRecipient,
216
+ orderId: toSolanaOrderId(input.orderId),
217
+ amountLamports: solToLamports(input.amountSol),
218
+ deadline: input.deadline,
219
+ }));
220
+ }
221
+ async function submitDelivery(orderId, deliverableReference) {
222
+ return send((0, escrow_js_1.createSubmitDeliveryInstruction)({
223
+ programId: escrowProgramId,
224
+ seller: requireSigner().publicKey.toBase58(),
225
+ orderId: toSolanaOrderId(orderId),
226
+ deliverableReference,
227
+ }));
228
+ }
229
+ /** Buyer releases escrow to the seller (5% fee to feeRecipient). Accounts are read from the order. */
230
+ async function releaseFunds(orderId) {
231
+ const order = await getEscrowOrder(orderId);
232
+ if (!order)
233
+ throw new errors_js_1.VeilioSdkError({ code: 'NOT_FOUND', message: `Escrow order ${orderId} not found on Solana.` });
234
+ return send((0, escrow_js_1.createReleaseFundsInstruction)({
235
+ programId: escrowProgramId,
236
+ buyer: requireSigner().publicKey.toBase58(),
237
+ seller: order.seller,
238
+ feeRecipient: order.feeRecipient,
239
+ orderId: toSolanaOrderId(orderId),
240
+ }));
241
+ }
242
+ /** Seller cancellation, or buyer refund after the deadline. Fee-free. */
243
+ async function refund(orderId, reason) {
244
+ const order = await getEscrowOrder(orderId);
245
+ if (!order)
246
+ throw new errors_js_1.VeilioSdkError({ code: 'NOT_FOUND', message: `Escrow order ${orderId} not found on Solana.` });
247
+ return send((0, escrow_js_1.createCancelOrRefundInstruction)({
248
+ programId: escrowProgramId,
249
+ caller: requireSigner().publicKey.toBase58(),
250
+ buyer: order.buyer,
251
+ orderId: toSolanaOrderId(orderId),
252
+ reason,
253
+ }));
254
+ }
255
+ async function dispute(orderId, reason) {
256
+ return send((0, escrow_js_1.createDisputeOrderInstruction)({
257
+ programId: escrowProgramId,
258
+ caller: requireSigner().publicKey.toBase58(),
259
+ orderId: toSolanaOrderId(orderId),
260
+ reason,
261
+ }));
262
+ }
263
+ return {
264
+ auctionProgramId,
265
+ escrowProgramId,
266
+ getAuction,
267
+ listAuctions,
268
+ prepareBid,
269
+ commitBid,
270
+ revealBid,
271
+ acceptDataset,
272
+ claimRefund,
273
+ getEscrowOrder,
274
+ deposit,
275
+ submitDelivery,
276
+ releaseFunds,
277
+ refund,
278
+ dispute,
279
+ };
280
+ }
281
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/solana/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * VEILIO Solana Services Escrow Client & Program Interface
3
+ *
4
+ * Implements client-side PDA derivation, Anchor instruction serialization,
5
+ * account deserialization, fee calculations, and transaction verification
6
+ * for the dedicated Solana Devnet VeilServiceEscrow program.
7
+ */
8
+ import { type SolanaCompiledInstruction } from './registry.js';
9
+ export declare const ESCROW_SEED: Buffer<ArrayBuffer>;
10
+ export declare const VAULT_SEED: Buffer<ArrayBuffer>;
11
+ export declare const MAX_DELIVERABLE_REF_LEN = 200;
12
+ export declare const MAX_FEE_BPS = 500;
13
+ export declare const DEFAULT_SOLANA_SERVICE_ESCROW_PROGRAM_ID = "5Vj4y8BT74PDe5VwLuDp9agTR5ak4vtZdwxnBfRW3R8s";
14
+ export type SolanaServiceEscrowStatus = 'None' | 'Funded' | 'Delivered' | 'Released' | 'Refunded' | 'Disputed';
15
+ export declare const SOLANA_SERVICE_ESCROW_STATUS_MAP: Record<number, SolanaServiceEscrowStatus>;
16
+ export interface DecodedSolanaEscrowOrder {
17
+ buyer: string;
18
+ seller: string;
19
+ reviewer: string;
20
+ feeRecipient: string;
21
+ orderIdHex: string;
22
+ orderIdBytes: Uint8Array;
23
+ amountLamports: bigint;
24
+ amountSol: string;
25
+ feeBasisPoints: number;
26
+ deadline: number;
27
+ status: SolanaServiceEscrowStatus;
28
+ createdAt: number;
29
+ settledAt: number;
30
+ deliverableReference: string;
31
+ bump: number;
32
+ vaultBump: number;
33
+ }
34
+ /**
35
+ * Derives the EscrowOrder account PDA: [b"service_escrow", order_id]
36
+ */
37
+ export declare function findEscrowOrderPda(orderId: string | Uint8Array, programId?: string): {
38
+ pda: string;
39
+ bump: number;
40
+ };
41
+ /**
42
+ * Derives the Vault account PDA holding SOL lamports: [b"service_vault", order_id]
43
+ */
44
+ export declare function findVaultPda(orderId: string | Uint8Array, programId?: string): {
45
+ pda: string;
46
+ bump: number;
47
+ };
48
+ /**
49
+ * Encodes the deposit instruction:
50
+ * accounts: [escrow_order (mut, pda), vault (mut, pda), buyer (signer, mut), system_program]
51
+ */
52
+ export declare function createDepositServiceOrderInstruction(params: {
53
+ programId?: string;
54
+ buyer: string;
55
+ seller: string;
56
+ reviewer: string;
57
+ feeRecipient: string;
58
+ orderId: string | Uint8Array;
59
+ amountLamports: bigint | number;
60
+ deadline: number;
61
+ }): SolanaCompiledInstruction;
62
+ /**
63
+ * Encodes the submit_delivery instruction:
64
+ * accounts: [escrow_order (mut), seller (signer)]
65
+ */
66
+ export declare function createSubmitDeliveryInstruction(params: {
67
+ programId?: string;
68
+ seller: string;
69
+ orderId: string | Uint8Array;
70
+ deliverableReference: string;
71
+ }): SolanaCompiledInstruction;
72
+ /**
73
+ * Encodes the release_funds instruction:
74
+ * accounts: [escrow_order (mut), vault (mut), buyer (signer), seller (mut), fee_recipient (mut)]
75
+ */
76
+ export declare function createReleaseFundsInstruction(params: {
77
+ programId?: string;
78
+ buyer: string;
79
+ seller: string;
80
+ feeRecipient: string;
81
+ orderId: string | Uint8Array;
82
+ }): SolanaCompiledInstruction;
83
+ /**
84
+ * Encodes the cancel_or_refund instruction:
85
+ * accounts: [escrow_order (mut), vault (mut), caller (signer), buyer (mut), system_program]
86
+ */
87
+ export declare function createCancelOrRefundInstruction(params: {
88
+ programId?: string;
89
+ caller: string;
90
+ buyer: string;
91
+ orderId: string | Uint8Array;
92
+ reason: string;
93
+ }): SolanaCompiledInstruction;
94
+ /**
95
+ * Encodes the dispute instruction:
96
+ * accounts: [escrow_order (mut), caller (signer)]
97
+ */
98
+ export declare function createDisputeOrderInstruction(params: {
99
+ programId?: string;
100
+ caller: string;
101
+ orderId: string | Uint8Array;
102
+ reason: string;
103
+ }): SolanaCompiledInstruction;
104
+ /**
105
+ * Encodes the resolve_dispute instruction:
106
+ * accounts: [escrow_order (mut), vault (mut), reviewer (signer), buyer (mut), seller (mut), fee_recipient (mut)]
107
+ */
108
+ export declare function createResolveDisputeInstruction(params: {
109
+ programId?: string;
110
+ reviewer: string;
111
+ buyer: string;
112
+ seller: string;
113
+ feeRecipient: string;
114
+ orderId: string | Uint8Array;
115
+ splitToBuyerPercent: number;
116
+ }): SolanaCompiledInstruction;
117
+ /**
118
+ * Decodes serialized EscrowOrder account buffer.
119
+ */
120
+ export declare function decodeEscrowOrderAccount(buffer: Uint8Array | Buffer): DecodedSolanaEscrowOrder;
121
+ /**
122
+ * Calculates exact platform fee and payouts for Solana lamports.
123
+ * Strict parity with EVM: 500 bps (5%) platform fee deducted from seller gross award.
124
+ * Buyer refunds are 100% fee-free.
125
+ */
126
+ export declare function calculateSolanaServicePayouts(totalLamports: bigint | number, splitToBuyerPercent?: number, feeBps?: number): {
127
+ buyerRefundLamports: bigint;
128
+ sellerGrossLamports: bigint;
129
+ platformFeeLamports: bigint;
130
+ sellerNetPayoutLamports: bigint;
131
+ };
132
+ /**
133
+ * Lossless conversion of lamports to a high-precision SOL string without floating-point errors.
134
+ */
135
+ export declare function formatLamportsToSol(lamports: bigint | number): string;
136
+ /**
137
+ * Lossless conversion of SOL string to lamports bigint without floating-point inaccuracies.
138
+ */
139
+ export declare function parseSolToLamports(sol: string): bigint;
140
+ //# sourceMappingURL=escrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../../src/solana/escrow.ts"],"names":[],"mappings":"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"}