@xyo-network/chain-bridge 1.19.6 → 1.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/config/getGateway.d.ts.map +1 -1
- package/dist/node/index.mjs +353 -351
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/manifest/getIterableMap.d.ts +10 -0
- package/dist/node/manifest/getIterableMap.d.ts.map +1 -0
- package/dist/node/manifest/getModuleLocator.d.ts.map +1 -1
- package/dist/node/manifest/getNode.d.ts.map +1 -1
- package/dist/node/manifest/getServices.d.ts.map +1 -1
- package/dist/node/queue/flows/createXl1ToEthBridgeJob.d.ts +6 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob.d.ts.map +1 -1
- package/dist/node/queue/workers/EthTransactionMonitor.d.ts +3 -0
- package/dist/node/queue/workers/EthTransactionMonitor.d.ts.map +1 -0
- package/dist/node/queue/workers/EthTransactionPreparation.d.ts +6 -0
- package/dist/node/queue/workers/EthTransactionPreparation.d.ts.map +1 -0
- package/dist/node/queue/workers/EthTransactionSubmission.d.ts +3 -0
- package/dist/node/queue/workers/EthTransactionSubmission.d.ts.map +1 -0
- package/dist/node/queue/workers/WorkerDescription.d.ts +2 -1
- package/dist/node/queue/workers/WorkerDescription.d.ts.map +1 -1
- package/dist/node/queue/workers/Xl1ToEthBridgeParent.d.ts +3 -0
- package/dist/node/queue/workers/Xl1ToEthBridgeParent.d.ts.map +1 -0
- package/dist/node/queue/workers/Xl1TransactionMonitor.d.ts +3 -0
- package/dist/node/queue/workers/Xl1TransactionMonitor.d.ts.map +1 -0
- package/dist/node/queue/workers/Xl1TransactionPreparation.d.ts +3 -0
- package/dist/node/queue/workers/Xl1TransactionPreparation.d.ts.map +1 -0
- package/dist/node/queue/workers/Xl1TransactionSubmission.d.ts +3 -0
- package/dist/node/queue/workers/Xl1TransactionSubmission.d.ts.map +1 -0
- package/dist/node/queue/workers/createWorkers.d.ts +2 -1
- package/dist/node/queue/workers/createWorkers.d.ts.map +1 -1
- package/dist/node/queue/workers/index.d.ts +7 -7
- package/dist/node/queue/workers/util/index.d.ts +3 -0
- package/dist/node/queue/workers/util/index.d.ts.map +1 -0
- package/dist/node/queue/workers/util/submitEthTransaction.d.ts +5 -0
- package/dist/node/queue/workers/util/submitEthTransaction.d.ts.map +1 -0
- package/dist/node/queue/workers/util/submitXl1Transaction.d.ts +43 -0
- package/dist/node/queue/workers/util/submitXl1Transaction.d.ts.map +1 -0
- package/dist/node/server/{flowProducer.d.ts → addFlowProducer.d.ts} +1 -1
- package/dist/node/server/addFlowProducer.d.ts.map +1 -0
- package/dist/node/server/addWorkers.d.ts +4 -0
- package/dist/node/server/addWorkers.d.ts.map +1 -0
- package/dist/node/server/index.d.ts +0 -2
- package/dist/node/server/index.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts +22 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +81 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +72 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +81 -0
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/dist/node/services/IBridgeServiceCollection.d.ts +2 -1
- package/dist/node/services/IBridgeServiceCollection.d.ts.map +1 -1
- package/dist/node/util/calculateBridgeFees.d.ts +1 -1
- package/dist/node/util/calculateBridgeFees.d.ts.map +1 -1
- package/dist/node/util/getConfigFromEnv.d.ts +6 -0
- package/dist/node/util/getConfigFromEnv.d.ts.map +1 -0
- package/dist/node/util/index.d.ts +1 -0
- package/dist/node/util/index.d.ts.map +1 -1
- package/package.json +24 -20
- package/src/config/getBridgeEscrowAddress.ts +2 -2
- package/src/config/getBridgeFeesAddress.ts +2 -2
- package/src/config/getBridgeWalletAccount.ts +1 -1
- package/src/config/getFeeStructure.ts +1 -1
- package/src/config/getGateway.ts +7 -12
- package/src/config/getMaxBridgeAmount.ts +1 -1
- package/src/config/getMinBridgeAmount.ts +1 -1
- package/src/config/getRemoteChainId.ts +1 -1
- package/src/config/getRemoteTokenAddress.ts +1 -1
- package/src/config/getXl1ChainId.ts +1 -1
- package/src/config/getXl1TokenAddress.ts +1 -1
- package/src/manifest/getIterableMap.ts +34 -0
- package/src/manifest/getModuleLocator.ts +4 -6
- package/src/manifest/getNode.ts +8 -6
- package/src/manifest/getServices.ts +11 -47
- package/src/queue/connection.ts +1 -1
- package/src/queue/flows/createXl1ToEthBridgeJob.ts +34 -19
- package/src/queue/workers/{ethTransactionMonitor.ts → EthTransactionMonitor.ts} +16 -7
- package/src/queue/workers/{ethTransactionPreparation.ts → EthTransactionPreparation.ts} +21 -9
- package/src/queue/workers/{ethTransactionSubmission.ts → EthTransactionSubmission.ts} +24 -9
- package/src/queue/workers/WorkerDescription.ts +3 -1
- package/src/queue/workers/{xl1ToEthBridgeParent.ts → Xl1ToEthBridgeParent.ts} +10 -2
- package/src/queue/workers/{xl1TransactionMonitor.ts → Xl1TransactionMonitor.ts} +20 -10
- package/src/queue/workers/{xl1TransactionPreparation.ts → Xl1TransactionPreparation.ts} +16 -5
- package/src/queue/workers/{xl1TransactionSubmission.ts → Xl1TransactionSubmission.ts} +21 -10
- package/src/queue/workers/createWorkers.ts +16 -9
- package/src/queue/workers/index.ts +7 -7
- package/src/queue/workers/util/index.ts +2 -0
- package/src/queue/workers/util/submitEthTransaction.ts +25 -0
- package/src/queue/workers/util/submitXl1Transaction.ts +9 -0
- package/src/server/addWorkers.ts +9 -0
- package/src/server/app.ts +1 -1
- package/src/server/index.ts +2 -2
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts +4 -2
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +13 -10
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +21 -15
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +17 -15
- package/src/server/server.ts +5 -3
- package/src/services/IBridgeServiceCollection.ts +2 -1
- package/src/util/calculateBridgeFees.ts +1 -1
- package/src/util/getConfigFromEnv.ts +15 -0
- package/src/util/index.ts +1 -0
- package/dist/node/queue/workers/ethTransactionMonitor.d.ts +0 -3
- package/dist/node/queue/workers/ethTransactionMonitor.d.ts.map +0 -1
- package/dist/node/queue/workers/ethTransactionPreparation.d.ts +0 -5
- package/dist/node/queue/workers/ethTransactionPreparation.d.ts.map +0 -1
- package/dist/node/queue/workers/ethTransactionSubmission.d.ts +0 -3
- package/dist/node/queue/workers/ethTransactionSubmission.d.ts.map +0 -1
- package/dist/node/queue/workers/xl1ToEthBridgeParent.d.ts +0 -3
- package/dist/node/queue/workers/xl1ToEthBridgeParent.d.ts.map +0 -1
- package/dist/node/queue/workers/xl1TransactionMonitor.d.ts +0 -3
- package/dist/node/queue/workers/xl1TransactionMonitor.d.ts.map +0 -1
- package/dist/node/queue/workers/xl1TransactionPreparation.d.ts +0 -3
- package/dist/node/queue/workers/xl1TransactionPreparation.d.ts.map +0 -1
- package/dist/node/queue/workers/xl1TransactionSubmission.d.ts +0 -3
- package/dist/node/queue/workers/xl1TransactionSubmission.d.ts.map +0 -1
- package/dist/node/server/flowProducer.d.ts.map +0 -1
- /package/src/server/{flowProducer.ts → addFlowProducer.ts} +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ var connection;
|
|
|
14
14
|
var maxRetriesPerRequest = null;
|
|
15
15
|
var getConnection = /* @__PURE__ */ __name((config) => {
|
|
16
16
|
if (isDefined(connection)) return connection;
|
|
17
|
-
const { redisHost: host, redisPort: port } = config.bridge;
|
|
17
|
+
const { redisHost: host, redisPort: port } = config.actors.bridge;
|
|
18
18
|
connection = new Redis({
|
|
19
19
|
host,
|
|
20
20
|
port,
|
|
@@ -35,15 +35,28 @@ var getFlowProducer = /* @__PURE__ */ __name((connection2) => {
|
|
|
35
35
|
return flowProducer;
|
|
36
36
|
}, "getFlowProducer");
|
|
37
37
|
|
|
38
|
-
// src/queue/workers/
|
|
38
|
+
// src/queue/workers/createWorkers.ts
|
|
39
|
+
var createWorkers = /* @__PURE__ */ __name((connection2, services) => {
|
|
40
|
+
Xl1ToEthBridgeParent.createWorker(connection2);
|
|
41
|
+
Xl1TransactionPreparation.createWorker(connection2, services);
|
|
42
|
+
Xl1TransactionSubmission.createWorker(connection2, services);
|
|
43
|
+
Xl1TransactionMonitor.createWorker(connection2, services);
|
|
44
|
+
EthTransactionPreparation.createWorker(connection2, services);
|
|
45
|
+
EthTransactionSubmission.createWorker(connection2, services);
|
|
46
|
+
EthTransactionMonitor.createWorker(connection2, services);
|
|
47
|
+
}, "createWorkers");
|
|
48
|
+
|
|
49
|
+
// src/queue/workers/EthTransactionMonitor.ts
|
|
39
50
|
import { assertEx } from "@xylabs/sdk-js";
|
|
40
51
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
41
52
|
import { Worker } from "bullmq";
|
|
42
53
|
var name = "Monitor Submitted ETH Transaction";
|
|
43
54
|
var queueName = "eth-tx-monitor";
|
|
44
|
-
var createWorker = /* @__PURE__ */ __name((connection2) => {
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
var createWorker = /* @__PURE__ */ __name((connection2, services) => {
|
|
56
|
+
const provider = assertEx(services?.provider, () => "provider service not provided");
|
|
57
|
+
const stateMap = assertEx(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
|
|
58
|
+
const worker = new Worker(queueName, async (job) => {
|
|
59
|
+
const { tx } = job.data;
|
|
47
60
|
const hash = await PayloadBuilder.hash(tx[0]);
|
|
48
61
|
const state = assertEx(await stateMap.get(hash), () => "State not found");
|
|
49
62
|
const submissionHash = assertEx(state?.submissionHash, () => "submissionHash not found");
|
|
@@ -59,14 +72,20 @@ var createWorker = /* @__PURE__ */ __name((connection2) => {
|
|
|
59
72
|
}, {
|
|
60
73
|
connection: connection2
|
|
61
74
|
});
|
|
75
|
+
worker.on("failed", (job, err) => {
|
|
76
|
+
console.error(`[${name}] Job ${job?.id} failed:`, err.message);
|
|
77
|
+
});
|
|
78
|
+
worker.on("error", (err) => {
|
|
79
|
+
console.error(`[${name}] Worker error:`, err);
|
|
80
|
+
});
|
|
62
81
|
}, "createWorker");
|
|
63
|
-
var
|
|
82
|
+
var EthTransactionMonitor = {
|
|
64
83
|
createWorker,
|
|
65
84
|
name,
|
|
66
85
|
queueName
|
|
67
86
|
};
|
|
68
87
|
|
|
69
|
-
// src/queue/workers/
|
|
88
|
+
// src/queue/workers/EthTransactionPreparation.ts
|
|
70
89
|
import { assertEx as assertEx2, hexToBigInt } from "@xylabs/sdk-js";
|
|
71
90
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
72
91
|
import { isBridgeIntent } from "@xyo-network/xl1-sdk";
|
|
@@ -74,9 +93,11 @@ import { Worker as Worker2 } from "bullmq";
|
|
|
74
93
|
import { getAddress } from "ethers";
|
|
75
94
|
var name2 = "Prepare ETH Transaction";
|
|
76
95
|
var queueName2 = "eth-tx-prepare";
|
|
77
|
-
var createWorker2 = /* @__PURE__ */ __name((connection2) => {
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
var createWorker2 = /* @__PURE__ */ __name((connection2, services) => {
|
|
97
|
+
const bridge = assertEx2(services?.bridge, () => "bridge service not provided");
|
|
98
|
+
const stateMap = assertEx2(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
|
|
99
|
+
const worker = new Worker2(queueName2, async (job) => {
|
|
100
|
+
const { tx } = job.data;
|
|
80
101
|
const hash = await PayloadBuilder2.hash(tx[0]);
|
|
81
102
|
await job.log(`[${hash}] preparing ETH transaction`);
|
|
82
103
|
await job.log(`[${hash}] building ETH transaction`);
|
|
@@ -84,7 +105,8 @@ var createWorker2 = /* @__PURE__ */ __name((connection2) => {
|
|
|
84
105
|
const amount = hexToBigInt(bridgeIntent.destAmount);
|
|
85
106
|
const srcAddress = getAddress(bridgeIntent.srcAddress);
|
|
86
107
|
const destAddress = getAddress(bridgeIntent.destAddress);
|
|
87
|
-
const
|
|
108
|
+
const nonce = hexToBigInt(await PayloadBuilder2.hash(tx[0]));
|
|
109
|
+
const preparedTx = await bridge.getFunction("bridgeFromRemote").populateTransaction(srcAddress, destAddress, amount, nonce);
|
|
88
110
|
await job.log(`[${hash}] built ETH transaction`);
|
|
89
111
|
await job.log(`[${hash}] storing ETH preparedTx`);
|
|
90
112
|
await stateMap.set(hash, {
|
|
@@ -96,25 +118,62 @@ var createWorker2 = /* @__PURE__ */ __name((connection2) => {
|
|
|
96
118
|
}, {
|
|
97
119
|
connection: connection2
|
|
98
120
|
});
|
|
121
|
+
worker.on("failed", (job, err) => {
|
|
122
|
+
console.error(`[${name2}] Job ${job?.id} failed:`, err.message);
|
|
123
|
+
});
|
|
124
|
+
worker.on("error", (err) => {
|
|
125
|
+
console.error(`[${name2}] Worker error:`, err);
|
|
126
|
+
});
|
|
99
127
|
}, "createWorker");
|
|
100
|
-
var
|
|
128
|
+
var EthTransactionPreparation = {
|
|
101
129
|
createWorker: createWorker2,
|
|
102
130
|
name: name2,
|
|
103
131
|
queueName: queueName2
|
|
104
132
|
};
|
|
105
133
|
|
|
106
|
-
// src/queue/workers/
|
|
107
|
-
import { assertEx as
|
|
108
|
-
import { PayloadBuilder as
|
|
134
|
+
// src/queue/workers/EthTransactionSubmission.ts
|
|
135
|
+
import { assertEx as assertEx4, isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
136
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
109
137
|
import { Worker as Worker3 } from "bullmq";
|
|
138
|
+
|
|
139
|
+
// src/queue/workers/util/submitEthTransaction.ts
|
|
140
|
+
import { assertEx as assertEx3, hexToBigInt as hexToBigInt2, toEthAddress } from "@xylabs/sdk-js";
|
|
141
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
142
|
+
import { isBridgeIntent as isBridgeIntent2 } from "@xyo-network/xl1-sdk";
|
|
143
|
+
var submitEthTransaction = /* @__PURE__ */ __name(async (tx, bridgeableToken, bridge, wallet) => {
|
|
144
|
+
const xl1Transaction = assertEx3(tx[0], () => "No corresponding XL1 transaction found");
|
|
145
|
+
const bridgeIntent = assertEx3(tx[1].find(isBridgeIntent2), () => "No bridge intent found");
|
|
146
|
+
const srcAddress = toEthAddress(bridgeIntent.srcAddress);
|
|
147
|
+
const destAddress = toEthAddress(bridgeIntent.destAddress);
|
|
148
|
+
const amount = hexToBigInt2(bridgeIntent.destAmount);
|
|
149
|
+
const nonce = hexToBigInt2(await PayloadBuilder3.hash(xl1Transaction));
|
|
150
|
+
const bridgeTx = await bridge.connect(wallet).bridgeFromRemote(srcAddress, destAddress, amount, nonce);
|
|
151
|
+
const receipt = await bridgeTx.wait(1);
|
|
152
|
+
return receipt?.hash;
|
|
153
|
+
}, "submitEthTransaction");
|
|
154
|
+
|
|
155
|
+
// src/queue/workers/util/submitXl1Transaction.ts
|
|
156
|
+
import { isAllowedBlockPayload } from "@xyo-network/xl1-sdk";
|
|
157
|
+
var submitXl1Transaction = /* @__PURE__ */ __name(async (preparedTx, gateway) => {
|
|
158
|
+
const onChain = preparedTx[1].filter(isAllowedBlockPayload);
|
|
159
|
+
const offChainPayloads = preparedTx[1].filter((p) => !isAllowedBlockPayload(p));
|
|
160
|
+
const result = await gateway.addPayloadsToChain(onChain, offChainPayloads);
|
|
161
|
+
return result;
|
|
162
|
+
}, "submitXl1Transaction");
|
|
163
|
+
|
|
164
|
+
// src/queue/workers/EthTransactionSubmission.ts
|
|
110
165
|
var name3 = "Submit ETH Transaction";
|
|
111
166
|
var queueName3 = "eth-tx-submit";
|
|
112
|
-
var createWorker3 = /* @__PURE__ */ __name((connection2) => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
167
|
+
var createWorker3 = /* @__PURE__ */ __name((connection2, services) => {
|
|
168
|
+
const bridge = assertEx4(services?.bridge, () => "bridge service not provided");
|
|
169
|
+
const bridgeableToken = assertEx4(services?.bridgeableToken, () => "bridgeableToken service not provided");
|
|
170
|
+
const wallet = assertEx4(services?.wallet, () => "wallet service not provided");
|
|
171
|
+
const stateMap = assertEx4(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
|
|
172
|
+
const worker = new Worker3(queueName3, async (job) => {
|
|
173
|
+
const { tx } = job.data;
|
|
174
|
+
const hash = await PayloadBuilder4.hash(tx[0]);
|
|
175
|
+
const state = assertEx4(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
176
|
+
const preparedTx = assertEx4(state?.preparedTx, () => `[${hash}] preparedTx not found`);
|
|
118
177
|
const { submissionHash: existingSubmissionHash } = state;
|
|
119
178
|
if (isDefined3(existingSubmissionHash)) {
|
|
120
179
|
await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
|
|
@@ -123,8 +182,7 @@ var createWorker3 = /* @__PURE__ */ __name((connection2) => {
|
|
|
123
182
|
};
|
|
124
183
|
}
|
|
125
184
|
await job.log(`[${hash}] Submitting ETH tx`);
|
|
126
|
-
const
|
|
127
|
-
const submissionHash = submissionResponse.hash;
|
|
185
|
+
const submissionHash = assertEx4(await submitEthTransaction(tx, bridgeableToken, bridge, wallet), () => `[${hash}] submissionHash not found in receipt`);
|
|
128
186
|
await job.log(`[${hash}] Submitted ETH tx and received submission response hash ${submissionHash}`);
|
|
129
187
|
await job.log(`[${hash}] Storing ETH submissionHash`);
|
|
130
188
|
state.submissionHash = submissionHash;
|
|
@@ -137,19 +195,25 @@ var createWorker3 = /* @__PURE__ */ __name((connection2) => {
|
|
|
137
195
|
connection: connection2,
|
|
138
196
|
concurrency: 1
|
|
139
197
|
});
|
|
198
|
+
worker.on("failed", (job, err) => {
|
|
199
|
+
console.error(`[${name3}] Job ${job?.id} failed:`, err.message);
|
|
200
|
+
});
|
|
201
|
+
worker.on("error", (err) => {
|
|
202
|
+
console.error(`[${name3}] Worker error:`, err);
|
|
203
|
+
});
|
|
140
204
|
}, "createWorker");
|
|
141
|
-
var
|
|
205
|
+
var EthTransactionSubmission = {
|
|
142
206
|
createWorker: createWorker3,
|
|
143
207
|
name: name3,
|
|
144
208
|
queueName: queueName3
|
|
145
209
|
};
|
|
146
210
|
|
|
147
|
-
// src/queue/workers/
|
|
211
|
+
// src/queue/workers/Xl1ToEthBridgeParent.ts
|
|
148
212
|
import { Worker as Worker4 } from "bullmq";
|
|
149
213
|
var name4 = "Bridge XL1 to Ethereum";
|
|
150
214
|
var queueName4 = "xl1-to-eth-bridge";
|
|
151
215
|
var createWorker4 = /* @__PURE__ */ __name((connection2) => {
|
|
152
|
-
new Worker4(queueName4, async (job) => {
|
|
216
|
+
const worker = new Worker4(queueName4, async (job) => {
|
|
153
217
|
await job.log(`[${job.name}] start`);
|
|
154
218
|
await job.log(`[${job.name}] done`);
|
|
155
219
|
return {
|
|
@@ -158,30 +222,39 @@ var createWorker4 = /* @__PURE__ */ __name((connection2) => {
|
|
|
158
222
|
}, {
|
|
159
223
|
connection: connection2
|
|
160
224
|
});
|
|
225
|
+
worker.on("failed", (job, err) => {
|
|
226
|
+
console.error(`[${name4}] Job ${job?.id} failed:`, err.message);
|
|
227
|
+
});
|
|
228
|
+
worker.on("error", (err) => {
|
|
229
|
+
console.error(`[${name4}] Worker error:`, err);
|
|
230
|
+
});
|
|
161
231
|
}, "createWorker");
|
|
162
|
-
var
|
|
232
|
+
var Xl1ToEthBridgeParent = {
|
|
163
233
|
createWorker: createWorker4,
|
|
164
234
|
name: name4,
|
|
165
235
|
queueName: queueName4
|
|
166
236
|
};
|
|
167
237
|
|
|
168
|
-
// src/queue/workers/
|
|
169
|
-
import { assertEx as
|
|
170
|
-
import { PayloadBuilder as
|
|
238
|
+
// src/queue/workers/Xl1TransactionMonitor.ts
|
|
239
|
+
import { assertEx as assertEx5, isDefined as isDefined4, isNull } from "@xylabs/sdk-js";
|
|
240
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
171
241
|
import { UnrecoverableError, Worker as Worker5 } from "bullmq";
|
|
172
242
|
var name5 = "Monitor Submitted XL1 Transaction";
|
|
173
243
|
var queueName5 = "xl1-tx-monitor";
|
|
174
|
-
var createWorker5 = /* @__PURE__ */ __name((connection2) => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const
|
|
179
|
-
const
|
|
244
|
+
var createWorker5 = /* @__PURE__ */ __name((connection2, services) => {
|
|
245
|
+
const gateway = assertEx5(services?.gateway, () => "gateway service not provided");
|
|
246
|
+
const stateMap = assertEx5(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
|
|
247
|
+
const worker = new Worker5(queueName5, async (job) => {
|
|
248
|
+
const { tx } = job.data;
|
|
249
|
+
const hash = await PayloadBuilder5.hash(tx[0]);
|
|
250
|
+
const viewer = assertEx5(gateway.connection.viewer, () => `[${hash}] viewer not defined on gateway`);
|
|
251
|
+
const state = assertEx5(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
252
|
+
const submissionHash = assertEx5(state?.submissionHash, () => `[${hash}] submissionHash not found`);
|
|
180
253
|
await job.log(`[${hash}] Checking for XL1 transaction inclusion on chain`);
|
|
181
|
-
const foundTx = await viewer.transactionByHash(
|
|
254
|
+
const foundTx = await viewer.transactionByHash(submissionHash);
|
|
182
255
|
if (isDefined4(foundTx) && !isNull(foundTx)) {
|
|
183
256
|
await job.log(`[${hash}] Found transaction on chain`);
|
|
184
|
-
state.confirmationHash = hash;
|
|
257
|
+
state.confirmationHash = await PayloadBuilder5.hash(foundTx[0]);
|
|
185
258
|
await stateMap.set(hash, state);
|
|
186
259
|
return {};
|
|
187
260
|
}
|
|
@@ -195,22 +268,30 @@ var createWorker5 = /* @__PURE__ */ __name((connection2) => {
|
|
|
195
268
|
}, {
|
|
196
269
|
connection: connection2
|
|
197
270
|
});
|
|
271
|
+
worker.on("failed", (job, err) => {
|
|
272
|
+
console.error(`[${name5}] Job ${job?.id} failed:`, err.message);
|
|
273
|
+
});
|
|
274
|
+
worker.on("error", (err) => {
|
|
275
|
+
console.error(`[${name5}] Worker error:`, err);
|
|
276
|
+
});
|
|
198
277
|
}, "createWorker");
|
|
199
|
-
var
|
|
278
|
+
var Xl1TransactionMonitor = {
|
|
200
279
|
createWorker: createWorker5,
|
|
201
280
|
name: name5,
|
|
202
281
|
queueName: queueName5
|
|
203
282
|
};
|
|
204
283
|
|
|
205
|
-
// src/queue/workers/
|
|
206
|
-
import {
|
|
284
|
+
// src/queue/workers/Xl1TransactionPreparation.ts
|
|
285
|
+
import { assertEx as assertEx6 } from "@xylabs/sdk-js";
|
|
286
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
|
|
207
287
|
import { Worker as Worker6 } from "bullmq";
|
|
208
288
|
var name6 = "Prepare XL1 Transaction";
|
|
209
289
|
var queueName6 = "xl1-tx-prepare";
|
|
210
|
-
var createWorker6 = /* @__PURE__ */ __name((connection2) => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const
|
|
290
|
+
var createWorker6 = /* @__PURE__ */ __name((connection2, services) => {
|
|
291
|
+
const stateMap = assertEx6(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
|
|
292
|
+
const worker = new Worker6(queueName6, async (job) => {
|
|
293
|
+
const { tx } = job.data;
|
|
294
|
+
const hash = await PayloadBuilder6.hash(tx[0]);
|
|
214
295
|
await job.log(`[${hash}] preparing XL1 transaction`);
|
|
215
296
|
const preparedTx = tx;
|
|
216
297
|
await job.log(`[${hash}] storing XL1 preparedTx`);
|
|
@@ -223,25 +304,33 @@ var createWorker6 = /* @__PURE__ */ __name((connection2) => {
|
|
|
223
304
|
}, {
|
|
224
305
|
connection: connection2
|
|
225
306
|
});
|
|
307
|
+
worker.on("failed", (job, err) => {
|
|
308
|
+
console.error(`[${name6}] Job ${job?.id} failed:`, err.message);
|
|
309
|
+
});
|
|
310
|
+
worker.on("error", (err) => {
|
|
311
|
+
console.error(`[${name6}] Worker error:`, err);
|
|
312
|
+
});
|
|
226
313
|
}, "createWorker");
|
|
227
|
-
var
|
|
314
|
+
var Xl1TransactionPreparation = {
|
|
228
315
|
createWorker: createWorker6,
|
|
229
316
|
name: name6,
|
|
230
317
|
queueName: queueName6
|
|
231
318
|
};
|
|
232
319
|
|
|
233
|
-
// src/queue/workers/
|
|
234
|
-
import { assertEx as
|
|
235
|
-
import { PayloadBuilder as
|
|
320
|
+
// src/queue/workers/Xl1TransactionSubmission.ts
|
|
321
|
+
import { assertEx as assertEx7, isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
322
|
+
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
|
|
236
323
|
import { Worker as Worker7 } from "bullmq";
|
|
237
324
|
var name7 = "Submit XL1 Transaction";
|
|
238
325
|
var queueName7 = "xl1-tx-submit";
|
|
239
|
-
var createWorker7 = /* @__PURE__ */ __name((connection2) => {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const
|
|
244
|
-
const
|
|
326
|
+
var createWorker7 = /* @__PURE__ */ __name((connection2, services) => {
|
|
327
|
+
const gateway = assertEx7(services?.gateway, () => "gateway service not provided");
|
|
328
|
+
const stateMap = assertEx7(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
|
|
329
|
+
const worker = new Worker7(queueName7, async (job) => {
|
|
330
|
+
const { tx } = job.data;
|
|
331
|
+
const hash = await PayloadBuilder7.hash(tx[0]);
|
|
332
|
+
const state = assertEx7(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
333
|
+
const preparedTx = assertEx7(state?.preparedTx, () => `[${hash}] preparedTx not found`);
|
|
245
334
|
const { submissionHash: existingSubmissionHash } = state;
|
|
246
335
|
if (isDefined5(existingSubmissionHash)) {
|
|
247
336
|
await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
|
|
@@ -250,8 +339,7 @@ var createWorker7 = /* @__PURE__ */ __name((connection2) => {
|
|
|
250
339
|
};
|
|
251
340
|
}
|
|
252
341
|
await job.log(`[${hash}] Submitting XL1 tx`);
|
|
253
|
-
const [submissionHash] = await
|
|
254
|
-
assertEx5(submissionHash === hash, () => `[${hash}] Submitted transaction hash ${submissionHash} does not match expected hash`);
|
|
342
|
+
const [submissionHash] = await submitXl1Transaction(preparedTx, gateway);
|
|
255
343
|
await job.log(`[${hash}] Submitted XL1 tx`);
|
|
256
344
|
await job.log(`[${hash}] Storing XL1 submissionHash`);
|
|
257
345
|
state.submissionHash = submissionHash;
|
|
@@ -263,8 +351,14 @@ var createWorker7 = /* @__PURE__ */ __name((connection2) => {
|
|
|
263
351
|
}, {
|
|
264
352
|
connection: connection2
|
|
265
353
|
});
|
|
354
|
+
worker.on("failed", (job, err) => {
|
|
355
|
+
console.error(`[${name7}] Job ${job?.id} failed:`, err.message);
|
|
356
|
+
});
|
|
357
|
+
worker.on("error", (err) => {
|
|
358
|
+
console.error(`[${name7}] Worker error:`, err);
|
|
359
|
+
});
|
|
266
360
|
}, "createWorker");
|
|
267
|
-
var
|
|
361
|
+
var Xl1TransactionSubmission = {
|
|
268
362
|
createWorker: createWorker7,
|
|
269
363
|
name: name7,
|
|
270
364
|
queueName: queueName7
|
|
@@ -273,66 +367,72 @@ var xl1TransactionSubmission = {
|
|
|
273
367
|
// src/queue/flows/createXl1ToEthBridgeJob.ts
|
|
274
368
|
var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) => {
|
|
275
369
|
const flow = await flowProducer2.add({
|
|
276
|
-
name:
|
|
277
|
-
queueName:
|
|
370
|
+
name: Xl1ToEthBridgeParent.name,
|
|
371
|
+
queueName: Xl1ToEthBridgeParent.queueName,
|
|
278
372
|
data: {
|
|
279
373
|
tx
|
|
280
374
|
},
|
|
281
375
|
children: [
|
|
282
376
|
{
|
|
283
|
-
|
|
284
|
-
|
|
377
|
+
// Step 6 (runs after child completes)
|
|
378
|
+
name: EthTransactionMonitor.name,
|
|
379
|
+
queueName: EthTransactionMonitor.queueName,
|
|
285
380
|
data: {
|
|
286
381
|
tx
|
|
287
382
|
},
|
|
383
|
+
opts: {
|
|
384
|
+
attempts: 60,
|
|
385
|
+
backoff: {
|
|
386
|
+
type: "fixed",
|
|
387
|
+
delay: 5e3
|
|
388
|
+
}
|
|
389
|
+
},
|
|
288
390
|
children: [
|
|
289
391
|
{
|
|
290
|
-
|
|
291
|
-
|
|
392
|
+
// Step 5
|
|
393
|
+
name: EthTransactionSubmission.name,
|
|
394
|
+
queueName: EthTransactionSubmission.queueName,
|
|
292
395
|
data: {
|
|
293
396
|
tx
|
|
294
397
|
},
|
|
295
398
|
children: [
|
|
296
399
|
{
|
|
297
|
-
|
|
298
|
-
|
|
400
|
+
// Step 4
|
|
401
|
+
name: EthTransactionPreparation.name,
|
|
402
|
+
queueName: EthTransactionPreparation.queueName,
|
|
299
403
|
data: {
|
|
300
404
|
tx
|
|
301
405
|
},
|
|
302
|
-
opts: {
|
|
303
|
-
attempts: 60,
|
|
304
|
-
backoff: {
|
|
305
|
-
type: "fixed",
|
|
306
|
-
delay: 5e3
|
|
307
|
-
}
|
|
308
|
-
},
|
|
309
406
|
children: [
|
|
310
407
|
{
|
|
311
|
-
|
|
312
|
-
|
|
408
|
+
// Step 3
|
|
409
|
+
name: Xl1TransactionMonitor.name,
|
|
410
|
+
queueName: Xl1TransactionMonitor.queueName,
|
|
313
411
|
data: {
|
|
314
412
|
tx
|
|
315
413
|
},
|
|
414
|
+
opts: {
|
|
415
|
+
attempts: 60,
|
|
416
|
+
backoff: {
|
|
417
|
+
type: "fixed",
|
|
418
|
+
delay: 5e3
|
|
419
|
+
}
|
|
420
|
+
},
|
|
316
421
|
children: [
|
|
317
422
|
{
|
|
318
|
-
|
|
319
|
-
|
|
423
|
+
// Step 2
|
|
424
|
+
name: Xl1TransactionSubmission.name,
|
|
425
|
+
queueName: Xl1TransactionSubmission.queueName,
|
|
320
426
|
data: {
|
|
321
427
|
tx
|
|
322
428
|
},
|
|
323
429
|
children: [
|
|
324
430
|
{
|
|
325
|
-
|
|
326
|
-
|
|
431
|
+
// Step 1 (runs first as deepest child)
|
|
432
|
+
name: Xl1TransactionPreparation.name,
|
|
433
|
+
queueName: Xl1TransactionPreparation.queueName,
|
|
327
434
|
data: {
|
|
328
435
|
tx
|
|
329
|
-
},
|
|
330
|
-
opts: {
|
|
331
|
-
attempts: 60,
|
|
332
|
-
backoff: {
|
|
333
|
-
type: "fixed",
|
|
334
|
-
delay: 5e3
|
|
335
|
-
}
|
|
336
436
|
}
|
|
337
437
|
}
|
|
338
438
|
]
|
|
@@ -350,7 +450,7 @@ var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) =
|
|
|
350
450
|
return flow;
|
|
351
451
|
}, "createXl1ToEthBridgeJob");
|
|
352
452
|
|
|
353
|
-
// src/server/
|
|
453
|
+
// src/server/addFlowProducer.ts
|
|
354
454
|
var addFlowProducer = /* @__PURE__ */ __name((app, config) => {
|
|
355
455
|
const connection2 = getConnection(config);
|
|
356
456
|
const flowProducer2 = getFlowProducer(connection2);
|
|
@@ -391,22 +491,22 @@ var asToken = /* @__PURE__ */ __name((value) => {
|
|
|
391
491
|
}, "asToken");
|
|
392
492
|
|
|
393
493
|
// src/config/getBridgeEscrowAddress.ts
|
|
394
|
-
import { asAddress as asAddress2, assertEx as
|
|
494
|
+
import { asAddress as asAddress2, assertEx as assertEx8 } from "@xylabs/sdk-js";
|
|
395
495
|
var tryGetBridgeEscrowAddress = /* @__PURE__ */ __name((config) => {
|
|
396
|
-
const address = asAddress2(config.bridge.escrowAddress);
|
|
496
|
+
const address = asAddress2(config.actors.bridge.escrowAddress);
|
|
397
497
|
return address;
|
|
398
498
|
}, "tryGetBridgeEscrowAddress");
|
|
399
499
|
|
|
400
500
|
// src/config/getBridgeFeesAddress.ts
|
|
401
|
-
import { asAddress as asAddress3, assertEx as
|
|
501
|
+
import { asAddress as asAddress3, assertEx as assertEx9 } from "@xylabs/sdk-js";
|
|
402
502
|
var tryGetBridgeFeesAddress = /* @__PURE__ */ __name((config) => {
|
|
403
|
-
const address = asAddress3(config.bridge.feesAddress);
|
|
503
|
+
const address = asAddress3(config.actors.bridge.feesAddress);
|
|
404
504
|
return address;
|
|
405
505
|
}, "tryGetBridgeFeesAddress");
|
|
406
506
|
|
|
407
507
|
// src/config/getFeeStructure.ts
|
|
408
508
|
var getFeeStructure = /* @__PURE__ */ __name((config) => {
|
|
409
|
-
const { feeFixed, feeRateBasisPoints } = config.bridge;
|
|
509
|
+
const { feeFixed, feeRateBasisPoints } = config.actors.bridge;
|
|
410
510
|
return {
|
|
411
511
|
feeFixed,
|
|
412
512
|
feeRateBasisPoints
|
|
@@ -415,28 +515,28 @@ var getFeeStructure = /* @__PURE__ */ __name((config) => {
|
|
|
415
515
|
|
|
416
516
|
// src/config/getMaxBridgeAmount.ts
|
|
417
517
|
var getMaxBridgeAmount = /* @__PURE__ */ __name((config) => {
|
|
418
|
-
const { maxBridgeAmount } = config.bridge;
|
|
518
|
+
const { maxBridgeAmount } = config.actors.bridge;
|
|
419
519
|
return maxBridgeAmount;
|
|
420
520
|
}, "getMaxBridgeAmount");
|
|
421
521
|
|
|
422
522
|
// src/config/getMinBridgeAmount.ts
|
|
423
523
|
var getMinBridgeAmount = /* @__PURE__ */ __name((config) => {
|
|
424
|
-
const { minBridgeAmount } = config.bridge;
|
|
524
|
+
const { minBridgeAmount } = config.actors.bridge;
|
|
425
525
|
return minBridgeAmount;
|
|
426
526
|
}, "getMinBridgeAmount");
|
|
427
527
|
|
|
428
528
|
// src/config/getRemoteChainId.ts
|
|
429
|
-
import { assertEx as
|
|
529
|
+
import { assertEx as assertEx10 } from "@xylabs/sdk-js";
|
|
430
530
|
var getRemoteChainId = /* @__PURE__ */ __name((config) => {
|
|
431
|
-
const remoteChainId =
|
|
531
|
+
const remoteChainId = assertEx10(asChainId(config.actors.bridge.remoteChainId), () => "Invalid remote chain ID in config");
|
|
432
532
|
return remoteChainId;
|
|
433
533
|
}, "getRemoteChainId");
|
|
434
534
|
|
|
435
535
|
// src/config/getRemoteTokenAddress.ts
|
|
436
|
-
import { assertEx as
|
|
536
|
+
import { assertEx as assertEx11 } from "@xylabs/sdk-js";
|
|
437
537
|
var getRemoteTokenAddress = /* @__PURE__ */ __name((config) => {
|
|
438
|
-
const token = asToken(config.bridge.remoteTokenAddress);
|
|
439
|
-
return
|
|
538
|
+
const token = asToken(config.actors.bridge.remoteTokenAddress);
|
|
539
|
+
return assertEx11(token, () => "Remote token address is not defined in bridge configuration");
|
|
440
540
|
}, "getRemoteTokenAddress");
|
|
441
541
|
|
|
442
542
|
// src/config/getBridgeWalletAccount.ts
|
|
@@ -446,7 +546,7 @@ import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1
|
|
|
446
546
|
var accountServiceSingleton;
|
|
447
547
|
var getBridgeWalletAccount = /* @__PURE__ */ __name(async (config) => {
|
|
448
548
|
if (accountServiceSingleton) return accountServiceSingleton;
|
|
449
|
-
let walletPhrase = config.bridge.mnemonic;
|
|
549
|
+
let walletPhrase = config.actors.bridge.mnemonic;
|
|
450
550
|
if (isUndefined(walletPhrase)) {
|
|
451
551
|
console.log("[Bridge] No wallet mnemonic specified!");
|
|
452
552
|
const randomMnemonic = HDWallet.generateMnemonic();
|
|
@@ -474,19 +574,19 @@ var getTransferAddresses = /* @__PURE__ */ __name(async (config) => {
|
|
|
474
574
|
}, "getTransferAddresses");
|
|
475
575
|
|
|
476
576
|
// src/config/getXl1ChainId.ts
|
|
477
|
-
import { assertEx as
|
|
577
|
+
import { assertEx as assertEx12, isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
478
578
|
var getXl1ChainId = /* @__PURE__ */ __name((config) => {
|
|
479
|
-
const xl1ChainId = config.bridge.xl1ChainId;
|
|
579
|
+
const xl1ChainId = config.actors.bridge.xl1ChainId;
|
|
480
580
|
if (isDefined7(xl1ChainId)) {
|
|
481
|
-
return
|
|
581
|
+
return assertEx12(asChainId(xl1ChainId), () => "Invalid xl1ChainId in bridge config");
|
|
482
582
|
}
|
|
483
|
-
return
|
|
583
|
+
return assertEx12(asChainId(config.chain.id), () => "Invalid chain.id in config");
|
|
484
584
|
}, "getXl1ChainId");
|
|
485
585
|
|
|
486
586
|
// src/config/getXl1TokenAddress.ts
|
|
487
587
|
import { isDefined as isDefined8 } from "@xylabs/sdk-js";
|
|
488
588
|
var getXl1TokenAddress = /* @__PURE__ */ __name((config) => {
|
|
489
|
-
const token = asToken(config.bridge.xl1TokenAddress);
|
|
589
|
+
const token = asToken(config.actors.bridge.xl1TokenAddress);
|
|
490
590
|
if (isDefined8(token)) return token;
|
|
491
591
|
return getXl1ChainId(config);
|
|
492
592
|
}, "getXl1TokenAddress");
|
|
@@ -518,28 +618,26 @@ var getBridgeSettings = /* @__PURE__ */ __name(async (config) => {
|
|
|
518
618
|
// src/config/getGateway.ts
|
|
519
619
|
import { isDefined as isDefined9 } from "@xylabs/sdk-js";
|
|
520
620
|
import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
|
|
521
|
-
import {
|
|
621
|
+
import { ADDRESS_INDEX as ADDRESS_INDEX2, buildJsonRpcProviderLocator, generateXyoBaseWalletFromPhrase as generateXyoBaseWalletFromPhrase2, HttpRpcTransport, XyoGatewayRunnerMoniker } from "@xyo-network/xl1-sdk";
|
|
522
622
|
var gatewayInstance;
|
|
523
623
|
var getGateway = /* @__PURE__ */ __name(async (config) => {
|
|
524
624
|
if (isDefined9(gatewayInstance)) return gatewayInstance;
|
|
525
|
-
const { mnemonic, chainRpcApiUrl: endpoint } = config.bridge;
|
|
526
|
-
const
|
|
527
|
-
const
|
|
625
|
+
const { mnemonic, chainRpcApiUrl: endpoint } = config.actors.bridge;
|
|
626
|
+
const walletPhrase = isDefined9(mnemonic) ? mnemonic : HDWallet2.generateMnemonic();
|
|
627
|
+
const wallet = await generateXyoBaseWalletFromPhrase2(walletPhrase);
|
|
628
|
+
const signerAccount = await wallet.derivePath(ADDRESS_INDEX2.XYO);
|
|
528
629
|
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport(endpoint, schemas), "transportFactory");
|
|
529
630
|
const locator = await buildJsonRpcProviderLocator({
|
|
530
|
-
transportFactory
|
|
631
|
+
transportFactory,
|
|
632
|
+
signerAccount
|
|
531
633
|
});
|
|
532
|
-
locator.register(SimpleXyoSigner.factory(SimpleXyoSigner.dependencies, {
|
|
533
|
-
account
|
|
534
|
-
}));
|
|
535
|
-
locator.register(SimpleXyoGatewayRunner.factory(SimpleXyoGatewayRunner.dependencies));
|
|
536
634
|
return await locator.getInstance(XyoGatewayRunnerMoniker);
|
|
537
635
|
}, "getGateway");
|
|
538
636
|
|
|
539
637
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts
|
|
540
|
-
var
|
|
638
|
+
var BridgeConfigResponseZod = BridgeSettingsZod;
|
|
541
639
|
var validateRequest = requestHandlerValidator({
|
|
542
|
-
response
|
|
640
|
+
response: BridgeConfigResponseZod
|
|
543
641
|
});
|
|
544
642
|
var makeBridgeConfigRoute = /* @__PURE__ */ __name((config) => {
|
|
545
643
|
return {
|
|
@@ -593,10 +691,10 @@ var makeBridgeFromRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
|
|
|
593
691
|
chainId: getRemoteChainIdZod(config),
|
|
594
692
|
nonce: z.string().nonempty()
|
|
595
693
|
});
|
|
596
|
-
const
|
|
694
|
+
const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape);
|
|
597
695
|
const validateRequest2 = requestHandlerValidator2({
|
|
598
696
|
params,
|
|
599
|
-
response
|
|
697
|
+
response
|
|
600
698
|
});
|
|
601
699
|
return {
|
|
602
700
|
method: "get",
|
|
@@ -627,17 +725,17 @@ var makeBridgeFromRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
|
|
|
627
725
|
|
|
628
726
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
|
|
629
727
|
import { requestHandlerValidator as requestHandlerValidator3 } from "@xylabs/express";
|
|
630
|
-
import { PayloadBuilder as
|
|
631
|
-
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
|
|
728
|
+
import { PayloadBuilder as PayloadBuilder11 } from "@xyo-network/payload-builder";
|
|
729
|
+
import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
|
|
632
730
|
import { BridgeIntentFieldsZod, BridgeIntentSchema as BridgeIntentSchema2, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod, TransferZod } from "@xyo-network/xl1-sdk";
|
|
633
731
|
import { z as z2 } from "zod";
|
|
634
732
|
|
|
635
733
|
// src/util/calculateBridgeFees.ts
|
|
636
|
-
import { hexToBigInt as
|
|
734
|
+
import { hexToBigInt as hexToBigInt3, toHex as toHex2 } from "@xylabs/sdk-js";
|
|
637
735
|
var calculateBridgeFees = /* @__PURE__ */ __name((srcAmount, feeStructure) => {
|
|
638
736
|
const { feeFixed, feeRateBasisPoints } = feeStructure;
|
|
639
|
-
const srcAmountBigInt =
|
|
640
|
-
const feeFixedBigInt =
|
|
737
|
+
const srcAmountBigInt = hexToBigInt3(srcAmount);
|
|
738
|
+
const feeFixedBigInt = hexToBigInt3(feeFixed);
|
|
641
739
|
const feeVariableBigInt = srcAmountBigInt * BigInt(feeRateBasisPoints) / 10000n;
|
|
642
740
|
const feeVariable = toHex2(feeVariableBigInt);
|
|
643
741
|
const feeTotalBigInt = feeFixedBigInt + feeVariableBigInt;
|
|
@@ -651,8 +749,8 @@ var calculateBridgeFees = /* @__PURE__ */ __name((srcAmount, feeStructure) => {
|
|
|
651
749
|
}, "calculateBridgeFees");
|
|
652
750
|
|
|
653
751
|
// src/util/generateBridgeEstimate.ts
|
|
654
|
-
import { hexToBigInt as
|
|
655
|
-
import { PayloadBuilder as
|
|
752
|
+
import { hexToBigInt as hexToBigInt4, toAddress as toAddress2 } from "@xylabs/sdk-js";
|
|
753
|
+
import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
|
|
656
754
|
import { BridgeIntentSchema, createTransferPayload } from "@xyo-network/xl1-sdk";
|
|
657
755
|
import { v4 } from "uuid";
|
|
658
756
|
var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount, destAddress, config, nonceOverride) => {
|
|
@@ -677,7 +775,7 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
|
|
|
677
775
|
destToken: remoteTokenAddress,
|
|
678
776
|
nonce
|
|
679
777
|
};
|
|
680
|
-
const bridgeIntent = new
|
|
778
|
+
const bridgeIntent = new PayloadBuilder8({
|
|
681
779
|
schema: BridgeIntentSchema
|
|
682
780
|
}).fields(bridgeIntentFields).build();
|
|
683
781
|
const context = {
|
|
@@ -686,8 +784,8 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
|
|
|
686
784
|
feeVariable
|
|
687
785
|
};
|
|
688
786
|
const transfer = createTransferPayload(sender, {
|
|
689
|
-
[escrowAddress]:
|
|
690
|
-
[feesAddress]:
|
|
787
|
+
[escrowAddress]: hexToBigInt4(destAmount),
|
|
788
|
+
[feesAddress]: hexToBigInt4(feeFixedAmount) + hexToBigInt4(feeVariable)
|
|
691
789
|
}, context);
|
|
692
790
|
return [
|
|
693
791
|
bridgeIntent,
|
|
@@ -697,24 +795,24 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
|
|
|
697
795
|
|
|
698
796
|
// src/util/validateBridgeEstimateExact.ts
|
|
699
797
|
import { isUndefined as isUndefined3 } from "@xylabs/sdk-js";
|
|
700
|
-
import { PayloadBuilder as
|
|
798
|
+
import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
|
|
701
799
|
var validateBridgeEstimateExact = /* @__PURE__ */ __name(async (intent, transfer, config) => {
|
|
702
800
|
const { srcAddress, srcAmount, destAddress } = intent;
|
|
703
801
|
const [calculatedIntent, calculatedTransfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config);
|
|
704
802
|
if (isUndefined3(calculatedIntent) || isUndefined3(calculatedTransfer)) return false;
|
|
705
803
|
const { nonce: expectedIntentNonce, ...expectedIntentStatic } = calculatedIntent;
|
|
706
804
|
const { nonce: actualIntentNonce, ...actualIntentStatic } = intent;
|
|
707
|
-
if (await
|
|
805
|
+
if (await PayloadBuilder9.dataHash(expectedIntentStatic) !== await PayloadBuilder9.dataHash(actualIntentStatic)) return false;
|
|
708
806
|
const { epoch: expectedTransferEpoch, ...expectedTransferStatic } = calculatedTransfer;
|
|
709
807
|
const { epoch: actualTransferEpoch, ...actualTransferStatic } = transfer;
|
|
710
|
-
if (await
|
|
808
|
+
if (await PayloadBuilder9.dataHash(expectedTransferStatic) !== await PayloadBuilder9.dataHash(actualTransferStatic)) return false;
|
|
711
809
|
return true;
|
|
712
810
|
}, "validateBridgeEstimateExact");
|
|
713
811
|
|
|
714
812
|
// src/util/validateBridgeTransaction.ts
|
|
715
813
|
import { asAddress as asAddress4, isDefined as isDefined10 } from "@xylabs/sdk-js";
|
|
716
814
|
import { addressesContains, BoundWitnessValidator, payloadHashesContainsAll } from "@xyo-network/boundwitness-validator";
|
|
717
|
-
import { PayloadBuilder as
|
|
815
|
+
import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
|
|
718
816
|
var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent, transfer, config) => {
|
|
719
817
|
const { srcAddress } = intent;
|
|
720
818
|
const chainId = getXl1ChainId(config);
|
|
@@ -723,7 +821,7 @@ var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent
|
|
|
723
821
|
if (isDefined10(errors) && errors.length > 0) return false;
|
|
724
822
|
const sender = asAddress4(srcAddress, true);
|
|
725
823
|
if (!addressesContains(signedTxBw, sender)) return false;
|
|
726
|
-
const hashes = await
|
|
824
|
+
const hashes = await PayloadBuilder10.hashes([
|
|
727
825
|
intent,
|
|
728
826
|
transfer
|
|
729
827
|
]);
|
|
@@ -732,20 +830,20 @@ var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent
|
|
|
732
830
|
}, "validateBridgeTransaction");
|
|
733
831
|
|
|
734
832
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
|
|
833
|
+
var BridgeToRemoteBodyZod = z2.tuple([
|
|
834
|
+
SignedTransactionBoundWitnessZod,
|
|
835
|
+
PayloadZodLooseOfSchema(BridgeIntentSchema2).extend(BridgeIntentFieldsZod.shape),
|
|
836
|
+
TransferZod
|
|
837
|
+
]);
|
|
838
|
+
var BridgeToRemoteResponseZod = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
|
|
735
839
|
var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
736
840
|
const params = z2.object({
|
|
737
841
|
chainId: getRemoteChainIdZod(config)
|
|
738
842
|
});
|
|
739
|
-
const body = z2.tuple([
|
|
740
|
-
SignedTransactionBoundWitnessZod,
|
|
741
|
-
PayloadZodStrictOfSchema2(BridgeIntentSchema2).extend(BridgeIntentFieldsZod.shape),
|
|
742
|
-
TransferZod
|
|
743
|
-
]);
|
|
744
|
-
const response2 = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
|
|
745
843
|
const validateRequest2 = requestHandlerValidator3({
|
|
746
844
|
params,
|
|
747
|
-
body,
|
|
748
|
-
response:
|
|
845
|
+
body: BridgeToRemoteBodyZod,
|
|
846
|
+
response: BridgeToRemoteResponseZod
|
|
749
847
|
});
|
|
750
848
|
return {
|
|
751
849
|
method: "post",
|
|
@@ -771,14 +869,14 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
|
771
869
|
]
|
|
772
870
|
];
|
|
773
871
|
await createXl1ToEthBridgeJob(flowProducer2, singedHydratedTransaction);
|
|
774
|
-
const srcConfirmation = await
|
|
872
|
+
const srcConfirmation = await PayloadBuilder11.hash(signedTxBw);
|
|
775
873
|
const bridgeCommonFieldsZod = z2.object({}).extend(BridgeSourceObservationFieldsZod.shape);
|
|
776
874
|
const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent);
|
|
777
875
|
const bridgeObservationFields = {
|
|
778
876
|
...bridgeCommonFields,
|
|
779
877
|
srcConfirmation
|
|
780
878
|
};
|
|
781
|
-
const bridgeObservation = new
|
|
879
|
+
const bridgeObservation = new PayloadBuilder11({
|
|
782
880
|
schema: BridgeSourceObservationSchema
|
|
783
881
|
}).fields(bridgeObservationFields).build();
|
|
784
882
|
res.json(bridgeObservation);
|
|
@@ -788,29 +886,29 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
|
788
886
|
|
|
789
887
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts
|
|
790
888
|
import { requestHandlerValidator as requestHandlerValidator4 } from "@xylabs/express";
|
|
791
|
-
import { assertEx as
|
|
792
|
-
import {
|
|
793
|
-
import { buildUnsignedTransaction } from "@xyo-network/xl1-sdk";
|
|
794
|
-
import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema3, toXL1BlockNumber, TransactionBoundWitnessZod
|
|
889
|
+
import { assertEx as assertEx13, toAddress as toAddress3 } from "@xylabs/sdk-js";
|
|
890
|
+
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/payload-model";
|
|
891
|
+
import { buildUnsignedTransaction, TransferZod as TransferZod2 } from "@xyo-network/xl1-sdk";
|
|
892
|
+
import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema3, toXL1BlockNumber, TransactionBoundWitnessZod } from "@xyo-network/xl1-sdk";
|
|
795
893
|
import { z as z3 } from "zod";
|
|
894
|
+
var BridgeToRemoteEstimateBodyZod = BridgeIntentFieldsZod2.pick({
|
|
895
|
+
destAddress: true,
|
|
896
|
+
srcAddress: true,
|
|
897
|
+
srcAmount: true
|
|
898
|
+
});
|
|
899
|
+
var BridgeToRemoteEstimateResponseZod = z3.tuple([
|
|
900
|
+
TransactionBoundWitnessZod,
|
|
901
|
+
PayloadZodStrictOfSchema3(BridgeIntentSchema3).extend(BridgeIntentFieldsZod2.shape),
|
|
902
|
+
TransferZod2
|
|
903
|
+
]);
|
|
796
904
|
var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config) => {
|
|
797
905
|
const params = z3.object({
|
|
798
906
|
chainId: getRemoteChainIdZod(config)
|
|
799
907
|
});
|
|
800
|
-
const body = BridgeIntentFieldsZod2.pick({
|
|
801
|
-
destAddress: true,
|
|
802
|
-
srcAddress: true,
|
|
803
|
-
srcAmount: true
|
|
804
|
-
});
|
|
805
|
-
const response2 = z3.tuple([
|
|
806
|
-
TransactionBoundWitnessZod,
|
|
807
|
-
PayloadZodStrictOfSchema3(BridgeIntentSchema3).extend(BridgeIntentFieldsZod2.shape),
|
|
808
|
-
PayloadZodLooseOfSchema(TransferSchema)
|
|
809
|
-
]);
|
|
810
908
|
const validateRequest2 = requestHandlerValidator4({
|
|
811
909
|
params,
|
|
812
|
-
body,
|
|
813
|
-
response:
|
|
910
|
+
body: BridgeToRemoteEstimateBodyZod,
|
|
911
|
+
response: BridgeToRemoteEstimateResponseZod
|
|
814
912
|
});
|
|
815
913
|
return {
|
|
816
914
|
method: "post",
|
|
@@ -821,7 +919,7 @@ var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config) => {
|
|
|
821
919
|
const [bridgeIntent, transfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config);
|
|
822
920
|
const sender = toAddress3(srcAddress);
|
|
823
921
|
const gateway = await getGateway(config);
|
|
824
|
-
const viewer =
|
|
922
|
+
const viewer = assertEx13(gateway.connection.viewer, () => new Error("Viewer not available on gateway connection"));
|
|
825
923
|
const currentBlockNumber = await viewer.currentBlockNumber();
|
|
826
924
|
const nbf = toXL1BlockNumber(currentBlockNumber, true);
|
|
827
925
|
const exp = toXL1BlockNumber(currentBlockNumber + 1e3, true);
|
|
@@ -845,6 +943,21 @@ import { asAddress as asAddress5, asHex as asHex3, toHex as toHex3 } from "@xyla
|
|
|
845
943
|
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema4 } from "@xyo-network/payload-model";
|
|
846
944
|
import { BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2, BridgeIntentFieldsZod as BridgeIntentFieldsZod3, BridgeIntentSchema as BridgeIntentSchema4, BridgeSourceObservationFieldsZod as BridgeSourceObservationFieldsZod2, BridgeSourceObservationSchema as BridgeSourceObservationSchema2 } from "@xyo-network/xl1-sdk";
|
|
847
945
|
import { z as z4 } from "zod";
|
|
946
|
+
var BridgeToRemoteStatusResponseZod = z4.union([
|
|
947
|
+
z4.tuple([]),
|
|
948
|
+
z4.tuple([
|
|
949
|
+
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape)
|
|
950
|
+
]),
|
|
951
|
+
z4.tuple([
|
|
952
|
+
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
|
|
953
|
+
PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape)
|
|
954
|
+
]),
|
|
955
|
+
z4.tuple([
|
|
956
|
+
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
|
|
957
|
+
PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape),
|
|
958
|
+
PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape)
|
|
959
|
+
])
|
|
960
|
+
]);
|
|
848
961
|
var makeBridgeToRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
|
|
849
962
|
const params = z4.object({
|
|
850
963
|
chainId: getRemoteChainIdZod(config),
|
|
@@ -853,25 +966,10 @@ var makeBridgeToRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
|
|
|
853
966
|
const query = z4.object({
|
|
854
967
|
mockStatus: z4.coerce.number().default(0)
|
|
855
968
|
});
|
|
856
|
-
const response2 = z4.union([
|
|
857
|
-
z4.tuple([]),
|
|
858
|
-
z4.tuple([
|
|
859
|
-
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape)
|
|
860
|
-
]),
|
|
861
|
-
z4.tuple([
|
|
862
|
-
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
|
|
863
|
-
PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape)
|
|
864
|
-
]),
|
|
865
|
-
z4.tuple([
|
|
866
|
-
PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
|
|
867
|
-
PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape),
|
|
868
|
-
PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape)
|
|
869
|
-
])
|
|
870
|
-
]);
|
|
871
969
|
const validateRequest2 = requestHandlerValidator5({
|
|
872
970
|
params,
|
|
873
971
|
query,
|
|
874
|
-
response:
|
|
972
|
+
response: BridgeToRemoteStatusResponseZod
|
|
875
973
|
});
|
|
876
974
|
return {
|
|
877
975
|
method: "get",
|
|
@@ -976,18 +1074,18 @@ var getApp = /* @__PURE__ */ __name((node, config) => {
|
|
|
976
1074
|
}, "getApp");
|
|
977
1075
|
|
|
978
1076
|
// src/server/server.ts
|
|
979
|
-
import { assertEx as
|
|
1077
|
+
import { assertEx as assertEx18, isDefined as isDefined15, isString } from "@xylabs/sdk-js";
|
|
980
1078
|
import { boot } from "@xyo-network/bios";
|
|
981
1079
|
import { HDWallet as HDWallet4 } from "@xyo-network/wallet";
|
|
982
1080
|
|
|
983
1081
|
// src/manifest/getModuleLocator.ts
|
|
984
1082
|
import { BaseMongoSdk } from "@xylabs/mongo";
|
|
985
|
-
import { assertEx as
|
|
1083
|
+
import { assertEx as assertEx16, isDefined as isDefined13 } from "@xylabs/sdk-js";
|
|
986
1084
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
987
1085
|
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
988
1086
|
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
1087
|
+
import { initEvmProvider } from "@xyo-network/chain-orchestration";
|
|
989
1088
|
import { MongoMap } from "@xyo-network/chain-protocol";
|
|
990
|
-
import { initEvmProvider } from "@xyo-network/chain-services";
|
|
991
1089
|
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
992
1090
|
import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
|
|
993
1091
|
import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
|
|
@@ -995,12 +1093,12 @@ import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
|
995
1093
|
import { hasMongoConfig, mapToMapType, XyoGatewayRunnerMoniker as XyoGatewayRunnerMoniker2 } from "@xyo-network/xl1-sdk";
|
|
996
1094
|
|
|
997
1095
|
// src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts
|
|
998
|
-
import { asAddress as asAddress6, asHex as asHex4, assertEx as
|
|
999
|
-
import { PayloadBuilder as
|
|
1096
|
+
import { asAddress as asAddress6, asHex as asHex4, assertEx as assertEx14, delay, hexFromBigInt, hexToBigInt as hexToBigInt5, isDefined as isDefined11, isUndefined as isUndefined4 } from "@xylabs/sdk-js";
|
|
1097
|
+
import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/payload-builder";
|
|
1000
1098
|
import { asSchema } from "@xyo-network/payload-model";
|
|
1001
1099
|
import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
|
|
1002
1100
|
import { LiquidityPoolBridge__factory } from "@xyo-network/typechain";
|
|
1003
|
-
import { BridgeDestinationObservationSchema as BridgeDestinationObservationSchema3, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent as
|
|
1101
|
+
import { BridgeDestinationObservationSchema as BridgeDestinationObservationSchema3, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent as isBridgeIntent3, tryUnflattenHydratedTransaction } from "@xyo-network/xl1-sdk";
|
|
1004
1102
|
import { Mutex } from "async-mutex";
|
|
1005
1103
|
import { getAddress as getAddress2 } from "ethers/address";
|
|
1006
1104
|
import { Wallet } from "ethers/wallet";
|
|
@@ -1025,19 +1123,19 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1025
1123
|
_successCounter;
|
|
1026
1124
|
_wallet;
|
|
1027
1125
|
get bridge() {
|
|
1028
|
-
return
|
|
1126
|
+
return assertEx14(this._bridge, () => new Error("Bridge contract not initialized"));
|
|
1029
1127
|
}
|
|
1030
1128
|
get completedTransactions() {
|
|
1031
|
-
return
|
|
1129
|
+
return assertEx14(this.params.completedTransactions, () => "Completed transactions map is not defined");
|
|
1032
1130
|
}
|
|
1033
1131
|
get jobCheckInterval() {
|
|
1034
1132
|
return isDefined11(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs;
|
|
1035
1133
|
}
|
|
1036
1134
|
get pendingTransactions() {
|
|
1037
|
-
return
|
|
1135
|
+
return assertEx14(this.params.pendingTransactions, () => "Pending transactions map is not defined");
|
|
1038
1136
|
}
|
|
1039
1137
|
get wallet() {
|
|
1040
|
-
return
|
|
1138
|
+
return assertEx14(this._wallet, () => "wallet is required");
|
|
1041
1139
|
}
|
|
1042
1140
|
async createHandler() {
|
|
1043
1141
|
await super.createHandler();
|
|
@@ -1054,11 +1152,11 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1054
1152
|
description: "Number of errors"
|
|
1055
1153
|
});
|
|
1056
1154
|
const { provider, bridgeAddress } = this.params;
|
|
1057
|
-
const key =
|
|
1155
|
+
const key = assertEx14(this.account?.private?.hex, () => new Error("Account private key is required"));
|
|
1058
1156
|
this._wallet = new Wallet(key, provider);
|
|
1059
1157
|
this._bridge = LiquidityPoolBridge__factory.connect(getAddress2(bridgeAddress), this._wallet);
|
|
1060
1158
|
const network = await provider.getNetwork();
|
|
1061
|
-
this._bridgeChainId =
|
|
1159
|
+
this._bridgeChainId = assertEx14(hexFromBigInt(network.chainId), () => new Error("Failed to parse bridgeChainId"));
|
|
1062
1160
|
const tokenAddress = await this.bridge.token();
|
|
1063
1161
|
this._bridgeTokenAddress = asAddress6(tokenAddress, true);
|
|
1064
1162
|
const bridgeRemoteChain = await this.bridge.remoteChain();
|
|
@@ -1068,7 +1166,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1068
1166
|
if (isDefined11(payloads) && payloads.length > 0) {
|
|
1069
1167
|
const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads);
|
|
1070
1168
|
if (isDefined11(signedHydratedTransaction)) {
|
|
1071
|
-
const txHash = await
|
|
1169
|
+
const txHash = await PayloadBuilder12.hash(signedHydratedTransaction[0]);
|
|
1072
1170
|
this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`);
|
|
1073
1171
|
await this.pendingTransactions.set(txHash, signedHydratedTransaction);
|
|
1074
1172
|
return flattenHydratedTransaction(signedHydratedTransaction);
|
|
@@ -1080,11 +1178,11 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1080
1178
|
return [];
|
|
1081
1179
|
}
|
|
1082
1180
|
return await this._reportMutex.runExclusive(async () => {
|
|
1083
|
-
const
|
|
1181
|
+
const response = [];
|
|
1084
1182
|
if (isUndefined4(payloads) || payloads.length === 0) {
|
|
1085
1183
|
await this.processAllTransactions();
|
|
1086
1184
|
}
|
|
1087
|
-
return
|
|
1185
|
+
return response;
|
|
1088
1186
|
});
|
|
1089
1187
|
}
|
|
1090
1188
|
}
|
|
@@ -1105,7 +1203,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1105
1203
|
try {
|
|
1106
1204
|
let ret = void 0;
|
|
1107
1205
|
this._checkCounter?.add(1);
|
|
1108
|
-
const bridgeIntents = signedHydratedTransaction[1].filter(
|
|
1206
|
+
const bridgeIntents = signedHydratedTransaction[1].filter(isBridgeIntent3);
|
|
1109
1207
|
if (bridgeIntents.length !== 1) {
|
|
1110
1208
|
await this.pendingTransactions.delete(hash);
|
|
1111
1209
|
return ret;
|
|
@@ -1128,7 +1226,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1128
1226
|
* @returns Relays the intent in a blocking manner, returning the resulting BridgeDestinationObservation if successful
|
|
1129
1227
|
*/
|
|
1130
1228
|
async relayBridgeIntentSync(bridgeIntent) {
|
|
1131
|
-
const amount =
|
|
1229
|
+
const amount = hexToBigInt5(bridgeIntent.destAmount);
|
|
1132
1230
|
const nonce = await this.wallet.getNonce();
|
|
1133
1231
|
const srcAddress = getAddress2(bridgeIntent.srcAddress);
|
|
1134
1232
|
const destAddress = getAddress2(bridgeIntent.destAddress);
|
|
@@ -1137,7 +1235,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1137
1235
|
const transactionResponse = await confirmation?.getTransaction();
|
|
1138
1236
|
const destConfirmation = asHex4(transactionResponse?.hash ?? "", true);
|
|
1139
1237
|
const { schema, ...rest } = bridgeIntent;
|
|
1140
|
-
const result = new
|
|
1238
|
+
const result = new PayloadBuilder12({
|
|
1141
1239
|
schema: BridgeDestinationObservationSchema3
|
|
1142
1240
|
}).fields({
|
|
1143
1241
|
...rest,
|
|
@@ -1148,8 +1246,8 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
|
|
|
1148
1246
|
};
|
|
1149
1247
|
|
|
1150
1248
|
// src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts
|
|
1151
|
-
import { assertEx as
|
|
1152
|
-
import { PayloadBuilder as
|
|
1249
|
+
import { assertEx as assertEx15, delay as delay2, isDefined as isDefined12, isNull as isNull2, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
|
|
1250
|
+
import { PayloadBuilder as PayloadBuilder13 } from "@xyo-network/payload-builder";
|
|
1153
1251
|
import { asSchema as asSchema2 } from "@xyo-network/payload-model";
|
|
1154
1252
|
import { AbstractSentinel as AbstractSentinel2 } from "@xyo-network/sentinel-abstract";
|
|
1155
1253
|
import { flattenHydratedTransaction as flattenHydratedTransaction2, flattenHydratedTransactions as flattenHydratedTransactions2, tryUnflattenHydratedTransaction as tryUnflattenHydratedTransaction2 } from "@xyo-network/xl1-sdk";
|
|
@@ -1170,16 +1268,16 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
|
|
|
1170
1268
|
_reportMutex = new Mutex2();
|
|
1171
1269
|
_successCounter;
|
|
1172
1270
|
get completedTransactions() {
|
|
1173
|
-
return
|
|
1271
|
+
return assertEx15(this.params.completedTransactions, () => "Completed transactions map is not defined");
|
|
1174
1272
|
}
|
|
1175
1273
|
get jobCheckInterval() {
|
|
1176
1274
|
return isDefined12(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs2;
|
|
1177
1275
|
}
|
|
1178
1276
|
get pendingTransactions() {
|
|
1179
|
-
return
|
|
1277
|
+
return assertEx15(this.params.pendingTransactions, () => "Pending transactions map is not defined");
|
|
1180
1278
|
}
|
|
1181
1279
|
get viewer() {
|
|
1182
|
-
return
|
|
1280
|
+
return assertEx15(this.params.viewer, () => "Viewer is not defined in params");
|
|
1183
1281
|
}
|
|
1184
1282
|
async createHandler() {
|
|
1185
1283
|
await super.createHandler();
|
|
@@ -1200,7 +1298,7 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
|
|
|
1200
1298
|
if (isDefined12(payloads) && payloads.length > 0) {
|
|
1201
1299
|
const signedHydratedTransaction = tryUnflattenHydratedTransaction2(payloads);
|
|
1202
1300
|
if (isDefined12(signedHydratedTransaction)) {
|
|
1203
|
-
const txHash = await
|
|
1301
|
+
const txHash = await PayloadBuilder13.hash(signedHydratedTransaction[0]);
|
|
1204
1302
|
this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`);
|
|
1205
1303
|
await this.pendingTransactions.set(txHash, signedHydratedTransaction);
|
|
1206
1304
|
return flattenHydratedTransaction2(signedHydratedTransaction);
|
|
@@ -1212,11 +1310,11 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
|
|
|
1212
1310
|
return [];
|
|
1213
1311
|
}
|
|
1214
1312
|
return await this._reportMutex.runExclusive(async () => {
|
|
1215
|
-
const
|
|
1313
|
+
const response = [];
|
|
1216
1314
|
if (isUndefined5(payloads) || payloads.length === 0) {
|
|
1217
1315
|
await this.processAllTransactions();
|
|
1218
1316
|
}
|
|
1219
|
-
return
|
|
1317
|
+
return response;
|
|
1220
1318
|
});
|
|
1221
1319
|
}
|
|
1222
1320
|
}
|
|
@@ -1317,7 +1415,7 @@ var getModuleLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
1317
1415
|
statusReporter
|
|
1318
1416
|
}));
|
|
1319
1417
|
const gateway = await locator.getInstance(XyoGatewayRunnerMoniker2);
|
|
1320
|
-
const viewer =
|
|
1418
|
+
const viewer = assertEx16(gateway.connection.viewer, () => "Gateway viewer is not defined");
|
|
1321
1419
|
const pendingXl1ToEthXl1BridgeIntentTransactions = await getIterableMap(config, "liquidity_bridge_xl1_to_eth_xl1_pending");
|
|
1322
1420
|
const completedXl1ToEthXl1BridgeIntentTransactions = await getIterableMap(config, "liquidity_bridge_xl1_to_eth_xl1_completed");
|
|
1323
1421
|
const xl1TransactionCompletionMonitorSentinelParams = {
|
|
@@ -1336,7 +1434,7 @@ var getModuleLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
1336
1434
|
const provider = await initEvmProvider({
|
|
1337
1435
|
config
|
|
1338
1436
|
});
|
|
1339
|
-
const bridgeAddress = config.bridge.remoteBridgeContractAddress;
|
|
1437
|
+
const bridgeAddress = config.actors.bridge.remoteBridgeContractAddress;
|
|
1340
1438
|
const evmLiquidityBridgeTransactionCompletionMonitorSentinelParams = {
|
|
1341
1439
|
bridgeAddress,
|
|
1342
1440
|
completedTransactions: completedEthXl1BridgeTransactions,
|
|
@@ -1406,130 +1504,21 @@ var node_default = {
|
|
|
1406
1504
|
// src/manifest/nodeManifest.ts
|
|
1407
1505
|
var NodeManifest = node_default;
|
|
1408
1506
|
|
|
1409
|
-
// src/manifest/private/index.ts
|
|
1410
|
-
var PrivateChildManifests = [];
|
|
1411
|
-
|
|
1412
|
-
// src/manifest/public/XL1.json
|
|
1413
|
-
var XL1_default = {
|
|
1414
|
-
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
1415
|
-
nodes: [
|
|
1416
|
-
{
|
|
1417
|
-
config: {
|
|
1418
|
-
accountPath: "2",
|
|
1419
|
-
name: "XL1",
|
|
1420
|
-
schema: "network.xyo.node.config"
|
|
1421
|
-
},
|
|
1422
|
-
modules: {
|
|
1423
|
-
private: [
|
|
1424
|
-
{
|
|
1425
|
-
config: {
|
|
1426
|
-
accountPath: "1/1'/1'",
|
|
1427
|
-
automations: [
|
|
1428
|
-
{
|
|
1429
|
-
frequency: 6e4,
|
|
1430
|
-
frequencyUnits: "millis",
|
|
1431
|
-
schema: "network.xyo.automation.interval",
|
|
1432
|
-
type: "interval"
|
|
1433
|
-
}
|
|
1434
|
-
],
|
|
1435
|
-
name: "XL1BridgeIntentTransactionCompletionMonitorSentinelIntervalSentinel",
|
|
1436
|
-
schema: "network.xyo.sentinel.config",
|
|
1437
|
-
synchronous: true,
|
|
1438
|
-
tasks: [
|
|
1439
|
-
{
|
|
1440
|
-
mod: "XL1BridgeIntentTransactionCompletionMonitorSentinel",
|
|
1441
|
-
endPoint: "report"
|
|
1442
|
-
}
|
|
1443
|
-
]
|
|
1444
|
-
}
|
|
1445
|
-
}
|
|
1446
|
-
],
|
|
1447
|
-
public: [
|
|
1448
|
-
{
|
|
1449
|
-
config: {
|
|
1450
|
-
accountPath: "1/1/1",
|
|
1451
|
-
name: "XL1BridgeIntentTransactionCompletionMonitorSentinel",
|
|
1452
|
-
schema: "network.xyo.sentinel.chain.transaction.completion.monitor.config"
|
|
1453
|
-
}
|
|
1454
|
-
}
|
|
1455
|
-
]
|
|
1456
|
-
}
|
|
1457
|
-
}
|
|
1458
|
-
],
|
|
1459
|
-
schema: "network.xyo.manifest"
|
|
1460
|
-
};
|
|
1461
|
-
|
|
1462
|
-
// src/manifest/public/Ethereum.json
|
|
1463
|
-
var Ethereum_default = {
|
|
1464
|
-
$schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
1465
|
-
nodes: [
|
|
1466
|
-
{
|
|
1467
|
-
config: {
|
|
1468
|
-
accountPath: "3",
|
|
1469
|
-
name: "Ethereum",
|
|
1470
|
-
schema: "network.xyo.node.config"
|
|
1471
|
-
},
|
|
1472
|
-
modules: {
|
|
1473
|
-
private: [
|
|
1474
|
-
{
|
|
1475
|
-
config: {
|
|
1476
|
-
accountPath: "1/1'/1'",
|
|
1477
|
-
automations: [
|
|
1478
|
-
{
|
|
1479
|
-
frequency: 6e4,
|
|
1480
|
-
frequencyUnits: "millis",
|
|
1481
|
-
schema: "network.xyo.automation.interval",
|
|
1482
|
-
type: "interval"
|
|
1483
|
-
}
|
|
1484
|
-
],
|
|
1485
|
-
name: "EVMLiquidityBridgeTransactionCompletionMonitorSentinelIntervalSentinel",
|
|
1486
|
-
schema: "network.xyo.sentinel.config",
|
|
1487
|
-
synchronous: true,
|
|
1488
|
-
tasks: [
|
|
1489
|
-
{
|
|
1490
|
-
mod: "EVMLiquidityBridgeTransactionCompletionMonitorSentinel",
|
|
1491
|
-
endPoint: "report"
|
|
1492
|
-
}
|
|
1493
|
-
]
|
|
1494
|
-
}
|
|
1495
|
-
}
|
|
1496
|
-
],
|
|
1497
|
-
public: [
|
|
1498
|
-
{
|
|
1499
|
-
config: {
|
|
1500
|
-
accountPath: "1/1/1",
|
|
1501
|
-
name: "EVMLiquidityBridgeTransactionCompletionMonitorSentinel",
|
|
1502
|
-
schema: "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config"
|
|
1503
|
-
}
|
|
1504
|
-
}
|
|
1505
|
-
]
|
|
1506
|
-
}
|
|
1507
|
-
}
|
|
1508
|
-
],
|
|
1509
|
-
schema: "network.xyo.manifest"
|
|
1510
|
-
};
|
|
1511
|
-
|
|
1512
|
-
// src/manifest/public/index.ts
|
|
1513
|
-
var XL1NodeManifest = XL1_default;
|
|
1514
|
-
var EthereumNodeManifest = Ethereum_default;
|
|
1515
|
-
var PublicChildManifests = [
|
|
1516
|
-
...XL1NodeManifest.nodes,
|
|
1517
|
-
...EthereumNodeManifest.nodes
|
|
1518
|
-
];
|
|
1519
|
-
|
|
1520
1507
|
// src/manifest/getNode.ts
|
|
1521
1508
|
var getNode = /* @__PURE__ */ __name(async (context) => {
|
|
1522
|
-
const { wallet } = context;
|
|
1523
|
-
const { chainRpcApiUrl: endpoint } =
|
|
1509
|
+
const { config, wallet } = context;
|
|
1510
|
+
const { chainRpcApiUrl: endpoint } = config.actors.bridge;
|
|
1524
1511
|
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport2(endpoint, schemas), "transportFactory");
|
|
1512
|
+
const signerAccount = await getBridgeWalletAccount(config);
|
|
1525
1513
|
const locator = await buildJsonRpcProviderLocator2({
|
|
1514
|
+
signerAccount,
|
|
1526
1515
|
transportFactory
|
|
1527
1516
|
});
|
|
1528
1517
|
const moduleLocator = await getModuleLocator({
|
|
1529
1518
|
...context,
|
|
1530
1519
|
locator
|
|
1531
1520
|
});
|
|
1532
|
-
const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator,
|
|
1521
|
+
const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator, [], []);
|
|
1533
1522
|
const [node, ...childNodes] = await wrapper.loadNodes();
|
|
1534
1523
|
if (childNodes?.length > 0) {
|
|
1535
1524
|
await Promise.all(childNodes.map((childNode) => node.register(childNode)));
|
|
@@ -1539,38 +1528,16 @@ var getNode = /* @__PURE__ */ __name(async (context) => {
|
|
|
1539
1528
|
}, "getNode");
|
|
1540
1529
|
|
|
1541
1530
|
// src/manifest/getServices.ts
|
|
1531
|
+
import { assertEx as assertEx17, isDefined as isDefined14 } from "@xylabs/sdk-js";
|
|
1532
|
+
import { initEvmProvider as initEvmProvider2 } from "@xyo-network/chain-orchestration";
|
|
1533
|
+
import { BridgeableToken__factory, LiquidityPoolBridge__factory as LiquidityPoolBridge__factory2 } from "@xyo-network/typechain";
|
|
1534
|
+
import { HDWallet as HDWallet3 } from "@xyo-network/wallet";
|
|
1535
|
+
import { getAddress as getAddress3, Wallet as Wallet2 } from "ethers";
|
|
1536
|
+
|
|
1537
|
+
// src/manifest/getIterableMap.ts
|
|
1542
1538
|
import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
|
|
1543
|
-
import { assertEx as assertEx15, isDefined as isDefined14 } from "@xylabs/sdk-js";
|
|
1544
1539
|
import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol";
|
|
1545
|
-
import { initEvmProvider as initEvmProvider2 } from "@xyo-network/chain-services";
|
|
1546
|
-
import { LiquidityPoolBridge__factory as LiquidityPoolBridge__factory2 } from "@xyo-network/typechain";
|
|
1547
|
-
import { HDWallet as HDWallet3 } from "@xyo-network/wallet";
|
|
1548
1540
|
import { hasMongoConfig as hasMongoConfig2, mapToMapType as mapToMapType2 } from "@xyo-network/xl1-sdk";
|
|
1549
|
-
import { getAddress as getAddress3, Wallet as Wallet2 } from "ethers";
|
|
1550
|
-
var getServices = /* @__PURE__ */ __name(async (context) => {
|
|
1551
|
-
const { config } = context;
|
|
1552
|
-
const gateway = await getGateway(config);
|
|
1553
|
-
const ethTxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_eth_tx_state");
|
|
1554
|
-
const xl1TxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_xl1_tx_state");
|
|
1555
|
-
const provider = await initEvmProvider2({
|
|
1556
|
-
config
|
|
1557
|
-
});
|
|
1558
|
-
const { remoteBridgeContractAddress, remoteChainWalletPrivateKey, mnemonic } = config.bridge;
|
|
1559
|
-
const account = isDefined14(mnemonic) ? await HDWallet3.fromPhrase(mnemonic) : await HDWallet3.random();
|
|
1560
|
-
const wallet = new Wallet2(remoteChainWalletPrivateKey, provider);
|
|
1561
|
-
const bridge = LiquidityPoolBridge__factory2.connect(getAddress3(remoteBridgeContractAddress), wallet);
|
|
1562
|
-
const bridgeOwner = await bridge.owner();
|
|
1563
|
-
assertEx15(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => "Wallet is not the owner of the bridge contract");
|
|
1564
|
-
return {
|
|
1565
|
-
account,
|
|
1566
|
-
bridge,
|
|
1567
|
-
ethTxStateMap,
|
|
1568
|
-
gateway,
|
|
1569
|
-
provider,
|
|
1570
|
-
wallet,
|
|
1571
|
-
xl1TxStateMap
|
|
1572
|
-
};
|
|
1573
|
-
}, "getServices");
|
|
1574
1541
|
var getIterableMap2 = /* @__PURE__ */ __name(async (config, collection) => {
|
|
1575
1542
|
const mongoConfig = config.storage?.mongo;
|
|
1576
1543
|
if (hasMongoConfig2(mongoConfig)) {
|
|
@@ -1599,12 +1566,46 @@ var getIterableMap2 = /* @__PURE__ */ __name(async (config, collection) => {
|
|
|
1599
1566
|
}
|
|
1600
1567
|
}, "getIterableMap");
|
|
1601
1568
|
|
|
1569
|
+
// src/manifest/getServices.ts
|
|
1570
|
+
var getServices = /* @__PURE__ */ __name(async (context) => {
|
|
1571
|
+
const { config } = context;
|
|
1572
|
+
const gateway = await getGateway(config);
|
|
1573
|
+
const ethTxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_eth_tx_state");
|
|
1574
|
+
const xl1TxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_xl1_tx_state");
|
|
1575
|
+
const provider = await initEvmProvider2({
|
|
1576
|
+
config
|
|
1577
|
+
});
|
|
1578
|
+
const { remoteBridgeContractAddress, remoteChainWalletPrivateKey, remoteTokenAddress, mnemonic } = config.actors.bridge;
|
|
1579
|
+
const account = isDefined14(mnemonic) ? await HDWallet3.fromPhrase(mnemonic) : await HDWallet3.random();
|
|
1580
|
+
const wallet = new Wallet2(remoteChainWalletPrivateKey, provider);
|
|
1581
|
+
const bridgeableToken = BridgeableToken__factory.connect(getAddress3(remoteTokenAddress), wallet);
|
|
1582
|
+
const bridge = LiquidityPoolBridge__factory2.connect(getAddress3(remoteBridgeContractAddress), wallet);
|
|
1583
|
+
const bridgeOwner = await bridge.owner();
|
|
1584
|
+
assertEx17(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => "Wallet is not the owner of the bridge contract");
|
|
1585
|
+
return {
|
|
1586
|
+
account,
|
|
1587
|
+
bridge,
|
|
1588
|
+
bridgeableToken,
|
|
1589
|
+
ethTxStateMap,
|
|
1590
|
+
gateway,
|
|
1591
|
+
provider,
|
|
1592
|
+
wallet,
|
|
1593
|
+
xl1TxStateMap
|
|
1594
|
+
};
|
|
1595
|
+
}, "getServices");
|
|
1596
|
+
|
|
1597
|
+
// src/server/addWorkers.ts
|
|
1598
|
+
var addWorkers = /* @__PURE__ */ __name((config, services) => {
|
|
1599
|
+
const connection2 = getConnection(config);
|
|
1600
|
+
createWorkers(connection2, services);
|
|
1601
|
+
}, "addWorkers");
|
|
1602
|
+
|
|
1602
1603
|
// src/server/server.ts
|
|
1603
1604
|
var hostname = "::";
|
|
1604
1605
|
var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
1605
1606
|
const storedSeedPhrase = await bios.seedPhraseStore.get("os");
|
|
1606
1607
|
logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`);
|
|
1607
|
-
const { mnemonic } = config.api;
|
|
1608
|
+
const { mnemonic } = config.actors.api;
|
|
1608
1609
|
if (isString(storedSeedPhrase) && isString(mnemonic)) {
|
|
1609
1610
|
logger?.warn("[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
|
|
1610
1611
|
await bios.seedPhraseStore.set("os", mnemonic);
|
|
@@ -1619,11 +1620,11 @@ var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
|
1619
1620
|
}
|
|
1620
1621
|
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
1621
1622
|
}
|
|
1622
|
-
return
|
|
1623
|
+
return assertEx18(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
1623
1624
|
}, "getSeedPhrase");
|
|
1624
1625
|
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
1625
1626
|
const { logger, config } = context;
|
|
1626
|
-
const { port, mnemonic } = config.bridge;
|
|
1627
|
+
const { port, mnemonic } = config.actors.bridge;
|
|
1627
1628
|
const bios = await boot();
|
|
1628
1629
|
const seedPhrase = isDefined15(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
1629
1630
|
const wallet = await HDWallet4.fromPhrase(seedPhrase);
|
|
@@ -1634,10 +1635,11 @@ var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
|
1634
1635
|
};
|
|
1635
1636
|
const node = context.node ?? await getNode(nodeContext);
|
|
1636
1637
|
const app = getApp(node, config);
|
|
1637
|
-
|
|
1638
|
+
const services = await getServices({
|
|
1638
1639
|
config,
|
|
1639
1640
|
logger
|
|
1640
1641
|
});
|
|
1642
|
+
addWorkers(config, services);
|
|
1641
1643
|
const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`));
|
|
1642
1644
|
server.setTimeout(2e4);
|
|
1643
1645
|
return server;
|