@shieldedtech/moth-cli 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 (173) hide show
  1. package/README.md +67 -0
  2. package/dist/adapters/passphrase.d.ts +2 -0
  3. package/dist/adapters/passphrase.d.ts.map +1 -0
  4. package/dist/adapters/passphrase.js +62 -0
  5. package/dist/adapters/passphrase.js.map +1 -0
  6. package/dist/base-command.d.ts +155 -0
  7. package/dist/base-command.d.ts.map +1 -0
  8. package/dist/base-command.js +497 -0
  9. package/dist/base-command.js.map +1 -0
  10. package/dist/commands/airdrop.d.ts +18 -0
  11. package/dist/commands/airdrop.d.ts.map +1 -0
  12. package/dist/commands/airdrop.js +36 -0
  13. package/dist/commands/airdrop.js.map +1 -0
  14. package/dist/commands/balance.d.ts +18 -0
  15. package/dist/commands/balance.d.ts.map +1 -0
  16. package/dist/commands/balance.js +124 -0
  17. package/dist/commands/balance.js.map +1 -0
  18. package/dist/commands/call.d.ts +26 -0
  19. package/dist/commands/call.d.ts.map +1 -0
  20. package/dist/commands/call.js +102 -0
  21. package/dist/commands/call.js.map +1 -0
  22. package/dist/commands/config.d.ts +22 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +50 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/daemon/call.d.ts +27 -0
  27. package/dist/commands/daemon/call.d.ts.map +1 -0
  28. package/dist/commands/daemon/call.js +108 -0
  29. package/dist/commands/daemon/call.js.map +1 -0
  30. package/dist/commands/daemon/deploy.d.ts +27 -0
  31. package/dist/commands/daemon/deploy.d.ts.map +1 -0
  32. package/dist/commands/daemon/deploy.js +105 -0
  33. package/dist/commands/daemon/deploy.js.map +1 -0
  34. package/dist/commands/daemon/dust/deregister.d.ts +19 -0
  35. package/dist/commands/daemon/dust/deregister.d.ts.map +1 -0
  36. package/dist/commands/daemon/dust/deregister.js +52 -0
  37. package/dist/commands/daemon/dust/deregister.js.map +1 -0
  38. package/dist/commands/daemon/dust/register.d.ts +20 -0
  39. package/dist/commands/daemon/dust/register.d.ts.map +1 -0
  40. package/dist/commands/daemon/dust/register.js +60 -0
  41. package/dist/commands/daemon/dust/register.js.map +1 -0
  42. package/dist/commands/daemon/key/gen.d.ts +19 -0
  43. package/dist/commands/daemon/key/gen.d.ts.map +1 -0
  44. package/dist/commands/daemon/key/gen.js +66 -0
  45. package/dist/commands/daemon/key/gen.js.map +1 -0
  46. package/dist/commands/daemon/key/list.d.ts +17 -0
  47. package/dist/commands/daemon/key/list.d.ts.map +1 -0
  48. package/dist/commands/daemon/key/list.js +43 -0
  49. package/dist/commands/daemon/key/list.js.map +1 -0
  50. package/dist/commands/daemon/key/revoke.d.ts +20 -0
  51. package/dist/commands/daemon/key/revoke.d.ts.map +1 -0
  52. package/dist/commands/daemon/key/revoke.js +37 -0
  53. package/dist/commands/daemon/key/revoke.js.map +1 -0
  54. package/dist/commands/daemon/maintenance/insert-vk.d.ts +24 -0
  55. package/dist/commands/daemon/maintenance/insert-vk.d.ts.map +1 -0
  56. package/dist/commands/daemon/maintenance/insert-vk.js +87 -0
  57. package/dist/commands/daemon/maintenance/insert-vk.js.map +1 -0
  58. package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts +24 -0
  59. package/dist/commands/daemon/maintenance/insert-vks-batch.d.ts.map +1 -0
  60. package/dist/commands/daemon/maintenance/insert-vks-batch.js +117 -0
  61. package/dist/commands/daemon/maintenance/insert-vks-batch.js.map +1 -0
  62. package/dist/commands/daemon/serve.d.ts +23 -0
  63. package/dist/commands/daemon/serve.d.ts.map +1 -0
  64. package/dist/commands/daemon/serve.js +289 -0
  65. package/dist/commands/daemon/serve.js.map +1 -0
  66. package/dist/commands/daemon/submit-tx.d.ts +22 -0
  67. package/dist/commands/daemon/submit-tx.d.ts.map +1 -0
  68. package/dist/commands/daemon/submit-tx.js +89 -0
  69. package/dist/commands/daemon/submit-tx.js.map +1 -0
  70. package/dist/commands/daemon/transfer.d.ts +24 -0
  71. package/dist/commands/daemon/transfer.d.ts.map +1 -0
  72. package/dist/commands/daemon/transfer.js +135 -0
  73. package/dist/commands/daemon/transfer.js.map +1 -0
  74. package/dist/commands/deploy.d.ts +26 -0
  75. package/dist/commands/deploy.d.ts.map +1 -0
  76. package/dist/commands/deploy.js +135 -0
  77. package/dist/commands/deploy.js.map +1 -0
  78. package/dist/commands/dust/deregister.d.ts +18 -0
  79. package/dist/commands/dust/deregister.d.ts.map +1 -0
  80. package/dist/commands/dust/deregister.js +48 -0
  81. package/dist/commands/dust/deregister.js.map +1 -0
  82. package/dist/commands/dust/register.d.ts +21 -0
  83. package/dist/commands/dust/register.d.ts.map +1 -0
  84. package/dist/commands/dust/register.js +120 -0
  85. package/dist/commands/dust/register.js.map +1 -0
  86. package/dist/commands/dust/status.d.ts +17 -0
  87. package/dist/commands/dust/status.d.ts.map +1 -0
  88. package/dist/commands/dust/status.js +47 -0
  89. package/dist/commands/dust/status.js.map +1 -0
  90. package/dist/commands/info.d.ts +17 -0
  91. package/dist/commands/info.d.ts.map +1 -0
  92. package/dist/commands/info.js +37 -0
  93. package/dist/commands/info.js.map +1 -0
  94. package/dist/commands/maintenance/insert-vk.d.ts +23 -0
  95. package/dist/commands/maintenance/insert-vk.d.ts.map +1 -0
  96. package/dist/commands/maintenance/insert-vk.js +92 -0
  97. package/dist/commands/maintenance/insert-vk.js.map +1 -0
  98. package/dist/commands/maintenance/insert-vks-batch.d.ts +23 -0
  99. package/dist/commands/maintenance/insert-vks-batch.d.ts.map +1 -0
  100. package/dist/commands/maintenance/insert-vks-batch.js +130 -0
  101. package/dist/commands/maintenance/insert-vks-batch.js.map +1 -0
  102. package/dist/commands/mint.d.ts +24 -0
  103. package/dist/commands/mint.d.ts.map +1 -0
  104. package/dist/commands/mint.js +116 -0
  105. package/dist/commands/mint.js.map +1 -0
  106. package/dist/commands/state.d.ts +20 -0
  107. package/dist/commands/state.d.ts.map +1 -0
  108. package/dist/commands/state.js +36 -0
  109. package/dist/commands/state.js.map +1 -0
  110. package/dist/commands/transfer/batch.d.ts +21 -0
  111. package/dist/commands/transfer/batch.d.ts.map +1 -0
  112. package/dist/commands/transfer/batch.js +71 -0
  113. package/dist/commands/transfer/batch.js.map +1 -0
  114. package/dist/commands/transfer.d.ts +24 -0
  115. package/dist/commands/transfer.d.ts.map +1 -0
  116. package/dist/commands/transfer.js +123 -0
  117. package/dist/commands/transfer.js.map +1 -0
  118. package/dist/commands/tui.d.ts +17 -0
  119. package/dist/commands/tui.d.ts.map +1 -0
  120. package/dist/commands/tui.js +18 -0
  121. package/dist/commands/tui.js.map +1 -0
  122. package/dist/commands/wallet/address.d.ts +25 -0
  123. package/dist/commands/wallet/address.d.ts.map +1 -0
  124. package/dist/commands/wallet/address.js +47 -0
  125. package/dist/commands/wallet/address.js.map +1 -0
  126. package/dist/commands/wallet/generate.d.ts +20 -0
  127. package/dist/commands/wallet/generate.d.ts.map +1 -0
  128. package/dist/commands/wallet/generate.js +75 -0
  129. package/dist/commands/wallet/generate.js.map +1 -0
  130. package/dist/commands/wallet/import.d.ts +20 -0
  131. package/dist/commands/wallet/import.d.ts.map +1 -0
  132. package/dist/commands/wallet/import.js +85 -0
  133. package/dist/commands/wallet/import.js.map +1 -0
  134. package/dist/commands/wallet/list.d.ts +17 -0
  135. package/dist/commands/wallet/list.d.ts.map +1 -0
  136. package/dist/commands/wallet/list.js +23 -0
  137. package/dist/commands/wallet/list.js.map +1 -0
  138. package/dist/commands/wallet/remove.d.ts +21 -0
  139. package/dist/commands/wallet/remove.d.ts.map +1 -0
  140. package/dist/commands/wallet/remove.js +31 -0
  141. package/dist/commands/wallet/remove.js.map +1 -0
  142. package/dist/commands/wallet/status.d.ts +18 -0
  143. package/dist/commands/wallet/status.d.ts.map +1 -0
  144. package/dist/commands/wallet/status.js +62 -0
  145. package/dist/commands/wallet/status.js.map +1 -0
  146. package/dist/commands/wallet/use.d.ts +20 -0
  147. package/dist/commands/wallet/use.d.ts.map +1 -0
  148. package/dist/commands/wallet/use.js +19 -0
  149. package/dist/commands/wallet/use.js.map +1 -0
  150. package/dist/formatters/index.d.ts +5 -0
  151. package/dist/formatters/index.d.ts.map +1 -0
  152. package/dist/formatters/index.js +68 -0
  153. package/dist/formatters/index.js.map +1 -0
  154. package/dist/index.d.ts +3 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +4 -0
  157. package/dist/index.js.map +1 -0
  158. package/package.json +53 -0
  159. package/templates/dapp/api/package.json +21 -0
  160. package/templates/dapp/api/src/index.ts +2 -0
  161. package/templates/dapp/api/src/providers.ts +23 -0
  162. package/templates/dapp/api/src/types.ts +23 -0
  163. package/templates/dapp/api/tsconfig.json +11 -0
  164. package/templates/dapp/root/README.md +20 -0
  165. package/templates/dapp/root/tsconfig.json +15 -0
  166. package/templates/dapp/ui/index.html +13 -0
  167. package/templates/dapp/ui/package.json +24 -0
  168. package/templates/dapp/ui/public/vite.svg +1 -0
  169. package/templates/dapp/ui/src/App.tsx +36 -0
  170. package/templates/dapp/ui/src/index.css +29 -0
  171. package/templates/dapp/ui/src/main.tsx +10 -0
  172. package/templates/dapp/ui/tsconfig.json +8 -0
  173. package/templates/dapp/ui/vite.config.ts +14 -0
@@ -0,0 +1,116 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../base-command.js';
3
+ import { getPassphrase } from '../adapters/passphrase.js';
4
+ import { deployFungibleToken, mintFungibleToken, startWalletSync, describeProver, resolveProverConfig, } from '@shieldedtech/moth-wallet';
5
+ export default class Mint extends BaseCommand {
6
+ static description = [
7
+ 'Mint fungible tokens using the bundled moth-ft token contract.',
8
+ '',
9
+ 'Provide --address to mint on an already-deployed moth-ft contract, or omit it',
10
+ 'to auto-deploy a fresh token contract and mint against it in one go.',
11
+ 'Tokens are minted to --recipient (a bech32m address) or, by default, to your',
12
+ "own wallet's address for the selected token type (shielded unless --unshielded).",
13
+ ].join('\n');
14
+ static args = {
15
+ amount: Args.string({ description: 'Amount to mint (raw integer units)', required: true }),
16
+ };
17
+ static flags = {
18
+ ...BaseCommand.baseFlags,
19
+ address: Flags.string({
20
+ description: 'Deployed moth-ft contract address. Omit to auto-deploy a new token contract.',
21
+ }),
22
+ recipient: Flags.string({
23
+ description: "Recipient bech32m address. Defaults to your own wallet address for the token type.",
24
+ }),
25
+ unshielded: Flags.boolean({
26
+ description: 'Mint an unshielded (transparent) token instead of a shielded one.',
27
+ default: false,
28
+ }),
29
+ yes: Flags.boolean({ char: 'y', description: 'Skip confirmation prompt', default: false }),
30
+ };
31
+ async run() {
32
+ const { args, flags } = await this.parse(Mint);
33
+ this.outputFormat = flags.output ?? 'text';
34
+ this.verbose = flags.verbose;
35
+ const amount = BigInt(await this.promptIfMissing(args.amount, 'Amount to mint'));
36
+ const shielded = !flags.unshielded;
37
+ const walletName = await this.resolveWalletName(flags);
38
+ const passphrase = await getPassphrase();
39
+ const wallet = await this.walletManager.unlock(walletName, passphrase);
40
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
41
+ // Default the recipient to the active wallet's own address for the token type.
42
+ const selfRecipient = shielded
43
+ ? wallet.addresses.zswap.bech32m[network.id]
44
+ : wallet.addresses.nightExternal.bech32m[network.id];
45
+ const recipient = flags.recipient ?? selfRecipient;
46
+ if (!recipient) {
47
+ throw new Error('Could not determine a recipient address — pass --recipient explicitly.');
48
+ }
49
+ const timeoutMs = flags.timeout ? flags.timeout * 1000 : 300_000;
50
+ await this.confirmTransaction({
51
+ 'Operation': flags.address ? 'Mint tokens' : 'Deploy FT contract + mint tokens',
52
+ 'Contract': flags.address ?? '(auto-deploy new moth-ft contract)',
53
+ 'Amount': amount.toString(),
54
+ 'Token type': shielded ? 'shielded' : 'unshielded',
55
+ 'Recipient': recipient,
56
+ 'Network': network.id,
57
+ 'Wallet': walletName,
58
+ 'Prover': describeProver(resolveProverConfig(network)),
59
+ }, flags);
60
+ // Mint requires a synced wallet for transaction balancing (DUST fees + signing).
61
+ process.stderr.write('Syncing wallet before mint...\n');
62
+ const syncedWallet = await startWalletSync(wallet.walletKeys, network, (msg) => {
63
+ this.log_verbose(msg);
64
+ if (msg.includes('syncing') || msg.includes('synced')) {
65
+ process.stderr.write(`\r ${msg}${''.padEnd(20)}`);
66
+ }
67
+ }, walletName);
68
+ process.stderr.write('\n');
69
+ try {
70
+ let contractAddress = flags.address;
71
+ if (!contractAddress) {
72
+ process.stderr.write('Deploying fungible token contract...\n');
73
+ const deployed = await deployFungibleToken({
74
+ walletKeys: wallet.walletKeys,
75
+ network,
76
+ syncedWallet,
77
+ timeoutMs,
78
+ onProgress: (stage) => process.stderr.write(`Deploy: ${stage}\n`),
79
+ });
80
+ if (!deployed.contractAddress) {
81
+ throw new Error('Deploy did not return a contract address');
82
+ }
83
+ contractAddress = deployed.contractAddress;
84
+ this.log_verbose(`Deployed moth-ft contract: ${contractAddress}`);
85
+ }
86
+ process.stderr.write('Minting...\n');
87
+ const result = await mintFungibleToken({
88
+ contractAddress,
89
+ recipientAddress: recipient,
90
+ amount,
91
+ shielded,
92
+ keys: wallet.keys,
93
+ walletKeys: wallet.walletKeys,
94
+ network,
95
+ syncedWallet,
96
+ timeoutMs,
97
+ });
98
+ this.outputSuccess({
99
+ status: result.status,
100
+ txHash: result.hash,
101
+ contractAddress,
102
+ amount: amount.toString(),
103
+ tokenType: shielded ? 'shielded' : 'unshielded',
104
+ recipient,
105
+ blockHash: result.blockHash,
106
+ blockHeight: result.blockHeight,
107
+ fees: result.fees,
108
+ });
109
+ }
110
+ finally {
111
+ await syncedWallet.stop();
112
+ wallet.lock();
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=mint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mint.js","sourceRoot":"","sources":["../../src/commands/mint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class State extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ address: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB3B"}
@@ -0,0 +1,36 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../base-command.js';
3
+ import { queryContractState } from '@shieldedtech/moth-wallet';
4
+ export default class State extends BaseCommand {
5
+ static description = 'Query public ledger state of a deployed contract';
6
+ static args = {
7
+ address: Args.string({
8
+ description: 'Contract address',
9
+ required: false,
10
+ }),
11
+ };
12
+ static flags = {
13
+ ...BaseCommand.baseFlags,
14
+ };
15
+ async run() {
16
+ const { args, flags } = await this.parse(State);
17
+ this.outputFormat = flags.output ?? 'text';
18
+ this.verbose = flags.verbose;
19
+ const address = await this.promptIfMissing(args.address, 'Contract address');
20
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
21
+ this.log_verbose(`Querying state for ${address} on ${network.indexerUrl}`);
22
+ const state = await queryContractState(network.indexerUrl, address);
23
+ if (!state) {
24
+ this.outputError('INVALID_INPUT', `No contract found at address ${address}`);
25
+ this.exit(1);
26
+ return;
27
+ }
28
+ this.outputSuccess({
29
+ address: state.address,
30
+ state: state.state,
31
+ lastUpdated: state.lastUpdated,
32
+ unshieldedBalances: state.unshieldedBalances,
33
+ });
34
+ }
35
+ }
36
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAU,WAAW,GAAG,kDAAkD,CAAC;IAEjF,MAAM,CAAU,IAAI,GAAG;QACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,CAAC,sBAAsB,OAAO,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,gCAAgC,OAAO,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC;YACjB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;SAC7C,CAAC,CAAC;IACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class TransferBatch extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ file: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../src/commands/transfer/batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWpD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAA8C;IAEzE,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;;;;;;MAOnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4D3B"}
@@ -0,0 +1,71 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { getPassphrase } from '../../adapters/passphrase.js';
4
+ import { loadBatchFile, executeBatchTransfer, batchExitCode, startWalletSync, } from '@shieldedtech/moth-wallet';
5
+ import { readFileSync } from 'node:fs';
6
+ export default class TransferBatch extends BaseCommand {
7
+ static description = 'Execute batch transfers from a JSON file';
8
+ static args = {
9
+ file: Args.string({
10
+ description: 'Path to JSON batch file (use @stdin to read from stdin)',
11
+ required: false,
12
+ }),
13
+ };
14
+ static flags = {
15
+ ...BaseCommand.baseFlags,
16
+ yes: Flags.boolean({
17
+ char: 'y',
18
+ default: false,
19
+ description: 'Skip confirmation prompt',
20
+ }),
21
+ };
22
+ async run() {
23
+ const { args, flags } = await this.parse(TransferBatch);
24
+ this.outputFormat = flags.output ?? 'text';
25
+ this.verbose = flags.verbose;
26
+ const filePath = await this.promptIfMissing(args.file, 'Path to batch JSON file (or @stdin)');
27
+ let entries;
28
+ if (filePath === '@stdin' || filePath === '-') {
29
+ const raw = readFileSync('/dev/stdin', 'utf-8');
30
+ entries = JSON.parse(raw);
31
+ }
32
+ else {
33
+ entries = loadBatchFile(filePath);
34
+ }
35
+ if (entries.length === 0) {
36
+ this.outputError('INVALID_INPUT', 'Batch file contains no transfer entries');
37
+ this.exit(1);
38
+ return;
39
+ }
40
+ const walletName = await this.resolveWalletName(flags);
41
+ const passphrase = await getPassphrase();
42
+ const wallet = await this.walletManager.unlock(walletName, passphrase);
43
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
44
+ // SR-003: Confirm batch
45
+ await this.confirmTransaction({
46
+ 'Operation': 'Batch transfer',
47
+ 'Entries': `${entries.length} transfers`,
48
+ 'Network': network.id,
49
+ 'Wallet': walletName,
50
+ }, flags);
51
+ process.stderr.write('Syncing wallet before batch transfer...\n');
52
+ const syncedWallet = await startWalletSync(wallet.walletKeys, network, (msg) => {
53
+ this.log_verbose(msg);
54
+ }, walletName);
55
+ try {
56
+ const summary = await executeBatchTransfer(syncedWallet.facade, wallet.walletKeys, network.id, entries, (index, stage) => {
57
+ process.stderr.write(`Transfer ${index + 1}/${entries.length}: ${stage}\n`);
58
+ });
59
+ this.outputSuccess(summary);
60
+ const exitCode = batchExitCode(summary);
61
+ if (exitCode !== 0) {
62
+ this.exit(exitCode);
63
+ }
64
+ }
65
+ finally {
66
+ await syncedWallet.stop();
67
+ wallet.lock();
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/transfer/batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Transfer extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ amount: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ to: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ shielded: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ 'wait-timeout-ms': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/commands/transfer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,OAAgB,WAAW,SAA2B;IAEtD,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2E3B"}
@@ -0,0 +1,123 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../base-command.js';
3
+ import { getPassphrase } from '../adapters/passphrase.js';
4
+ import { sendTokensWithKeys, startWalletSync, NIGHT_TOKEN_ID, } from '@shieldedtech/moth-wallet';
5
+ export default class Transfer extends BaseCommand {
6
+ static description = 'Transfer NIGHT tokens';
7
+ static args = {
8
+ amount: Args.string({ description: 'Amount to transfer (in NIGHT)', required: false }),
9
+ };
10
+ static flags = {
11
+ ...BaseCommand.baseFlags,
12
+ to: Flags.string({ required: false, description: 'Recipient address' }),
13
+ shielded: Flags.boolean({ default: false, description: 'Use shielded transfer' }),
14
+ yes: Flags.boolean({
15
+ char: 'y',
16
+ default: false,
17
+ description: 'Skip confirmation prompt',
18
+ }),
19
+ 'wait-timeout-ms': Flags.integer({
20
+ description: 'How long to wait for the wallet to reach synced=true before building the transfer. ' +
21
+ 'Building against a not-yet-synced wallet spends against a stale root, which the node ' +
22
+ 'rejects ("Transaction submission error"). Default 5 minutes; after timeout it builds ' +
23
+ 'anyway against the latest snapshot.',
24
+ default: 300_000,
25
+ }),
26
+ };
27
+ async run() {
28
+ const { args, flags } = await this.parse(Transfer);
29
+ this.outputFormat = flags.output ?? 'text';
30
+ this.verbose = flags.verbose;
31
+ const amountStr = await this.promptIfMissing(args.amount, 'Amount to transfer (NIGHT)');
32
+ const to = await this.promptIfMissing(flags.to, 'Recipient address');
33
+ // Parse amount: support decimal (e.g. "1.5") → multiply by 10^6 for base units
34
+ const parsed = parseFloat(amountStr);
35
+ if (Number.isNaN(parsed) || parsed <= 0) {
36
+ this.outputError('INVALID_INPUT', `Invalid amount: ${amountStr}`);
37
+ this.exit(1);
38
+ return;
39
+ }
40
+ const amount = BigInt(Math.round(parsed * 1_000_000));
41
+ const walletName = await this.resolveWalletName(flags);
42
+ const passphrase = await getPassphrase();
43
+ const wallet = await this.walletManager.unlock(walletName, passphrase);
44
+ const network = await this.getNetworkConfig(flags.network, this.getNetworkOverrides(flags));
45
+ this.log_verbose(`Transferring ${amountStr} NIGHT to ${to} (shielded: ${flags.shielded})`);
46
+ // SR-003: Confirm transaction before proceeding
47
+ await this.confirmTransaction({
48
+ 'Operation': flags.shielded ? 'Shielded transfer' : 'Unshielded transfer',
49
+ 'Amount': `${amountStr} NIGHT`,
50
+ 'Recipient': to,
51
+ 'Network': network.id,
52
+ 'Wallet': walletName,
53
+ }, flags);
54
+ process.stderr.write('Syncing wallet before transfer...\n');
55
+ const syncedWallet = await startWalletSync(wallet.walletKeys, network, (msg) => {
56
+ this.log_verbose(msg);
57
+ }, walletName);
58
+ try {
59
+ // Wait for the wallet to reach synced=true BEFORE building the tx.
60
+ // startWalletSync only kicks off syncing; without this wait the transfer
61
+ // is built/proved/submitted against a stale (pre-tip) state and dust root,
62
+ // which the node rejects as a generic "Transaction submission error". The
63
+ // dust sub-wallet in particular must be synced to tip for the fee proof to
64
+ // validate. (balance / daemon-serve already gate on this; transfer didn't.)
65
+ await waitForSynced(syncedWallet, flags['wait-timeout-ms']);
66
+ if (!syncedWallet.balances.synced) {
67
+ process.stderr.write('Warning: wallet not fully synced before wait-timeout-ms; building anyway (submission may fail).\n');
68
+ }
69
+ const req = {
70
+ type: flags.shielded ? 'shielded' : 'unshielded',
71
+ tokenId: NIGHT_TOKEN_ID,
72
+ amount,
73
+ to,
74
+ };
75
+ const txHash = await sendTokensWithKeys(syncedWallet.facade, wallet.walletKeys, network.id, [req], (stage) => {
76
+ process.stderr.write(`Transfer: ${stage}\n`);
77
+ });
78
+ this.outputSuccess({
79
+ txHash,
80
+ amount: amountStr,
81
+ recipient: to,
82
+ shielded: flags.shielded,
83
+ network: network.id,
84
+ });
85
+ }
86
+ finally {
87
+ await syncedWallet.stop();
88
+ wallet.lock();
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Resolve once `balances.synced` flips to true, or once `timeoutMs` elapses
94
+ * (whichever comes first). Mirrors balance.ts — on timeout the caller proceeds
95
+ * with whatever the latest snapshot showed and can read `balances.synced` to
96
+ * know whether it was authoritative.
97
+ */
98
+ function waitForSynced(synced, timeoutMs) {
99
+ return new Promise((resolveOuter) => {
100
+ if (synced.balances.synced)
101
+ return resolveOuter();
102
+ let settled = false;
103
+ const finish = () => {
104
+ if (settled)
105
+ return;
106
+ settled = true;
107
+ try {
108
+ unsub();
109
+ }
110
+ catch {
111
+ /* idempotent */
112
+ }
113
+ clearTimeout(timer);
114
+ resolveOuter();
115
+ };
116
+ const unsub = synced.subscribe((b) => {
117
+ if (b.synced)
118
+ finish();
119
+ });
120
+ const timer = setTimeout(finish, timeoutMs).unref();
121
+ });
122
+ }
123
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/commands/transfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Tui extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW;IAC1C,OAAgB,WAAW,SAA2C;IAEtE,OAAgB,KAAK;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAa3B"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Tui extends BaseCommand {
3
+ static description = 'Launch interactive terminal dashboard';
4
+ static flags = {
5
+ ...BaseCommand.baseFlags,
6
+ };
7
+ async run() {
8
+ const { flags } = await this.parse(Tui);
9
+ const walletName = await this.resolveWalletName(flags).catch(() => 'none');
10
+ const networkId = flags.network;
11
+ // Dynamic imports — TUI, React, and Ink loaded only when this command runs
12
+ const { render } = await import('ink');
13
+ const { createElement } = await import('react');
14
+ const tui = await import(/* webpackIgnore: true */ '@shieldedtech/moth-tui');
15
+ render(createElement(tui.App, { walletName, networkId }));
16
+ }
17
+ }
18
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW;IAC1C,MAAM,CAAU,WAAW,GAAG,uCAAuC,CAAC;IAEtE,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;QAEhC,2EAA2E;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,wBAAwB,CAAQ,CAAC;QAEpF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ /**
3
+ * Show an EXISTING wallet's addresses by unlocking its keystore offline — no
4
+ * daemon, no network sync. Fills the gap where the only way to see a wallet's
5
+ * shielded (zswap) address was `wallet generate` (which mints a NEW wallet).
6
+ * Needed to recover addresses for keystores that already exist.
7
+ */
8
+ export default class WalletAddress extends BaseCommand {
9
+ static description: string;
10
+ static flags: {
11
+ name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ private logAddress;
24
+ }
25
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/address.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAAyE;IAEpG,OAAgB,KAAK;;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB1B,OAAO,CAAC,UAAU;CAOnB"}
@@ -0,0 +1,47 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { getPassphrase } from '../../adapters/passphrase.js';
4
+ /**
5
+ * Show an EXISTING wallet's addresses by unlocking its keystore offline — no
6
+ * daemon, no network sync. Fills the gap where the only way to see a wallet's
7
+ * shielded (zswap) address was `wallet generate` (which mints a NEW wallet).
8
+ * Needed to recover addresses for keystores that already exist.
9
+ */
10
+ export default class WalletAddress extends BaseCommand {
11
+ static description = "Show an existing wallet's addresses (unlocks the keystore; offline)";
12
+ static flags = {
13
+ ...BaseCommand.baseFlags,
14
+ name: Flags.string({ description: 'Wallet name', required: true }),
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(WalletAddress);
18
+ this.outputFormat = flags.output ?? 'text';
19
+ this.verbose = flags.verbose;
20
+ const passphrase = await getPassphrase();
21
+ const wallet = await this.walletManager.unlock(flags.name, passphrase);
22
+ try {
23
+ if (this.outputFormat === 'json') {
24
+ this.outputSuccess({ name: wallet.name, addresses: wallet.addresses });
25
+ }
26
+ else {
27
+ const a = wallet.addresses;
28
+ this.log(`Wallet: ${wallet.name}`);
29
+ this.log('');
30
+ this.logAddress('NIGHT receive', a.nightExternal);
31
+ this.logAddress('DUST', a.dust);
32
+ this.logAddress('Shielded (zswap)', a.zswap);
33
+ }
34
+ }
35
+ finally {
36
+ wallet.lock();
37
+ }
38
+ }
39
+ logAddress(label, addr) {
40
+ this.log(` ${label}`);
41
+ for (const [network, bech32m] of Object.entries(addr.bech32m)) {
42
+ this.log(` ${network.padEnd(8)} ${bech32m}`);
43
+ }
44
+ this.log('');
45
+ }
46
+ }
47
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/commands/wallet/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GAAG,qEAAqE,CAAC;IAEpG,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACnE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAA0B,IAAI,MAAM,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAAa,EAAE,IAAqB;QACrD,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class WalletGenerate extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ 'show-mnemonic': import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ network: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ wallet: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'proof-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ prover: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ indexer: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'node-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ private logAddress;
19
+ }
20
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,OAAgB,WAAW,SAAyD;IAEpF,OAAgB,KAAK;;;;;;;;;;;;MAOnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD1B,OAAO,CAAC,UAAU;CAOnB"}