@fairmint/canton-node-sdk 0.0.57 → 0.0.59
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/build/src/clients/index.d.ts +1 -0
- package/build/src/clients/index.d.ts.map +1 -1
- package/build/src/clients/index.js +1 -0
- package/build/src/clients/index.js.map +1 -1
- package/build/src/clients/lighthouse-api/LighthouseApiClient.d.ts +9 -0
- package/build/src/clients/lighthouse-api/LighthouseApiClient.d.ts.map +1 -0
- package/build/src/clients/lighthouse-api/LighthouseApiClient.js +15 -0
- package/build/src/clients/lighthouse-api/LighthouseApiClient.js.map +1 -0
- package/build/src/clients/lighthouse-api/index.d.ts +3 -0
- package/build/src/clients/lighthouse-api/index.d.ts.map +1 -0
- package/build/src/clients/lighthouse-api/index.js +21 -0
- package/build/src/clients/lighthouse-api/index.js.map +1 -0
- package/build/src/clients/lighthouse-api/operations/get-transfer-agent.d.ts +64 -0
- package/build/src/clients/lighthouse-api/operations/get-transfer-agent.d.ts.map +1 -0
- package/build/src/clients/lighthouse-api/operations/get-transfer-agent.js +26 -0
- package/build/src/clients/lighthouse-api/operations/get-transfer-agent.js.map +1 -0
- package/build/src/clients/lighthouse-api/types.d.ts +74 -0
- package/build/src/clients/lighthouse-api/types.d.ts.map +1 -0
- package/build/src/clients/lighthouse-api/types.js +49 -0
- package/build/src/clients/lighthouse-api/types.js.map +1 -0
- package/build/src/clients/register.d.ts.map +1 -1
- package/build/src/clients/register.js +3 -0
- package/build/src/clients/register.js.map +1 -1
- package/build/src/clients/validator-api/ValidatorApiClient.d.ts +3 -2
- package/build/src/clients/validator-api/ValidatorApiClient.d.ts.map +1 -1
- package/build/src/clients/validator-api/ValidatorApiClient.js +2 -0
- package/build/src/clients/validator-api/ValidatorApiClient.js.map +1 -1
- package/build/src/clients/validator-api/operations/v0/scan-proxy/get-member-traffic-status.d.ts +16 -21
- package/build/src/clients/validator-api/operations/v0/scan-proxy/get-member-traffic-status.d.ts.map +1 -1
- package/build/src/clients/validator-api/operations/v0/scan-proxy/get-member-traffic-status.js +23 -10
- package/build/src/clients/validator-api/operations/v0/scan-proxy/get-member-traffic-status.js.map +1 -1
- package/build/src/clients/validator-api/operations/v0/wallet/buy-traffic-requests/create.js +1 -1
- package/build/src/clients/validator-api/operations/v0/wallet/buy-traffic-requests/create.js.map +1 -1
- package/build/src/clients/validator-api/schemas/operations/scan-proxy.d.ts +2 -2
- package/build/src/clients/validator-api/schemas/operations/scan-proxy.js +2 -2
- package/build/src/clients/validator-api/schemas/operations/scan-proxy.js.map +1 -1
- package/build/src/core/BaseClient.d.ts +26 -2
- package/build/src/core/BaseClient.d.ts.map +1 -1
- package/build/src/core/BaseClient.js +54 -2
- package/build/src/core/BaseClient.js.map +1 -1
- package/build/src/core/ClientFactory.d.ts +3 -3
- package/build/src/core/ClientFactory.d.ts.map +1 -1
- package/build/src/core/ClientFactory.js.map +1 -1
- package/build/src/core/config/EnvLoader.d.ts.map +1 -1
- package/build/src/core/config/EnvLoader.js +54 -12
- package/build/src/core/config/EnvLoader.js.map +1 -1
- package/build/src/core/operations/ApiOperation.d.ts +22 -1
- package/build/src/core/operations/ApiOperation.d.ts.map +1 -1
- package/build/src/core/operations/ApiOperation.js +37 -1
- package/build/src/core/operations/ApiOperation.js.map +1 -1
- package/build/src/core/operations/ApiOperationFactory.d.ts +29 -1
- package/build/src/core/operations/ApiOperationFactory.d.ts.map +1 -1
- package/build/src/core/operations/ApiOperationFactory.js +34 -0
- package/build/src/core/operations/ApiOperationFactory.js.map +1 -1
- package/build/src/core/types.d.ts +7 -3
- package/build/src/core/types.d.ts.map +1 -1
- package/build/src/utils/amulet/get-amulets-for-transfer.d.ts +21 -0
- package/build/src/utils/amulet/get-amulets-for-transfer.d.ts.map +1 -0
- package/build/src/utils/amulet/get-amulets-for-transfer.js +106 -0
- package/build/src/utils/amulet/get-amulets-for-transfer.js.map +1 -0
- package/build/src/utils/amulet/index.d.ts +1 -0
- package/build/src/utils/amulet/index.d.ts.map +1 -1
- package/build/src/utils/amulet/index.js +1 -0
- package/build/src/utils/amulet/index.js.map +1 -1
- package/build/src/utils/amulet/pre-approve-transfers.d.ts +0 -7
- package/build/src/utils/amulet/pre-approve-transfers.d.ts.map +1 -1
- package/build/src/utils/amulet/pre-approve-transfers.js +20 -4
- package/build/src/utils/amulet/pre-approve-transfers.js.map +1 -1
- package/build/src/utils/amulet/transfer-to-preapproved.d.ts +0 -5
- package/build/src/utils/amulet/transfer-to-preapproved.d.ts.map +1 -1
- package/build/src/utils/amulet/transfer-to-preapproved.js +17 -1
- package/build/src/utils/amulet/transfer-to-preapproved.js.map +1 -1
- package/build/src/utils/contracts/contract-monitor.d.ts +23 -0
- package/build/src/utils/contracts/contract-monitor.d.ts.map +1 -0
- package/build/src/utils/contracts/contract-monitor.js +54 -0
- package/build/src/utils/contracts/contract-monitor.js.map +1 -0
- package/build/src/utils/contracts/index.d.ts +1 -0
- package/build/src/utils/contracts/index.d.ts.map +1 -1
- package/build/src/utils/contracts/index.js +1 -0
- package/build/src/utils/contracts/index.js.map +1 -1
- package/build/src/utils/mining/mining-rounds.d.ts +9 -0
- package/build/src/utils/mining/mining-rounds.d.ts.map +1 -1
- package/build/src/utils/mining/mining-rounds.js +13 -0
- package/build/src/utils/mining/mining-rounds.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LedgerJsonApiClient } from '../../clients/ledger-json-api';
|
|
2
|
+
export interface AmuletForTransfer {
|
|
3
|
+
contractId: string;
|
|
4
|
+
templateId: string;
|
|
5
|
+
effectiveAmount: string;
|
|
6
|
+
owner: string;
|
|
7
|
+
}
|
|
8
|
+
export interface GetAmuletsForTransferParams {
|
|
9
|
+
/** Ledger JSON API client for querying active contracts */
|
|
10
|
+
jsonApiClient: LedgerJsonApiClient;
|
|
11
|
+
/** Party IDs to read as (first one is used as sender) */
|
|
12
|
+
readAs?: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Gets unlocked amulets owned by the sender party that can be used for transfers
|
|
16
|
+
*
|
|
17
|
+
* @param params - Parameters for getting amulets
|
|
18
|
+
* @returns Promise resolving to array of amulets suitable for transfer
|
|
19
|
+
*/
|
|
20
|
+
export declare function getAmuletsForTransfer(params: GetAmuletsForTransferParams): Promise<AmuletForTransfer[]>;
|
|
21
|
+
//# sourceMappingURL=get-amulets-for-transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-amulets-for-transfer.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,2DAA2D;IAC3D,aAAa,EAAE,mBAAmB,CAAC;IACnC,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyH9B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAmuletsForTransfer = getAmuletsForTransfer;
|
|
4
|
+
/**
|
|
5
|
+
* Gets unlocked amulets owned by the sender party that can be used for transfers
|
|
6
|
+
*
|
|
7
|
+
* @param params - Parameters for getting amulets
|
|
8
|
+
* @returns Promise resolving to array of amulets suitable for transfer
|
|
9
|
+
*/
|
|
10
|
+
async function getAmuletsForTransfer(params) {
|
|
11
|
+
const { jsonApiClient, readAs } = params;
|
|
12
|
+
// Query ledger for active contracts for this party (unlocked amulets)
|
|
13
|
+
if (!readAs?.[0]) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const senderParty = readAs[0];
|
|
17
|
+
const filtersByParty = { [senderParty]: {} };
|
|
18
|
+
const activeContracts = await jsonApiClient.getActiveContracts({
|
|
19
|
+
filter: { filtersByParty },
|
|
20
|
+
verbose: true,
|
|
21
|
+
activeAtOffset: (await jsonApiClient.getLedgerEnd(undefined)).offset,
|
|
22
|
+
});
|
|
23
|
+
const allAmulets = [];
|
|
24
|
+
const contractsArr = Array.isArray(activeContracts) ? activeContracts : [];
|
|
25
|
+
contractsArr.forEach((ctr) => {
|
|
26
|
+
let payload, templateId, contractId;
|
|
27
|
+
console.log('ctr: ', ctr);
|
|
28
|
+
if (ctr.contractEntry &&
|
|
29
|
+
ctr.contractEntry.JsActiveContract &&
|
|
30
|
+
ctr.contractEntry.JsActiveContract.createdEvent) {
|
|
31
|
+
const created = ctr.contractEntry.JsActiveContract.createdEvent;
|
|
32
|
+
payload = created.createArgument;
|
|
33
|
+
templateId = created.templateId;
|
|
34
|
+
contractId = created.contractId;
|
|
35
|
+
}
|
|
36
|
+
else if (ctr.contract) {
|
|
37
|
+
payload = ctr.contract.payload;
|
|
38
|
+
templateId =
|
|
39
|
+
ctr.contract.contract?.template_id || ctr.contract.template_id;
|
|
40
|
+
contractId =
|
|
41
|
+
ctr.contract.contract?.contract_id || ctr.contract.contract_id;
|
|
42
|
+
}
|
|
43
|
+
console.log('payload: ', payload);
|
|
44
|
+
console.log('templateId: ', templateId);
|
|
45
|
+
console.log('contractId: ', contractId);
|
|
46
|
+
if (!payload || !templateId || !contractId)
|
|
47
|
+
return;
|
|
48
|
+
const isUnlockedAmulet = templateId.includes('Splice.Amulet:Amulet') &&
|
|
49
|
+
!templateId.includes('LockedAmulet');
|
|
50
|
+
if (!isUnlockedAmulet)
|
|
51
|
+
return;
|
|
52
|
+
allAmulets.push({ contractId, templateId, payload });
|
|
53
|
+
});
|
|
54
|
+
// Helper to extract owner and numeric amount from diverse amulet shapes
|
|
55
|
+
const extract = (amulet) => {
|
|
56
|
+
const payload = amulet?.payload ?? amulet?.contract?.contract?.payload ?? {};
|
|
57
|
+
const ownerFull = payload.owner ??
|
|
58
|
+
amulet.owner ??
|
|
59
|
+
amulet.partyId ??
|
|
60
|
+
amulet.party_id ??
|
|
61
|
+
'';
|
|
62
|
+
const rawAmountCandidate = payload.amount ??
|
|
63
|
+
amulet.amount ??
|
|
64
|
+
amulet.effective_amount ??
|
|
65
|
+
amulet.effectiveAmount ??
|
|
66
|
+
amulet.initialAmount ??
|
|
67
|
+
'0';
|
|
68
|
+
let rawAmount = rawAmountCandidate;
|
|
69
|
+
if (typeof rawAmountCandidate === 'object' &&
|
|
70
|
+
rawAmountCandidate !== null) {
|
|
71
|
+
rawAmount = rawAmountCandidate.initialAmount ?? '0';
|
|
72
|
+
}
|
|
73
|
+
const numericAmount = parseFloat(rawAmount);
|
|
74
|
+
return { owner: ownerFull, numericAmount };
|
|
75
|
+
};
|
|
76
|
+
// Note: Processing amulets to extract contract information
|
|
77
|
+
// Keep amulets owned by sender (readAs[0]) and with positive balance
|
|
78
|
+
const partyAmulets = allAmulets.filter(a => {
|
|
79
|
+
const { owner, numericAmount } = extract(a);
|
|
80
|
+
return numericAmount > 0 && owner === senderParty;
|
|
81
|
+
});
|
|
82
|
+
if (partyAmulets.length === 0) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
// Sort biggest → smallest so we pick high-value amulets first
|
|
86
|
+
partyAmulets.sort((a, b) => extract(b).numericAmount - extract(a).numericAmount);
|
|
87
|
+
// Note: partyAmulets is now sorted by amount (biggest first)
|
|
88
|
+
// Map to the structure expected by buildAmuletInputs
|
|
89
|
+
const result = partyAmulets.map(a => {
|
|
90
|
+
const inner = a.contract?.contract ?? {};
|
|
91
|
+
const payload = inner.payload ?? {};
|
|
92
|
+
const amtObj = payload.amount ?? {};
|
|
93
|
+
const intAmount = typeof amtObj === 'object' ? amtObj.initialAmount : amtObj;
|
|
94
|
+
return {
|
|
95
|
+
contractId: inner.contract_id ?? a.contractId ?? a.contract_id,
|
|
96
|
+
templateId: inner.template_id ??
|
|
97
|
+
a.templateId ??
|
|
98
|
+
a.template_id ??
|
|
99
|
+
'splice-amulet:Splice.Amulet:Amulet',
|
|
100
|
+
effectiveAmount: a.effective_amount ?? intAmount ?? '0',
|
|
101
|
+
owner: payload.owner ?? extract(a).owner,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=get-amulets-for-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-amulets-for-transfer.js","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./pre-approve-transfers"), exports);
|
|
18
18
|
__exportStar(require("./transfer-to-preapproved"), exports);
|
|
19
|
+
__exportStar(require("./get-amulets-for-transfer"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/amulet/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,4DAA0C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/amulet/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,4DAA0C;AAC1C,6DAA2C"}
|
|
@@ -3,15 +3,8 @@ import { ValidatorApiClient } from '../../clients/validator-api';
|
|
|
3
3
|
export interface PreApproveTransfersParams {
|
|
4
4
|
/** Party ID to enable pre-approved transfers for (receiver) */
|
|
5
5
|
receiverPartyId: string;
|
|
6
|
-
/** Party ID that will manage the pre-approval (provider) */
|
|
7
|
-
providerPartyId: string;
|
|
8
6
|
/** When the pre-approval expires */
|
|
9
7
|
expiresAt: Date;
|
|
10
|
-
/** Amulet inputs to pay for the pre-approval fee */
|
|
11
|
-
inputs: Array<{
|
|
12
|
-
tag: 'InputAmulet';
|
|
13
|
-
value: string;
|
|
14
|
-
}>;
|
|
15
8
|
/** Contract details for disclosed contracts (optional - will be fetched if not provided) */
|
|
16
9
|
contractDetails?: {
|
|
17
10
|
amuletRules?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-approve-transfers.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"pre-approve-transfers.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,SAAS,EAAE,IAAI,CAAC;IAChB,4FAA4F;IAC5F,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,eAAe,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACvE,mBAAmB,CAAC,EAAE,KAAK,CAAC;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,gBAAgB,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;KACzE,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAkIpC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.preApproveTransfers = preApproveTransfers;
|
|
4
4
|
const disclosed_contracts_1 = require("../contracts/disclosed-contracts");
|
|
5
5
|
const mining_rounds_1 = require("../mining/mining-rounds");
|
|
6
|
+
const get_amulets_for_transfer_1 = require("./get-amulets-for-transfer");
|
|
6
7
|
/**
|
|
7
8
|
* Creates a TransferPreapproval contract to enable pre-approved transfers for a party
|
|
8
9
|
*
|
|
@@ -18,7 +19,7 @@ async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
|
18
19
|
validatorClient.getAmuletRules(),
|
|
19
20
|
validatorClient.getDsoPartyId(),
|
|
20
21
|
(0, mining_rounds_1.getCurrentMiningRoundContext)(validatorClient),
|
|
21
|
-
validatorClient.lookupFeaturedAppRight({ partyId: params.
|
|
22
|
+
validatorClient.lookupFeaturedAppRight({ partyId: params.receiverPartyId })
|
|
22
23
|
]);
|
|
23
24
|
console.log('📊 Network information fetched:');
|
|
24
25
|
console.log(` Amulet Rules Contract ID: ${amuletRules.amulet_rules.contract.contract_id}`);
|
|
@@ -39,6 +40,21 @@ async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
|
39
40
|
}
|
|
40
41
|
const disclosedContracts = (0, disclosed_contracts_1.buildAmuletDisclosedContracts)(disclosedContractsParams);
|
|
41
42
|
console.log(`📋 Built ${disclosedContracts.length} disclosed contracts`);
|
|
43
|
+
// Get amulet inputs for the receiver party
|
|
44
|
+
console.log('🔍 Fetching amulet inputs for receiver party...');
|
|
45
|
+
const amulets = await (0, get_amulets_for_transfer_1.getAmuletsForTransfer)({
|
|
46
|
+
jsonApiClient: ledgerClient,
|
|
47
|
+
readAs: [params.receiverPartyId]
|
|
48
|
+
});
|
|
49
|
+
if (amulets.length === 0) {
|
|
50
|
+
throw new Error(`No unlocked amulets found for provider party ${params.receiverPartyId}`);
|
|
51
|
+
}
|
|
52
|
+
// Convert amulets to input format
|
|
53
|
+
const inputs = amulets.map(amulet => ({
|
|
54
|
+
tag: 'InputAmulet',
|
|
55
|
+
value: amulet.contractId
|
|
56
|
+
}));
|
|
57
|
+
console.log(`📦 Found ${amulets.length} amulets for transfer`);
|
|
42
58
|
// Create the TransferPreapproval contract using AmuletRules_CreateTransferPreapproval
|
|
43
59
|
const createCommand = {
|
|
44
60
|
ExerciseCommand: {
|
|
@@ -55,9 +71,9 @@ async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
|
55
71
|
featuredAppRight: featuredAppRight.featured_app_right?.contract_id || null
|
|
56
72
|
}
|
|
57
73
|
},
|
|
58
|
-
inputs
|
|
74
|
+
inputs,
|
|
59
75
|
receiver: params.receiverPartyId,
|
|
60
|
-
provider: params.
|
|
76
|
+
provider: params.receiverPartyId,
|
|
61
77
|
expiresAt: params.expiresAt.toISOString()
|
|
62
78
|
}
|
|
63
79
|
}
|
|
@@ -67,7 +83,7 @@ async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
|
67
83
|
const submitParams = {
|
|
68
84
|
commands: [createCommand],
|
|
69
85
|
commandId: `create-preapproval-${Date.now()}`,
|
|
70
|
-
actAs: [params.
|
|
86
|
+
actAs: [params.receiverPartyId],
|
|
71
87
|
disclosedContracts,
|
|
72
88
|
};
|
|
73
89
|
console.log('🚀 Submitting command to ledger...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-approve-transfers.js","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pre-approve-transfers.js","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,11 +21,6 @@ export interface TransferToPreapprovedParams {
|
|
|
21
21
|
amount: string;
|
|
22
22
|
/** Optional description for the transfer */
|
|
23
23
|
description?: string;
|
|
24
|
-
/** Amulet inputs to transfer */
|
|
25
|
-
inputs: Array<{
|
|
26
|
-
tag: 'InputAmulet';
|
|
27
|
-
value: string;
|
|
28
|
-
}>;
|
|
29
24
|
}
|
|
30
25
|
export interface TransferToPreapprovedResult {
|
|
31
26
|
/** Contract ID of the TransferPreapproval contract used */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-to-preapproved.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/transfer-to-preapproved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"transfer-to-preapproved.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/transfer-to-preapproved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,cAAc,EAAE,GAAG,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAsHtC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.transferToPreapproved = transferToPreapproved;
|
|
4
4
|
const mining_rounds_1 = require("../mining/mining-rounds");
|
|
5
5
|
const disclosed_contracts_1 = require("../contracts/disclosed-contracts");
|
|
6
|
+
const get_amulets_for_transfer_1 = require("./get-amulets-for-transfer");
|
|
6
7
|
/**
|
|
7
8
|
* Transfers coins to a party that has pre-approved transfers enabled
|
|
8
9
|
*
|
|
@@ -23,6 +24,21 @@ async function transferToPreapproved(ledgerClient, validatorClient, params) {
|
|
|
23
24
|
throw new Error('No featured app right found');
|
|
24
25
|
}
|
|
25
26
|
const featuredAppRightContractId = featuredAppRight.featured_app_right.contract_id;
|
|
27
|
+
// Get amulet inputs for the sender party
|
|
28
|
+
console.log('🔍 Fetching amulet inputs for sender party...');
|
|
29
|
+
const amulets = await (0, get_amulets_for_transfer_1.getAmuletsForTransfer)({
|
|
30
|
+
jsonApiClient: ledgerClient,
|
|
31
|
+
readAs: [params.senderPartyId]
|
|
32
|
+
});
|
|
33
|
+
if (amulets.length === 0) {
|
|
34
|
+
throw new Error(`No unlocked amulets found for sender party ${params.senderPartyId}`);
|
|
35
|
+
}
|
|
36
|
+
// Convert amulets to input format
|
|
37
|
+
const inputs = amulets.map(amulet => ({
|
|
38
|
+
tag: 'InputAmulet',
|
|
39
|
+
value: amulet.contractId
|
|
40
|
+
}));
|
|
41
|
+
console.log(`📦 Found ${amulets.length} amulets for transfer`);
|
|
26
42
|
// Create the transfer command using TransferPreapproval_Send
|
|
27
43
|
const transferCommand = {
|
|
28
44
|
ExerciseCommand: {
|
|
@@ -39,7 +55,7 @@ async function transferToPreapproved(ledgerClient, validatorClient, params) {
|
|
|
39
55
|
featuredAppRight: featuredAppRightContractId
|
|
40
56
|
}
|
|
41
57
|
},
|
|
42
|
-
inputs
|
|
58
|
+
inputs,
|
|
43
59
|
amount: params.amount,
|
|
44
60
|
sender: params.senderPartyId,
|
|
45
61
|
description: params.description || null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-to-preapproved.js","sourceRoot":"","sources":["../../../../src/utils/amulet/transfer-to-preapproved.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"transfer-to-preapproved.js","sourceRoot":"","sources":["../../../../src/utils/amulet/transfer-to-preapproved.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { LedgerJsonApiClient } from '../../clients/ledger-json-api';
|
|
2
|
+
/**
|
|
3
|
+
* Options for waiting for contract archival
|
|
4
|
+
*/
|
|
5
|
+
export interface WaitForContractArchivalOptions {
|
|
6
|
+
/** Maximum time to wait in milliseconds (default: 300000 = 5 minutes) */
|
|
7
|
+
maxWaitTimeMs?: number;
|
|
8
|
+
/** Interval between checks in milliseconds (default: 5000 = 5 seconds) */
|
|
9
|
+
checkIntervalMs?: number;
|
|
10
|
+
/** Whether to enable verbose logging */
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Waits for a contract to be archived by periodically checking active contracts
|
|
15
|
+
*
|
|
16
|
+
* @param ledgerJsonApiClient - The Ledger JSON API client instance
|
|
17
|
+
* @param contractId - The ID of the contract to monitor
|
|
18
|
+
* @param options - Configuration options for the wait operation
|
|
19
|
+
* @returns Promise that resolves when the contract is archived or rejects on timeout
|
|
20
|
+
* @throws Error if the contract is not archived within the specified timeout
|
|
21
|
+
*/
|
|
22
|
+
export declare function waitForContractToBeArchived(ledgerJsonApiClient: LedgerJsonApiClient, contractId: string, options?: WaitForContractArchivalOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=contract-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-monitor.d.ts","sourceRoot":"","sources":["../../../../src/utils/contracts/contract-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitForContractToBeArchived = waitForContractToBeArchived;
|
|
4
|
+
/**
|
|
5
|
+
* Waits for a contract to be archived by periodically checking active contracts
|
|
6
|
+
*
|
|
7
|
+
* @param ledgerJsonApiClient - The Ledger JSON API client instance
|
|
8
|
+
* @param contractId - The ID of the contract to monitor
|
|
9
|
+
* @param options - Configuration options for the wait operation
|
|
10
|
+
* @returns Promise that resolves when the contract is archived or rejects on timeout
|
|
11
|
+
* @throws Error if the contract is not archived within the specified timeout
|
|
12
|
+
*/
|
|
13
|
+
async function waitForContractToBeArchived(ledgerJsonApiClient, contractId, options = {}) {
|
|
14
|
+
const { maxWaitTimeMs = 300000, // 5 minutes default
|
|
15
|
+
checkIntervalMs = 5000, // 5 seconds default
|
|
16
|
+
verbose = true } = options;
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
if (verbose) {
|
|
19
|
+
console.log(`⏳ Waiting for contract ${contractId} to be archived...`);
|
|
20
|
+
}
|
|
21
|
+
while (Date.now() - startTime < maxWaitTimeMs) {
|
|
22
|
+
try {
|
|
23
|
+
// Get active contracts to check if our contract is still active
|
|
24
|
+
const activeContracts = await ledgerJsonApiClient.getActiveContracts({
|
|
25
|
+
filter: { filtersByParty: { [ledgerJsonApiClient.getPartyId()]: {} } },
|
|
26
|
+
verbose: true,
|
|
27
|
+
activeAtOffset: (await ledgerJsonApiClient.getLedgerEnd(undefined)).offset,
|
|
28
|
+
});
|
|
29
|
+
// Check if our contract is still in the active contracts list
|
|
30
|
+
const isStillActive = Array.isArray(activeContracts) &&
|
|
31
|
+
activeContracts.some((contract) => {
|
|
32
|
+
const createdEvent = contract?.contractEntry?.JsActiveContract?.createdEvent;
|
|
33
|
+
return createdEvent?.contractId === contractId;
|
|
34
|
+
});
|
|
35
|
+
if (!isStillActive) {
|
|
36
|
+
if (verbose) {
|
|
37
|
+
console.log(`✅ Contract ${contractId} has been archived successfully`);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (verbose) {
|
|
42
|
+
console.log(`⏳ Contract ${contractId} is still active, waiting...`);
|
|
43
|
+
}
|
|
44
|
+
await new Promise(resolve => setTimeout(resolve, checkIntervalMs));
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('❌ Error checking contract status:', error instanceof Error ? error.message : 'Unknown error');
|
|
48
|
+
// Continue waiting even if there's an error checking status
|
|
49
|
+
await new Promise(resolve => setTimeout(resolve, checkIntervalMs));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Timeout waiting for contract ${contractId} to be archived after ${maxWaitTimeMs / 1000} seconds`);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=contract-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-monitor.js","sourceRoot":"","sources":["../../../../src/utils/contracts/contract-monitor.ts"],"names":[],"mappings":";;AAuBA,kEAqDC;AA9DD;;;;;;;;GAQG;AACI,KAAK,UAAU,2BAA2B,CAC/C,mBAAwC,EACxC,UAAkB,EAClB,UAA0C,EAAE;IAE5C,MAAM,EACJ,aAAa,GAAG,MAAM,EAAE,oBAAoB;IAC5C,eAAe,GAAG,IAAI,EAAE,oBAAoB;IAC5C,OAAO,GAAG,IAAI,EACf,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,oBAAoB,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,aAAa,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,kBAAkB,CAAC;gBACnE,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;gBACtE,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,CAAC,MAAM,mBAAmB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aAC3E,CAAC,CAAC;YAEH,8DAA8D;YAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;gBAClD,eAAe,CAAC,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;oBACrC,MAAM,YAAY,GAAG,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC;oBAC7E,OAAO,YAAY,EAAE,UAAU,KAAK,UAAU,CAAC;gBACjD,CAAC,CAAC,CAAC;YAEL,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,iCAAiC,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,8BAA8B,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;QAErE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YAC7G,4DAA4D;YAC5D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,yBAAyB,aAAa,GAAG,IAAI,UAAU,CAAC,CAAC;AACrH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./disclosed-contracts"), exports);
|
|
18
|
+
__exportStar(require("./contract-monitor"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/contracts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/contracts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,qDAAmC"}
|
|
@@ -21,4 +21,13 @@ export interface MiningRoundContext {
|
|
|
21
21
|
* @throws Error if no mining round satisfies the criteria
|
|
22
22
|
*/
|
|
23
23
|
export declare function getCurrentMiningRoundContext(validatorClient: ValidatorApiClient): Promise<MiningRoundContext>;
|
|
24
|
+
/**
|
|
25
|
+
* Gets the domain ID from the current mining round context.
|
|
26
|
+
* This is useful for operations that need to automatically determine the domain ID.
|
|
27
|
+
*
|
|
28
|
+
* @param validatorClient - Validator API client for getting mining round information
|
|
29
|
+
* @returns Promise resolving to the domain ID string
|
|
30
|
+
* @throws Error if no mining round satisfies the criteria
|
|
31
|
+
*/
|
|
32
|
+
export declare function getCurrentMiningRoundDomainId(validatorClient: ValidatorApiClient): Promise<string>;
|
|
24
33
|
//# sourceMappingURL=mining-rounds.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mining-rounds.d.ts","sourceRoot":"","sources":["../../../../src/utils/mining/mining-rounds.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,uBAAuB,EAAE,YAAY,CAAC;IACtC,4DAA4D;IAC5D,mBAAmB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,eAAe,EAAE,kBAAkB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA2C7B"}
|
|
1
|
+
{"version":3,"file":"mining-rounds.d.ts","sourceRoot":"","sources":["../../../../src/utils/mining/mining-rounds.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,uBAAuB,EAAE,YAAY,CAAC;IACtC,4DAA4D;IAC5D,mBAAmB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,eAAe,EAAE,kBAAkB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA2C7B;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,eAAe,EAAE,kBAAkB,GAClC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getCurrentMiningRoundContext = getCurrentMiningRoundContext;
|
|
4
|
+
exports.getCurrentMiningRoundDomainId = getCurrentMiningRoundDomainId;
|
|
4
5
|
/**
|
|
5
6
|
* Finds the latest mining round that is currently open (\`opensAt\` is in the past)
|
|
6
7
|
* and returns useful context information.
|
|
@@ -44,4 +45,16 @@ async function getCurrentMiningRoundContext(validatorClient) {
|
|
|
44
45
|
issuingMiningRounds,
|
|
45
46
|
};
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Gets the domain ID from the current mining round context.
|
|
50
|
+
* This is useful for operations that need to automatically determine the domain ID.
|
|
51
|
+
*
|
|
52
|
+
* @param validatorClient - Validator API client for getting mining round information
|
|
53
|
+
* @returns Promise resolving to the domain ID string
|
|
54
|
+
* @throws Error if no mining round satisfies the criteria
|
|
55
|
+
*/
|
|
56
|
+
async function getCurrentMiningRoundDomainId(validatorClient) {
|
|
57
|
+
const miningRoundContext = await getCurrentMiningRoundContext(validatorClient);
|
|
58
|
+
return miningRoundContext.openMiningRoundContract.synchronizerId;
|
|
59
|
+
}
|
|
47
60
|
//# sourceMappingURL=mining-rounds.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mining-rounds.js","sourceRoot":"","sources":["../../../../src/utils/mining/mining-rounds.ts"],"names":[],"mappings":";;AAsBA,oEA6CC;
|
|
1
|
+
{"version":3,"file":"mining-rounds.js","sourceRoot":"","sources":["../../../../src/utils/mining/mining-rounds.ts"],"names":[],"mappings":";;AAsBA,oEA6CC;AAUD,sEAKC;AAlED;;;;;GAKG;AACI,KAAK,UAAU,4BAA4B,CAChD,eAAmC;IAEnC,MAAM,oBAAoB,GACxB,MAAM,eAAe,CAAC,6BAA6B,EAAE,CAAC;IAExD,8DAA8D;IAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,eAAe,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC7E,IAAI,CAAC;YACH,MAAM,UAAU,GAAI,KAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,OAA6B,CAAC;YACpF,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,OAAO,OAAO,IAAI,GAAG,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,kEAAkE;IAClE,MAAM,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAQ,CAAC;IAEzE,MAAM,uBAAuB,GAAiB;QAC5C,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,WAAW;QAC9C,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,WAAW;QAC9C,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,kBAAkB;QAC3D,cAAc,EAAE,aAAa,CAAC,SAAS,EAAE,sDAAsD;KAChG,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,oBAAoB,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAChF,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,KAAK,CAAC,YAAsB;QACnC,UAAU,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAW;KACzE,CAAC,CACH,CAAC;IAEF,OAAO;QACL,eAAe,EAAE,uBAAuB,CAAC,UAAU;QACnD,uBAAuB;QACvB,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,6BAA6B,CACjD,eAAmC;IAEnC,MAAM,kBAAkB,GAAG,MAAM,4BAA4B,CAAC,eAAe,CAAC,CAAC;IAC/E,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,cAAc,CAAC;AACnE,CAAC"}
|