@argonprotocol/mainchain 1.3.2 → 1.3.3
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/browser/index.d.ts +11990 -0
- package/browser/index.js +2721 -0
- package/browser/index.js.map +1 -0
- package/lib/{chunk-CGXT6XF7.js → chunk-FCT7GMFN.js} +287 -315
- package/lib/chunk-FCT7GMFN.js.map +1 -0
- package/lib/{chunk-NU36V3JQ.cjs → chunk-IQ3TNLS7.cjs} +55 -53
- package/lib/chunk-IQ3TNLS7.cjs.map +1 -0
- package/lib/{chunk-SHAEHPI5.cjs → chunk-OFYVHBKG.cjs} +323 -351
- package/lib/chunk-OFYVHBKG.cjs.map +1 -0
- package/lib/{chunk-FNSFV3MO.js → chunk-UZCZ347U.js} +7 -5
- package/lib/chunk-UZCZ347U.js.map +1 -0
- package/lib/cli.cjs +11 -6
- package/lib/cli.cjs.map +1 -1
- package/lib/cli.js +8 -3
- package/lib/cli.js.map +1 -1
- package/lib/clis/index.cjs +3 -3
- package/lib/clis/index.d.cts +2 -0
- package/lib/clis/index.d.ts +2 -0
- package/lib/clis/index.js +2 -2
- package/lib/index.cjs +60 -2
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +68 -108
- package/lib/index.d.ts +68 -108
- package/lib/index.js +61 -3
- package/package.json +8 -3
- package/lib/chunk-CGXT6XF7.js.map +0 -1
- package/lib/chunk-FNSFV3MO.js.map +0 -1
- package/lib/chunk-NU36V3JQ.cjs.map +0 -1
- package/lib/chunk-SHAEHPI5.cjs.map +0 -1
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
var _chunkOFYVHBKGcjs = require('./chunk-OFYVHBKG.cjs');
|
|
19
20
|
|
|
20
21
|
// src/clis/index.ts
|
|
21
22
|
var _extratypings = require('@commander-js/extra-typings');
|
|
@@ -69,18 +70,18 @@ function accountCli() {
|
|
|
69
70
|
).option("--register-keys-to <url>", "Register the keys to a url (normally this is localhost)").action(async ({ registerKeysTo, path }) => {
|
|
70
71
|
const { accountPassphrase, accountSuri, accountFilePath } = globalOptions(program);
|
|
71
72
|
const accountset = await accountsetFromCli(program);
|
|
72
|
-
process2.env.KEYS_MNEMONIC ||=
|
|
73
|
+
process2.env.KEYS_MNEMONIC ||= _chunkOFYVHBKGcjs.mnemonicGenerate.call(void 0, );
|
|
73
74
|
if (registerKeysTo) {
|
|
74
75
|
await accountset.registerKeys(registerKeysTo);
|
|
75
76
|
console.log("Keys registered to", registerKeysTo);
|
|
76
77
|
}
|
|
77
|
-
const envData = {
|
|
78
|
+
const envData = _chunkOFYVHBKGcjs.filterUndefined.call(void 0, {
|
|
78
79
|
ACCOUNT_JSON_PATH: accountFilePath,
|
|
79
80
|
ACCOUNT_SURI: accountSuri,
|
|
80
81
|
ACCOUNT_PASSPHRASE: accountPassphrase,
|
|
81
82
|
KEYS_MNEMONIC: process2.env.KEYS_MNEMONIC,
|
|
82
83
|
SUBACCOUNT_RANGE: "0-49"
|
|
83
|
-
};
|
|
84
|
+
});
|
|
84
85
|
let envfile = "";
|
|
85
86
|
for (const [key, value] of Object.entries(envData)) {
|
|
86
87
|
if (key) {
|
|
@@ -94,7 +95,7 @@ function accountCli() {
|
|
|
94
95
|
});
|
|
95
96
|
program.command("new-key-seed").description("Create a new mnemonic for runtime keys").action(async () => {
|
|
96
97
|
await _utilcrypto.cryptoWaitReady.call(void 0, );
|
|
97
|
-
const mnemonic =
|
|
98
|
+
const mnemonic = _chunkOFYVHBKGcjs.mnemonicGenerate.call(void 0, );
|
|
98
99
|
console.log("New mnemonic (add this to your .env as KEYS_MNEMONIC):", mnemonic);
|
|
99
100
|
process2.exit(0);
|
|
100
101
|
});
|
|
@@ -135,7 +136,7 @@ function accountCli() {
|
|
|
135
136
|
program.command("consolidate").description("Consolidate all argons into parent account").option(
|
|
136
137
|
"-s, --subaccounts <range>",
|
|
137
138
|
"Restrict this operation to a subset of the subaccounts (eg, 0-10)",
|
|
138
|
-
|
|
139
|
+
_chunkOFYVHBKGcjs.parseSubaccountRange
|
|
139
140
|
).action(async ({ subaccounts }) => {
|
|
140
141
|
const accountset = await accountsetFromCli(program);
|
|
141
142
|
const result = await accountset.consolidate(subaccounts);
|
|
@@ -151,11 +152,12 @@ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
|
151
152
|
|
|
152
153
|
// src/clis/vaultCli.ts
|
|
153
154
|
|
|
155
|
+
var _util = require('@polkadot/util');
|
|
154
156
|
function vaultCli() {
|
|
155
157
|
const program = new (0, _extratypings.Command)("vaults").description("Monitor vaults and manage securitization");
|
|
156
158
|
program.command("list", { isDefault: true }).description("Show current state of vaults").action(async () => {
|
|
157
159
|
const accountset = await accountsetFromCli(program);
|
|
158
|
-
const vaults = new (0,
|
|
160
|
+
const vaults = new (0, _chunkOFYVHBKGcjs.VaultMonitor)(accountset, void 0, {
|
|
159
161
|
vaultOnlyWatchMode: true
|
|
160
162
|
});
|
|
161
163
|
await vaults.monitor(true);
|
|
@@ -168,8 +170,8 @@ function vaultCli() {
|
|
|
168
170
|
).option("--ratio <ratio>", "The new securitization ratio", parseFloat).option("--tip <amount>", "The tip to include with the transaction", parseFloat).action(async ({ tip, argons, vaultId, ratio }) => {
|
|
169
171
|
const accountset = await accountsetFromCli(program);
|
|
170
172
|
const client = await accountset.client;
|
|
171
|
-
const resolvedTip = tip ? BigInt(tip *
|
|
172
|
-
const microgons = BigInt(argons *
|
|
173
|
+
const resolvedTip = tip ? BigInt(tip * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : 0n;
|
|
174
|
+
const microgons = BigInt(argons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON);
|
|
173
175
|
const rawVault = (await client.query.vaults.vaultsById(vaultId)).unwrap();
|
|
174
176
|
if (rawVault.operatorAccountId.toHuman() !== accountset.seedAddress) {
|
|
175
177
|
console.error("Vault does not belong to this account");
|
|
@@ -182,7 +184,7 @@ function vaultCli() {
|
|
|
182
184
|
microgons,
|
|
183
185
|
ratio !== void 0 ? BigNumber(ratio).times(BigNumber(2).pow(64)).toFixed(0) : rawVault.securitizationRatio.toBigInt()
|
|
184
186
|
);
|
|
185
|
-
const submit = new (0,
|
|
187
|
+
const submit = new (0, _chunkOFYVHBKGcjs.TxSubmitter)(client, tx, accountset.txSubmitterPair);
|
|
186
188
|
const canAfford = await submit.canAfford({
|
|
187
189
|
tip: resolvedTip,
|
|
188
190
|
unavailableBalance: additionalFunds
|
|
@@ -214,9 +216,9 @@ function vaultCli() {
|
|
|
214
216
|
}
|
|
215
217
|
const accountset = await accountsetFromCli(program);
|
|
216
218
|
const client = await accountset.client;
|
|
217
|
-
const resolvedTip = tip ? BigInt(tip *
|
|
218
|
-
const microgons = BigInt(argons *
|
|
219
|
-
const bitcoinLocks = new (0,
|
|
219
|
+
const resolvedTip = tip ? BigInt(tip * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : 0n;
|
|
220
|
+
const microgons = BigInt(argons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON);
|
|
221
|
+
const bitcoinLocks = new (0, _chunkOFYVHBKGcjs.BitcoinLocks)(Promise.resolve(client));
|
|
220
222
|
const existentialDeposit = client.consts.balances.existentialDeposit.toBigInt();
|
|
221
223
|
const tickDuration = (await client.query.ticks.genesisTicker()).tickDurationMillis.toNumber();
|
|
222
224
|
const rawVault = (await client.query.vaults.vaultsById(vaultId)).unwrap();
|
|
@@ -230,7 +232,7 @@ function vaultCli() {
|
|
|
230
232
|
rawVault.securitizationRatio.toBigInt()
|
|
231
233
|
);
|
|
232
234
|
const vaultTxFee = (await vaultModifyTx.paymentInfo(accountset.txSubmitterPair)).partialFee.toBigInt();
|
|
233
|
-
const vault = new (0,
|
|
235
|
+
const vault = new (0, _chunkOFYVHBKGcjs.Vault)(vaultId, rawVault, tickDuration);
|
|
234
236
|
const argonsNeeded = microgons - vault.securitization;
|
|
235
237
|
const argonsAvailable = microgons - vault.availableBitcoinSpace();
|
|
236
238
|
const account = await client.query.system.account(accountset.seedAddress);
|
|
@@ -245,7 +247,7 @@ function vaultCli() {
|
|
|
245
247
|
vault,
|
|
246
248
|
argonKeyring: accountset.txSubmitterPair,
|
|
247
249
|
satoshis,
|
|
248
|
-
ownerBitcoinPubkey:
|
|
250
|
+
ownerBitcoinPubkey: _util.hexToU8a.call(void 0, pubkey),
|
|
249
251
|
tip: resolvedTip,
|
|
250
252
|
reducedBalanceBy: argonsNeeded + vaultTxFee + resolvedTip
|
|
251
253
|
});
|
|
@@ -269,7 +271,7 @@ function vaultCli() {
|
|
|
269
271
|
btcFee,
|
|
270
272
|
resolvedTip
|
|
271
273
|
});
|
|
272
|
-
const txSubmitter = new (0,
|
|
274
|
+
const txSubmitter = new (0, _chunkOFYVHBKGcjs.TxSubmitter)(
|
|
273
275
|
client,
|
|
274
276
|
client.tx.utility.batchAll([vaultModifyTx, lockTx]),
|
|
275
277
|
accountset.txSubmitterPair
|
|
@@ -293,7 +295,7 @@ function miningCli() {
|
|
|
293
295
|
const program = new (0, _extratypings.Command)("mining").description("Watch mining seats or setup bidding");
|
|
294
296
|
program.command("list", { isDefault: true }).description("Monitor all miners").action(async () => {
|
|
295
297
|
const accountset = await accountsetFromCli(program);
|
|
296
|
-
const bids = new (0,
|
|
298
|
+
const bids = new (0, _chunkOFYVHBKGcjs.MiningBids)(accountset.client);
|
|
297
299
|
const api = await accountset.client;
|
|
298
300
|
let lastMiners = {};
|
|
299
301
|
function print(blockNumber) {
|
|
@@ -309,7 +311,7 @@ function miningCli() {
|
|
|
309
311
|
_consoletableprinter.printTable.call(void 0,
|
|
310
312
|
toPrint.map((x) => ({
|
|
311
313
|
...x,
|
|
312
|
-
bid: x.bid ?
|
|
314
|
+
bid: x.bid ? _chunkOFYVHBKGcjs.formatArgons.call(void 0, x.bid) : "-",
|
|
313
315
|
isLastDay: x.isLastDay ? "Y" : "",
|
|
314
316
|
miner: x.miner
|
|
315
317
|
}))
|
|
@@ -389,7 +391,7 @@ function miningCli() {
|
|
|
389
391
|
}) => {
|
|
390
392
|
const accountset = await accountsetFromCli(program, proxyForAddress);
|
|
391
393
|
let cohortBidder;
|
|
392
|
-
const miningBids = new (0,
|
|
394
|
+
const miningBids = new (0, _chunkOFYVHBKGcjs.MiningBids)(accountset.client, false);
|
|
393
395
|
const maxCohortSize = await miningBids.maxCohortSize();
|
|
394
396
|
const stopBidder = async (unsubscribe2) => {
|
|
395
397
|
if (cohortBidder) {
|
|
@@ -416,7 +418,7 @@ function miningCli() {
|
|
|
416
418
|
const balance = await accountset.balance();
|
|
417
419
|
const feeWiggleRoom = BigInt(25e3);
|
|
418
420
|
const amountAvailable = balance - feeWiggleRoom;
|
|
419
|
-
let maxBidAmount = maxBid ? BigInt(maxBid *
|
|
421
|
+
let maxBidAmount = maxBid ? BigInt(maxBid * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : void 0;
|
|
420
422
|
let maxBalanceToUse = amountAvailable;
|
|
421
423
|
if (maxBalance !== void 0) {
|
|
422
424
|
if (maxBalance.endsWith("%")) {
|
|
@@ -427,7 +429,7 @@ function miningCli() {
|
|
|
427
429
|
}
|
|
428
430
|
maxBalanceToUse = amountToBid;
|
|
429
431
|
} else {
|
|
430
|
-
maxBalanceToUse = BigInt(Math.floor(parseFloat(maxBalance) *
|
|
432
|
+
maxBalanceToUse = BigInt(Math.floor(parseFloat(maxBalance) * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON));
|
|
431
433
|
}
|
|
432
434
|
maxBidAmount ??= maxBalanceToUse / BigInt(seatsToWin);
|
|
433
435
|
}
|
|
@@ -442,10 +444,10 @@ function miningCli() {
|
|
|
442
444
|
if (cohortBidder && _optionalChain([cohortBidder, 'optionalAccess', _3 => _3.cohortStartingFrameId]) !== cohortStartingFrameId) {
|
|
443
445
|
await stopBidder(unsubscribe);
|
|
444
446
|
}
|
|
445
|
-
cohortBidder = new (0,
|
|
447
|
+
cohortBidder = new (0, _chunkOFYVHBKGcjs.CohortBidder)(accountset, cohortStartingFrameId, subaccountRange, {
|
|
446
448
|
maxBid: maxBidAmount,
|
|
447
|
-
minBid: BigInt((_nullishCoalesce(minBid, () => ( 0))) *
|
|
448
|
-
bidIncrement: BigInt(Math.floor(bidIncrement *
|
|
449
|
+
minBid: BigInt((_nullishCoalesce(minBid, () => ( 0))) * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON),
|
|
450
|
+
bidIncrement: BigInt(Math.floor(bidIncrement * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON)),
|
|
449
451
|
maxBudget: maxBalanceToUse,
|
|
450
452
|
bidDelay
|
|
451
453
|
});
|
|
@@ -463,7 +465,7 @@ function miningCli() {
|
|
|
463
465
|
parseFloat
|
|
464
466
|
).option("--proxy-passphrase <passphrase>", "The passphrase for your proxy account").action(async ({ outfile, proxyPassphrase, feeArgons }) => {
|
|
465
467
|
const { mainchainUrl } = globalOptions(program);
|
|
466
|
-
const client = await
|
|
468
|
+
const client = await _chunkOFYVHBKGcjs.getClient.call(void 0, mainchainUrl);
|
|
467
469
|
const keyringPair = await saveKeyringPair({
|
|
468
470
|
filePath: outfile,
|
|
469
471
|
passphrase: proxyPassphrase
|
|
@@ -472,7 +474,7 @@ function miningCli() {
|
|
|
472
474
|
console.log(`\u2705 Created proxy account at "${outfile}" with address ${address}`);
|
|
473
475
|
const tx = client.tx.utility.batchAll([
|
|
474
476
|
client.tx.proxy.addProxy(address, "MiningBid", 0),
|
|
475
|
-
client.tx.balances.transferAllowDeath(address, BigInt(feeArgons *
|
|
477
|
+
client.tx.balances.transferAllowDeath(address, BigInt(feeArgons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON))
|
|
476
478
|
]);
|
|
477
479
|
let keypair;
|
|
478
480
|
try {
|
|
@@ -484,7 +486,7 @@ function miningCli() {
|
|
|
484
486
|
process.exit(0);
|
|
485
487
|
}
|
|
486
488
|
try {
|
|
487
|
-
await new (0,
|
|
489
|
+
await new (0, _chunkOFYVHBKGcjs.TxSubmitter)(client, tx, keypair).submit({
|
|
488
490
|
waitForBlock: true
|
|
489
491
|
});
|
|
490
492
|
console.log("Mining bid proxy added and funded.");
|
|
@@ -503,14 +505,14 @@ function liquidityCli() {
|
|
|
503
505
|
const program = new (0, _extratypings.Command)("liquidity-pools").description("Monitor or bond to liquidity pools");
|
|
504
506
|
program.command("list", { isDefault: true }).description("Show or watch the vault bid pool rewards").action(async () => {
|
|
505
507
|
const accountset = await accountsetFromCli(program);
|
|
506
|
-
const bidPool = new (0,
|
|
508
|
+
const bidPool = new (0, _chunkOFYVHBKGcjs.BidPool)(accountset.client, accountset.txSubmitterPair);
|
|
507
509
|
await bidPool.watch();
|
|
508
510
|
});
|
|
509
511
|
program.command("bond").description("Bond argons to a liquidity pool").requiredOption("-v, --vault-id <id>", "The vault id to use", parseInt).requiredOption("-a, --argons <amount>", "The number of argons to set the vault to", parseFloat).option("--tip <amount>", "The tip to include with the transaction", parseFloat).action(async ({ tip, argons, vaultId }) => {
|
|
510
512
|
const accountset = await accountsetFromCli(program);
|
|
511
|
-
const resolvedTip = tip ? BigInt(tip *
|
|
512
|
-
const microgons = BigInt(argons *
|
|
513
|
-
const bidPool = new (0,
|
|
513
|
+
const resolvedTip = tip ? BigInt(tip * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : 0n;
|
|
514
|
+
const microgons = BigInt(argons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON);
|
|
515
|
+
const bidPool = new (0, _chunkOFYVHBKGcjs.BidPool)(accountset.client, accountset.txSubmitterPair);
|
|
514
516
|
await bidPool.bondArgons(vaultId, microgons, { tip: resolvedTip });
|
|
515
517
|
console.log("Bonded argons to liquidity pool bond");
|
|
516
518
|
process.exit();
|
|
@@ -521,17 +523,17 @@ function liquidityCli() {
|
|
|
521
523
|
parseInt,
|
|
522
524
|
30
|
|
523
525
|
).option("--tip <amount>", "The tip to include with the transaction", parseFloat).action(async ({ maxArgons, minPctSharing, tip }) => {
|
|
524
|
-
const maxAmountPerSlot = BigInt(maxArgons *
|
|
526
|
+
const maxAmountPerSlot = BigInt(maxArgons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON);
|
|
525
527
|
const accountset = await accountsetFromCli(program);
|
|
526
|
-
const vaults = new (0,
|
|
528
|
+
const vaults = new (0, _chunkOFYVHBKGcjs.VaultMonitor)(
|
|
527
529
|
accountset,
|
|
528
530
|
{
|
|
529
531
|
liquidityPoolSpaceAvailable: 1000000n
|
|
530
532
|
},
|
|
531
533
|
{ shouldLog: false }
|
|
532
534
|
);
|
|
533
|
-
const bidPool = new (0,
|
|
534
|
-
const resolvedTip = tip ? BigInt(tip *
|
|
535
|
+
const bidPool = new (0, _chunkOFYVHBKGcjs.BidPool)(accountset.client, accountset.txSubmitterPair);
|
|
536
|
+
const resolvedTip = tip ? BigInt(tip * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : 0n;
|
|
535
537
|
console.log("Waiting for liquidity pool space...");
|
|
536
538
|
vaults.events.on("liquidity-pool-space-above", async (vaultId, amount) => {
|
|
537
539
|
const vault = vaults.vaultsById[vaultId];
|
|
@@ -548,7 +550,7 @@ function liquidityCli() {
|
|
|
548
550
|
await bidPool.bondArgons(vaultId, amountToAdd, { tip: resolvedTip });
|
|
549
551
|
console.log("Bonding argons to vault liquidity pool", {
|
|
550
552
|
vaultId,
|
|
551
|
-
amount:
|
|
553
|
+
amount: _chunkOFYVHBKGcjs.formatArgons.call(void 0, amountToAdd)
|
|
552
554
|
});
|
|
553
555
|
});
|
|
554
556
|
await vaults.monitor();
|
|
@@ -566,15 +568,15 @@ function bitcoinCli() {
|
|
|
566
568
|
parseFloat
|
|
567
569
|
).description("Watch for bitcoin space available").action(async ({ argons }) => {
|
|
568
570
|
const accountset = await accountsetFromCli(program);
|
|
569
|
-
const bot = new (0,
|
|
570
|
-
bitcoinSpaceAvailable: argons ? BigInt(argons *
|
|
571
|
+
const bot = new (0, _chunkOFYVHBKGcjs.VaultMonitor)(accountset, {
|
|
572
|
+
bitcoinSpaceAvailable: argons ? BigInt(argons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : 1n
|
|
571
573
|
});
|
|
572
574
|
bot.events.on("bitcoin-space-above", async (vaultId, amount) => {
|
|
573
575
|
const vault = bot.vaultsById[vaultId];
|
|
574
576
|
const fee = vault.calculateBitcoinFee(amount);
|
|
575
577
|
const ratio = 100n * fee / amount;
|
|
576
578
|
console.log(
|
|
577
|
-
`Vault ${vaultId} has ${
|
|
579
|
+
`Vault ${vaultId} has ${_chunkOFYVHBKGcjs.formatArgons.call(void 0, amount)} argons available for bitcoin. Fee ratio is ${ratio}%`
|
|
578
580
|
);
|
|
579
581
|
});
|
|
580
582
|
await bot.monitor();
|
|
@@ -584,18 +586,18 @@ function bitcoinCli() {
|
|
|
584
586
|
"Bitcoin argons needed. NOTE: your account must have enough to cover fees + tip after this amount.",
|
|
585
587
|
parseFloat
|
|
586
588
|
).requiredOption("--bitcoin-xpub <xpub>", "The xpub key to use for bitcoin locking").option("--max-lock-fee <argons>", "The max lock fee you're willing to pay", parseFloat).option("--tip <amount>", "The tip to include with the transaction", parseFloat, 0).action(async ({ argons, bitcoinXpub, maxLockFee, tip }) => {
|
|
587
|
-
const amountToLock = BigInt(argons *
|
|
589
|
+
const amountToLock = BigInt(argons * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON);
|
|
588
590
|
const accountset = await accountsetFromCli(program);
|
|
589
|
-
await
|
|
591
|
+
await _chunkOFYVHBKGcjs.BitcoinLocks.waitForSpace(accountset, {
|
|
590
592
|
argonAmount: amountToLock,
|
|
591
593
|
bitcoinXpub,
|
|
592
|
-
maxLockFee: maxLockFee !== void 0 ? BigInt(maxLockFee *
|
|
593
|
-
tip: BigInt(tip *
|
|
594
|
+
maxLockFee: maxLockFee !== void 0 ? BigInt(maxLockFee * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON) : void 0,
|
|
595
|
+
tip: BigInt(tip * _chunkOFYVHBKGcjs.MICROGONS_PER_ARGON)
|
|
594
596
|
}).then(({ vaultId, satoshis, txFee, securityFee }) => {
|
|
595
597
|
console.log(
|
|
596
|
-
`Locked ${satoshis} satoshis in vault ${vaultId}. Tx fee=${
|
|
598
|
+
`Locked ${satoshis} satoshis in vault ${vaultId}. Tx fee=${_chunkOFYVHBKGcjs.formatArgons.call(void 0,
|
|
597
599
|
txFee
|
|
598
|
-
)}, Lock fee=${
|
|
600
|
+
)}, Lock fee=${_chunkOFYVHBKGcjs.formatArgons.call(void 0, securityFee)}.`
|
|
599
601
|
);
|
|
600
602
|
process.exit(0);
|
|
601
603
|
});
|
|
@@ -620,13 +622,13 @@ async function keyringFromFile(opts) {
|
|
|
620
622
|
const passphrasePath = opts.passphraseFile.replace("~", os.homedir());
|
|
621
623
|
passphrase = await readFile(passphrasePath, "utf-8");
|
|
622
624
|
}
|
|
623
|
-
const mainAccount = new (0,
|
|
625
|
+
const mainAccount = new (0, _chunkOFYVHBKGcjs.Keyring)().createFromJson(json);
|
|
624
626
|
mainAccount.decodePkcs8(passphrase);
|
|
625
627
|
return mainAccount;
|
|
626
628
|
}
|
|
627
629
|
async function saveKeyringPair(opts) {
|
|
628
630
|
const { filePath, passphrase, cryptoType } = opts;
|
|
629
|
-
const keyring =
|
|
631
|
+
const keyring = _chunkOFYVHBKGcjs.createKeyringPair.call(void 0, { cryptoType });
|
|
630
632
|
if (filePath) {
|
|
631
633
|
const json = keyring.toJson(passphrase);
|
|
632
634
|
await writeFile(filePath, JSON.stringify(json, null, 2));
|
|
@@ -660,14 +662,14 @@ function buildCli() {
|
|
|
660
662
|
new (0, _extratypings.Option)(
|
|
661
663
|
"-s, --subaccounts <range>",
|
|
662
664
|
"Restrict this operation to a subset of the subaccounts (eg, 0-10)"
|
|
663
|
-
).env("SUBACCOUNT_RANGE").argParser(
|
|
665
|
+
).env("SUBACCOUNT_RANGE").argParser(_chunkOFYVHBKGcjs.parseSubaccountRange)
|
|
664
666
|
).addCommand(accountCli()).addCommand(vaultCli()).addCommand(miningCli()).addCommand(liquidityCli()).addCommand(bitcoinCli());
|
|
665
667
|
}
|
|
666
668
|
async function accountsetFromCli(program, proxyForAddress) {
|
|
667
669
|
const opts = _optionalChain([program, 'access', _4 => _4.parent, 'optionalAccess', _5 => _5.optsWithGlobals, 'call', _6 => _6()]);
|
|
668
670
|
let keypair;
|
|
669
671
|
if (opts.accountSuri) {
|
|
670
|
-
keypair =
|
|
672
|
+
keypair = _chunkOFYVHBKGcjs.keyringFromSuri.call(void 0, opts.accountSuri);
|
|
671
673
|
}
|
|
672
674
|
if (opts.accountFilePath) {
|
|
673
675
|
keypair = await keyringFromFile({
|
|
@@ -681,16 +683,16 @@ async function accountsetFromCli(program, proxyForAddress) {
|
|
|
681
683
|
"No ACCOUNT account loaded (either ACCOUNT_SURI or ACCOUNT_JSON_PATH required)"
|
|
682
684
|
);
|
|
683
685
|
}
|
|
684
|
-
const client =
|
|
686
|
+
const client = _chunkOFYVHBKGcjs.getClient.call(void 0, opts.mainchainUrl);
|
|
685
687
|
if (proxyForAddress) {
|
|
686
|
-
return new (0,
|
|
688
|
+
return new (0, _chunkOFYVHBKGcjs.Accountset)({
|
|
687
689
|
client,
|
|
688
690
|
isProxy: true,
|
|
689
691
|
seedAddress: proxyForAddress,
|
|
690
692
|
txSubmitter: keypair
|
|
691
693
|
});
|
|
692
694
|
} else {
|
|
693
|
-
return new (0,
|
|
695
|
+
return new (0, _chunkOFYVHBKGcjs.Accountset)({
|
|
694
696
|
seedAccount: keypair,
|
|
695
697
|
client
|
|
696
698
|
});
|
|
@@ -738,4 +740,4 @@ function applyEnv(program) {
|
|
|
738
740
|
|
|
739
741
|
|
|
740
742
|
exports.accountCli = accountCli; exports.vaultCli = vaultCli; exports.miningCli = miningCli; exports.liquidityCli = liquidityCli; exports.bitcoinCli = bitcoinCli; exports.keyringFromFile = keyringFromFile; exports.saveKeyringPair = saveKeyringPair; exports.globalOptions = globalOptions; exports.buildCli = buildCli; exports.accountsetFromCli = accountsetFromCli; exports.addGlobalArgs = addGlobalArgs; exports.applyEnv = applyEnv;
|
|
741
|
-
//# sourceMappingURL=chunk-
|
|
743
|
+
//# sourceMappingURL=chunk-IQ3TNLS7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/mainchain/mainchain/client/nodejs/lib/chunk-IQ3TNLS7.cjs","../src/clis/index.ts","../src/clis/accountCli.ts","../src/clis/vaultCli.ts","../src/clis/miningCli.ts","../src/clis/liquidityCli.ts","../src/clis/bitcoinCli.ts","../src/clis/keyringStore.ts"],"names":["addresses","Command","printTable","unsubscribe","env"],"mappings":"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A;AACY,IAAA;AAEZ,EAAA;AACK,IAAA;AACF,MAAA;AACA,MAAA;AAEK,IAAA;AAGG,EAAA;AAKhB;AAEsB;AAIP,EAAA;AAET,EAAA;AACK,EAAA;AACG,IAAA;AACZ,EAAA;AACS,EAAA;AACS,IAAA;AACC,MAAA;AACH,MAAA;AACI,MAAA;AACjB,IAAA;AACH,EAAA;AACc,EAAA;AACF,IAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AAEe,EAAA;AACX,EAAA;AACS,IAAA;AACT,MAAA;AACS,MAAA;AACI,MAAA;AACA,MAAA;AACd,IAAA;AACI,EAAA;AACM,IAAA;AACI,MAAA;AACb,MAAA;AACD,IAAA;AACH,EAAA;AACF;AAIgB;AACH,EAAA;AACD,IAAA;AACN,MAAA;AACD,IAAA;AACU,IAAA;AACF,MAAA;AACL,QAAA;AACD,MAAA;AACH,IAAA;AACF,EAAA;AACF;AAEyB;AACf,EAAA;AACI,EAAA;AACH,EAAA;AACS,IAAA;AACJ,IAAA;AACI,IAAA;AAEF,MAAA;AACG,QAAA;AACD,QAAA;AACd,MAAA;AACF,IAAA;AACF,EAAA;AACOG,EAAAA;AACT;AD8kBsB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/mainchain/mainchain/client/nodejs/lib/chunk-IQ3TNLS7.cjs","sourcesContent":[null,"import { Command, Option } from '@commander-js/extra-typings';\nimport accountCli from './accountCli';\nimport { configDotenv } from 'dotenv';\nimport Path from 'node:path';\nimport vaultCli from './vaultCli';\nimport miningCli from './miningCli';\nimport liquidityCli from './liquidityCli';\nimport bitcoinCli from './bitcoinCli';\nimport { Accountset, parseSubaccountRange } from '../Accountset';\nimport { getClient, keyringFromSuri, KeyringPair } from '../index';\nimport { keyringFromFile, saveKeyringPair } from './keyringStore';\n\nexport {\n accountCli,\n vaultCli,\n miningCli,\n liquidityCli,\n bitcoinCli,\n keyringFromFile,\n saveKeyringPair,\n};\n\nexport function globalOptions(program: Command) {\n return program.optsWithGlobals() as IGlobalOptions;\n}\n\nexport function buildCli() {\n return new Command('Argon CLI')\n .option('-e, --env <path>', 'The path to the account .env file to load')\n .addOption(\n new Option('-u, --mainchain-url <url>', 'The mainchain URL to connect to')\n .default('wss://rpc.argon.network')\n .env('MAINCHAIN_URL'),\n )\n .addOption(\n new Option(\n '--account-file-path <jsonPath>',\n 'The path to your json seed file from polkadotjs',\n ).env('ACCOUNT_JSON_PATH'),\n )\n .addOption(\n new Option('--account-suri <secretUri>', 'A secret uri (suri) to use for the account').env(\n 'ACCOUNT_SURI',\n ),\n )\n .addOption(\n new Option('--account-passphrase <password>', 'The password for your seed file').env(\n 'ACCOUNT_PASSPHRASE',\n ),\n )\n .addOption(\n new Option('--account-passphrase-file <path>', 'The path to a password for your seed file'),\n )\n .addOption(\n new Option(\n '-s, --subaccounts <range>',\n 'Restrict this operation to a subset of the subaccounts (eg, 0-10)',\n )\n .env('SUBACCOUNT_RANGE')\n .argParser(parseSubaccountRange),\n )\n .addCommand(accountCli())\n .addCommand(vaultCli())\n .addCommand(miningCli())\n .addCommand(liquidityCli())\n .addCommand(bitcoinCli());\n}\n\nexport async function accountsetFromCli(\n program: Command,\n proxyForAddress?: string,\n): Promise<Accountset> {\n const opts = program.parent?.optsWithGlobals() as unknown as IGlobalOptions;\n\n let keypair: KeyringPair | undefined;\n if (opts.accountSuri) {\n keypair = keyringFromSuri(opts.accountSuri!);\n }\n if (opts.accountFilePath) {\n keypair = await keyringFromFile({\n filePath: opts.accountFilePath,\n passphrase: opts.accountPassphrase,\n passphraseFile: opts.accountPassphraseFile,\n });\n }\n if (!keypair) {\n throw new Error(\n 'No ACCOUNT account loaded (either ACCOUNT_SURI or ACCOUNT_JSON_PATH required)',\n );\n }\n\n const client = getClient(opts.mainchainUrl);\n if (proxyForAddress) {\n return new Accountset({\n client,\n isProxy: true,\n seedAddress: proxyForAddress,\n txSubmitter: keypair,\n });\n } else {\n return new Accountset({\n seedAccount: keypair,\n client,\n });\n }\n}\n\nexport type IGlobalOptions = ReturnType<ReturnType<typeof buildCli>['opts']>;\n\nexport function addGlobalArgs(program: ReturnType<typeof buildCli>) {\n for (const command of program.commands) {\n command.configureHelp({\n showGlobalOptions: true,\n });\n for (const nested of command.commands) {\n nested.configureHelp({\n showGlobalOptions: true,\n });\n }\n }\n}\n\nexport function applyEnv(program: ReturnType<typeof buildCli>): string | undefined {\n program.parseOptions(process.argv);\n const { env } = program.optsWithGlobals();\n if (env) {\n const envPath = Path.resolve(process.cwd(), env);\n const res = configDotenv({ path: envPath });\n if (res.parsed?.ACCOUNT_JSON_PATH) {\n // ensure path is relative to the env file if provided that way\n process.env.ACCOUNT_JSON_PATH = Path.resolve(\n Path.dirname(envPath),\n process.env.ACCOUNT_JSON_PATH!,\n );\n }\n }\n return env;\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { filterUndefined, mnemonicGenerate } from '../index';\nimport { printTable } from 'console-table-printer';\nimport { cryptoWaitReady } from '@polkadot/util-crypto';\nimport { writeFileSync } from 'node:fs';\nimport { parseSubaccountRange } from '../Accountset';\nimport Env from '../env';\nimport * as process from 'node:process';\nimport { accountsetFromCli, globalOptions } from './index';\n\nexport default function accountCli() {\n const program = new Command('accounts').description('Manage subaccounts from a single keypair');\n\n program\n .command('watch')\n .description('Watch for blocks closed by subaccounts')\n .action(async () => {\n const accountset = await accountsetFromCli(program);\n const accountMiners = await accountset.watchBlocks();\n\n accountMiners.events.on('mined', (_block, mined) => {\n console.log('Your accounts authored a block', mined);\n });\n accountMiners.events.on('minted', (_block, minted) => {\n console.log('Your accounts minted argons', minted);\n });\n });\n\n program\n .command('list', { isDefault: true })\n .description('Show subaccounts')\n .option('--addresses', 'Just show a list of ids')\n .action(async ({ addresses }) => {\n const { subaccounts } = globalOptions(program);\n const accountset = await accountsetFromCli(program);\n\n if (addresses) {\n const addresses = accountset.addresses;\n console.log(addresses.join(','));\n process.exit(0);\n }\n const [argonots, argons, seats, bids] = await Promise.all([\n accountset.totalArgonotsAt(),\n accountset.totalArgonsAt(),\n accountset.miningSeats(),\n accountset.bids(),\n ]);\n const accountSubset = subaccounts ? accountset.getAccountsInRange(subaccounts) : undefined;\n const status = accountset.status({\n argons,\n argonots,\n accountSubset,\n seats,\n bids,\n });\n printTable(status);\n process.exit(0);\n });\n\n program\n .command('create')\n .description('Create an account \"env\" file and optionally register keys')\n .requiredOption(\n '--path <path>',\n 'The path to an env file to create (convention is .env.<name>)',\n )\n .option('--register-keys-to <url>', 'Register the keys to a url (normally this is localhost)')\n .action(async ({ registerKeysTo, path }) => {\n const { accountPassphrase, accountSuri, accountFilePath } = globalOptions(program);\n const accountset = await accountsetFromCli(program);\n process.env.KEYS_MNEMONIC ||= mnemonicGenerate();\n if (registerKeysTo) {\n await accountset.registerKeys(registerKeysTo);\n console.log('Keys registered to', registerKeysTo);\n }\n const envData = filterUndefined<Env>({\n ACCOUNT_JSON_PATH: accountFilePath,\n ACCOUNT_SURI: accountSuri,\n ACCOUNT_PASSPHRASE: accountPassphrase,\n KEYS_MNEMONIC: process.env.KEYS_MNEMONIC,\n SUBACCOUNT_RANGE: '0-49',\n });\n let envfile = '';\n for (const [key, value] of Object.entries(envData)) {\n if (key) {\n const line = `${key}=${String(value)}`;\n envfile += line + '\\n';\n }\n }\n writeFileSync(path, envfile);\n console.log('Created env file at', path);\n process.exit();\n });\n\n program\n .command('new-key-seed')\n .description('Create a new mnemonic for runtime keys')\n .action(async () => {\n await cryptoWaitReady();\n const mnemonic = mnemonicGenerate();\n console.log('New mnemonic (add this to your .env as KEYS_MNEMONIC):', mnemonic);\n process.exit(0);\n });\n\n program\n .command('register-keys')\n .description('Create an insert-keys script with curl')\n .argument(\n '[node-rpc-url]',\n 'The url to your node host (should be installed on machine via localhost)',\n 'http://localhost:9944',\n )\n .option('--print-only', 'Output as curl commands instead of direct registration')\n .action(async (nodeRpcUrl, { printOnly }) => {\n const accountset = await accountsetFromCli(program);\n if (printOnly) {\n const { gran, seal } = accountset.keys();\n const commands: string[] = [];\n const data = [\n {\n jsonrpc: '2.0',\n id: 0,\n method: 'author_insertKey',\n params: ['gran', gran.privateKey, gran.publicKey],\n },\n {\n jsonrpc: '2.0',\n id: 1,\n method: 'author_insertKey',\n params: ['seal', seal.privateKey, seal.publicKey],\n },\n ];\n for (const key of data) {\n commands.push(\n `curl -X POST -H \"Content-Type: application/json\" -d '${JSON.stringify(key)}' ${nodeRpcUrl}`,\n );\n }\n\n console.log(commands.join(' && '));\n } else {\n await accountset.registerKeys(nodeRpcUrl);\n }\n process.exit();\n });\n\n program\n .command('consolidate')\n .description('Consolidate all argons into parent account')\n .option(\n '-s, --subaccounts <range>',\n 'Restrict this operation to a subset of the subaccounts (eg, 0-10)',\n parseSubaccountRange,\n )\n .action(async ({ subaccounts }) => {\n const accountset = await accountsetFromCli(program);\n const result = await accountset.consolidate(subaccounts);\n printTable(result);\n process.exit(0);\n });\n return program;\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { VaultMonitor } from '../VaultMonitor';\nimport { TxSubmitter } from '../TxSubmitter';\nimport { Vault } from '../Vault';\nimport { BitcoinLocks } from '../BitcoinLocks';\nimport { accountsetFromCli } from './index';\nimport { MICROGONS_PER_ARGON } from '../utils';\nimport { hexToU8a } from '@polkadot/util';\n\nexport default function vaultCli() {\n const program = new Command('vaults').description('Monitor vaults and manage securitization');\n\n program\n .command('list', { isDefault: true })\n .description('Show current state of vaults')\n .action(async () => {\n const accountset = await accountsetFromCli(program);\n const vaults = new VaultMonitor(accountset, undefined, {\n vaultOnlyWatchMode: true,\n });\n await vaults.monitor(true);\n process.exit(0);\n });\n\n program\n .command('modify-securitization')\n .description('Change the vault securitization ratio')\n .requiredOption('-v, --vault-id <id>', 'The vault id to use', parseInt)\n .requiredOption(\n '-a, --argons <amount>',\n 'The number of argons to set as securitization',\n parseFloat,\n )\n .option('--ratio <ratio>', 'The new securitization ratio', parseFloat)\n .option('--tip <amount>', 'The tip to include with the transaction', parseFloat)\n .action(async ({ tip, argons, vaultId, ratio }) => {\n const accountset = await accountsetFromCli(program);\n const client = await accountset.client;\n const resolvedTip = tip ? BigInt(tip * MICROGONS_PER_ARGON) : 0n;\n const microgons = BigInt(argons * MICROGONS_PER_ARGON);\n\n const rawVault = (await client.query.vaults.vaultsById(vaultId)).unwrap();\n if (rawVault.operatorAccountId.toHuman() !== accountset.seedAddress) {\n console.error('Vault does not belong to this account');\n process.exit(1);\n }\n const existingFunds = rawVault.securitization.toBigInt();\n const additionalFunds = microgons > existingFunds ? microgons - existingFunds : 0n;\n const tx = client.tx.vaults.modifyFunding(\n vaultId,\n microgons,\n ratio !== undefined\n ? BigNumber(ratio).times(BigNumber(2).pow(64)).toFixed(0)\n : rawVault.securitizationRatio.toBigInt(),\n );\n const submit = new TxSubmitter(client, tx, accountset.txSubmitterPair);\n const canAfford = await submit.canAfford({\n tip: resolvedTip,\n unavailableBalance: additionalFunds,\n });\n if (!canAfford.canAfford) {\n console.warn('Insufficient balance to modify vault securitization', {\n ...canAfford,\n addedSecuritization: additionalFunds,\n });\n process.exit(1);\n }\n try {\n const result = await submit.submit({ tip: resolvedTip });\n await result.inBlockPromise;\n console.log('Vault securitization modified');\n process.exit();\n } catch (error) {\n console.error('Error modifying vault securitization', error);\n process.exit(1);\n }\n });\n\n program\n .command('make-bitcoin-space')\n .description('Make bitcoin space in a vault and lock it immediately in the same tx.')\n .requiredOption('-v, --vault-id <id>', 'The vault id to use', parseInt)\n .requiredOption('-a, --argons <amount>', 'The number of argons to add', parseFloat)\n .requiredOption('--bitcoin-pubkey <pubkey>', 'The pubkey to use for the bitcoin lock')\n .option('--tip <amount>', 'The tip to include with the transaction', parseFloat)\n .action(async ({ tip, argons, vaultId, bitcoinPubkey }) => {\n let pubkey = bitcoinPubkey;\n if (!bitcoinPubkey.startsWith('0x')) {\n pubkey = `0x${bitcoinPubkey}`;\n }\n if (pubkey.length !== 68) {\n throw new Error('Bitcoin pubkey must be 66 characters (add 0x in front optionally)');\n }\n const accountset = await accountsetFromCli(program);\n const client = await accountset.client;\n const resolvedTip = tip ? BigInt(tip * MICROGONS_PER_ARGON) : 0n;\n const microgons = BigInt(argons * MICROGONS_PER_ARGON);\n const bitcoinLocks = new BitcoinLocks(Promise.resolve(client));\n const existentialDeposit = client.consts.balances.existentialDeposit.toBigInt();\n const tickDuration = (await client.query.ticks.genesisTicker()).tickDurationMillis.toNumber();\n\n const rawVault = (await client.query.vaults.vaultsById(vaultId)).unwrap();\n if (rawVault.operatorAccountId.toHuman() !== accountset.seedAddress) {\n console.error('Vault does not belong to this account');\n process.exit(1);\n }\n const vaultModifyTx = client.tx.vaults.modifyFunding(\n vaultId,\n microgons,\n rawVault.securitizationRatio.toBigInt(),\n );\n const vaultTxFee = (\n await vaultModifyTx.paymentInfo(accountset.txSubmitterPair)\n ).partialFee.toBigInt();\n const vault = new Vault(vaultId, rawVault, tickDuration);\n\n const argonsNeeded = microgons - vault.securitization;\n const argonsAvailable = microgons - vault.availableBitcoinSpace();\n\n const account = await client.query.system.account(accountset.seedAddress);\n const freeBalance = account.data.free.toBigInt();\n let satoshis = await bitcoinLocks.requiredSatoshisForArgonLiquidity(argonsAvailable);\n satoshis -= 100n; // keep some wiggle room since price can change\n const {\n tx: lockTx,\n securityFee: btcFee,\n txFee,\n } = await bitcoinLocks.createInitializeLockTx({\n vault,\n argonKeyring: accountset.txSubmitterPair,\n satoshis,\n ownerBitcoinPubkey: hexToU8a(pubkey),\n tip: resolvedTip,\n reducedBalanceBy: argonsNeeded + vaultTxFee + resolvedTip,\n });\n if (\n argonsNeeded + txFee + vaultTxFee + resolvedTip + btcFee + existentialDeposit >\n freeBalance\n ) {\n console.warn('Insufficient balance to add bitcoin space and use bitcoins', {\n freeBalance,\n txFee,\n vaultTxFee,\n btcFee,\n argonsAvailable,\n vaultMicrogons: microgons,\n existentialDeposit,\n neededBalanceAboveED: argonsNeeded + txFee + resolvedTip + btcFee + vaultTxFee,\n });\n process.exit(1);\n }\n console.log('Adding bitcoin space and locking bitcoins...', {\n newArgonsAvailable: argonsAvailable,\n txFee,\n vaultTxFee,\n btcFee,\n resolvedTip,\n });\n\n const txSubmitter = new TxSubmitter(\n client,\n client.tx.utility.batchAll([vaultModifyTx, lockTx]),\n accountset.txSubmitterPair,\n );\n const result = await txSubmitter.submit({ tip: resolvedTip });\n try {\n await result.inBlockPromise;\n console.log('Bitcoin space done');\n } catch (error) {\n console.error('Error using bitcoin space', error);\n process.exit(1);\n }\n });\n return program;\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { getClient, type KeyringPair, MICROGONS_PER_ARGON } from '../index';\nimport { printTable } from 'console-table-printer';\nimport { MiningBids } from '../MiningBids';\nimport { formatArgons } from '../utils';\nimport { TxSubmitter } from '../TxSubmitter';\nimport { accountsetFromCli, globalOptions, saveKeyringPair } from './index';\nimport { CohortBidder } from '../CohortBidder';\n\nexport default function miningCli() {\n const program = new Command('mining').description('Watch mining seats or setup bidding');\n\n program\n .command('list', { isDefault: true })\n .description('Monitor all miners')\n .action(async () => {\n const accountset = await accountsetFromCli(program);\n const bids = new MiningBids(accountset.client);\n const api = await accountset.client;\n let lastMiners: {\n [frameId: string]: {\n miner: string;\n bid?: bigint;\n isLastDay?: boolean;\n };\n } = {};\n\n function print(blockNumber: number) {\n console.clear();\n const toPrint = Object.entries(lastMiners).map(([seat, miner]) => ({\n seat,\n ...miner,\n }));\n if (!toPrint.length) {\n console.log('No active miners');\n } else {\n console.log(`Miners at block ${blockNumber}`);\n printTable(\n toPrint.map(x => ({\n ...x,\n bid: x.bid ? formatArgons(x.bid) : '-',\n isLastDay: x.isLastDay ? 'Y' : '',\n miner: x.miner,\n })),\n );\n }\n if (!bids.nextCohort.length) {\n console.log('-------------------------------------\\nNo bids for next cohort');\n } else {\n bids.print();\n }\n }\n\n const { unsubscribe } = await bids.watch(accountset.namedAccounts, undefined, print);\n console.log('Watching miners...');\n const minMiners = api.consts.miningSlot.minCohortSize.toNumber();\n\n const unsub = await api.query.miningSlot.nextFrameId(async nextFrameId => {\n const frames = new Array(nextFrameId.toNumber())\n .fill(0)\n .map((_, i) => nextFrameId.toNumber() - i)\n .sort();\n const unseenFrames = new Set(frames);\n const entries = await api.query.miningSlot.minersByCohort.entries();\n const block = await api.query.system.number();\n\n const sortedEntries = entries.sort((a, b) => {\n const aIndex = a[0].args[0].toNumber();\n const bIndex = b[0].args[0].toNumber();\n return aIndex - bIndex;\n });\n\n for (const [rawFrameId, miners] of sortedEntries) {\n const frameId = rawFrameId.args[0].toNumber();\n unseenFrames.delete(frameId);\n let i = 0;\n for (const miner of miners) {\n const address = miner.accountId.toHuman();\n const startingFrameId = miner.startingFrameId.toNumber();\n lastMiners[`${frameId}-${i}`] = {\n miner: accountset.namedAccounts.get(address) ?? address,\n bid: miner.bid.toBigInt(),\n isLastDay: nextFrameId.toNumber() - startingFrameId === 10,\n };\n i++;\n }\n while (i < minMiners) {\n lastMiners[`${frameId}-${i}`] = {\n miner: 'none',\n };\n i++;\n }\n }\n for (const frameId of unseenFrames) {\n for (let i = 0; i < minMiners; i++) {\n lastMiners[`${frameId}-${i}`] = {\n miner: 'none',\n };\n }\n }\n print(block.toNumber());\n });\n process.on('SIGINT', () => {\n unsubscribe();\n unsub();\n process.exit(0);\n });\n });\n\n program\n .command('bid')\n .description('Submit mining bids within a range of parameters')\n .option('--min-bid <amount>', 'The minimum bid amount to use', parseFloat)\n .option('--max-bid <amount>', 'The maximum bid amount to use', parseFloat)\n .option('--max-seats <n>', 'The maximum number of seats to bid on for the slot', parseInt)\n .option(\n '--max-balance <argons>',\n \"Use a maximum amount of the user's balance for the slot. If this ends in a percent, it will be a percent of the funds\",\n )\n .option('--bid-increment <argons>', 'The bid increment', parseFloat, 0.01)\n .option('--bid-delay <ticks>', 'Delay between bids in ticks', parseInt, 0)\n .option('--run-continuous', 'Keep running and rebid every day')\n .option(\n '--proxy-for-address <address>',\n 'The seed account to proxy for (eg: 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty)',\n )\n .action(\n async ({\n maxSeats,\n runContinuous,\n maxBid,\n minBid,\n maxBalance,\n bidDelay,\n bidIncrement,\n proxyForAddress,\n }) => {\n const accountset = await accountsetFromCli(program, proxyForAddress);\n\n let cohortBidder: CohortBidder | undefined;\n const miningBids = new MiningBids(accountset.client, false);\n const maxCohortSize = await miningBids.maxCohortSize();\n\n const stopBidder = async (unsubscribe: () => void) => {\n if (cohortBidder) {\n const stats = await cohortBidder.stop();\n console.log('Final bidding result', {\n cohortStartingFrameId: cohortBidder.cohortStartingFrameId,\n ...stats,\n });\n cohortBidder = undefined;\n if (!runContinuous) {\n unsubscribe();\n process.exit();\n }\n }\n };\n const { unsubscribe } = await miningBids.onCohortChange({\n async onBiddingEnd(cohortStartingFrameId) {\n if (cohortBidder?.cohortStartingFrameId === cohortStartingFrameId) {\n await stopBidder(unsubscribe);\n }\n },\n async onBiddingStart(cohortStartingFrameId) {\n const seatsToWin = maxSeats ?? maxCohortSize;\n const balance = await accountset.balance();\n const feeWiggleRoom = BigInt(25e3);\n const amountAvailable = balance - feeWiggleRoom;\n let maxBidAmount = maxBid ? BigInt(maxBid * MICROGONS_PER_ARGON) : undefined;\n let maxBalanceToUse = amountAvailable;\n if (maxBalance !== undefined) {\n if (maxBalance!.endsWith('%')) {\n let maxBalancePercent = parseInt(maxBalance);\n let amountToBid = (amountAvailable * BigInt(maxBalancePercent)) / 100n;\n if (amountToBid > balance) {\n amountToBid = balance;\n }\n maxBalanceToUse = amountToBid;\n } else {\n maxBalanceToUse = BigInt(Math.floor(parseFloat(maxBalance) * MICROGONS_PER_ARGON));\n }\n\n maxBidAmount ??= maxBalanceToUse / BigInt(seatsToWin);\n }\n if (maxBalanceToUse > amountAvailable) {\n maxBalanceToUse = amountAvailable;\n }\n if (!maxBidAmount) {\n console.error('No max bid amount set');\n process.exit(1);\n }\n const subaccountRange = await accountset.getAvailableMinerAccounts(seatsToWin);\n\n if (cohortBidder && cohortBidder?.cohortStartingFrameId !== cohortStartingFrameId) {\n await stopBidder(unsubscribe);\n }\n cohortBidder = new CohortBidder(accountset, cohortStartingFrameId, subaccountRange, {\n maxBid: maxBidAmount,\n minBid: BigInt((minBid ?? 0) * MICROGONS_PER_ARGON),\n bidIncrement: BigInt(Math.floor(bidIncrement * MICROGONS_PER_ARGON)),\n maxBudget: maxBalanceToUse,\n bidDelay,\n });\n await cohortBidder.start();\n },\n });\n },\n );\n\n program\n .command('create-bid-proxy')\n .description('Create a mining-bid proxy account for your main account')\n .requiredOption(\n '--outfile <path>',\n 'The file to use to store the proxy account json (eg: proxy.json)',\n )\n .requiredOption(\n '--fee-argons <argons>',\n 'How many argons should be sent to the proxy account for fees (proxies must pay fees)',\n parseFloat,\n )\n .option('--proxy-passphrase <passphrase>', 'The passphrase for your proxy account')\n .action(async ({ outfile, proxyPassphrase, feeArgons }) => {\n const { mainchainUrl } = globalOptions(program);\n const client = await getClient(mainchainUrl);\n\n const keyringPair = await saveKeyringPair({\n filePath: outfile,\n passphrase: proxyPassphrase,\n });\n const address = keyringPair.address;\n console.log(`✅ Created proxy account at \"${outfile}\" with address ${address}`);\n const tx = client.tx.utility.batchAll([\n client.tx.proxy.addProxy(address, 'MiningBid', 0),\n client.tx.balances.transferAllowDeath(address, BigInt(feeArgons * MICROGONS_PER_ARGON)),\n ]);\n let keypair: KeyringPair;\n try {\n const accountset = await accountsetFromCli(program);\n keypair = accountset.txSubmitterPair;\n } catch (e) {\n const polkadotLink = `https://polkadot.js.org/apps/?rpc=${mainchainUrl}#/extrinsics/decode/${tx.toHex()}`;\n console.log(`Complete the registration at this link:`, polkadotLink);\n process.exit(0);\n }\n try {\n await new TxSubmitter(client, tx, keypair).submit({\n waitForBlock: true,\n });\n\n console.log('Mining bid proxy added and funded.');\n process.exit();\n } catch (error) {\n console.error('Error adding mining proxy', error);\n process.exit(1);\n }\n });\n return program;\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { BidPool } from '../BidPool';\nimport { VaultMonitor } from '../VaultMonitor';\nimport { formatArgons, MICROGONS_PER_ARGON } from '../utils';\nimport { accountsetFromCli } from './index';\n\nexport default function liquidityCli() {\n const program = new Command('liquidity-pools').description('Monitor or bond to liquidity pools');\n program\n .command('list', { isDefault: true })\n .description('Show or watch the vault bid pool rewards')\n .action(async () => {\n const accountset = await accountsetFromCli(program);\n const bidPool = new BidPool(accountset.client, accountset.txSubmitterPair);\n await bidPool.watch();\n });\n\n program\n .command('bond')\n .description('Bond argons to a liquidity pool')\n .requiredOption('-v, --vault-id <id>', 'The vault id to use', parseInt)\n .requiredOption('-a, --argons <amount>', 'The number of argons to set the vault to', parseFloat)\n .option('--tip <amount>', 'The tip to include with the transaction', parseFloat)\n .action(async ({ tip, argons, vaultId }) => {\n const accountset = await accountsetFromCli(program);\n const resolvedTip = tip ? BigInt(tip * MICROGONS_PER_ARGON) : 0n;\n\n const microgons = BigInt(argons * MICROGONS_PER_ARGON);\n const bidPool = new BidPool(accountset.client, accountset.txSubmitterPair);\n await bidPool.bondArgons(vaultId, microgons, { tip: resolvedTip });\n console.log('Bonded argons to liquidity pool bond');\n process.exit();\n });\n\n program\n .command('wait-for-space')\n .description('Add bonded argons to a liquidity pool when the market rate is favorable')\n .requiredOption('--max-argons <amount>', 'Max daily argons to use per slot', parseFloat)\n .option(\n '--min-pct-sharing <percent>',\n 'The minimum profit sharing percent to allow',\n parseInt,\n 30,\n )\n .option('--tip <amount>', 'The tip to include with the transaction', parseFloat)\n .action(async ({ maxArgons, minPctSharing, tip }) => {\n const maxAmountPerSlot = BigInt(maxArgons * MICROGONS_PER_ARGON);\n\n const accountset = await accountsetFromCli(program);\n const vaults = new VaultMonitor(\n accountset,\n {\n liquidityPoolSpaceAvailable: 1_000_000n,\n },\n { shouldLog: false },\n );\n const bidPool = new BidPool(accountset.client, accountset.txSubmitterPair);\n const resolvedTip = tip ? BigInt(tip * MICROGONS_PER_ARGON) : 0n;\n console.log('Waiting for liquidity pool space...');\n\n vaults.events.on('liquidity-pool-space-above', async (vaultId, amount) => {\n const vault = vaults.vaultsById[vaultId];\n if (vault.terms.liquidityPoolProfitSharing.times(100).toNumber() < minPctSharing) {\n console.info(\n `Skipping vault ${vaultId} due to lower profit sharing than ${minPctSharing}%`,\n );\n return;\n }\n let amountToAdd = amount;\n if (amountToAdd > maxAmountPerSlot) {\n amountToAdd = maxAmountPerSlot;\n }\n await bidPool.bondArgons(vaultId, amountToAdd, { tip: resolvedTip });\n console.log('Bonding argons to vault liquidity pool', {\n vaultId,\n amount: formatArgons(amountToAdd),\n });\n });\n await vaults.monitor();\n });\n return program;\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { VaultMonitor } from '../VaultMonitor';\nimport { BitcoinLocks } from '../BitcoinLocks';\nimport { formatArgons, MICROGONS_PER_ARGON } from '../utils';\nimport { accountsetFromCli } from './index';\n\nexport default function bitcoinCli() {\n const program = new Command('bitcoin').description('Wait for bitcoin space');\n\n program\n .command('watch')\n .requiredOption(\n '-a, --argons <argons>',\n 'Alert when bitcoin space exceeds this amount',\n parseFloat,\n )\n .description('Watch for bitcoin space available')\n .action(async ({ argons }) => {\n const accountset = await accountsetFromCli(program);\n const bot = new VaultMonitor(accountset, {\n bitcoinSpaceAvailable: argons ? BigInt(argons * MICROGONS_PER_ARGON) : 1n,\n });\n bot.events.on('bitcoin-space-above', async (vaultId, amount) => {\n const vault = bot.vaultsById[vaultId];\n const fee = vault.calculateBitcoinFee(amount);\n const ratio = (100n * fee) / amount;\n console.log(\n `Vault ${vaultId} has ${formatArgons(amount)} argons available for bitcoin. Fee ratio is ${ratio}%`,\n );\n });\n await bot.monitor();\n });\n\n program\n .command('wait-for-space')\n .description('Lock bitcoin when available at a given rate')\n .requiredOption(\n '-a, --argons <amount>',\n 'Bitcoin argons needed. NOTE: your account must have enough to cover fees + tip after this amount.',\n parseFloat,\n )\n .requiredOption('--bitcoin-xpub <xpub>', 'The xpub key to use for bitcoin locking')\n .option('--max-lock-fee <argons>', \"The max lock fee you're willing to pay\", parseFloat)\n .option('--tip <amount>', 'The tip to include with the transaction', parseFloat, 0.0)\n .action(async ({ argons, bitcoinXpub, maxLockFee, tip }) => {\n const amountToLock = BigInt(argons * MICROGONS_PER_ARGON);\n\n const accountset = await accountsetFromCli(program);\n await BitcoinLocks.waitForSpace(accountset, {\n argonAmount: amountToLock,\n bitcoinXpub,\n maxLockFee: maxLockFee !== undefined ? BigInt(maxLockFee * MICROGONS_PER_ARGON) : undefined,\n tip: BigInt(tip * MICROGONS_PER_ARGON),\n }).then(({ vaultId, satoshis, txFee, securityFee }) => {\n console.log(\n `Locked ${satoshis} satoshis in vault ${vaultId}. Tx fee=${formatArgons(\n txFee,\n )}, Lock fee=${formatArgons(securityFee)}.`,\n );\n process.exit(0);\n });\n });\n\n return program;\n}\n","import { createKeyringPair, Keyring, KeyringPair } from '../index';\nimport { promises } from 'node:fs';\nimport * as os from 'node:os';\n\nconst { readFile, writeFile } = promises;\n\nexport async function keyringFromFile(opts: {\n filePath: string;\n passphrase?: string;\n passphraseFile?: string;\n}): Promise<KeyringPair> {\n if (!opts.filePath) {\n throw new Error(\n 'No ACCOUNT account loaded (either ACCOUNT_SURI or ACCOUNT_JSON_PATH required)',\n );\n }\n const path = opts.filePath.replace('~', os.homedir());\n const json = JSON.parse(await readFile(path, 'utf-8'));\n let passphrase = opts.passphrase;\n if (opts.passphraseFile) {\n const passphrasePath = opts.passphraseFile.replace('~', os.homedir());\n passphrase = await readFile(passphrasePath, 'utf-8');\n }\n const mainAccount = new Keyring().createFromJson(json);\n mainAccount.decodePkcs8(passphrase);\n return mainAccount;\n}\n\nexport async function saveKeyringPair(opts: {\n filePath: string;\n passphrase?: string;\n cryptoType?: 'sr25519' | 'ed25519';\n}): Promise<KeyringPair> {\n const { filePath, passphrase, cryptoType } = opts;\n const keyring = createKeyringPair({ cryptoType });\n if (filePath) {\n const json = keyring.toJson(passphrase);\n await writeFile(filePath, JSON.stringify(json, null, 2));\n }\n return keyring;\n}\n"]}
|