@continuumdao/ctm-mpc-defi 0.2.60 → 0.2.61
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/dist/agent/catalog.cjs +67 -17
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +134 -7
- package/dist/agent/catalog.js +66 -18
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/railgun/SKILL.md +14 -5
- package/dist/protocols/evm/railgun/index.cjs +1324 -167
- package/dist/protocols/evm/railgun/index.cjs.map +1 -1
- package/dist/protocols/evm/railgun/index.d.ts +138 -4
- package/dist/protocols/evm/railgun/index.js +1300 -170
- package/dist/protocols/evm/railgun/index.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Address } from 'viem';
|
|
2
|
-
import { TXIDVersion, NetworkName, TransactionGasDetails } from '@railgun-community/shared-models';
|
|
2
|
+
import { TXIDVersion, NetworkName, TransactionGasDetails, RailgunBalancesEvent } from '@railgun-community/shared-models';
|
|
3
3
|
|
|
4
4
|
/** Aligns with app NonEvmChainType + 'evm'. Extend as mpc-auth adds chains. */
|
|
5
5
|
type ChainCategory = 'evm' | 'solana' | 'near' | 'sui' | 'ton' | 'stellar';
|
|
@@ -226,8 +226,8 @@ type AllowanceReader = (args: {
|
|
|
226
226
|
}) => Promise<bigint>;
|
|
227
227
|
declare function setRailgunPopulateShieldForTests(fn: PopulateShield | null): void;
|
|
228
228
|
declare function setRailgunAllowanceReaderForTests(fn: AllowanceReader | null): void;
|
|
229
|
-
/** Railgun hashes the 65-byte personal_sign.
|
|
230
|
-
declare function shieldPrivateKeyFromSignature(signature: string):
|
|
229
|
+
/** Railgun hashes the 65-byte personal_sign. The node often returns r||s without the recovery byte. */
|
|
230
|
+
declare function shieldPrivateKeyFromSignature(signature: string, executorAddress?: string): Promise<`0x${string}`>;
|
|
231
231
|
declare function buildEvmMultisignBodyWethUnwrap(args: {
|
|
232
232
|
keyGen: KeyGenSubset;
|
|
233
233
|
executorAddress: Address | string;
|
|
@@ -249,8 +249,65 @@ type RailgunPrivateActionArgs = {
|
|
|
249
249
|
amountWei: string;
|
|
250
250
|
recipientAddress: string;
|
|
251
251
|
memoText?: string;
|
|
252
|
+
onBroadcasterSearch?: () => void;
|
|
253
|
+
onBroadcasterNote?: (note: string) => void;
|
|
252
254
|
onProofProgress?: (progress: number) => void;
|
|
255
|
+
onProofStatusRefresh?: () => void;
|
|
256
|
+
broadcasterFeesId?: string;
|
|
253
257
|
};
|
|
258
|
+
/** Railgun replaces the note-check text with a short sentence. Keep the required amount and balance when they are still attached. */
|
|
259
|
+
declare function railgunDetailedError(err: unknown): string;
|
|
260
|
+
/** The broadcaster accepted the proof request and asked for a fresh proof-of-innocence status. */
|
|
261
|
+
declare function broadcasterAskedToRefreshProofStatus(err: unknown): boolean;
|
|
262
|
+
declare function broadcasterRefusedForGas(err: unknown): boolean;
|
|
263
|
+
/** A fee message can take about a minute to arrive after the spending-wallet sync. */
|
|
264
|
+
declare const BROADCASTER_PROOF_WAIT_MS: number;
|
|
265
|
+
/** Same margin the Waku client uses before it treats a fee as expired. */
|
|
266
|
+
declare const BROADCASTER_FEE_MIN_REMAINING_MS = 40000;
|
|
267
|
+
declare function broadcasterFeeStillValid(expiration: number, now?: number): boolean;
|
|
268
|
+
type RailgunBroadcasterChoice = {
|
|
269
|
+
feesId: string;
|
|
270
|
+
railgunAddress: string;
|
|
271
|
+
feeWei: string;
|
|
272
|
+
ratio: string | null;
|
|
273
|
+
coversGas: boolean;
|
|
274
|
+
reliability: number;
|
|
275
|
+
expiration: number;
|
|
276
|
+
tokenDecimals: number;
|
|
277
|
+
};
|
|
278
|
+
declare function listRailgunBroadcasters(args: {
|
|
279
|
+
chainId: number;
|
|
280
|
+
rpcUrl: string;
|
|
281
|
+
chainDetail: EvmChainDetail;
|
|
282
|
+
tokenAddress: string;
|
|
283
|
+
kind: string;
|
|
284
|
+
}): Promise<RailgunBroadcasterChoice[]>;
|
|
285
|
+
declare function quoteRailgunBroadcasterFee(args: {
|
|
286
|
+
kind: 'transfer' | 'unshield';
|
|
287
|
+
chainId: number;
|
|
288
|
+
rpcUrl: string;
|
|
289
|
+
chainDetail: EvmChainDetail;
|
|
290
|
+
tokenAddress: string;
|
|
291
|
+
amountWei: string;
|
|
292
|
+
recipientAddress: string;
|
|
293
|
+
memoText?: string;
|
|
294
|
+
walletId: string;
|
|
295
|
+
encryptionKey: string;
|
|
296
|
+
}): Promise<{
|
|
297
|
+
feeWei: string;
|
|
298
|
+
tokenAddress: string;
|
|
299
|
+
}>;
|
|
300
|
+
/** Broadcaster fee from the live fee rate and chain gas. A view-only wallet cannot run the proof estimate. */
|
|
301
|
+
declare function quoteRailgunBroadcasterFeeRate(args: {
|
|
302
|
+
kind: 'transfer' | 'unshield';
|
|
303
|
+
chainId: number;
|
|
304
|
+
rpcUrl: string;
|
|
305
|
+
chainDetail: EvmChainDetail;
|
|
306
|
+
tokenAddress: string;
|
|
307
|
+
}): Promise<{
|
|
308
|
+
feeWei: string;
|
|
309
|
+
tokenAddress: string;
|
|
310
|
+
}>;
|
|
254
311
|
declare function railgunPrivateTransfer(args: RailgunPrivateActionArgs): Promise<{
|
|
255
312
|
txHash: string;
|
|
256
313
|
}>;
|
|
@@ -258,6 +315,36 @@ declare function railgunUnshield(args: RailgunPrivateActionArgs): Promise<{
|
|
|
258
315
|
txHash: string;
|
|
259
316
|
}>;
|
|
260
317
|
|
|
318
|
+
type RailgunFeeKind = 'shield' | 'transfer' | 'unshield';
|
|
319
|
+
type RailgunFeeQuote = {
|
|
320
|
+
kind: RailgunFeeKind;
|
|
321
|
+
amountWei: string;
|
|
322
|
+
protocolFeeBasisPoints: string;
|
|
323
|
+
protocolFeeWei: string;
|
|
324
|
+
receivedWei: string;
|
|
325
|
+
broadcasterFeeWei: string;
|
|
326
|
+
broadcasterTokenAddress: string;
|
|
327
|
+
totalDebitWei: string;
|
|
328
|
+
broadcasterError?: string;
|
|
329
|
+
};
|
|
330
|
+
declare function railgunProtocolFee(amount: bigint, basisPoints: bigint): {
|
|
331
|
+
fee: bigint;
|
|
332
|
+
received: bigint;
|
|
333
|
+
};
|
|
334
|
+
declare function clearRailgunFeeCache(): void;
|
|
335
|
+
declare function quoteRailgunFee(args: {
|
|
336
|
+
kind: RailgunFeeKind;
|
|
337
|
+
chainId: number;
|
|
338
|
+
rpcUrl: string;
|
|
339
|
+
chainDetail?: EvmChainDetail;
|
|
340
|
+
tokenAddress: string;
|
|
341
|
+
amountWei: string;
|
|
342
|
+
recipientAddress?: string;
|
|
343
|
+
memoText?: string;
|
|
344
|
+
walletId?: string;
|
|
345
|
+
encryptionKey?: string;
|
|
346
|
+
}): Promise<RailgunFeeQuote>;
|
|
347
|
+
|
|
261
348
|
declare function createRailgunBrowserWallet(args: {
|
|
262
349
|
encryptionKey: string;
|
|
263
350
|
mnemonic: string;
|
|
@@ -272,25 +359,72 @@ declare function openRailgunViewOnlyWallet(args: {
|
|
|
272
359
|
encryptionKey: string;
|
|
273
360
|
shareableViewingKey: string;
|
|
274
361
|
chainId: number;
|
|
362
|
+
keyGenId?: string;
|
|
275
363
|
}): Promise<{
|
|
276
364
|
walletId: string;
|
|
277
365
|
railgunAddress: string;
|
|
278
366
|
}>;
|
|
279
367
|
declare function discardRailgunWallet(walletId: string): Promise<void>;
|
|
280
368
|
declare function railgunAddressIsValid(address: string): Promise<boolean>;
|
|
369
|
+
declare function recordRailgunWalletBalance(event: RailgunBalancesEvent): void;
|
|
370
|
+
declare function railgunWalletBalanceSnapshot(walletId: string, chainId: number): RailgunPrivateBalanceRow[];
|
|
371
|
+
declare function clearRailgunWalletBalances(): void;
|
|
281
372
|
/** History sync emits Complete on the merkletree callback. It does not emit the wallet event awaitWalletScan waits for. */
|
|
282
373
|
declare function utxoScanTerminalStatus(scanStatus: string): 'done' | 'failed' | 'pending';
|
|
374
|
+
/** After the note scan reports 100%, wait this long for the spendable-note check, then save the balances already decrypted. */
|
|
375
|
+
declare const RAILGUN_TXID_WAIT_AFTER_NOTES_MS = 45000;
|
|
376
|
+
/** After the history walk, sync blocks that were mined while it was running. A shield in that gap is otherwise left out. */
|
|
377
|
+
declare const RAILGUN_CATCH_UP_MS = 120000;
|
|
378
|
+
/** The first merkletree walk can take much longer than the catch-up window. Give up only when progress itself stops. */
|
|
379
|
+
declare const RAILGUN_MERKLETREE_STALL_MS: number;
|
|
380
|
+
declare const RAILGUN_SCAN_BEHIND_NOTE = "The shielded balance is saved. The newest blocks did not finish syncing, so a shield that just landed may be missing until the next scan.";
|
|
381
|
+
declare const RAILGUN_SCAN_STOPPED_NOTE = "The note scan stopped before it reached the latest block. The shielded balance is unchanged until a scan finishes.";
|
|
382
|
+
/** A catch-up timer that expires while leaves are still arriving has not finished the tree. */
|
|
383
|
+
declare function merkletreeScanStillRunning(args: {
|
|
384
|
+
sawProgress: boolean;
|
|
385
|
+
notesFinished: boolean;
|
|
386
|
+
terminal: 'done' | 'failed' | 'pending';
|
|
387
|
+
}): boolean;
|
|
388
|
+
declare function railgunScanRecord(merkletree: 'done' | 'failed', balanceCount: number, caughtUp: boolean): {
|
|
389
|
+
scanStatus: RailgunScanStatus;
|
|
390
|
+
notes: string;
|
|
391
|
+
};
|
|
392
|
+
declare function balancesToKeepAfterNoteScan(decrypted: RailgunPrivateBalanceRow[], afterRefresh: RailgunPrivateBalanceRow[], previous: RailgunPrivateBalanceRow[]): RailgunPrivateBalanceRow[];
|
|
393
|
+
declare const RAILGUN_SPEND_SCAN_STOPPED = "The spending wallet did not finish scanning private notes.";
|
|
394
|
+
/**
|
|
395
|
+
* History complete is emitted at 100% after this wallet's notes are decrypted.
|
|
396
|
+
* The decrypt-complete wallet event is deferred until after that, so 100% is the
|
|
397
|
+
* signal to build the proof. Give up only when leaves stop arriving before then.
|
|
398
|
+
*/
|
|
399
|
+
declare function spendingScanReadyAfterHistory(progress: number, scanStatus: string): boolean;
|
|
400
|
+
declare function spendingNoteScanGaveUp(args: {
|
|
401
|
+
walletReady: boolean;
|
|
402
|
+
sawProgress: boolean;
|
|
403
|
+
notesFinished: boolean;
|
|
404
|
+
msSinceProgress: number;
|
|
405
|
+
msWaitingForDecrypt: number | null;
|
|
406
|
+
}): boolean;
|
|
407
|
+
/** Decrypt this spending wallet's notes before a proof. A view-only scan does not fill this wallet. */
|
|
408
|
+
declare function scanSpendingWalletNotes(args: {
|
|
409
|
+
chainId: number;
|
|
410
|
+
rpcUrl: string;
|
|
411
|
+
walletId: string;
|
|
412
|
+
onProgress?: (progress: number) => void;
|
|
413
|
+
}): Promise<void>;
|
|
283
414
|
declare function scanRailgunPrivateBalances(args: {
|
|
284
415
|
chainId: number;
|
|
285
416
|
rpcUrl: string;
|
|
286
417
|
walletId: string;
|
|
287
418
|
onProgress?: (progress: number) => void;
|
|
419
|
+
onBalances?: (balances: RailgunPrivateBalanceRow[]) => void;
|
|
288
420
|
}): Promise<{
|
|
289
421
|
scanStatus: RailgunScanStatus;
|
|
290
422
|
balances: RailgunPrivateBalanceRow[];
|
|
423
|
+
settled: boolean;
|
|
424
|
+
notes: string;
|
|
291
425
|
}>;
|
|
292
426
|
|
|
293
427
|
declare const RAILGUN_PROTOCOL_ID = "railgun";
|
|
294
428
|
declare const railgunProtocolModule: ProtocolModule;
|
|
295
429
|
|
|
296
|
-
export { RAILGUN_CTM_DISABLED_MESSAGE, RAILGUN_CTM_ENABLED, RAILGUN_POPULAR_ASSET_LIMIT, RAILGUN_PROTOCOL_ID, RAILGUN_WALLET_LOCKED_MESSAGE, type RailgunNetworkRow, type RailgunNetworkSource, type RailgunPrivateActionArgs, type RailgunPrivateBalanceRow, type RailgunPrivateBalanceSnapshot, type RailgunScanStatus, type RailgunShieldArgs, type RailgunWalletSession, type ShieldCommitmentLike, assertRailgunCtmAllowed, buildEvmMultisignBodyRailgunShield, buildEvmMultisignBodyWethUnwrap, clearRailgunNetworkCache, clearRailgunPopularAssetCache, clearRailgunPrivateBalanceSnapshots, commitmentsFromShieldIndex, createRailgunBrowserWallet, discardRailgunWallet, getRailgunWalletSession, loadRailgunNetworks, loadRailgunPopularAssets, loadRailgunSupportedChainIds, openRailgunViewOnlyWallet, publishRailgunPrivateBalanceSnapshot, railgunAddressIsValid, railgunFetchPopularAssets, railgunFetchPrivateBalances, railgunFetchPrivateBalancesSummary, railgunNetworkByChainId, railgunPrivateTransfer, railgunProtocolModule, railgunShareableViewingKey, railgunUnshield, rankPopularShieldTokens, readRailgunPrivateBalanceSnapshot, requireRailgunWalletSession, scanRailgunPrivateBalances, selectRailgunNetworks, setRailgunAllowanceReaderForTests, setRailgunPopulateShieldForTests, setRailgunShieldLogReaderForTests, setRailgunWalletSession, shieldIndexEndpoint, shieldPrivateKeyFromSignature, unlockRailgunBrowserWallet, utxoScanTerminalStatus };
|
|
430
|
+
export { BROADCASTER_FEE_MIN_REMAINING_MS, BROADCASTER_PROOF_WAIT_MS, RAILGUN_CATCH_UP_MS, RAILGUN_CTM_DISABLED_MESSAGE, RAILGUN_CTM_ENABLED, RAILGUN_MERKLETREE_STALL_MS, RAILGUN_POPULAR_ASSET_LIMIT, RAILGUN_PROTOCOL_ID, RAILGUN_SCAN_BEHIND_NOTE, RAILGUN_SCAN_STOPPED_NOTE, RAILGUN_SPEND_SCAN_STOPPED, RAILGUN_TXID_WAIT_AFTER_NOTES_MS, RAILGUN_WALLET_LOCKED_MESSAGE, type RailgunBroadcasterChoice, type RailgunFeeKind, type RailgunFeeQuote, type RailgunNetworkRow, type RailgunNetworkSource, type RailgunPrivateActionArgs, type RailgunPrivateBalanceRow, type RailgunPrivateBalanceSnapshot, type RailgunScanStatus, type RailgunShieldArgs, type RailgunWalletSession, type ShieldCommitmentLike, assertRailgunCtmAllowed, balancesToKeepAfterNoteScan, broadcasterAskedToRefreshProofStatus, broadcasterFeeStillValid, broadcasterRefusedForGas, buildEvmMultisignBodyRailgunShield, buildEvmMultisignBodyWethUnwrap, clearRailgunFeeCache, clearRailgunNetworkCache, clearRailgunPopularAssetCache, clearRailgunPrivateBalanceSnapshots, clearRailgunWalletBalances, commitmentsFromShieldIndex, createRailgunBrowserWallet, discardRailgunWallet, getRailgunWalletSession, listRailgunBroadcasters, loadRailgunNetworks, loadRailgunPopularAssets, loadRailgunSupportedChainIds, merkletreeScanStillRunning, openRailgunViewOnlyWallet, publishRailgunPrivateBalanceSnapshot, quoteRailgunBroadcasterFee, quoteRailgunBroadcasterFeeRate, quoteRailgunFee, railgunAddressIsValid, railgunDetailedError, railgunFetchPopularAssets, railgunFetchPrivateBalances, railgunFetchPrivateBalancesSummary, railgunNetworkByChainId, railgunPrivateTransfer, railgunProtocolFee, railgunProtocolModule, railgunScanRecord, railgunShareableViewingKey, railgunUnshield, railgunWalletBalanceSnapshot, rankPopularShieldTokens, readRailgunPrivateBalanceSnapshot, recordRailgunWalletBalance, requireRailgunWalletSession, scanRailgunPrivateBalances, scanSpendingWalletNotes, selectRailgunNetworks, setRailgunAllowanceReaderForTests, setRailgunPopulateShieldForTests, setRailgunShieldLogReaderForTests, setRailgunWalletSession, shieldIndexEndpoint, shieldPrivateKeyFromSignature, spendingNoteScanGaveUp, spendingScanReadyAfterHistory, unlockRailgunBrowserWallet, utxoScanTerminalStatus };
|