@xyo-network/chain-bridge 1.20.1 → 1.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/index.mjs +55 -27
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/createXl1ToEthBridgeJob.d.ts.map +1 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/getJobIdForXl1ToEthBridgeJob.d.ts +14 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/getJobIdForXl1ToEthBridgeJob.d.ts.map +1 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/getXl1ToEthBridgeJob.d.ts +4 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/getXl1ToEthBridgeJob.d.ts.map +1 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/index.d.ts +4 -0
- package/dist/node/queue/flows/createXl1ToEthBridgeJob/index.d.ts.map +1 -0
- package/dist/node/queue/flows/index.d.ts +1 -1
- package/dist/node/queue/flows/index.d.ts.map +1 -1
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +27 -27
- package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -1
- package/dist/node/validation/validateBridgeTransaction.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/queue/flows/{createXl1ToEthBridgeJob.ts → createXl1ToEthBridgeJob/createXl1ToEthBridgeJob.ts} +3 -3
- package/src/queue/flows/createXl1ToEthBridgeJob/getJobIdForXl1ToEthBridgeJob.ts +18 -0
- package/src/queue/flows/createXl1ToEthBridgeJob/getXl1ToEthBridgeJob.ts +11 -0
- package/src/queue/flows/createXl1ToEthBridgeJob/index.ts +3 -0
- package/src/queue/flows/index.ts +1 -1
- package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +13 -3
- package/src/validation/validateBridgeTransaction.ts +14 -6
- package/dist/node/queue/flows/createXl1ToEthBridgeJob.d.ts.map +0 -1
- /package/dist/node/queue/flows/{createXl1ToEthBridgeJob.d.ts → createXl1ToEthBridgeJob/createXl1ToEthBridgeJob.d.ts} +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -340,22 +340,28 @@ var validateBridgeEstimateExact = /* @__PURE__ */ __name(async (intent, transfer
|
|
|
340
340
|
}, "validateBridgeEstimateExact");
|
|
341
341
|
|
|
342
342
|
// src/validation/validateBridgeTransaction.ts
|
|
343
|
-
import { asAddress as asAddress4
|
|
344
|
-
import { addressesContains, BoundWitnessValidator, payloadHashesContainsAll } from "@xyo-network/boundwitness-validator";
|
|
343
|
+
import { asAddress as asAddress4 } from "@xylabs/sdk-js";
|
|
344
|
+
import { addressesContains, BoundWitnessValidator, payloadHashesContainsAll, payloadSchemasContainsAll } from "@xyo-network/boundwitness-validator";
|
|
345
345
|
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/sdk-js";
|
|
346
|
+
import { BridgeIntentSchema as BridgeIntentSchema2, TransferSchema } from "@xyo-network/xl1-sdk";
|
|
346
347
|
var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent, transfer, config) => {
|
|
347
348
|
const { srcAddress } = intent;
|
|
348
349
|
const chainId = getXl1ChainId(config);
|
|
349
350
|
if (signedTxBw.chain !== chainId) return false;
|
|
350
|
-
|
|
351
|
-
if (
|
|
352
|
-
|
|
353
|
-
|
|
351
|
+
if (signedTxBw.payload_hashes.length != 2) return false;
|
|
352
|
+
if (!payloadSchemasContainsAll(signedTxBw, [
|
|
353
|
+
BridgeIntentSchema2,
|
|
354
|
+
TransferSchema
|
|
355
|
+
])) return false;
|
|
354
356
|
const hashes = await PayloadBuilder4.hashes([
|
|
355
357
|
intent,
|
|
356
358
|
transfer
|
|
357
359
|
]);
|
|
358
360
|
if (!payloadHashesContainsAll(signedTxBw, hashes)) return false;
|
|
361
|
+
const errors = await new BoundWitnessValidator(signedTxBw).validate();
|
|
362
|
+
if (errors.length > 0) return false;
|
|
363
|
+
const sender = asAddress4(srcAddress, true);
|
|
364
|
+
if (!addressesContains(signedTxBw, sender)) return false;
|
|
359
365
|
return true;
|
|
360
366
|
}, "validateBridgeTransaction");
|
|
361
367
|
|
|
@@ -482,7 +488,7 @@ var EthTransactionPreparation = {
|
|
|
482
488
|
};
|
|
483
489
|
|
|
484
490
|
// src/queue/workers/EthTransactionSubmission.ts
|
|
485
|
-
import { assertEx as assertEx13, isDefined as
|
|
491
|
+
import { assertEx as assertEx13, isDefined as isDefined6 } from "@xylabs/sdk-js";
|
|
486
492
|
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/sdk-js";
|
|
487
493
|
import { Worker as Worker3 } from "bullmq";
|
|
488
494
|
|
|
@@ -523,7 +529,7 @@ var createWorker3 = /* @__PURE__ */ __name((connection2, telemetry2, services) =
|
|
|
523
529
|
const hash = await PayloadBuilder7.hash(tx[0]);
|
|
524
530
|
const state = assertEx13(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
525
531
|
const { submissionHash: existingSubmissionHash } = state;
|
|
526
|
-
if (
|
|
532
|
+
if (isDefined6(existingSubmissionHash)) {
|
|
527
533
|
await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
|
|
528
534
|
return {
|
|
529
535
|
submissionHash: existingSubmissionHash
|
|
@@ -555,7 +561,7 @@ var EthTransactionSubmission = {
|
|
|
555
561
|
};
|
|
556
562
|
|
|
557
563
|
// src/queue/workers/EthTransactionSubmissionStorage.ts
|
|
558
|
-
import { assertEx as assertEx14, isDefined as
|
|
564
|
+
import { assertEx as assertEx14, isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
559
565
|
import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/sdk-js";
|
|
560
566
|
import { Worker as Worker4 } from "bullmq";
|
|
561
567
|
var name4 = "Store ETH Transaction Submission";
|
|
@@ -567,7 +573,7 @@ var createWorker4 = /* @__PURE__ */ __name((connection2, telemetry2, services) =
|
|
|
567
573
|
const hash = await PayloadBuilder8.hash(tx[0]);
|
|
568
574
|
const state = assertEx14(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
569
575
|
const { submissionHash: existingSubmissionHash } = state;
|
|
570
|
-
if (
|
|
576
|
+
if (isDefined7(existingSubmissionHash)) {
|
|
571
577
|
await job.log(`[${hash}] submissionHash already stored as ${existingSubmissionHash}`);
|
|
572
578
|
return {
|
|
573
579
|
submissionHash: existingSubmissionHash
|
|
@@ -631,7 +637,7 @@ var Xl1ToEthBridgeParent = {
|
|
|
631
637
|
};
|
|
632
638
|
|
|
633
639
|
// src/queue/workers/Xl1TransactionMonitor.ts
|
|
634
|
-
import { assertEx as assertEx15, isDefined as
|
|
640
|
+
import { assertEx as assertEx15, isDefined as isDefined8, isNull } from "@xylabs/sdk-js";
|
|
635
641
|
import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/sdk-js";
|
|
636
642
|
import { UnrecoverableError, Worker as Worker6 } from "bullmq";
|
|
637
643
|
var name6 = "Monitor Submitted XL1 Transaction";
|
|
@@ -647,7 +653,7 @@ var createWorker6 = /* @__PURE__ */ __name((connection2, telemetry2, services) =
|
|
|
647
653
|
const submissionHash = assertEx15(state.submissionHash, () => `[${hash}] submissionHash not found`);
|
|
648
654
|
await job.log(`[${hash}] Checking for XL1 transaction inclusion on chain`);
|
|
649
655
|
const foundTx = await viewer.transaction.byHash(submissionHash);
|
|
650
|
-
if (
|
|
656
|
+
if (isDefined8(foundTx) && !isNull(foundTx)) {
|
|
651
657
|
await job.log(`[${hash}] Found transaction on chain`);
|
|
652
658
|
const submissionHash2 = await PayloadBuilder9.hash(foundTx[0]);
|
|
653
659
|
return {
|
|
@@ -720,7 +726,7 @@ var Xl1TransactionPreparation = {
|
|
|
720
726
|
};
|
|
721
727
|
|
|
722
728
|
// src/queue/workers/Xl1TransactionSubmission.ts
|
|
723
|
-
import { assertEx as assertEx17, isDefined as
|
|
729
|
+
import { assertEx as assertEx17, isDefined as isDefined9 } from "@xylabs/sdk-js";
|
|
724
730
|
import { PayloadBuilder as PayloadBuilder11 } from "@xyo-network/sdk-js";
|
|
725
731
|
import { Worker as Worker8 } from "bullmq";
|
|
726
732
|
var name8 = "Submit XL1 Transaction";
|
|
@@ -734,7 +740,7 @@ var createWorker8 = /* @__PURE__ */ __name((connection2, telemetry2, services) =
|
|
|
734
740
|
const state = assertEx17(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
735
741
|
const preparedTx = assertEx17(state?.preparedTx, () => `[${hash}] preparedTx not found`);
|
|
736
742
|
const { submissionHash: existingSubmissionHash } = state;
|
|
737
|
-
if (
|
|
743
|
+
if (isDefined9(existingSubmissionHash)) {
|
|
738
744
|
await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
|
|
739
745
|
return {
|
|
740
746
|
submissionHash: existingSubmissionHash
|
|
@@ -765,7 +771,7 @@ var Xl1TransactionSubmission = {
|
|
|
765
771
|
};
|
|
766
772
|
|
|
767
773
|
// src/queue/workers/Xl1TransactionSubmissionStorage.ts
|
|
768
|
-
import { assertEx as assertEx18, isDefined as
|
|
774
|
+
import { assertEx as assertEx18, isDefined as isDefined10 } from "@xylabs/sdk-js";
|
|
769
775
|
import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/sdk-js";
|
|
770
776
|
import { Worker as Worker9 } from "bullmq";
|
|
771
777
|
var name9 = "Store XL1 Transaction Submission";
|
|
@@ -777,7 +783,7 @@ var createWorker9 = /* @__PURE__ */ __name((connection2, telemetry2, services) =
|
|
|
777
783
|
const hash = await PayloadBuilder12.hash(tx[0]);
|
|
778
784
|
const state = assertEx18(await stateMap.get(hash), () => `[${hash}] state not found`);
|
|
779
785
|
const { submissionHash: existingSubmissionHash } = state;
|
|
780
|
-
if (
|
|
786
|
+
if (isDefined10(existingSubmissionHash)) {
|
|
781
787
|
await job.log(`[${hash}] submissionHash already stored as ${existingSubmissionHash}`);
|
|
782
788
|
return {
|
|
783
789
|
submissionHash: existingSubmissionHash
|
|
@@ -813,10 +819,16 @@ var Xl1TransactionSubmissionStorage = {
|
|
|
813
819
|
queueName: queueName9
|
|
814
820
|
};
|
|
815
821
|
|
|
816
|
-
// src/queue/flows/createXl1ToEthBridgeJob.ts
|
|
822
|
+
// src/queue/flows/createXl1ToEthBridgeJob/getJobIdForXl1ToEthBridgeJob.ts
|
|
817
823
|
import { PayloadBuilder as PayloadBuilder13 } from "@xyo-network/sdk-js";
|
|
818
|
-
var
|
|
824
|
+
var getJobIdForXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (tx) => {
|
|
819
825
|
const jobId = await PayloadBuilder13.hash(tx[0]);
|
|
826
|
+
return jobId;
|
|
827
|
+
}, "getJobIdForXl1ToEthBridgeJob");
|
|
828
|
+
|
|
829
|
+
// src/queue/flows/createXl1ToEthBridgeJob/createXl1ToEthBridgeJob.ts
|
|
830
|
+
var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) => {
|
|
831
|
+
const jobId = await getJobIdForXl1ToEthBridgeJob(tx);
|
|
820
832
|
const flow = await flowProducer2.add({
|
|
821
833
|
// Step 0 (runs first as parent job)
|
|
822
834
|
name: Xl1ToEthBridgeParent.name,
|
|
@@ -965,6 +977,16 @@ var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) =
|
|
|
965
977
|
return flow;
|
|
966
978
|
}, "createXl1ToEthBridgeJob");
|
|
967
979
|
|
|
980
|
+
// src/queue/flows/createXl1ToEthBridgeJob/getXl1ToEthBridgeJob.ts
|
|
981
|
+
var getXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) => {
|
|
982
|
+
const id = await getJobIdForXl1ToEthBridgeJob(tx);
|
|
983
|
+
const flow = await flowProducer2.getFlow({
|
|
984
|
+
queueName: Xl1ToEthBridgeParent.queueName,
|
|
985
|
+
id
|
|
986
|
+
});
|
|
987
|
+
return flow;
|
|
988
|
+
}, "getXl1ToEthBridgeJob");
|
|
989
|
+
|
|
968
990
|
// src/queue/getXl1ToEthQueueJobs.ts
|
|
969
991
|
var getStatusQueueJobs = /* @__PURE__ */ __name(async (queues, jobId) => {
|
|
970
992
|
const [ethTransactionMonitorJob, ethTransactionPreparationJob, ethTransactionSubmissionJob, xl1ToEthBridgeParentJob, xl1TransactionMonitorJob, xl1TransactionPreparationJob, xl1TransactionSubmissionJob, xl1TransactionSubmissionStorageJob] = await Promise.all([
|
|
@@ -1033,14 +1055,14 @@ var getXl1ToEthQueues = /* @__PURE__ */ __name((config) => {
|
|
|
1033
1055
|
}, "getXl1ToEthQueues");
|
|
1034
1056
|
|
|
1035
1057
|
// src/queue/telemetry.ts
|
|
1036
|
-
import { isDefined as
|
|
1058
|
+
import { isDefined as isDefined11 } from "@xylabs/sdk-js";
|
|
1037
1059
|
import { BullMQOtel } from "bullmq-otel";
|
|
1038
1060
|
var telemetry;
|
|
1039
1061
|
var options = {
|
|
1040
1062
|
enableMetrics: true
|
|
1041
1063
|
};
|
|
1042
1064
|
var getTelemetry = /* @__PURE__ */ __name(() => {
|
|
1043
|
-
if (
|
|
1065
|
+
if (isDefined11(telemetry)) return telemetry;
|
|
1044
1066
|
telemetry = new BullMQOtel(options);
|
|
1045
1067
|
return telemetry;
|
|
1046
1068
|
}, "getTelemetry");
|
|
@@ -1161,12 +1183,13 @@ var makeBridgeFromRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
|
|
|
1161
1183
|
|
|
1162
1184
|
// src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
|
|
1163
1185
|
import { requestHandlerValidator as requestHandlerValidator3 } from "@xylabs/express";
|
|
1186
|
+
import { isDefined as isDefined12 } from "@xylabs/sdk-js";
|
|
1164
1187
|
import { PayloadBuilder as PayloadBuilder14, PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/sdk-js";
|
|
1165
|
-
import { BridgeIntentFieldsZod, BridgeIntentSchema as
|
|
1188
|
+
import { BridgeIntentFieldsZod, BridgeIntentSchema as BridgeIntentSchema3, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod, TransferZod } from "@xyo-network/xl1-sdk";
|
|
1166
1189
|
import { z as z2 } from "zod";
|
|
1167
1190
|
var BridgeToRemoteBodyZod = z2.tuple([
|
|
1168
1191
|
SignedTransactionBoundWitnessZod,
|
|
1169
|
-
PayloadZodLooseOfSchema(
|
|
1192
|
+
PayloadZodLooseOfSchema(BridgeIntentSchema3).extend(BridgeIntentFieldsZod.shape),
|
|
1170
1193
|
TransferZod
|
|
1171
1194
|
]);
|
|
1172
1195
|
var BridgeToRemoteResponseZod = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
|
|
@@ -1208,6 +1231,11 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
|
1208
1231
|
bridgeIntent
|
|
1209
1232
|
]
|
|
1210
1233
|
];
|
|
1234
|
+
const existingFlow = await getXl1ToEthBridgeJob(flowProducer2, singedHydratedTransaction);
|
|
1235
|
+
if (isDefined12(existingFlow)) {
|
|
1236
|
+
res.status(200).send();
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1211
1239
|
await createXl1ToEthBridgeJob(flowProducer2, singedHydratedTransaction);
|
|
1212
1240
|
const srcConfirmation = await PayloadBuilder14.hash(signedTxBw);
|
|
1213
1241
|
const bridgeCommonFieldsZod = z2.object({}).extend(BridgeSourceObservationFieldsZod.shape);
|
|
@@ -1219,7 +1247,7 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
|
1219
1247
|
const bridgeObservation = new PayloadBuilder14({
|
|
1220
1248
|
schema: BridgeSourceObservationSchema
|
|
1221
1249
|
}).fields(bridgeObservationFields).build();
|
|
1222
|
-
res.json(bridgeObservation);
|
|
1250
|
+
res.status(202).json(bridgeObservation);
|
|
1223
1251
|
})
|
|
1224
1252
|
};
|
|
1225
1253
|
}, "makeBridgeToRemoteRoute");
|
|
@@ -1228,7 +1256,7 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
|
|
|
1228
1256
|
import { requestHandlerValidator as requestHandlerValidator4 } from "@xylabs/express";
|
|
1229
1257
|
import { assertEx as assertEx19, toAddress as toAddress3 } from "@xylabs/sdk-js";
|
|
1230
1258
|
import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/sdk-js";
|
|
1231
|
-
import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as
|
|
1259
|
+
import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema4, buildUnsignedTransaction, toXL1BlockNumber, TransactionBoundWitnessZod, TransferZod as TransferZod2 } from "@xyo-network/xl1-sdk";
|
|
1232
1260
|
import { z as z3 } from "zod";
|
|
1233
1261
|
var BridgeToRemoteEstimateBodyZod = BridgeIntentFieldsZod2.pick({
|
|
1234
1262
|
destAddress: true,
|
|
@@ -1237,7 +1265,7 @@ var BridgeToRemoteEstimateBodyZod = BridgeIntentFieldsZod2.pick({
|
|
|
1237
1265
|
});
|
|
1238
1266
|
var BridgeToRemoteEstimateResponseZod = z3.tuple([
|
|
1239
1267
|
TransactionBoundWitnessZod,
|
|
1240
|
-
PayloadZodStrictOfSchema3(
|
|
1268
|
+
PayloadZodStrictOfSchema3(BridgeIntentSchema4).extend(BridgeIntentFieldsZod2.shape),
|
|
1241
1269
|
TransferZod2
|
|
1242
1270
|
]);
|
|
1243
1271
|
var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config, gateway) => {
|
|
@@ -1279,9 +1307,9 @@ var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config, gateway) =
|
|
|
1279
1307
|
import { requestHandlerValidator as requestHandlerValidator5 } from "@xylabs/express";
|
|
1280
1308
|
import { asHex as asHex3, isDefined as isDefined13 } from "@xylabs/sdk-js";
|
|
1281
1309
|
import { PayloadBuilder as PayloadBuilder15, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema4 } from "@xyo-network/sdk-js";
|
|
1282
|
-
import { asBridgeIntent, BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2, BridgeIntentFieldsZod as BridgeIntentFieldsZod3, BridgeIntentSchema as
|
|
1310
|
+
import { asBridgeIntent, BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2, BridgeIntentFieldsZod as BridgeIntentFieldsZod3, BridgeIntentSchema as BridgeIntentSchema5, BridgeSourceObservationFieldsZod as BridgeSourceObservationFieldsZod2, BridgeSourceObservationSchema as BridgeSourceObservationSchema2, isBridgeIntent as isBridgeIntent5 } from "@xyo-network/xl1-sdk";
|
|
1283
1311
|
import { z as z4 } from "zod";
|
|
1284
|
-
var BridgeIntentResponseZod = PayloadZodStrictOfSchema4(
|
|
1312
|
+
var BridgeIntentResponseZod = PayloadZodStrictOfSchema4(BridgeIntentSchema5).extend(BridgeIntentFieldsZod3.shape);
|
|
1285
1313
|
var BridgeSourceResponseZod = PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape);
|
|
1286
1314
|
var BridgeDestinationResponseZod = PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape);
|
|
1287
1315
|
var BridgeToRemoteStatusResponseZod = z4.union([
|