@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,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAwsKmsSigner = void 0;
|
|
4
|
+
const kms_ethers_signer_1 = require("./signer/kms-ethers-signer");
|
|
5
|
+
const getAwsKmsSigner = async (keyId, region = "us-east-1") => {
|
|
6
|
+
try {
|
|
7
|
+
const kmsCredentials = {
|
|
8
|
+
kmsClientConfig: {
|
|
9
|
+
signingRegion: region,
|
|
10
|
+
region,
|
|
11
|
+
},
|
|
12
|
+
keyId,
|
|
13
|
+
};
|
|
14
|
+
let signer = new kms_ethers_signer_1.KmsEthersSigner(kmsCredentials);
|
|
15
|
+
let signerAddress = await signer.getAddress();
|
|
16
|
+
// logger.info(` keyid ${keyId} ${signerAddress}`);
|
|
17
|
+
if (!signerAddress) {
|
|
18
|
+
throw new Error(`Invalid kms signer, keyId:${keyId}`);
|
|
19
|
+
}
|
|
20
|
+
return signer;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.getAwsKmsSigner = getAwsKmsSigner;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Contract, Event, EventFilter, providers } from "ethers";
|
|
2
|
+
import { StaticJsonRpcProvider } from "@ethersproject/providers";
|
|
3
|
+
export declare const getEvents: (contract: Contract, filter: EventFilter | string, fromBlock: number, toBlock: number, eventBlockRange?: number) => Promise<Event[]>;
|
|
4
|
+
export declare const getLogs: (provider: StaticJsonRpcProvider, address: string[], topics: string[], fromBlock: number, toBlock: number, eventBlockRange?: number) => Promise<providers.Log[]>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLogs = exports.getEvents = void 0;
|
|
4
|
+
const getEvents = async (contract, filter, fromBlock, toBlock, eventBlockRange = 5000) => {
|
|
5
|
+
const allEvents = [];
|
|
6
|
+
try {
|
|
7
|
+
let from = fromBlock;
|
|
8
|
+
let to = from + eventBlockRange - 1;
|
|
9
|
+
to = to < toBlock ? to : toBlock;
|
|
10
|
+
while (from <= toBlock) {
|
|
11
|
+
const events = await contract.queryFilter(filter, from, to);
|
|
12
|
+
allEvents.push(...events);
|
|
13
|
+
from = to + 1;
|
|
14
|
+
to = from + eventBlockRange - 1;
|
|
15
|
+
to = to < toBlock ? to : toBlock;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
return allEvents;
|
|
22
|
+
};
|
|
23
|
+
exports.getEvents = getEvents;
|
|
24
|
+
const getLogs = async (provider, address, topics, fromBlock, toBlock, eventBlockRange = 5000) => {
|
|
25
|
+
const allLogs = [];
|
|
26
|
+
try {
|
|
27
|
+
let from = fromBlock;
|
|
28
|
+
let to = from + eventBlockRange - 1;
|
|
29
|
+
to = to < toBlock ? to : toBlock;
|
|
30
|
+
while (from <= toBlock) {
|
|
31
|
+
const logs = await provider.send("eth_getLogs", [
|
|
32
|
+
{
|
|
33
|
+
address,
|
|
34
|
+
topics,
|
|
35
|
+
fromBlock: `0x${from.toString(16)}`,
|
|
36
|
+
toBlock: `0x${to.toString(16)}`,
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
allLogs.push(...logs);
|
|
40
|
+
from = to + 1;
|
|
41
|
+
to = from + eventBlockRange - 1;
|
|
42
|
+
to = to < toBlock ? to : toBlock;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
return allLogs;
|
|
49
|
+
};
|
|
50
|
+
exports.getLogs = getLogs;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* defining functions.
|
|
3
|
+
*/
|
|
4
|
+
export declare const isEmpty: (data: any) => boolean;
|
|
5
|
+
export declare const checkMissingFields: (fields: {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}) => void;
|
|
8
|
+
export declare const checkEnvValue: (key: string) => string;
|
|
9
|
+
export declare const checkMissingFieldsAndType: (fields: {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}, types?: {
|
|
12
|
+
[key: string]: string;
|
|
13
|
+
}) => void;
|
|
14
|
+
export declare const checkObjectFieldsAndType: (data: {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}, types?: {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}, prefix?: string) => void;
|
|
19
|
+
export declare const removeFields: (obj: any, fieldsToRemove: string[]) => any;
|
|
20
|
+
export declare const filterFields: (obj: any, fieldsAllowed: string[]) => any;
|
|
21
|
+
/**
|
|
22
|
+
* util function to return body response.
|
|
23
|
+
* params: statusCode, message, data.
|
|
24
|
+
// */
|
|
25
|
+
export declare const responseBody: (statusCode?: number, message?: null | string, data?: any, success?: boolean, error_code?: number | null) => {
|
|
26
|
+
statusCode: number;
|
|
27
|
+
headers: {
|
|
28
|
+
"Access-Control-Allow-Origin": string;
|
|
29
|
+
"Access-Control-Allow-Credentials": boolean;
|
|
30
|
+
};
|
|
31
|
+
body: string;
|
|
32
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.responseBody = exports.filterFields = exports.removeFields = exports.checkObjectFieldsAndType = exports.checkMissingFieldsAndType = exports.checkEnvValue = exports.checkMissingFields = exports.isEmpty = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
/**
|
|
6
|
+
* defining functions.
|
|
7
|
+
*/
|
|
8
|
+
const isEmpty = (data) => {
|
|
9
|
+
if (data === undefined || data === null) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}; // end of isEmpty.
|
|
16
|
+
exports.isEmpty = isEmpty;
|
|
17
|
+
const checkMissingFields = (fields) => {
|
|
18
|
+
for (const field in fields) {
|
|
19
|
+
let value = fields[field];
|
|
20
|
+
if (!value) {
|
|
21
|
+
throw (0, constants_1.BadRequestError)(`missing field : ${field}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.checkMissingFields = checkMissingFields;
|
|
26
|
+
const checkEnvValue = (key) => {
|
|
27
|
+
let value = process.env[key];
|
|
28
|
+
if (!value) {
|
|
29
|
+
throw (0, constants_1.InternalServerError)(`${key} not found`);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
};
|
|
33
|
+
exports.checkEnvValue = checkEnvValue;
|
|
34
|
+
const checkMissingFieldsAndType = (fields, types = {}) => {
|
|
35
|
+
for (const field in fields) {
|
|
36
|
+
if ((0, exports.isEmpty)(fields[field])) {
|
|
37
|
+
throw (0, constants_1.BadRequestError)(`missing field : ${field}`);
|
|
38
|
+
}
|
|
39
|
+
if (types[field] && typeof fields[field] !== types[field]) {
|
|
40
|
+
throw (0, constants_1.BadRequestError)(`Type of ${field} expected : "${types[field]}", got : "${typeof fields[field]}"`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.checkMissingFieldsAndType = checkMissingFieldsAndType;
|
|
45
|
+
const checkObjectFieldsAndType = (data, types = {}, prefix = "") => {
|
|
46
|
+
let keys = Object.keys(types);
|
|
47
|
+
for (const key of keys) {
|
|
48
|
+
if ((0, exports.isEmpty)(data[key])) {
|
|
49
|
+
throw (0, constants_1.BadRequestError)(`missing field : ${prefix}.${key}`);
|
|
50
|
+
}
|
|
51
|
+
if (typeof data[key] === "object") {
|
|
52
|
+
(0, exports.checkObjectFieldsAndType)(data[key], types[key], `${prefix}.${key}`);
|
|
53
|
+
}
|
|
54
|
+
else if (typeof data[key] !== types[key]) {
|
|
55
|
+
throw (0, constants_1.BadRequestError)(`Type of ${prefix}.${key} expected : "${types[key]}", got : "${typeof data[key]}"`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.checkObjectFieldsAndType = checkObjectFieldsAndType;
|
|
60
|
+
const removeFields = (obj, fieldsToRemove) => {
|
|
61
|
+
for (const field in obj) {
|
|
62
|
+
if (fieldsToRemove.includes(field)) {
|
|
63
|
+
delete obj[field];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return obj;
|
|
67
|
+
};
|
|
68
|
+
exports.removeFields = removeFields;
|
|
69
|
+
const filterFields = (obj, fieldsAllowed) => {
|
|
70
|
+
const finalObj = {};
|
|
71
|
+
for (const field in obj) {
|
|
72
|
+
if (fieldsAllowed.includes(field)) {
|
|
73
|
+
finalObj[field] = obj[field];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return finalObj;
|
|
77
|
+
};
|
|
78
|
+
exports.filterFields = filterFields;
|
|
79
|
+
/**
|
|
80
|
+
* util function to return body response.
|
|
81
|
+
* params: statusCode, message, data.
|
|
82
|
+
// */
|
|
83
|
+
const responseBody = (statusCode = 400, message = null, data = null, success = true, error_code = null) => {
|
|
84
|
+
// If no proper message present, or error code is not 1 => system generated error, return standard error message.
|
|
85
|
+
if (statusCode == 400 && (!message || error_code !== 1)) {
|
|
86
|
+
message = "BAD_REQUEST";
|
|
87
|
+
}
|
|
88
|
+
error_code = null;
|
|
89
|
+
return {
|
|
90
|
+
statusCode,
|
|
91
|
+
headers: {
|
|
92
|
+
"Access-Control-Allow-Origin": "*",
|
|
93
|
+
"Access-Control-Allow-Credentials": true,
|
|
94
|
+
},
|
|
95
|
+
body: JSON.stringify({
|
|
96
|
+
success,
|
|
97
|
+
error_code,
|
|
98
|
+
message,
|
|
99
|
+
data,
|
|
100
|
+
}),
|
|
101
|
+
};
|
|
102
|
+
}; // end responseBody function.
|
|
103
|
+
exports.responseBody = responseBody;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PacketDetails {
|
|
2
|
+
chainSlug: number;
|
|
3
|
+
capacitorAddr: string;
|
|
4
|
+
packetCount: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MessageDetails {
|
|
7
|
+
chainSlug: number;
|
|
8
|
+
siblingPlug: string;
|
|
9
|
+
globalMessageCount: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const unpackPacketId: (packetId: string) => PacketDetails;
|
|
12
|
+
export declare const unpackMessageId: (messageId: string) => MessageDetails;
|
|
13
|
+
export declare const packPacketId: (chainSlug: number, capacitorAddr: string, packetCount: string) => string;
|
|
14
|
+
export declare function encodePacketId(chainSlug: number, capacitorAddress: string, packetCount: number): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodePacketId = exports.packPacketId = exports.unpackMessageId = exports.unpackPacketId = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const address_1 = require("./address");
|
|
6
|
+
const utils_1 = require("ethers/lib/utils");
|
|
7
|
+
const unpackPacketId = (packetId) => {
|
|
8
|
+
// 2(0x) + 1-8(chain slug) + 40(address) + 16(nonce)
|
|
9
|
+
const slugLength = packetId.length - 58;
|
|
10
|
+
const chainSlug = parseInt(ethers_1.BigNumber.from(`0x${packetId.substring(2, 2 + slugLength)}`).toString());
|
|
11
|
+
const capacitorAddr = (0, address_1.toLowerCase)(`0x${packetId.substring(2 + slugLength, 40 + 2 + slugLength)}`);
|
|
12
|
+
const packetCount = ethers_1.BigNumber.from(`0x${packetId.substring(40 + 2 + slugLength)}`).toString();
|
|
13
|
+
return {
|
|
14
|
+
chainSlug,
|
|
15
|
+
capacitorAddr,
|
|
16
|
+
packetCount,
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
exports.unpackPacketId = unpackPacketId;
|
|
20
|
+
const unpackMessageId = (messageId) => {
|
|
21
|
+
// 2(0x) + 1-8(chain slug) + 40(address) + 16(nonce)
|
|
22
|
+
const slugLength = messageId.length - 58;
|
|
23
|
+
const chainSlug = parseInt(ethers_1.BigNumber.from(`0x${messageId.substring(2, 2 + slugLength)}`).toString());
|
|
24
|
+
const siblingPlug = (0, address_1.toLowerCase)(`0x${messageId.substring(2 + slugLength, 40 + 2 + slugLength)}`);
|
|
25
|
+
const globalMessageCount = ethers_1.BigNumber.from(`0x${messageId.substring(40 + 2 + slugLength)}`).toString();
|
|
26
|
+
return {
|
|
27
|
+
chainSlug,
|
|
28
|
+
siblingPlug,
|
|
29
|
+
globalMessageCount,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.unpackMessageId = unpackMessageId;
|
|
33
|
+
const packPacketId = (chainSlug, capacitorAddr, packetCount) => {
|
|
34
|
+
const nonce = ethers_1.BigNumber.from(packetCount).toHexString();
|
|
35
|
+
const nonceHex = nonce.length <= 16 ? (0, utils_1.hexZeroPad)(nonce, 8).substring(2) : nonce.substring(2);
|
|
36
|
+
const slug = ethers_1.BigNumber.from(chainSlug).toHexString();
|
|
37
|
+
const slugHex = slug.length <= 10 ? (0, utils_1.hexZeroPad)(slug, 4) : slug;
|
|
38
|
+
const id = slugHex + capacitorAddr.substring(2) + nonceHex;
|
|
39
|
+
return id.toLowerCase();
|
|
40
|
+
};
|
|
41
|
+
exports.packPacketId = packPacketId;
|
|
42
|
+
function encodePacketId(chainSlug, capacitorAddress, packetCount) {
|
|
43
|
+
const encodedValue = (BigInt(chainSlug) << BigInt(224)) |
|
|
44
|
+
(BigInt(capacitorAddress) << BigInt(64)) |
|
|
45
|
+
BigInt(packetCount);
|
|
46
|
+
// Ensure the result is a 32-byte hex string (bytes32 in Solidity)
|
|
47
|
+
const resultHex = encodedValue.toString(16).padStart(64, "0");
|
|
48
|
+
return "0x" + resultHex;
|
|
49
|
+
}
|
|
50
|
+
exports.encodePacketId = encodePacketId;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./axios";
|
|
2
|
+
export * from "./discord";
|
|
3
|
+
export * from "./relaySigner";
|
|
4
|
+
export * from "./idUtils";
|
|
5
|
+
export * from "./address";
|
|
6
|
+
export * from "./dataStructHelper";
|
|
7
|
+
export * from "./extraUtils";
|
|
8
|
+
export * from "./time";
|
|
9
|
+
export * from "./signer";
|
|
10
|
+
export * from "./ethersAwsKmsSigner";
|
|
11
|
+
export * from "./secretManagerService";
|
|
12
|
+
export * from "./eventGetter";
|
|
13
|
+
export * from "./s3Service";
|
|
@@ -0,0 +1,29 @@
|
|
|
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("./axios"), exports);
|
|
18
|
+
__exportStar(require("./discord"), exports);
|
|
19
|
+
__exportStar(require("./relaySigner"), exports);
|
|
20
|
+
__exportStar(require("./idUtils"), exports);
|
|
21
|
+
__exportStar(require("./address"), exports);
|
|
22
|
+
__exportStar(require("./dataStructHelper"), exports);
|
|
23
|
+
__exportStar(require("./extraUtils"), exports);
|
|
24
|
+
__exportStar(require("./time"), exports);
|
|
25
|
+
__exportStar(require("./signer"), exports);
|
|
26
|
+
__exportStar(require("./ethersAwsKmsSigner"), exports);
|
|
27
|
+
__exportStar(require("./secretManagerService"), exports);
|
|
28
|
+
__exportStar(require("./eventGetter"), exports);
|
|
29
|
+
__exportStar(require("./s3Service"), exports);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Provider, TransactionRequest, TransactionResponse } from "@ethersproject/abstract-provider";
|
|
2
|
+
import { Signer } from "@ethersproject/abstract-signer";
|
|
3
|
+
import { Bytes } from "@ethersproject/bytes";
|
|
4
|
+
import { Deferrable } from "@ethersproject/properties";
|
|
5
|
+
export declare class SocketRelaySigner extends Signer {
|
|
6
|
+
readonly provider: Provider;
|
|
7
|
+
readonly chainId: number;
|
|
8
|
+
readonly relayUrl: string;
|
|
9
|
+
readonly relayerAPIKey: string;
|
|
10
|
+
readonly sequential: boolean;
|
|
11
|
+
readonly isCritical: boolean;
|
|
12
|
+
readonly metadata: object;
|
|
13
|
+
constructor(provider: Provider, chainId: number, relayUrl: string, relayerAPIKey: string, sequential?: boolean, isCritical?: boolean, metadata?: object);
|
|
14
|
+
getAddress(): Promise<string>;
|
|
15
|
+
signMessage(message: string | Bytes): Promise<string>;
|
|
16
|
+
connect(provider: Provider): SocketRelaySigner;
|
|
17
|
+
setCritical(isCritical: boolean): SocketRelaySigner;
|
|
18
|
+
addMetadata(metadata: object): SocketRelaySigner;
|
|
19
|
+
signTransaction(transaction: Deferrable<TransactionRequest>): Promise<string>;
|
|
20
|
+
sendTransaction(transaction: Deferrable<TransactionRequest>): Promise<TransactionResponse>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SocketRelaySigner = void 0;
|
|
4
|
+
const abstract_signer_1 = require("@ethersproject/abstract-signer");
|
|
5
|
+
const axios_1 = require("./axios");
|
|
6
|
+
class SocketRelaySigner extends abstract_signer_1.Signer {
|
|
7
|
+
constructor(provider, chainId, relayUrl, relayerAPIKey, sequential = false,
|
|
8
|
+
// if isCritical is set to true, will try multiple relayers
|
|
9
|
+
// to get the transaction included
|
|
10
|
+
isCritical = false, metadata = {}) {
|
|
11
|
+
super();
|
|
12
|
+
this.provider = provider;
|
|
13
|
+
this.chainId = chainId;
|
|
14
|
+
this.relayUrl = relayUrl;
|
|
15
|
+
this.relayerAPIKey = relayerAPIKey;
|
|
16
|
+
this.sequential = sequential;
|
|
17
|
+
this.isCritical = isCritical;
|
|
18
|
+
this.metadata = metadata;
|
|
19
|
+
}
|
|
20
|
+
async getAddress() {
|
|
21
|
+
// some random address
|
|
22
|
+
return "0x5367Efc17020Aa1CF0943bA7eD17f1D3e4c7d7EE";
|
|
23
|
+
}
|
|
24
|
+
async signMessage(message) {
|
|
25
|
+
throw new Error(" signMessage not Implemented");
|
|
26
|
+
}
|
|
27
|
+
connect(provider) {
|
|
28
|
+
return new SocketRelaySigner(provider, this.chainId, this.relayUrl, this.relayerAPIKey, this.sequential, this.isCritical, this.metadata);
|
|
29
|
+
}
|
|
30
|
+
setCritical(isCritical) {
|
|
31
|
+
return new SocketRelaySigner(this.provider, this.chainId, this.relayUrl, this.relayerAPIKey, this.sequential, isCritical, this.metadata);
|
|
32
|
+
}
|
|
33
|
+
addMetadata(metadata) {
|
|
34
|
+
return new SocketRelaySigner(this.provider, this.chainId, this.relayUrl, this.relayerAPIKey, this.sequential, this.isCritical, metadata);
|
|
35
|
+
}
|
|
36
|
+
async signTransaction(transaction) {
|
|
37
|
+
throw new Error(" signTransaction not Implemented");
|
|
38
|
+
}
|
|
39
|
+
async sendTransaction(transaction) {
|
|
40
|
+
try {
|
|
41
|
+
if (!this.relayerAPIKey)
|
|
42
|
+
throw new Error("relayerAPIKey not provided");
|
|
43
|
+
if (!this.relayUrl)
|
|
44
|
+
throw new Error("relayUrl not provided");
|
|
45
|
+
let payload = {
|
|
46
|
+
chainId: this.chainId,
|
|
47
|
+
sequential: this.sequential,
|
|
48
|
+
isCritical: this.isCritical,
|
|
49
|
+
metadata: this.metadata,
|
|
50
|
+
...transaction,
|
|
51
|
+
};
|
|
52
|
+
const config = {
|
|
53
|
+
headers: {
|
|
54
|
+
"x-api-key": this.relayerAPIKey,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
let result = await (0, axios_1.axiosPost)(this.relayUrl, payload, config);
|
|
58
|
+
if (!result.success)
|
|
59
|
+
throw result;
|
|
60
|
+
let tx = result === null || result === void 0 ? void 0 : result.data;
|
|
61
|
+
return this.provider._wrapTransaction(tx);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.SocketRelaySigner = SocketRelaySigner;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DeploymentMode } from "@socket.tech/dl-core";
|
|
2
|
+
import { Accounts } from "..";
|
|
3
|
+
export declare const initS3Client: (region: string) => void;
|
|
4
|
+
export declare const getFileFromS3: (bucket: string, filePath: string) => Promise<any>;
|
|
5
|
+
export declare const getS3Config: (deploymentMode: DeploymentMode, region?: string, account?: Accounts.dl | Accounts.ll) => Promise<any>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getS3Config = exports.getFileFromS3 = exports.initS3Client = void 0;
|
|
4
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
|
+
const dl_core_1 = require("@socket.tech/dl-core");
|
|
6
|
+
const __1 = require("..");
|
|
7
|
+
// Set your AWS credentials and region
|
|
8
|
+
let s3Client;
|
|
9
|
+
const initS3Client = (region) => {
|
|
10
|
+
s3Client = new client_s3_1.S3Client({
|
|
11
|
+
region,
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.initS3Client = initS3Client;
|
|
15
|
+
const getFileFromS3 = async (bucket, filePath) => {
|
|
16
|
+
var _a;
|
|
17
|
+
try {
|
|
18
|
+
// Create an S3 GET operation command
|
|
19
|
+
const getObjectCommand = new client_s3_1.GetObjectCommand({
|
|
20
|
+
Bucket: bucket,
|
|
21
|
+
Key: filePath,
|
|
22
|
+
});
|
|
23
|
+
// Execute the command and get the response
|
|
24
|
+
const s3Response = await s3Client.send(getObjectCommand);
|
|
25
|
+
const jsonStr = await ((_a = s3Response.Body) === null || _a === void 0 ? void 0 : _a.transformToString());
|
|
26
|
+
let response;
|
|
27
|
+
if (jsonStr)
|
|
28
|
+
response = JSON.parse(jsonStr);
|
|
29
|
+
return response;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error("Error downloading file from S3:", error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.getFileFromS3 = getFileFromS3;
|
|
37
|
+
const getS3Config = async (deploymentMode, region = "us-east-1", account = __1.Accounts.dl) => {
|
|
38
|
+
const S3_BUCKET_NAME = deploymentMode == dl_core_1.DeploymentMode.PROD
|
|
39
|
+
? `socket-${account}-` + deploymentMode
|
|
40
|
+
: `socket-ll-` + deploymentMode;
|
|
41
|
+
const S3_RPC_CONFIG_FILE_PATH = deploymentMode + "RpcConfig.json";
|
|
42
|
+
(0, exports.initS3Client)(region);
|
|
43
|
+
return await (0, exports.getFileFromS3)(S3_BUCKET_NAME, S3_RPC_CONFIG_FILE_PATH);
|
|
44
|
+
};
|
|
45
|
+
exports.getS3Config = getS3Config;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSecret = exports.getAllSecrets = void 0;
|
|
4
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
5
|
+
const defaultRegion = "us-east-1";
|
|
6
|
+
const getAllSecrets = async (secretName, region = defaultRegion) => {
|
|
7
|
+
try {
|
|
8
|
+
const client = new client_secrets_manager_1.SecretsManagerClient({
|
|
9
|
+
region,
|
|
10
|
+
});
|
|
11
|
+
let response = await client.send(new client_secrets_manager_1.GetSecretValueCommand({
|
|
12
|
+
SecretId: secretName,
|
|
13
|
+
VersionStage: "AWSCURRENT", // VersionStage defaults to AWSCURRENT if unspecified
|
|
14
|
+
}));
|
|
15
|
+
if (!(response === null || response === void 0 ? void 0 : response.SecretString))
|
|
16
|
+
throw new Error("No secret found");
|
|
17
|
+
return JSON.parse(response.SecretString);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.getAllSecrets = getAllSecrets;
|
|
24
|
+
const getSecret = async (secretName, secretKey, region = defaultRegion) => {
|
|
25
|
+
try {
|
|
26
|
+
let secrets = await (0, exports.getAllSecrets)(secretName, region);
|
|
27
|
+
return secrets === null || secrets === void 0 ? void 0 : secrets[secretKey];
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.getSecret = getSecret;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Signer as ISigner } from "./signer";
|
|
2
|
+
import { Signer } from "@ethersproject/abstract-signer";
|
|
3
|
+
import { Deferrable } from "@ethersproject/properties";
|
|
4
|
+
import { Bytes } from "@ethersproject/bytes";
|
|
5
|
+
import type { Provider, TransactionRequest } from "@ethersproject/abstract-provider";
|
|
6
|
+
export type AdapterConfig = {
|
|
7
|
+
signer: ISigner;
|
|
8
|
+
version: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class Adapter extends Signer {
|
|
11
|
+
private readonly signer;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
constructor(config: AdapterConfig, provider?: Provider);
|
|
14
|
+
getAddress(): Promise<string>;
|
|
15
|
+
signMessage(message: Bytes | string): Promise<string>;
|
|
16
|
+
signTransaction(deferrableTransaction: Deferrable<TransactionRequest>): Promise<string>;
|
|
17
|
+
connect(provider: Provider): Adapter;
|
|
18
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Adapter = void 0;
|
|
4
|
+
const abstract_signer_1 = require("@ethersproject/abstract-signer");
|
|
5
|
+
const properties_1 = require("@ethersproject/properties");
|
|
6
|
+
const bytes_1 = require("@ethersproject/bytes");
|
|
7
|
+
const hash_1 = require("@ethersproject/hash");
|
|
8
|
+
const logger_1 = require("@ethersproject/logger");
|
|
9
|
+
const address_1 = require("@ethersproject/address");
|
|
10
|
+
const keccak256_1 = require("@ethersproject/keccak256");
|
|
11
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
12
|
+
const transactions_1 = require("@ethersproject/transactions");
|
|
13
|
+
class Adapter extends abstract_signer_1.Signer {
|
|
14
|
+
constructor(config, provider) {
|
|
15
|
+
super();
|
|
16
|
+
this.signer = config.signer;
|
|
17
|
+
(0, properties_1.defineReadOnly)(this, "provider", provider);
|
|
18
|
+
this.logger = new logger_1.Logger(config.version);
|
|
19
|
+
}
|
|
20
|
+
async getAddress() {
|
|
21
|
+
const address = await this.signer.getAddress();
|
|
22
|
+
return (0, address_1.getAddress)(address.toString());
|
|
23
|
+
}
|
|
24
|
+
async signMessage(message) {
|
|
25
|
+
const digest = (0, hash_1.hashMessage)(message);
|
|
26
|
+
const signature = await this.signer.sign(Buffer.from(digest.slice(2), "hex"));
|
|
27
|
+
return "0x" + signature.toString();
|
|
28
|
+
}
|
|
29
|
+
async signTransaction(deferrableTransaction) {
|
|
30
|
+
const transaction = await (0, properties_1.resolveProperties)(deferrableTransaction);
|
|
31
|
+
const address = await this.getAddress();
|
|
32
|
+
if (transaction.from != null) {
|
|
33
|
+
if ((0, address_1.getAddress)(transaction.from) !== address) {
|
|
34
|
+
this.logger.throwArgumentError("transaction from address mismatch", "transaction.from", transaction.from);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const nonce = transaction.nonce
|
|
38
|
+
? bignumber_1.BigNumber.from(transaction.nonce).toNumber()
|
|
39
|
+
: undefined;
|
|
40
|
+
const unsignedTransaction = {
|
|
41
|
+
to: transaction.to,
|
|
42
|
+
nonce,
|
|
43
|
+
gasLimit: transaction.gasLimit,
|
|
44
|
+
gasPrice: transaction.gasPrice,
|
|
45
|
+
data: transaction.data,
|
|
46
|
+
value: transaction.value,
|
|
47
|
+
chainId: transaction.chainId,
|
|
48
|
+
type: transaction.type,
|
|
49
|
+
accessList: transaction.accessList,
|
|
50
|
+
maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,
|
|
51
|
+
maxFeePerGas: transaction.maxFeePerGas,
|
|
52
|
+
};
|
|
53
|
+
Object.keys(unsignedTransaction).forEach((key) => {
|
|
54
|
+
if (key in unsignedTransaction && unsignedTransaction[key] == undefined) {
|
|
55
|
+
delete unsignedTransaction[key];
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const digest = (0, keccak256_1.keccak256)((0, transactions_1.serialize)(unsignedTransaction));
|
|
59
|
+
const signature = await this.signer.sign(Buffer.from(digest.slice(2), "hex"));
|
|
60
|
+
const ethersSignature = (0, bytes_1.splitSignature)({
|
|
61
|
+
v: signature.v,
|
|
62
|
+
r: `0x${signature.r.toString("hex")}`,
|
|
63
|
+
s: `0x${signature.s.toString("hex")}`,
|
|
64
|
+
});
|
|
65
|
+
return (0, transactions_1.serialize)(unsignedTransaction, ethersSignature);
|
|
66
|
+
}
|
|
67
|
+
connect(provider) {
|
|
68
|
+
return new Adapter({ signer: this.signer, version: this.logger.version }, provider);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.Adapter = Adapter;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare class Address {
|
|
3
|
+
private readonly buffer;
|
|
4
|
+
private constructor();
|
|
5
|
+
private static toAddress;
|
|
6
|
+
static fromPublicKey(publicKey: Buffer): Address;
|
|
7
|
+
private toChecksumAddress;
|
|
8
|
+
toString(): string;
|
|
9
|
+
equals(other: Address): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Address = void 0;
|
|
7
|
+
const keccak_1 = __importDefault(require("keccak"));
|
|
8
|
+
class Address {
|
|
9
|
+
constructor(buffer) {
|
|
10
|
+
this.buffer = buffer;
|
|
11
|
+
}
|
|
12
|
+
static toAddress(publicKey) {
|
|
13
|
+
const address = (0, keccak_1.default)("keccak256")
|
|
14
|
+
.update(publicKey)
|
|
15
|
+
.digest()
|
|
16
|
+
.slice(12, 32);
|
|
17
|
+
return address;
|
|
18
|
+
}
|
|
19
|
+
static fromPublicKey(publicKey) {
|
|
20
|
+
if (publicKey.length !== 64) {
|
|
21
|
+
throw TypeError(`Address: invalid public key. buffer length must be 64. actual: ${publicKey.length}`);
|
|
22
|
+
}
|
|
23
|
+
return new Address(this.toAddress(publicKey));
|
|
24
|
+
}
|
|
25
|
+
toChecksumAddress(address) {
|
|
26
|
+
// EIP-55 https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md#implementation
|
|
27
|
+
const hash = (0, keccak_1.default)("keccak256").update(address).digest("hex");
|
|
28
|
+
return address
|
|
29
|
+
.split("")
|
|
30
|
+
.map((c, i) => {
|
|
31
|
+
return Number.parseInt(hash[i], 16) > 7 ? c.toUpperCase() : c;
|
|
32
|
+
})
|
|
33
|
+
.join("");
|
|
34
|
+
}
|
|
35
|
+
toString() {
|
|
36
|
+
return this.toChecksumAddress(this.buffer.toString("hex"));
|
|
37
|
+
}
|
|
38
|
+
equals(other) {
|
|
39
|
+
return this.buffer.equals(other.buffer);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.Address = Address;
|