@socket.tech/dl-common 1.0.6 → 1.0.7
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/dl-common/constants/confirmations.d.ts +5 -0
- package/dist/dl-common/constants/confirmations.js +17 -0
- package/dist/dl-common/constants/enums.d.ts +44 -0
- package/dist/dl-common/constants/enums.js +52 -0
- package/dist/dl-common/constants/index.d.ts +3 -0
- package/dist/dl-common/constants/index.js +19 -0
- package/dist/dl-common/constants/types.d.ts +126 -0
- package/dist/dl-common/constants/types.js +45 -0
- package/dist/dl-common/constants/waitTime.d.ts +8 -0
- package/dist/dl-common/constants/waitTime.js +49 -0
- package/dist/dl-common/index.d.ts +4 -0
- package/dist/dl-common/index.js +20 -0
- package/dist/dl-common/models/attestSignature.d.ts +35 -0
- package/dist/dl-common/models/attestSignature.js +53 -0
- package/dist/dl-common/models/attestation.d.ts +70 -0
- package/dist/dl-common/models/attestation.js +86 -0
- package/dist/dl-common/models/index.d.ts +7 -0
- package/dist/dl-common/models/index.js +23 -0
- package/dist/dl-common/models/lastBlock.d.ts +28 -0
- package/dist/dl-common/models/lastBlock.js +27 -0
- package/dist/dl-common/models/message.d.ts +166 -0
- package/dist/dl-common/models/message.js +183 -0
- package/dist/dl-common/models/packet.d.ts +241 -0
- package/dist/dl-common/models/packet.js +250 -0
- package/dist/dl-common/models/proposal.d.ts +127 -0
- package/dist/dl-common/models/proposal.js +141 -0
- package/dist/dl-common/models/switchboard.d.ts +69 -0
- package/dist/dl-common/models/switchboard.js +92 -0
- package/dist/dl-common/models/transaction.d.ts +0 -0
- package/dist/dl-common/models/transaction.js +280 -0
- package/dist/dl-common/services/cacheService.d.ts +14 -0
- package/dist/dl-common/services/cacheService.js +77 -0
- package/dist/dl-common/services/eventBridgeService.d.ts +8 -0
- package/dist/dl-common/services/eventBridgeService.js +40 -0
- package/dist/dl-common/services/index.d.ts +3 -0
- package/dist/dl-common/services/index.js +20 -0
- package/dist/dl-common/services/queueService.d.ts +10 -0
- package/dist/dl-common/services/queueService.js +62 -0
- package/dist/dl-common/utils/address.d.ts +2 -0
- package/dist/dl-common/utils/address.js +8 -0
- package/dist/dl-common/utils/axios.d.ts +2 -0
- package/dist/dl-common/utils/axios.js +54 -0
- package/dist/dl-common/utils/dataStructHelper.d.ts +2 -0
- package/dist/dl-common/utils/dataStructHelper.js +10 -0
- package/dist/dl-common/utils/discord.d.ts +2 -0
- package/dist/dl-common/utils/discord.js +35 -0
- package/dist/dl-common/utils/ethersAwsKmsSigner.d.ts +2 -0
- package/dist/dl-common/utils/ethersAwsKmsSigner.js +26 -0
- package/dist/dl-common/utils/eventGetter.d.ts +4 -0
- package/dist/dl-common/utils/eventGetter.js +50 -0
- package/dist/dl-common/utils/extraUtils.d.ts +32 -0
- package/dist/dl-common/utils/extraUtils.js +103 -0
- package/dist/dl-common/utils/idUtils.d.ts +14 -0
- package/dist/dl-common/utils/idUtils.js +50 -0
- package/dist/dl-common/utils/index.d.ts +13 -0
- package/dist/dl-common/utils/index.js +29 -0
- package/dist/dl-common/utils/relaySigner.d.ts +21 -0
- package/dist/dl-common/utils/relaySigner.js +68 -0
- package/dist/dl-common/utils/s3Service.d.ts +5 -0
- package/dist/dl-common/utils/s3Service.js +45 -0
- package/dist/dl-common/utils/secretManagerService.d.ts +2 -0
- package/dist/dl-common/utils/secretManagerService.js +33 -0
- package/dist/dl-common/utils/signer/adapter.d.ts +18 -0
- package/dist/dl-common/utils/signer/adapter.js +71 -0
- package/dist/dl-common/utils/signer/address.d.ts +10 -0
- package/dist/dl-common/utils/signer/address.js +42 -0
- package/dist/dl-common/utils/signer/asn1-parser.d.ts +11 -0
- package/dist/dl-common/utils/signer/asn1-parser.js +80 -0
- package/dist/dl-common/utils/signer/crypto.d.ts +6 -0
- package/dist/dl-common/utils/signer/crypto.js +34 -0
- package/dist/dl-common/utils/signer/index.d.ts +4 -0
- package/dist/dl-common/utils/signer/index.js +20 -0
- package/dist/dl-common/utils/signer/kms-ethers-signer.d.ts +19 -0
- package/dist/dl-common/utils/signer/kms-ethers-signer.js +32 -0
- package/dist/dl-common/utils/signer/kms-signer.d.ts +14 -0
- package/dist/dl-common/utils/signer/kms-signer.js +46 -0
- package/dist/dl-common/utils/signer/signature.d.ts +17 -0
- package/dist/dl-common/utils/signer/signature.js +65 -0
- package/dist/dl-common/utils/signer/signer.d.ts +7 -0
- package/dist/dl-common/utils/signer/signer.js +2 -0
- package/dist/dl-common/utils/time.d.ts +2 -0
- package/dist/dl-common/utils/time.js +7 -0
- package/dist/index.js +30 -14
- package/dist/src/constants/batcherModes.d.ts +7 -0
- package/dist/src/constants/batcherModes.js +56 -0
- package/dist/src/constants/config.d.ts +39 -0
- package/dist/src/constants/config.js +77 -0
- package/dist/src/constants/enums.d.ts +21 -0
- package/dist/src/constants/enums.js +27 -0
- package/dist/src/constants/gasEstimation.d.ts +8 -0
- package/dist/src/constants/gasEstimation.js +61 -0
- package/dist/src/constants/index.d.ts +11 -0
- package/dist/src/constants/index.js +28 -0
- package/dist/src/constants/limits.d.ts +21 -0
- package/dist/src/constants/limits.js +91 -0
- package/dist/src/constants/prometheus.config.d.ts +43 -0
- package/dist/src/constants/prometheus.config.js +316 -0
- package/dist/src/constants/relayer.d.ts +6 -0
- package/dist/src/constants/relayer.js +15 -0
- package/dist/src/constants/s3Config.d.ts +13 -0
- package/dist/src/constants/s3Config.js +61 -0
- package/dist/src/constants/stageConfig.d.ts +7 -0
- package/dist/src/constants/stageConfig.js +24 -0
- package/dist/src/constants/types.d.ts +45 -0
- package/dist/src/constants/types.js +2 -0
- package/dist/src/constants/watchers.d.ts +15 -0
- package/dist/src/constants/watchers.js +137 -0
- package/dist/src/controllers/index.d.ts +0 -0
- package/dist/src/controllers/index.js +3 -0
- package/dist/src/db/associations.d.ts +1 -0
- package/dist/src/db/associations.js +46 -0
- package/dist/src/db/connection.d.ts +4 -0
- package/dist/src/db/connection.js +73 -0
- package/dist/src/db/index.d.ts +2 -0
- package/dist/src/db/index.js +18 -0
- package/dist/src/db/init.d.ts +2 -0
- package/dist/src/db/init.js +27 -0
- package/dist/src/handlers/common.d.ts +2 -0
- package/dist/src/handlers/common.js +59 -0
- package/dist/src/handlers/cronHandler.d.ts +10 -0
- package/dist/src/handlers/cronHandler.js +268 -0
- package/dist/src/handlers/executeHandler.d.ts +3 -0
- package/dist/src/handlers/executeHandler.js +66 -0
- package/dist/src/handlers/handler.d.ts +2 -0
- package/dist/src/handlers/handler.js +29 -0
- package/dist/src/handlers/proposeHandler.d.ts +3 -0
- package/dist/src/handlers/proposeHandler.js +69 -0
- package/dist/src/handlers/routes.d.ts +2 -0
- package/dist/src/handlers/routes.js +26 -0
- package/dist/src/handlers/sealHandler.d.ts +4 -0
- package/dist/src/handlers/sealHandler.js +245 -0
- package/dist/src/handlers/statusHandler.d.ts +5 -0
- package/dist/src/handlers/statusHandler.js +116 -0
- package/dist/src/handlers/taskHandler.d.ts +2 -0
- package/dist/src/handlers/taskHandler.js +110 -0
- package/dist/src/handlers/testHandler.d.ts +4 -0
- package/dist/src/handlers/testHandler.js +99 -0
- package/dist/src/main.d.ts +0 -0
- package/dist/src/main.js +12 -0
- package/dist/src/relayers/common.d.ts +7 -0
- package/dist/src/relayers/common.js +55 -0
- package/dist/src/relayers/index.d.ts +2 -0
- package/dist/src/relayers/index.js +19 -0
- package/dist/src/relayers/proposeRelayer.d.ts +7 -0
- package/dist/src/relayers/proposeRelayer.js +587 -0
- package/dist/src/relayers/sealRelayer.d.ts +8 -0
- package/dist/src/relayers/sealRelayer.js +276 -0
- package/dist/src/services/attestService.d.ts +45 -0
- package/dist/src/services/attestService.js +269 -0
- package/dist/src/services/batcherService.d.ts +9 -0
- package/dist/src/services/batcherService.js +197 -0
- package/dist/src/services/executeService.d.ts +16 -0
- package/dist/src/services/executeService.js +209 -0
- package/dist/src/services/gasEstimationService.d.ts +3 -0
- package/dist/src/services/gasEstimationService.js +12 -0
- package/dist/src/services/index.d.ts +4 -0
- package/dist/src/services/index.js +23 -0
- package/dist/src/services/indexSealService.d.ts +15 -0
- package/dist/src/services/indexSealService.js +120 -0
- package/dist/src/services/proposalCheckService.d.ts +9 -0
- package/dist/src/services/proposalCheckService.js +119 -0
- package/dist/src/services/sealService.d.ts +27 -0
- package/dist/src/services/sealService.js +190 -0
- package/dist/src/statusTrackers/failedMessage.d.ts +8 -0
- package/dist/src/statusTrackers/failedMessage.js +72 -0
- package/dist/src/statusTrackers/failedPacket.d.ts +13 -0
- package/dist/src/statusTrackers/failedPacket.js +110 -0
- package/dist/src/statusTrackers/index.d.ts +3 -0
- package/dist/src/statusTrackers/index.js +26 -0
- package/dist/src/statusTrackers/message.d.ts +4 -0
- package/dist/src/statusTrackers/message.js +257 -0
- package/dist/src/statusTrackers/packet.d.ts +33 -0
- package/dist/src/statusTrackers/packet.js +477 -0
- package/dist/src/utils/chain-utils.d.ts +5 -0
- package/dist/src/utils/chain-utils.js +42 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.js +18 -0
- package/dist/src/utils/logger.d.ts +9 -0
- package/dist/src/utils/logger.js +9 -0
- package/dist/utils/s3Service.js +1 -1
- package/dist/utils/signer/socketSigner.d.ts +32 -0
- package/dist/utils/signer/socketSigner.js +121 -0
- package/package.json +1 -1
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSealTimeout = exports.updatePacketTxStatus = exports.getPacketsByTxId = exports.getPendingFullyExecutedPackets = exports.checkAndUpdateFullyExecutedStatus = exports.checkAndUpdatePacketRelayStatus = exports.getUpdateObj = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const utils_2 = require("../../dl-common/utils");
|
|
6
|
+
const models_1 = require("../../dl-common/models");
|
|
7
|
+
const db_1 = require("../db");
|
|
8
|
+
const sequelize_1 = require("sequelize");
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const constants_2 = require("../../dl-common/constants");
|
|
11
|
+
const prometheus_config_1 = require("../constants/prometheus.config");
|
|
12
|
+
const confirmations_1 = require("../../dl-common/constants/confirmations");
|
|
13
|
+
const services_1 = require("../../dl-common/services");
|
|
14
|
+
const relayers_1 = require("../relayers");
|
|
15
|
+
const dl_core_1 = require("@socket.tech/dl-core");
|
|
16
|
+
const getTxId = (packet) => {
|
|
17
|
+
if (packet.sealRelayStatus === models_1.SealRelayStatus.SEALING)
|
|
18
|
+
return packet.sealTxId;
|
|
19
|
+
if (packet.proposeRelayStatus === models_1.ProposeRelayStatus.PROPOSING)
|
|
20
|
+
return packet.proposeTxId;
|
|
21
|
+
if (packet.attestRelayStatus === models_1.AttestRelayStatus.ATTESTING)
|
|
22
|
+
return packet.attestTxId;
|
|
23
|
+
console.log("No pending txId found for packet ", packet.packetId);
|
|
24
|
+
return null;
|
|
25
|
+
};
|
|
26
|
+
const getUpdateObj = (packet, status, txHash, chainId, confirmations) => {
|
|
27
|
+
let updateObj;
|
|
28
|
+
if (status === constants_2.RelayerAPIStatus.FAILED) {
|
|
29
|
+
updateObj = getFailedTxStatusUpdateObj(packet, txHash);
|
|
30
|
+
}
|
|
31
|
+
else if (status === constants_2.RelayerAPIStatus.SIMULATION_FAILED ||
|
|
32
|
+
status === constants_2.RelayerAPIStatus.DUPLICATE_NONCE_TX) {
|
|
33
|
+
updateObj = getRetryTxStatusUpdateObj(packet, txHash);
|
|
34
|
+
}
|
|
35
|
+
else if (status === constants_2.RelayerAPIStatus.COMPLETED) {
|
|
36
|
+
updateObj = getCompletedTxStatusUpdateObj(packet, txHash, chainId, confirmations);
|
|
37
|
+
}
|
|
38
|
+
return updateObj;
|
|
39
|
+
};
|
|
40
|
+
exports.getUpdateObj = getUpdateObj;
|
|
41
|
+
const getCompletedTxStatusUpdateObj = (packet, txHash, chainId, confirmations) => {
|
|
42
|
+
let updateObj = { packetId: packet.packetId };
|
|
43
|
+
if (packet.sealRelayStatus === models_1.SealRelayStatus.SEALING) {
|
|
44
|
+
let isEnoughTimePassed = (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime >
|
|
45
|
+
(0, exports.getSealTimeout)(packet.srcChainSlug);
|
|
46
|
+
let isEnoughConfirmations = chainId &&
|
|
47
|
+
confirmations &&
|
|
48
|
+
(0, confirmations_1.getConfirmations)(chainId) &&
|
|
49
|
+
confirmations > (0, confirmations_1.getConfirmations)(chainId);
|
|
50
|
+
if (isEnoughTimePassed || isEnoughConfirmations) {
|
|
51
|
+
/// add discord alert
|
|
52
|
+
console.log({ isEnoughTimePassed, isEnoughConfirmations });
|
|
53
|
+
updateObj = {
|
|
54
|
+
...updateObj,
|
|
55
|
+
isSealed: true,
|
|
56
|
+
sealRelayStatus: models_1.SealRelayStatus.SEALED,
|
|
57
|
+
sealTxHash: txHash,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (packet.proposeRelayStatus === models_1.ProposeRelayStatus.PROPOSING)
|
|
62
|
+
updateObj = {
|
|
63
|
+
...updateObj,
|
|
64
|
+
proposeRelayStatus: models_1.ProposeRelayStatus.PROPOSED,
|
|
65
|
+
proposeTxHash: txHash,
|
|
66
|
+
isProposed: true,
|
|
67
|
+
};
|
|
68
|
+
if (packet.attestRelayStatus === models_1.AttestRelayStatus.ATTESTING)
|
|
69
|
+
updateObj = {
|
|
70
|
+
...updateObj,
|
|
71
|
+
attestRelayStatus: models_1.AttestRelayStatus.ATTESTED,
|
|
72
|
+
attestTxHash: txHash,
|
|
73
|
+
isAttested: true,
|
|
74
|
+
};
|
|
75
|
+
return updateObj;
|
|
76
|
+
};
|
|
77
|
+
const getRetryTxStatusUpdateObj = (packet, txHash) => {
|
|
78
|
+
let updateObj = { packetId: packet.packetId };
|
|
79
|
+
if (packet.sealRelayStatus === models_1.SealRelayStatus.SEALING)
|
|
80
|
+
updateObj = {
|
|
81
|
+
...updateObj,
|
|
82
|
+
sealRelayStatus: models_1.SealRelayStatus.NO,
|
|
83
|
+
sealTxHash: txHash,
|
|
84
|
+
};
|
|
85
|
+
if (packet.proposeRelayStatus === models_1.ProposeRelayStatus.PROPOSING)
|
|
86
|
+
updateObj = {
|
|
87
|
+
...updateObj,
|
|
88
|
+
proposeRelayStatus: models_1.ProposeRelayStatus.NO,
|
|
89
|
+
proposeTxHash: txHash,
|
|
90
|
+
};
|
|
91
|
+
if (packet.attestRelayStatus === models_1.AttestRelayStatus.ATTESTING)
|
|
92
|
+
updateObj = {
|
|
93
|
+
...updateObj,
|
|
94
|
+
attestRelayStatus: models_1.AttestRelayStatus.NO,
|
|
95
|
+
attestTxHash: txHash,
|
|
96
|
+
};
|
|
97
|
+
return updateObj;
|
|
98
|
+
};
|
|
99
|
+
const getFailedTxStatusUpdateObj = (packet, txHash) => {
|
|
100
|
+
let updateObj = { packetId: packet.packetId };
|
|
101
|
+
if (packet.sealRelayStatus === models_1.SealRelayStatus.SEALING)
|
|
102
|
+
updateObj = {
|
|
103
|
+
...updateObj,
|
|
104
|
+
sealRelayStatus: models_1.SealRelayStatus.SEAL_FAILED,
|
|
105
|
+
sealTxHash: txHash,
|
|
106
|
+
};
|
|
107
|
+
if (packet.proposeRelayStatus === models_1.ProposeRelayStatus.PROPOSING)
|
|
108
|
+
updateObj = {
|
|
109
|
+
...updateObj,
|
|
110
|
+
proposeRelayStatus: models_1.ProposeRelayStatus.PROPOSE_FAILED,
|
|
111
|
+
proposeTxHash: txHash,
|
|
112
|
+
};
|
|
113
|
+
if (packet.attestRelayStatus === models_1.AttestRelayStatus.ATTESTING)
|
|
114
|
+
updateObj = {
|
|
115
|
+
...updateObj,
|
|
116
|
+
attestRelayStatus: models_1.AttestRelayStatus.ATTEST_FAILED,
|
|
117
|
+
attestTxHash: txHash,
|
|
118
|
+
};
|
|
119
|
+
return updateObj;
|
|
120
|
+
};
|
|
121
|
+
const checkAndUpdatePacketRelayStatus = async () => {
|
|
122
|
+
try {
|
|
123
|
+
const packets = await getPendingRelayPackets();
|
|
124
|
+
if (packets.length === 0) {
|
|
125
|
+
utils_1.logger.info(`No pending relay packets found, returning`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
(0, utils_1.logInfo)({
|
|
129
|
+
info: "PACKET_RELAY_STATUS_CHECKING",
|
|
130
|
+
packetIds: packets.map((p) => p.packetId),
|
|
131
|
+
total: packets.length,
|
|
132
|
+
messageIds: [],
|
|
133
|
+
});
|
|
134
|
+
const txIds = new Set();
|
|
135
|
+
const packetDbUpdates = [];
|
|
136
|
+
const statusCount = {};
|
|
137
|
+
const txIdStatusMap = {};
|
|
138
|
+
const packetMap = {};
|
|
139
|
+
packets.forEach((packet) => {
|
|
140
|
+
const txId = getTxId(packet);
|
|
141
|
+
if (!txId)
|
|
142
|
+
return;
|
|
143
|
+
txIds.add(txId);
|
|
144
|
+
packetMap[packet.packetId] = packet;
|
|
145
|
+
});
|
|
146
|
+
const url = (0, constants_1.multipleTxStatusUrl)();
|
|
147
|
+
(0, utils_1.logInfo)({
|
|
148
|
+
info: "CALLING_RELAYER",
|
|
149
|
+
packetIds: packets.map((p) => p.packetId),
|
|
150
|
+
txIds,
|
|
151
|
+
messageIds: [],
|
|
152
|
+
});
|
|
153
|
+
const tx = await (0, utils_2.axiosPost)(url, { txIds: [...txIds] });
|
|
154
|
+
const responses = tx === null || tx === void 0 ? void 0 : tx.data;
|
|
155
|
+
(0, utils_1.logInfo)({
|
|
156
|
+
info: "RELAYER_RESPONSE",
|
|
157
|
+
packetIds: packets.map((p) => p.packetId),
|
|
158
|
+
txIds,
|
|
159
|
+
responses,
|
|
160
|
+
messageIds: [],
|
|
161
|
+
});
|
|
162
|
+
responses.forEach((response) => {
|
|
163
|
+
const { txId, txHash, status } = response;
|
|
164
|
+
txIdStatusMap[txId] = { txHash, status };
|
|
165
|
+
});
|
|
166
|
+
packets.forEach((packet) => {
|
|
167
|
+
const txId = getTxId(packet);
|
|
168
|
+
if (!txId)
|
|
169
|
+
return;
|
|
170
|
+
const { status, txHash } = txIdStatusMap[txId];
|
|
171
|
+
if (statusCount[status])
|
|
172
|
+
statusCount[status] += 1;
|
|
173
|
+
else
|
|
174
|
+
statusCount[status] = 1;
|
|
175
|
+
const updateObj = (0, exports.getUpdateObj)(packet, status, txHash);
|
|
176
|
+
if (updateObj) {
|
|
177
|
+
// using packet fields in update is important to avoid getting default value set for other fields
|
|
178
|
+
// which are not part of updateObj. for example if only proposing, updateObj will have proposeTxHash, isProposed
|
|
179
|
+
// etc, but if we not destructure packet here, sequelize will update isSealed with default values.
|
|
180
|
+
packetDbUpdates.push({ ...packet, ...updateObj });
|
|
181
|
+
// if (updateObj.sealRelayStatus == SealRelayStatus.SEALED) {
|
|
182
|
+
// observeHistogram(relayMetrics.sealRelay.statusUpdateHistogram, {
|
|
183
|
+
// labels: {
|
|
184
|
+
// [Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
185
|
+
// },
|
|
186
|
+
// timeDiff: currentTimestampInSeconds() - packet.outboundTime,
|
|
187
|
+
// });
|
|
188
|
+
// }
|
|
189
|
+
if (updateObj.proposeRelayStatus == models_1.ProposeRelayStatus.PROPOSED) {
|
|
190
|
+
(0, prometheus_config_1.observeHistogram)(prometheus_config_1.relayMetrics.proposeRelay.statusUpdateHistogram, {
|
|
191
|
+
labels: {
|
|
192
|
+
[prometheus_config_1.Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
193
|
+
[prometheus_config_1.Labels.DST_CHAIN_SLUG]: packet.dstChainSlug,
|
|
194
|
+
[prometheus_config_1.Labels.INTEGRATION_TYPE]: packet.integrationType,
|
|
195
|
+
},
|
|
196
|
+
timeDiff: (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
if (updateObj.attestRelayStatus == models_1.AttestRelayStatus.ATTESTED) {
|
|
200
|
+
(0, prometheus_config_1.observeHistogram)(prometheus_config_1.relayMetrics.attestRelay.statusUpdateHistogram, {
|
|
201
|
+
labels: {
|
|
202
|
+
[prometheus_config_1.Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
203
|
+
[prometheus_config_1.Labels.DST_CHAIN_SLUG]: packet.dstChainSlug,
|
|
204
|
+
[prometheus_config_1.Labels.INTEGRATION_TYPE]: packet.integrationType,
|
|
205
|
+
},
|
|
206
|
+
timeDiff: (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
(0, utils_1.logInfo)({
|
|
212
|
+
info: "PACKET_STATUS_CHECK_DB_UPDATE",
|
|
213
|
+
packetIds: packets.map((p) => p.packetId),
|
|
214
|
+
statusCount,
|
|
215
|
+
messageIds: [],
|
|
216
|
+
});
|
|
217
|
+
if (packetDbUpdates.length > 0) {
|
|
218
|
+
await savePacketUpdates(packetDbUpdates);
|
|
219
|
+
}
|
|
220
|
+
(0, utils_1.logInfo)({
|
|
221
|
+
info: "PACKET_STATUS_CHECK_DB_UPDATE_DONE",
|
|
222
|
+
packetIds: packets.map((p) => p.packetId),
|
|
223
|
+
messageIds: [],
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
console.log("checkAndUpdatePacketRelayStatus", error);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
exports.checkAndUpdatePacketRelayStatus = checkAndUpdatePacketRelayStatus;
|
|
231
|
+
const savePacketUpdates = async (dbUpdates) => {
|
|
232
|
+
try {
|
|
233
|
+
//@ts-ignore
|
|
234
|
+
await models_1.Packet.bulkCreate(dbUpdates, {
|
|
235
|
+
updateOnDuplicate: [
|
|
236
|
+
// "isSealed",
|
|
237
|
+
"isProposed",
|
|
238
|
+
"isAttested",
|
|
239
|
+
"sealTxHash",
|
|
240
|
+
"attestTxHash",
|
|
241
|
+
"proposeTxHash",
|
|
242
|
+
"proposeRelayStatus",
|
|
243
|
+
"sealRelayStatus",
|
|
244
|
+
"attestRelayStatus",
|
|
245
|
+
],
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
utils_1.logger.error("Error while saving status updates", error);
|
|
250
|
+
throw new Error(`Error while saving status updates ${error === null || error === void 0 ? void 0 : error.message}`);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
const checkAndUpdateFullyExecutedStatus = async () => {
|
|
254
|
+
var _a;
|
|
255
|
+
try {
|
|
256
|
+
const packets = await (0, exports.getPendingFullyExecutedPackets)();
|
|
257
|
+
const fullyExecutedPacketIds = [];
|
|
258
|
+
for (const packet of packets) {
|
|
259
|
+
let fullyExecuted = true;
|
|
260
|
+
if (!((_a = packet.Messages) === null || _a === void 0 ? void 0 : _a.length))
|
|
261
|
+
continue;
|
|
262
|
+
const messagesInPacket = 1; // update this later when using multi-message packets
|
|
263
|
+
let messageCount = 0;
|
|
264
|
+
for (const message of packet.Messages) {
|
|
265
|
+
if (!message.isExecuted) {
|
|
266
|
+
fullyExecuted = false;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
messageCount++;
|
|
270
|
+
}
|
|
271
|
+
if (fullyExecuted && messageCount === messagesInPacket) {
|
|
272
|
+
fullyExecutedPacketIds.push(packet.packetId);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
(0, utils_1.logInfo)({
|
|
276
|
+
info: "UPDATING_PACKET_EXECUTION_STATUS_DB",
|
|
277
|
+
packetIds: packets.map((p) => p.packetId),
|
|
278
|
+
messageIds: [],
|
|
279
|
+
});
|
|
280
|
+
if (fullyExecutedPacketIds.length > 0) {
|
|
281
|
+
await saveFullyExecutedPacketUpdates(fullyExecutedPacketIds);
|
|
282
|
+
}
|
|
283
|
+
(0, utils_1.logInfo)({
|
|
284
|
+
info: "UPDATED_PACKET_EXECUTION_STATUS_DB",
|
|
285
|
+
packetIds: packets.map((p) => p.packetId),
|
|
286
|
+
messageIds: [],
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.log("error in checkAndUpdateFullyExecutedStatus: ", error);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
exports.checkAndUpdateFullyExecutedStatus = checkAndUpdateFullyExecutedStatus;
|
|
294
|
+
const saveFullyExecutedPacketUpdates = async (packetIds) => {
|
|
295
|
+
try {
|
|
296
|
+
await models_1.Packet.update({
|
|
297
|
+
isFullyExecuted: true,
|
|
298
|
+
}, {
|
|
299
|
+
where: {
|
|
300
|
+
packetId: {
|
|
301
|
+
[sequelize_1.Op.in]: packetIds,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
utils_1.logger.error("Error while saving status updates", error);
|
|
308
|
+
throw new Error(`Error while saving status updates ${error === null || error === void 0 ? void 0 : error.message}`);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
const getPendingRelayPackets = async () => {
|
|
312
|
+
const startTime = new Date(new Date().getTime() - 30 * 1000); // 30 seconds ago
|
|
313
|
+
const oneDayAgo = new Date(new Date().getTime() - 24 * 60 * 60 * 1000); // 24 hours ago
|
|
314
|
+
let results = [];
|
|
315
|
+
try {
|
|
316
|
+
results = await models_1.Packet.findAll({
|
|
317
|
+
limit: constants_1.checkTxStatusLimit,
|
|
318
|
+
where: {
|
|
319
|
+
[sequelize_1.Op.or]: [
|
|
320
|
+
{
|
|
321
|
+
sealRelayStatus: models_1.SealRelayStatus.SEALING,
|
|
322
|
+
},
|
|
323
|
+
{ proposeRelayStatus: models_1.ProposeRelayStatus.PROPOSING },
|
|
324
|
+
{ attestRelayStatus: models_1.AttestRelayStatus.ATTESTING },
|
|
325
|
+
],
|
|
326
|
+
updatedAt: {
|
|
327
|
+
[sequelize_1.Op.and]: [
|
|
328
|
+
{ [sequelize_1.Op.lte]: startTime },
|
|
329
|
+
{ [sequelize_1.Op.gte]: oneDayAgo }, // updatedAt >= oneDayAgo
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
order: [
|
|
334
|
+
[
|
|
335
|
+
db_1.attesterDBInst.cast(db_1.attesterDBInst.col("updatedAt"), "timestamp"),
|
|
336
|
+
"ASC",
|
|
337
|
+
],
|
|
338
|
+
],
|
|
339
|
+
});
|
|
340
|
+
results = results.map((result) => result.get({ plain: true }));
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
utils_1.logger.error(`packet-txstatus-checker -> error while querying Packets-Awaiting-RelayCompletion`);
|
|
344
|
+
utils_1.logger.error("Error", err);
|
|
345
|
+
}
|
|
346
|
+
return results;
|
|
347
|
+
};
|
|
348
|
+
const getPendingFullyExecutedPackets = async () => {
|
|
349
|
+
const startTime = new Date(new Date().getTime() - 30 * 1000); // 30 seconds ago
|
|
350
|
+
const oneDayAgo = new Date(new Date().getTime() - 24 * 60 * 60 * 1000); // 24 hours ago
|
|
351
|
+
const packets = await models_1.Packet.findAll({
|
|
352
|
+
limit: constants_1.proposeBatchQueryLimit,
|
|
353
|
+
where: {
|
|
354
|
+
isFullyExecuted: false,
|
|
355
|
+
isAttested: true,
|
|
356
|
+
tripReason: models_1.TripReason.NO,
|
|
357
|
+
updatedAt: {
|
|
358
|
+
[sequelize_1.Op.and]: [
|
|
359
|
+
{ [sequelize_1.Op.lte]: startTime },
|
|
360
|
+
{ [sequelize_1.Op.gte]: oneDayAgo }, // updatedAt >=24 hours ago
|
|
361
|
+
],
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
include: [
|
|
365
|
+
{
|
|
366
|
+
model: models_1.Message,
|
|
367
|
+
// we dont want to fetch messages which dont have inboundSuccess as true.
|
|
368
|
+
// if there are no valid messages, no point fetching packet as well. therefore not
|
|
369
|
+
// using required: false;
|
|
370
|
+
where: {
|
|
371
|
+
inboundSuccess: true,
|
|
372
|
+
executeRelayStatus: {
|
|
373
|
+
[sequelize_1.Op.ne]: models_1.ExecutionRelayStatus.IGNORED,
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
attributes: ["messageId", "isExecuted"],
|
|
377
|
+
},
|
|
378
|
+
],
|
|
379
|
+
order: [["updatedAt", "ASC"]],
|
|
380
|
+
});
|
|
381
|
+
console.log(" getPendingFullyExecutedPackets count: ", packets.length);
|
|
382
|
+
return packets;
|
|
383
|
+
};
|
|
384
|
+
exports.getPendingFullyExecutedPackets = getPendingFullyExecutedPackets;
|
|
385
|
+
const getPacketsByTxId = async (txIds) => {
|
|
386
|
+
const packets = (await models_1.Packet.findAll({
|
|
387
|
+
where: {
|
|
388
|
+
[sequelize_1.Op.or]: [
|
|
389
|
+
{ sealTxId: { [sequelize_1.Op.in]: txIds } },
|
|
390
|
+
{ proposeTxId: { [sequelize_1.Op.in]: txIds } },
|
|
391
|
+
{ attestTxId: { [sequelize_1.Op.in]: txIds } },
|
|
392
|
+
],
|
|
393
|
+
},
|
|
394
|
+
})).map((el) => el.get({ plain: true }));
|
|
395
|
+
return packets;
|
|
396
|
+
};
|
|
397
|
+
exports.getPacketsByTxId = getPacketsByTxId;
|
|
398
|
+
const updatePacketTxStatus = async (updates) => {
|
|
399
|
+
const statusCount = {};
|
|
400
|
+
const txIdStatusMap = {};
|
|
401
|
+
updates.forEach((update) => {
|
|
402
|
+
txIdStatusMap[update.txId] = update;
|
|
403
|
+
});
|
|
404
|
+
const txIds = updates.map((u) => u.txId);
|
|
405
|
+
const packets = await (0, exports.getPacketsByTxId)(txIds);
|
|
406
|
+
const packetDbUpdates = [];
|
|
407
|
+
let isRelayProposeRequired = false;
|
|
408
|
+
for (const packet of packets) {
|
|
409
|
+
const txId = getTxId(packet);
|
|
410
|
+
if (!txId || !txIdStatusMap[txId])
|
|
411
|
+
return;
|
|
412
|
+
const { status, txHash, chainId, confirmations } = txIdStatusMap[txId];
|
|
413
|
+
if (statusCount[status])
|
|
414
|
+
statusCount[status] += 1;
|
|
415
|
+
else
|
|
416
|
+
statusCount[status] = 1;
|
|
417
|
+
const updateObj = (0, exports.getUpdateObj)(packet, status, txHash, chainId, confirmations);
|
|
418
|
+
if (updateObj) {
|
|
419
|
+
packetDbUpdates.push({ ...packet, ...updateObj });
|
|
420
|
+
if (updateObj === null || updateObj === void 0 ? void 0 : updateObj.isSealed)
|
|
421
|
+
isRelayProposeRequired = true;
|
|
422
|
+
if (updateObj.sealRelayStatus === models_1.SealRelayStatus.SEAL_FAILED)
|
|
423
|
+
await (0, relayers_1.markSealRecentError)();
|
|
424
|
+
observeStatusUpdateMetrics(packet, updateObj);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
const updatedPacketIds = packetDbUpdates.map((p) => p.packetId);
|
|
428
|
+
console.log({ updatedPacketIds });
|
|
429
|
+
if (packetDbUpdates.length > 0) {
|
|
430
|
+
// console.log({packetDbUpdates});
|
|
431
|
+
await savePacketUpdates(packetDbUpdates);
|
|
432
|
+
}
|
|
433
|
+
if (isRelayProposeRequired) {
|
|
434
|
+
await (0, services_1.sendStandardSqsMessage)(constants_1.SQS_BASE_URL + constants_1.QueueName.BATCHER_TASK_QUEUE, {
|
|
435
|
+
type: constants_1.TaskNames.RELAY_PROPOSE,
|
|
436
|
+
data: { counter: Math.floor(Math.random() * 100) },
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
exports.updatePacketTxStatus = updatePacketTxStatus;
|
|
441
|
+
const observeStatusUpdateMetrics = (packet, updateObj) => {
|
|
442
|
+
if (updateObj.sealRelayStatus == models_1.SealRelayStatus.SEALED &&
|
|
443
|
+
(updateObj === null || updateObj === void 0 ? void 0 : updateObj.isSealed)) {
|
|
444
|
+
(0, prometheus_config_1.observeHistogram)(prometheus_config_1.relayMetrics.sealRelay.statusUpdateHistogram, {
|
|
445
|
+
labels: {
|
|
446
|
+
[prometheus_config_1.Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
447
|
+
},
|
|
448
|
+
timeDiff: (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
if (updateObj.proposeRelayStatus == models_1.ProposeRelayStatus.PROPOSED) {
|
|
452
|
+
(0, prometheus_config_1.observeHistogram)(prometheus_config_1.relayMetrics.proposeRelay.statusUpdateHistogram, {
|
|
453
|
+
labels: {
|
|
454
|
+
[prometheus_config_1.Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
455
|
+
[prometheus_config_1.Labels.DST_CHAIN_SLUG]: packet.dstChainSlug,
|
|
456
|
+
[prometheus_config_1.Labels.INTEGRATION_TYPE]: packet.integrationType,
|
|
457
|
+
},
|
|
458
|
+
timeDiff: (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
if (updateObj.attestRelayStatus == models_1.AttestRelayStatus.ATTESTED) {
|
|
462
|
+
(0, prometheus_config_1.observeHistogram)(prometheus_config_1.relayMetrics.attestRelay.statusUpdateHistogram, {
|
|
463
|
+
labels: {
|
|
464
|
+
[prometheus_config_1.Labels.SRC_CHAIN_SLUG]: packet.srcChainSlug,
|
|
465
|
+
[prometheus_config_1.Labels.DST_CHAIN_SLUG]: packet.dstChainSlug,
|
|
466
|
+
[prometheus_config_1.Labels.INTEGRATION_TYPE]: packet.integrationType,
|
|
467
|
+
},
|
|
468
|
+
timeDiff: (0, utils_2.currentTimestampInSeconds)() - packet.outboundTime,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
const getSealTimeout = (chainSlug) => {
|
|
473
|
+
if (chainSlug === dl_core_1.ChainSlug.POLYGON_MAINNET)
|
|
474
|
+
return 15 * 60;
|
|
475
|
+
return 5 * 60;
|
|
476
|
+
};
|
|
477
|
+
exports.getSealTimeout = getSealTimeout;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type TransactionReceipt } from "@ethersproject/providers";
|
|
2
|
+
import { type BigNumber } from "ethers";
|
|
3
|
+
import { type ChainSlug } from "@socket.tech/dl-core";
|
|
4
|
+
export declare const getReceipt: (txHash: string, chainSlug: ChainSlug) => Promise<TransactionReceipt>;
|
|
5
|
+
export declare const getRPCGasPrice: (chainSlug: ChainSlug) => Promise<BigNumber>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRPCGasPrice = exports.getReceipt = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const index_1 = require("../../dl-common/index");
|
|
6
|
+
const logger_1 = require("./logger");
|
|
7
|
+
const getReceipt = async (txHash, chainSlug) => {
|
|
8
|
+
let receipt;
|
|
9
|
+
try {
|
|
10
|
+
const provider = (0, constants_1.getProvider)(chainSlug);
|
|
11
|
+
receipt = await provider.getTransactionReceipt(txHash);
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
const err = e;
|
|
15
|
+
if ((err === null || err === void 0 ? void 0 : err.code) === "INVALID_ARGUMENT") {
|
|
16
|
+
throw new index_1.ServerError(index_1.StatusCodes.BAD_REQUEST, `invalid hash ${txHash}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
logger_1.logger.error("Error while getting receipt", err.toString());
|
|
20
|
+
throw new index_1.ServerError(index_1.StatusCodes.INTERNAL_SERVER_ERROR);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (!receipt) {
|
|
24
|
+
throw new index_1.ServerError(index_1.StatusCodes.NOT_FOUND, `tx ${txHash} not found on ${chainSlug} `);
|
|
25
|
+
}
|
|
26
|
+
return receipt;
|
|
27
|
+
};
|
|
28
|
+
exports.getReceipt = getReceipt;
|
|
29
|
+
const getRPCGasPrice = async (chainSlug) => {
|
|
30
|
+
let gasPrice;
|
|
31
|
+
try {
|
|
32
|
+
const provider = (0, constants_1.getProvider)(chainSlug);
|
|
33
|
+
gasPrice = await provider.getGasPrice();
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
const err = e;
|
|
37
|
+
logger_1.logger.error("Error while getting gas price from rpc", err.toString());
|
|
38
|
+
throw (0, index_1.InternalServerError)("Error while getting gas price from rpc");
|
|
39
|
+
}
|
|
40
|
+
return gasPrice;
|
|
41
|
+
};
|
|
42
|
+
exports.getRPCGasPrice = getRPCGasPrice;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./logger"), exports);
|
|
18
|
+
__exportStar(require("./chain-utils"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const logger: import("@aws-lambda-powertools/logger/lib/Logger").Logger;
|
|
2
|
+
export interface LogType {
|
|
3
|
+
info: string;
|
|
4
|
+
packetIds: string[];
|
|
5
|
+
messageIds: string[];
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
export declare const logInfo: (logInfo: LogType) => void;
|
|
9
|
+
export declare const logError: (logInfo: LogType) => void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logError = exports.logInfo = exports.logger = void 0;
|
|
4
|
+
const ll_common_1 = require("@socket.tech/ll-common");
|
|
5
|
+
exports.logger = (0, ll_common_1.createLogger)(process.env.REGION || "N/A", "socket-dl-batcher");
|
|
6
|
+
const logInfo = (logInfo) => exports.logger.info(`${JSON.stringify(logInfo)}`);
|
|
7
|
+
exports.logInfo = logInfo;
|
|
8
|
+
const logError = (logInfo) => exports.logger.error(`${JSON.stringify(logInfo)}`);
|
|
9
|
+
exports.logError = logError;
|
package/dist/utils/s3Service.js
CHANGED
|
@@ -50,7 +50,7 @@ exports.uploadFileToS3 = uploadFileToS3;
|
|
|
50
50
|
const getBucketAndFileName = (deploymentMode, account = __1.Accounts.dl) => {
|
|
51
51
|
const S3_BUCKET_NAME = deploymentMode === dl_core_1.DeploymentMode.SURGE ||
|
|
52
52
|
deploymentMode == dl_core_1.DeploymentMode.PROD
|
|
53
|
-
? `socket-${account}
|
|
53
|
+
? `socket-${account}-${deploymentMode}`
|
|
54
54
|
: `socket-ll-${deploymentMode}`;
|
|
55
55
|
const S3_RPC_CONFIG_FILE_PATH = deploymentMode + "RpcConfig.json";
|
|
56
56
|
return { S3_BUCKET_NAME, S3_RPC_CONFIG_FILE_PATH };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Provider, type TransactionRequest, type TransactionResponse } from "@ethersproject/abstract-provider";
|
|
2
|
+
import { type Deferrable } from "@ethersproject/properties";
|
|
3
|
+
import { SocketRelaySigner } from "../relaySigner";
|
|
4
|
+
import { Contract, type Wallet } from "ethers";
|
|
5
|
+
export declare const EIP712_SAFE_TX_TYPE: {
|
|
6
|
+
SafeTx: {
|
|
7
|
+
type: string;
|
|
8
|
+
name: string;
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
export declare class SocketSigner extends SocketRelaySigner {
|
|
12
|
+
readonly provider: Provider;
|
|
13
|
+
readonly chainId: number;
|
|
14
|
+
readonly safeAddress: string;
|
|
15
|
+
readonly safeWrapperAddress: string;
|
|
16
|
+
readonly relayUrl: string;
|
|
17
|
+
readonly relayerAPIKey: string;
|
|
18
|
+
readonly signingWallet?: Wallet | undefined;
|
|
19
|
+
readonly useSafe: boolean;
|
|
20
|
+
readonly useEOA: boolean;
|
|
21
|
+
readonly sequential: boolean;
|
|
22
|
+
readonly isCritical: boolean;
|
|
23
|
+
readonly metadata: object;
|
|
24
|
+
readonly safeWrapperContract: Contract;
|
|
25
|
+
readonly address: string;
|
|
26
|
+
constructor(provider: Provider, chainId: number, safeAddress: string, safeWrapperAddress: string, relayUrl: string, relayerAPIKey: string, signingWallet?: Wallet | undefined, useSafe?: boolean, useEOA?: boolean, sequential?: boolean, isCritical?: boolean, metadata?: object);
|
|
27
|
+
setSigningWallet(signingWallet: Wallet): SocketRelaySigner;
|
|
28
|
+
setSafeWrapperAddress(safeWrapperAddress: string): SocketRelaySigner;
|
|
29
|
+
setSafeAddress(safeAddress: string): SocketRelaySigner;
|
|
30
|
+
getAddress(): Promise<string>;
|
|
31
|
+
sendTransaction(transaction: Deferrable<TransactionRequest>): Promise<TransactionResponse>;
|
|
32
|
+
}
|