Ledger-side credit and withdrawal-intent paths
This commit is contained in:
Executable
+70
@@ -0,0 +1,70 @@
|
||||
import { z } from 'zod';
|
||||
import { parseAtomicXmr } from './xmr-amount.ts';
|
||||
|
||||
const uuid = z.string().uuid();
|
||||
const hex = z.string().regex(/^[a-f0-9]{64}$/);
|
||||
const atomic = z.string().max(22).refine(value => { try { parseAtomicXmr(value); return true; } catch { return false; } });
|
||||
const positiveAtomic = atomic.refine(value => BigInt(value) > 0n);
|
||||
|
||||
export const mainnetWithdrawalRequestSchema = z.object({
|
||||
version: z.literal(1),
|
||||
network: z.literal('wikideck-randomx-mainnet-1'),
|
||||
chainId: hex,
|
||||
custodianId: uuid,
|
||||
beneficiary: hex,
|
||||
publicKey: z.string().min(1).max(256),
|
||||
requestId: uuid,
|
||||
destination: z.string().length(95),
|
||||
amountAtomicXmr: positiveAtomic,
|
||||
maxFeeAtomicXmr: atomic,
|
||||
expiresAt: z.number().int().nonnegative().safe(),
|
||||
signature: z.string().min(1).max(256),
|
||||
}).strict();
|
||||
export type MainnetWithdrawalRequest = z.infer<typeof mainnetWithdrawalRequestSchema>;
|
||||
export type MainnetWithdrawalRequestUnsigned = Omit<MainnetWithdrawalRequest, 'signature'>;
|
||||
|
||||
export const mainnetWithdrawalCancellationSchema = z.object({
|
||||
version: z.literal(1),
|
||||
network: z.literal('wikideck-randomx-mainnet-1'),
|
||||
chainId: hex,
|
||||
custodianId: uuid,
|
||||
beneficiary: hex,
|
||||
publicKey: z.string().min(1).max(256),
|
||||
cancellationId: uuid,
|
||||
withdrawalRequestId: uuid,
|
||||
expiresAt: z.number().int().nonnegative().safe(),
|
||||
signature: z.string().min(1).max(256),
|
||||
}).strict();
|
||||
export type MainnetWithdrawalCancellation = z.infer<typeof mainnetWithdrawalCancellationSchema>;
|
||||
export type MainnetWithdrawalCancellationUnsigned = Omit<MainnetWithdrawalCancellation, 'signature'>;
|
||||
|
||||
export function mainnetWithdrawalMessage(request: MainnetWithdrawalRequestUnsigned): string {
|
||||
return JSON.stringify(['wikideck-mainnet-withdrawal-request-v1', request.version, request.network,
|
||||
request.chainId, request.custodianId, request.beneficiary, request.publicKey, request.requestId,
|
||||
request.destination, request.amountAtomicXmr, request.maxFeeAtomicXmr, request.expiresAt]);
|
||||
}
|
||||
|
||||
export function mainnetWithdrawalCancellationMessage(request: MainnetWithdrawalCancellationUnsigned): string {
|
||||
return JSON.stringify(['wikideck-mainnet-withdrawal-cancel-v1', request.version, request.network,
|
||||
request.chainId, request.custodianId, request.beneficiary, request.publicKey, request.cancellationId,
|
||||
request.withdrawalRequestId, request.expiresAt]);
|
||||
}
|
||||
|
||||
export const mainnetCustodyBalanceRequestSchema = z.object({
|
||||
version: z.literal(1),
|
||||
network: z.literal('wikideck-randomx-mainnet-1'),
|
||||
chainId: hex,
|
||||
custodianId: uuid,
|
||||
beneficiary: hex,
|
||||
publicKey: z.string().min(1).max(256),
|
||||
nonce: uuid,
|
||||
expiresAt: z.number().int().nonnegative().safe(),
|
||||
signature: z.string().min(1).max(256),
|
||||
}).strict();
|
||||
export type MainnetCustodyBalanceRequest = z.infer<typeof mainnetCustodyBalanceRequestSchema>;
|
||||
export type MainnetCustodyBalanceRequestUnsigned = Omit<MainnetCustodyBalanceRequest, 'signature'>;
|
||||
|
||||
export function mainnetCustodyBalanceMessage(request: MainnetCustodyBalanceRequestUnsigned): string {
|
||||
return JSON.stringify(['wikideck-mainnet-custody-balance-v1', request.version, request.network,
|
||||
request.chainId, request.custodianId, request.beneficiary, request.publicKey, request.nonce, request.expiresAt]);
|
||||
}
|
||||
Reference in New Issue
Block a user