@0xtorch/evm 0.0.105 → 0.0.106
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/_cjs/chain/definitions/ronin.js +6 -2
- package/_cjs/chain/definitions/ronin.js.map +1 -1
- package/_cjs/explorer/index.js +7 -5
- package/_cjs/explorer/index.js.map +1 -1
- package/_cjs/explorer/moralis/client.js +64 -0
- package/_cjs/explorer/moralis/client.js.map +1 -0
- package/_cjs/explorer/moralis/create.js +146 -0
- package/_cjs/explorer/moralis/create.js.map +1 -0
- package/_cjs/explorer/moralis/getWalletTransactionHistory.js +65 -0
- package/_cjs/explorer/moralis/getWalletTransactionHistory.js.map +1 -0
- package/_esm/chain/definitions/ronin.js +7 -3
- package/_esm/chain/definitions/ronin.js.map +1 -1
- package/_esm/explorer/index.js +1 -0
- package/_esm/explorer/index.js.map +1 -1
- package/_esm/explorer/moralis/client.js +64 -0
- package/_esm/explorer/moralis/client.js.map +1 -0
- package/_esm/explorer/moralis/create.js +142 -0
- package/_esm/explorer/moralis/create.js.map +1 -0
- package/_esm/explorer/moralis/getWalletTransactionHistory.js +141 -0
- package/_esm/explorer/moralis/getWalletTransactionHistory.js.map +1 -0
- package/_types/chain/definitions/ronin.d.ts +5 -1
- package/_types/chain/definitions/ronin.d.ts.map +1 -1
- package/_types/explorer/index.d.ts +1 -0
- package/_types/explorer/index.d.ts.map +1 -1
- package/_types/explorer/moralis/client.d.ts +16 -0
- package/_types/explorer/moralis/client.d.ts.map +1 -0
- package/_types/explorer/moralis/create.d.ts +12 -0
- package/_types/explorer/moralis/create.d.ts.map +1 -0
- package/_types/explorer/moralis/getWalletTransactionHistory.d.ts +38 -0
- package/_types/explorer/moralis/getWalletTransactionHistory.d.ts.map +1 -0
- package/chain/definitions/ronin.ts +15 -3
- package/explorer/index.ts +1 -0
- package/explorer/moralis/client.ts +114 -0
- package/explorer/moralis/create.ts +205 -0
- package/explorer/moralis/getWalletTransactionHistory.ts +172 -0
- package/package.json +1 -1
- package/.DS_Store +0 -0
- package/analyzer/.DS_Store +0 -0
- package/chain/.DS_Store +0 -0
- package/client/.DS_Store +0 -0
- package/explorer/.DS_Store +0 -0
|
@@ -5,14 +5,18 @@ const core_1 = require("@0xtorch/core");
|
|
|
5
5
|
const chains_1 = require("viem/chains");
|
|
6
6
|
const client_1 = require("../../client");
|
|
7
7
|
const explorer_1 = require("../../explorer");
|
|
8
|
-
const createRoninChain = () => (0, exports.createRoninChainCustom)({
|
|
8
|
+
const createRoninChain = ({ explorerApiKey: apiKey, explorerProxyUrl: proxyUrl, explorerHeaders: headers, }) => (0, exports.createRoninChainCustom)({
|
|
9
9
|
client: (0, client_1.createClient)({
|
|
10
10
|
chain: chains_1.ronin,
|
|
11
11
|
httpRpcs: exports.roninHttpRpcs,
|
|
12
12
|
}),
|
|
13
|
-
explorer: (0, explorer_1.
|
|
13
|
+
explorer: (0, explorer_1.createMoralisExplorer)({
|
|
14
14
|
name: 'The Ronin Block Explorer',
|
|
15
15
|
baseUrl: 'https://app.roninchain.com',
|
|
16
|
+
chain: 'ronin',
|
|
17
|
+
apiKey,
|
|
18
|
+
proxyUrl,
|
|
19
|
+
headers,
|
|
16
20
|
}),
|
|
17
21
|
});
|
|
18
22
|
exports.createRoninChain = createRoninChain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ronin.js","sourceRoot":"","sources":["../../../chain/definitions/ronin.ts"],"names":[],"mappings":";;;AAAA,wCAAqC;AACrC,wCAAgD;AAChD,yCAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"ronin.js","sourceRoot":"","sources":["../../../chain/definitions/ronin.ts"],"names":[],"mappings":";;;AAAA,wCAAqC;AACrC,wCAAgD;AAChD,yCAAwD;AACxD,6CAAqE;AAI9D,MAAM,gBAAgB,GAAG,CAAC,EAC/B,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,QAAQ,EAC1B,eAAe,EAAE,OAAO,GAKzB,EAAE,EAAE,CACH,IAAA,8BAAsB,EAAC;IACrB,MAAM,EAAE,IAAA,qBAAY,EAAC;QACnB,KAAK,EAAE,cAAS;QAChB,QAAQ,EAAE,qBAAa;KACxB,CAAC;IACF,QAAQ,EAAE,IAAA,gCAAqB,EAAC;QAC9B,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,4BAA4B;QACrC,KAAK,EAAE,OAAO;QACd,MAAM;QACN,QAAQ;QACR,OAAO;KACR,CAAC;CACH,CAAC,CAAA;AAtBS,QAAA,gBAAgB,oBAsBzB;AAOG,MAAM,sBAAsB,GAAG,CAAC,EACrC,MAAM,EACN,QAAQ,GACmB,EAAS,EAAE,CAAC,CAAC;IACxC,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,YAAK;KAChB;IACD,qBAAqB,EAAE,IAAI,GAAG,CAAC;QAC7B,4CAA4C;KAC7C,CAAC;IACF,QAAQ;IACR,MAAM;IACN,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;CACrB,CAAC,CAAA;AArBW,QAAA,sBAAsB,0BAqBjC;AAEW,QAAA,aAAa,GAAc;IACtC;QACE,GAAG,EAAE,gCAAgC;QACrC,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;KAC3B;IAOD;QACE,GAAG,EAAE,8EAA8E;QACnF,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;KAC3B;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,MAAO;KAC9B;CACF,CAAA;AAEY,QAAA,qBAAqB,GAAsB,EAAE,CAAA"}
|
package/_cjs/explorer/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBlockscout = exports.createNoApiExplorer = exports.createEtherscan = void 0;
|
|
3
|
+
exports.createBlockscout = exports.createNoApiExplorer = exports.createMoralisExplorer = exports.createEtherscan = void 0;
|
|
4
4
|
var create_1 = require("./etherscan/create");
|
|
5
5
|
Object.defineProperty(exports, "createEtherscan", { enumerable: true, get: function () { return create_1.createEtherscan; } });
|
|
6
|
-
var create_2 = require("./
|
|
7
|
-
Object.defineProperty(exports, "
|
|
8
|
-
var create_3 = require("./
|
|
9
|
-
Object.defineProperty(exports, "
|
|
6
|
+
var create_2 = require("./moralis/create");
|
|
7
|
+
Object.defineProperty(exports, "createMoralisExplorer", { enumerable: true, get: function () { return create_2.createMoralisExplorer; } });
|
|
8
|
+
var create_3 = require("./noApiExplorer/create");
|
|
9
|
+
Object.defineProperty(exports, "createNoApiExplorer", { enumerable: true, get: function () { return create_3.createNoApiExplorer; } });
|
|
10
|
+
var create_4 = require("./blockscout/create");
|
|
11
|
+
Object.defineProperty(exports, "createBlockscout", { enumerable: true, get: function () { return create_4.createBlockscout; } });
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../explorer/index.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAA3C,yGAAA,eAAe,OAAA;AAExB,iDAA4D;AAAnD,6GAAA,mBAAmB,OAAA;AAC5B,8CAAsD;AAA7C,0GAAA,gBAAgB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../explorer/index.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAA3C,yGAAA,eAAe,OAAA;AAExB,2CAAwD;AAA/C,+GAAA,qBAAqB,OAAA;AAC9B,iDAA4D;AAAnD,6GAAA,mBAAmB,OAAA;AAC5B,8CAAsD;AAA7C,0GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMoralisClient = void 0;
|
|
4
|
+
const core_1 = require("@0xtorch/core");
|
|
5
|
+
const apiBaseUrl = 'https://deep-index.moralis.io';
|
|
6
|
+
const createMoralisClient = ({ apiKey, proxyUrl, headers, }) => {
|
|
7
|
+
if (apiKey === undefined && proxyUrl === undefined) {
|
|
8
|
+
throw new Error('apiKey or proxyUrl must be provided');
|
|
9
|
+
}
|
|
10
|
+
const rateLimitPerSecond = 1;
|
|
11
|
+
const requestTimestamps = [];
|
|
12
|
+
const get = async ({ path, query, resultSchema, }, repeat = 0) => {
|
|
13
|
+
const time1SecondAgo = Date.now() - 1000;
|
|
14
|
+
if (requestTimestamps.filter((t) => t >= time1SecondAgo).length >=
|
|
15
|
+
rateLimitPerSecond) {
|
|
16
|
+
await new Promise((resolve) => {
|
|
17
|
+
const intervalId = setInterval(() => {
|
|
18
|
+
const time1SecondAgo = Date.now() - 1000;
|
|
19
|
+
if (requestTimestamps.filter((t) => t >= time1SecondAgo).length <
|
|
20
|
+
rateLimitPerSecond) {
|
|
21
|
+
clearInterval(intervalId);
|
|
22
|
+
resolve();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}, 1000);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
requestTimestamps.push(Date.now());
|
|
29
|
+
try {
|
|
30
|
+
const url = new URL(path, apiBaseUrl);
|
|
31
|
+
for (const [key, value] of Object.entries(query)) {
|
|
32
|
+
url.searchParams.set(key, value);
|
|
33
|
+
}
|
|
34
|
+
console.debug(`[GET] ${url.toString()}`);
|
|
35
|
+
const result = await (0, core_1.rest)(proxyUrl === undefined
|
|
36
|
+
? url.toString()
|
|
37
|
+
: `${proxyUrl}${encodeURIComponent(url.toString())}`, {
|
|
38
|
+
schema: resultSchema,
|
|
39
|
+
fetchOptions: {
|
|
40
|
+
headers: {
|
|
41
|
+
...headers,
|
|
42
|
+
...(apiKey === undefined ? {} : { 'X-API-Key': apiKey }),
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (repeat < 3 && error instanceof Error) {
|
|
50
|
+
if (error.message.includes('429')) {
|
|
51
|
+
console.debug(error);
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, 10_000));
|
|
53
|
+
return await get({ path, query, resultSchema }, repeat + 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
get,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
exports.createMoralisClient = createMoralisClient;
|
|
64
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../explorer/moralis/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMoralisExplorer = void 0;
|
|
4
|
+
const types_1 = require("../../types");
|
|
5
|
+
const createInternalTransactionId_1 = require("../../utils/createInternalTransactionId");
|
|
6
|
+
const client_1 = require("./client");
|
|
7
|
+
const getWalletTransactionHistory_1 = require("./getWalletTransactionHistory");
|
|
8
|
+
const limit = 100;
|
|
9
|
+
const createMoralisExplorer = ({ name, baseUrl, chain, apiKey, proxyUrl, headers, }) => {
|
|
10
|
+
const client = (0, client_1.createMoralisClient)({
|
|
11
|
+
apiKey,
|
|
12
|
+
proxyUrl,
|
|
13
|
+
headers,
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
name,
|
|
17
|
+
baseUrl,
|
|
18
|
+
getAddressInternalTransactions: async ({ address, fromBlock, toBlock, }) => {
|
|
19
|
+
const lowerAddress = (0, types_1.toLowerHex)(address);
|
|
20
|
+
const internalTransactions = new Map();
|
|
21
|
+
let cursor = undefined;
|
|
22
|
+
while (true) {
|
|
23
|
+
const result = await (0, getWalletTransactionHistory_1.getWalletTransactionHistory)({
|
|
24
|
+
client,
|
|
25
|
+
address: lowerAddress,
|
|
26
|
+
chain,
|
|
27
|
+
fromBlock,
|
|
28
|
+
toBlock,
|
|
29
|
+
cursor,
|
|
30
|
+
});
|
|
31
|
+
cursor = result.cursor;
|
|
32
|
+
for (const transaction of result.result) {
|
|
33
|
+
for (const internalTransaction of transaction.internal_transactions) {
|
|
34
|
+
if (internalTransaction.from !== lowerAddress &&
|
|
35
|
+
internalTransaction.to !== lowerAddress) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const data = {
|
|
39
|
+
from: internalTransaction.from,
|
|
40
|
+
gas: internalTransaction.gas,
|
|
41
|
+
isError: false,
|
|
42
|
+
txHash: transaction.hash,
|
|
43
|
+
value: internalTransaction.value,
|
|
44
|
+
blockNumber: transaction.block_number,
|
|
45
|
+
timestamp: transaction.block_timestamp,
|
|
46
|
+
to: transaction.to_address,
|
|
47
|
+
};
|
|
48
|
+
const id = (0, createInternalTransactionId_1.createInternalTransactionId)(data);
|
|
49
|
+
if (!internalTransactions.has(id)) {
|
|
50
|
+
internalTransactions.set(id, data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (result.result.length < limit) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...internalTransactions.values()];
|
|
59
|
+
},
|
|
60
|
+
getAddressTransactionIndexes: async ({ address, fromBlock, toBlock, }) => {
|
|
61
|
+
const lowerAddress = (0, types_1.toLowerHex)(address);
|
|
62
|
+
const indexes = new Map();
|
|
63
|
+
let cursor = undefined;
|
|
64
|
+
while (true) {
|
|
65
|
+
const result = await (0, getWalletTransactionHistory_1.getWalletTransactionHistory)({
|
|
66
|
+
client,
|
|
67
|
+
address: lowerAddress,
|
|
68
|
+
chain,
|
|
69
|
+
fromBlock,
|
|
70
|
+
toBlock,
|
|
71
|
+
cursor,
|
|
72
|
+
});
|
|
73
|
+
cursor = result.cursor;
|
|
74
|
+
for (const transaction of result.result) {
|
|
75
|
+
if (transaction.from_address !== lowerAddress &&
|
|
76
|
+
transaction.to_address !== lowerAddress) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (!indexes.has(transaction.hash)) {
|
|
80
|
+
const data = {
|
|
81
|
+
hash: transaction.hash,
|
|
82
|
+
blockNumber: transaction.block_number,
|
|
83
|
+
timestamp: transaction.block_timestamp,
|
|
84
|
+
};
|
|
85
|
+
indexes.set(data.hash, data);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (result.result.length < limit) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return [...indexes.values()];
|
|
93
|
+
},
|
|
94
|
+
getAddressTokenTransferIndexes: async ({ address, fromBlock, toBlock, }) => {
|
|
95
|
+
const lowerAddress = (0, types_1.toLowerHex)(address);
|
|
96
|
+
const indexes = new Map();
|
|
97
|
+
let cursor = undefined;
|
|
98
|
+
while (true) {
|
|
99
|
+
const result = await (0, getWalletTransactionHistory_1.getWalletTransactionHistory)({
|
|
100
|
+
client,
|
|
101
|
+
address: lowerAddress,
|
|
102
|
+
chain,
|
|
103
|
+
fromBlock,
|
|
104
|
+
toBlock,
|
|
105
|
+
cursor,
|
|
106
|
+
});
|
|
107
|
+
cursor = result.cursor;
|
|
108
|
+
for (const transaction of result.result) {
|
|
109
|
+
if (transaction.erc20_transfers.every(({ from_address, to_address }) => from_address !== lowerAddress && to_address !== lowerAddress) &&
|
|
110
|
+
transaction.nft_transfers.every(({ from_address, to_address }) => from_address !== lowerAddress && to_address !== lowerAddress)) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (!indexes.has(transaction.hash)) {
|
|
114
|
+
const data = {
|
|
115
|
+
hash: transaction.hash,
|
|
116
|
+
blockNumber: transaction.block_number,
|
|
117
|
+
timestamp: transaction.block_timestamp,
|
|
118
|
+
};
|
|
119
|
+
indexes.set(data.hash, data);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (result.result.length < limit) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return [...indexes.values()];
|
|
127
|
+
},
|
|
128
|
+
getBlockNumberOfTimestamp: () => {
|
|
129
|
+
throw new Error('Function not implemented.');
|
|
130
|
+
},
|
|
131
|
+
getContract: () => {
|
|
132
|
+
throw new Error('Function not implemented.');
|
|
133
|
+
},
|
|
134
|
+
getContractCreations: () => {
|
|
135
|
+
throw new Error('Function not implemented.');
|
|
136
|
+
},
|
|
137
|
+
getEventLogs: () => {
|
|
138
|
+
throw new Error('Function not implemented.');
|
|
139
|
+
},
|
|
140
|
+
getInternalTransactionOfTransaction: () => {
|
|
141
|
+
throw new Error('Function not implemented.');
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
exports.createMoralisExplorer = createMoralisExplorer;
|
|
146
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../explorer/moralis/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWalletTransactionHistory = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const primitive_1 = require("../../types/primitive");
|
|
6
|
+
const transactionSchema = zod_1.z.object({
|
|
7
|
+
hash: primitive_1.lowerHexSchema,
|
|
8
|
+
from_address: primitive_1.lowerHexSchema,
|
|
9
|
+
to_address: primitive_1.lowerHexSchema,
|
|
10
|
+
value: primitive_1.bigintTextSchema,
|
|
11
|
+
block_timestamp: zod_1.z.string().transform((x) => new Date(x).getTime()),
|
|
12
|
+
block_number: zod_1.z.string().regex(/^\d+$/).transform(Number),
|
|
13
|
+
nft_transfers: zod_1.z.array(zod_1.z.object({
|
|
14
|
+
from_address: primitive_1.lowerHexSchema,
|
|
15
|
+
to_address: primitive_1.lowerHexSchema,
|
|
16
|
+
amount: primitive_1.bigintTextSchema,
|
|
17
|
+
})),
|
|
18
|
+
erc20_transfers: zod_1.z.array(zod_1.z.object({
|
|
19
|
+
from_address: primitive_1.lowerHexSchema,
|
|
20
|
+
to_address: primitive_1.lowerHexSchema,
|
|
21
|
+
value: primitive_1.bigintTextSchema,
|
|
22
|
+
})),
|
|
23
|
+
internal_transactions: zod_1.z.array(zod_1.z.object({
|
|
24
|
+
from: primitive_1.lowerHexSchema,
|
|
25
|
+
to: primitive_1.lowerHexSchema,
|
|
26
|
+
value: primitive_1.bigintTextSchema,
|
|
27
|
+
gas: primitive_1.bigintTextSchema,
|
|
28
|
+
})),
|
|
29
|
+
});
|
|
30
|
+
const resultSchema = zod_1.z.object({
|
|
31
|
+
cursor: zod_1.z.string(),
|
|
32
|
+
result: zod_1.z.array(transactionSchema),
|
|
33
|
+
});
|
|
34
|
+
const cache = new Map();
|
|
35
|
+
const getWalletTransactionHistory = async ({ client, address, chain, fromBlock = 0, toBlock, cursor, }) => {
|
|
36
|
+
const path = `/api/v2.2/wallets/${address}/history`;
|
|
37
|
+
const query = {
|
|
38
|
+
chain,
|
|
39
|
+
from_block: fromBlock.toString(),
|
|
40
|
+
include_internal_transactions: 'true',
|
|
41
|
+
order: 'ASC',
|
|
42
|
+
};
|
|
43
|
+
if (toBlock !== undefined) {
|
|
44
|
+
query.to_block = toBlock.toString();
|
|
45
|
+
}
|
|
46
|
+
if (cursor !== undefined) {
|
|
47
|
+
query.cursor = cursor;
|
|
48
|
+
}
|
|
49
|
+
const cacheKey = `${path}?${Object.entries(query)
|
|
50
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
51
|
+
.join('&')}`;
|
|
52
|
+
const cached = cache.get(cacheKey);
|
|
53
|
+
if (cached !== undefined) {
|
|
54
|
+
return cached;
|
|
55
|
+
}
|
|
56
|
+
const result = await client.get({
|
|
57
|
+
path,
|
|
58
|
+
query,
|
|
59
|
+
resultSchema,
|
|
60
|
+
});
|
|
61
|
+
cache.set(cacheKey, result);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
exports.getWalletTransactionHistory = getWalletTransactionHistory;
|
|
65
|
+
//# sourceMappingURL=getWalletTransactionHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getWalletTransactionHistory.js","sourceRoot":"","sources":["../../../explorer/moralis/getWalletTransactionHistory.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,qDAAwE;AAGxE,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IAEjC,IAAI,EAAE,0BAAc;IAMpB,YAAY,EAAE,0BAAc;IAK5B,UAAU,EAAE,0BAAc;IAG1B,KAAK,EAAE,4BAAgB;IAQvB,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAEnE,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;IAQzD,aAAa,EAAE,OAAC,CAAC,KAAK,CACpB,OAAC,CAAC,MAAM,CAAC;QAUP,YAAY,EAAE,0BAAc;QAK5B,UAAU,EAAE,0BAAc;QAG1B,MAAM,EAAE,4BAAgB;KAKzB,CAAC,CACH;IAED,eAAe,EAAE,OAAC,CAAC,KAAK,CACtB,OAAC,CAAC,MAAM,CAAC;QAQP,YAAY,EAAE,0BAAc;QAK5B,UAAU,EAAE,0BAAc;QAK1B,KAAK,EAAE,4BAAgB;KAMxB,CAAC,CACH;IAGD,qBAAqB,EAAE,OAAC,CAAC,KAAK,CAC5B,OAAC,CAAC,MAAM,CAAC;QAMP,IAAI,EAAE,0BAAc;QAEpB,EAAE,EAAE,0BAAc;QAElB,KAAK,EAAE,4BAAgB;QAEvB,GAAG,EAAE,4BAAgB;KAItB,CAAC,CACH;CACF,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAA;AAIF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;AAWhC,MAAM,2BAA2B,GAAG,KAAK,EAAE,EAChD,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GAAG,CAAC,EACb,OAAO,EACP,MAAM,GACgC,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,qBAAqB,OAAO,UAAU,CAAA;IACnD,MAAM,KAAK,GAA2B;QACpC,KAAK;QACL,UAAU,EAAE,SAAS,CAAC,QAAQ,EAAE;QAChC,6BAA6B,EAAE,MAAM;QACrC,KAAK,EAAE,KAAK;KACb,CAAA;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;IACrC,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IACd,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;QAC9B,IAAI;QACJ,KAAK;QACL,YAAY;KACb,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE3B,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAtCY,QAAA,2BAA2B,+BAsCvC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { ronin } from '@0xtorch/core';
|
|
2
2
|
import { ronin as viemRonin } from 'viem/chains';
|
|
3
3
|
import { createClient } from '../../client';
|
|
4
|
-
import {
|
|
5
|
-
export const createRoninChain = () => createRoninChainCustom({
|
|
4
|
+
import { createMoralisExplorer } from '../../explorer';
|
|
5
|
+
export const createRoninChain = ({ explorerApiKey: apiKey, explorerProxyUrl: proxyUrl, explorerHeaders: headers, }) => createRoninChainCustom({
|
|
6
6
|
client: createClient({
|
|
7
7
|
chain: viemRonin,
|
|
8
8
|
httpRpcs: roninHttpRpcs,
|
|
9
9
|
}),
|
|
10
|
-
explorer:
|
|
10
|
+
explorer: createMoralisExplorer({
|
|
11
11
|
name: 'The Ronin Block Explorer',
|
|
12
12
|
baseUrl: 'https://app.roninchain.com',
|
|
13
|
+
chain: 'ronin',
|
|
14
|
+
apiKey,
|
|
15
|
+
proxyUrl,
|
|
16
|
+
headers,
|
|
13
17
|
}),
|
|
14
18
|
});
|
|
15
19
|
export const createRoninChainCustom = ({ client, explorer, }) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ronin.js","sourceRoot":"","sources":["../../../chain/definitions/ronin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAiB,
|
|
1
|
+
{"version":3,"file":"ronin.js","sourceRoot":"","sources":["../../../chain/definitions/ronin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAiB,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAIrE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,QAAQ,EAC1B,eAAe,EAAE,OAAO,GAKzB,EAAE,EAAE,CACH,sBAAsB,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;QACnB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,aAAa;KACxB,CAAC;IACF,QAAQ,EAAE,qBAAqB,CAAC;QAC9B,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,4BAA4B;QACrC,KAAK,EAAE,OAAO;QACd,MAAM;QACN,QAAQ;QACR,OAAO;KACR,CAAC;CACH,CAAC,CAAA;AAOJ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,MAAM,EACN,QAAQ,GACmB,EAAS,EAAE,CAAC,CAAC;IACxC,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,KAAK;KAChB;IACD,qBAAqB,EAAE,IAAI,GAAG,CAAC;QAC7B,4CAA4C;KAC7C,CAAC;IACF,QAAQ;IACR,MAAM;IACN,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC;QACE,GAAG,EAAE,gCAAgC;QACrC,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;KAC3B;IACD,yBAAyB;IACzB,IAAI;IACJ,uCAAuC;IACvC,2BAA2B;IAC3B,mCAAmC;IACnC,KAAK;IACL;QACE,GAAG,EAAE,8EAA8E;QACnF,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;KAC3B;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,MAAO;KAC9B;CACF,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAsB,EAAE,CAAA"}
|
package/_esm/explorer/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { rest } from '@0xtorch/core';
|
|
2
|
+
const apiBaseUrl = 'https://deep-index.moralis.io';
|
|
3
|
+
export const createMoralisClient = ({ apiKey, proxyUrl, headers, }) => {
|
|
4
|
+
// apiKey = undefined かつ proxyUrl = undefined の場合はエラー
|
|
5
|
+
if (apiKey === undefined && proxyUrl === undefined) {
|
|
6
|
+
throw new Error('apiKey or proxyUrl must be provided');
|
|
7
|
+
}
|
|
8
|
+
const rateLimitPerSecond = 1;
|
|
9
|
+
const requestTimestamps = [];
|
|
10
|
+
const get = async ({ path, query, resultSchema, }, repeat = 0) => {
|
|
11
|
+
// rate limit を超えていたら 1 秒待つ
|
|
12
|
+
const time1SecondAgo = Date.now() - 1000;
|
|
13
|
+
if (requestTimestamps.filter((t) => t >= time1SecondAgo).length >=
|
|
14
|
+
rateLimitPerSecond) {
|
|
15
|
+
await new Promise((resolve) => {
|
|
16
|
+
const intervalId = setInterval(() => {
|
|
17
|
+
const time1SecondAgo = Date.now() - 1000;
|
|
18
|
+
if (requestTimestamps.filter((t) => t >= time1SecondAgo).length <
|
|
19
|
+
rateLimitPerSecond) {
|
|
20
|
+
clearInterval(intervalId);
|
|
21
|
+
resolve();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}, 1000);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// requestTimestamps に追加
|
|
28
|
+
requestTimestamps.push(Date.now());
|
|
29
|
+
// request
|
|
30
|
+
try {
|
|
31
|
+
const url = new URL(path, apiBaseUrl);
|
|
32
|
+
for (const [key, value] of Object.entries(query)) {
|
|
33
|
+
url.searchParams.set(key, value);
|
|
34
|
+
}
|
|
35
|
+
console.debug(`[GET] ${url.toString()}`);
|
|
36
|
+
const result = await rest(proxyUrl === undefined
|
|
37
|
+
? url.toString()
|
|
38
|
+
: `${proxyUrl}${encodeURIComponent(url.toString())}`, {
|
|
39
|
+
schema: resultSchema,
|
|
40
|
+
fetchOptions: {
|
|
41
|
+
headers: {
|
|
42
|
+
...headers,
|
|
43
|
+
...(apiKey === undefined ? {} : { 'X-API-Key': apiKey }),
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (repeat < 3 && error instanceof Error) {
|
|
51
|
+
if (error.message.includes('429')) {
|
|
52
|
+
console.debug(error);
|
|
53
|
+
await new Promise((resolve) => setTimeout(resolve, 10_000));
|
|
54
|
+
return await get({ path, query, resultSchema }, repeat + 1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
get,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../explorer/moralis/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { toLowerHex, } from '../../types';
|
|
2
|
+
import { createInternalTransactionId } from '../../utils/createInternalTransactionId';
|
|
3
|
+
import { createMoralisClient } from './client';
|
|
4
|
+
import { getWalletTransactionHistory } from './getWalletTransactionHistory';
|
|
5
|
+
const limit = 100;
|
|
6
|
+
export const createMoralisExplorer = ({ name, baseUrl, chain, apiKey, proxyUrl, headers, }) => {
|
|
7
|
+
const client = createMoralisClient({
|
|
8
|
+
apiKey,
|
|
9
|
+
proxyUrl,
|
|
10
|
+
headers,
|
|
11
|
+
});
|
|
12
|
+
return {
|
|
13
|
+
name,
|
|
14
|
+
baseUrl,
|
|
15
|
+
getAddressInternalTransactions: async ({ address, fromBlock, toBlock, }) => {
|
|
16
|
+
const lowerAddress = toLowerHex(address);
|
|
17
|
+
const internalTransactions = new Map();
|
|
18
|
+
let cursor = undefined;
|
|
19
|
+
while (true) {
|
|
20
|
+
const result = await getWalletTransactionHistory({
|
|
21
|
+
client,
|
|
22
|
+
address: lowerAddress,
|
|
23
|
+
chain,
|
|
24
|
+
fromBlock,
|
|
25
|
+
toBlock,
|
|
26
|
+
cursor,
|
|
27
|
+
});
|
|
28
|
+
cursor = result.cursor;
|
|
29
|
+
for (const transaction of result.result) {
|
|
30
|
+
for (const internalTransaction of transaction.internal_transactions) {
|
|
31
|
+
if (internalTransaction.from !== lowerAddress &&
|
|
32
|
+
internalTransaction.to !== lowerAddress) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const data = {
|
|
36
|
+
from: internalTransaction.from,
|
|
37
|
+
gas: internalTransaction.gas,
|
|
38
|
+
isError: false,
|
|
39
|
+
txHash: transaction.hash,
|
|
40
|
+
value: internalTransaction.value,
|
|
41
|
+
blockNumber: transaction.block_number,
|
|
42
|
+
timestamp: transaction.block_timestamp,
|
|
43
|
+
to: transaction.to_address,
|
|
44
|
+
};
|
|
45
|
+
const id = createInternalTransactionId(data);
|
|
46
|
+
if (!internalTransactions.has(id)) {
|
|
47
|
+
internalTransactions.set(id, data);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (result.result.length < limit) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return [...internalTransactions.values()];
|
|
56
|
+
},
|
|
57
|
+
getAddressTransactionIndexes: async ({ address, fromBlock, toBlock, }) => {
|
|
58
|
+
const lowerAddress = toLowerHex(address);
|
|
59
|
+
const indexes = new Map();
|
|
60
|
+
let cursor = undefined;
|
|
61
|
+
while (true) {
|
|
62
|
+
const result = await getWalletTransactionHistory({
|
|
63
|
+
client,
|
|
64
|
+
address: lowerAddress,
|
|
65
|
+
chain,
|
|
66
|
+
fromBlock,
|
|
67
|
+
toBlock,
|
|
68
|
+
cursor,
|
|
69
|
+
});
|
|
70
|
+
cursor = result.cursor;
|
|
71
|
+
for (const transaction of result.result) {
|
|
72
|
+
if (transaction.from_address !== lowerAddress &&
|
|
73
|
+
transaction.to_address !== lowerAddress) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!indexes.has(transaction.hash)) {
|
|
77
|
+
const data = {
|
|
78
|
+
hash: transaction.hash,
|
|
79
|
+
blockNumber: transaction.block_number,
|
|
80
|
+
timestamp: transaction.block_timestamp,
|
|
81
|
+
};
|
|
82
|
+
indexes.set(data.hash, data);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (result.result.length < limit) {
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [...indexes.values()];
|
|
90
|
+
},
|
|
91
|
+
getAddressTokenTransferIndexes: async ({ address, fromBlock, toBlock, }) => {
|
|
92
|
+
const lowerAddress = toLowerHex(address);
|
|
93
|
+
const indexes = new Map();
|
|
94
|
+
let cursor = undefined;
|
|
95
|
+
while (true) {
|
|
96
|
+
const result = await getWalletTransactionHistory({
|
|
97
|
+
client,
|
|
98
|
+
address: lowerAddress,
|
|
99
|
+
chain,
|
|
100
|
+
fromBlock,
|
|
101
|
+
toBlock,
|
|
102
|
+
cursor,
|
|
103
|
+
});
|
|
104
|
+
cursor = result.cursor;
|
|
105
|
+
for (const transaction of result.result) {
|
|
106
|
+
if (transaction.erc20_transfers.every(({ from_address, to_address }) => from_address !== lowerAddress && to_address !== lowerAddress) &&
|
|
107
|
+
transaction.nft_transfers.every(({ from_address, to_address }) => from_address !== lowerAddress && to_address !== lowerAddress)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (!indexes.has(transaction.hash)) {
|
|
111
|
+
const data = {
|
|
112
|
+
hash: transaction.hash,
|
|
113
|
+
blockNumber: transaction.block_number,
|
|
114
|
+
timestamp: transaction.block_timestamp,
|
|
115
|
+
};
|
|
116
|
+
indexes.set(data.hash, data);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (result.result.length < limit) {
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return [...indexes.values()];
|
|
124
|
+
},
|
|
125
|
+
getBlockNumberOfTimestamp: () => {
|
|
126
|
+
throw new Error('Function not implemented.');
|
|
127
|
+
},
|
|
128
|
+
getContract: () => {
|
|
129
|
+
throw new Error('Function not implemented.');
|
|
130
|
+
},
|
|
131
|
+
getContractCreations: () => {
|
|
132
|
+
throw new Error('Function not implemented.');
|
|
133
|
+
},
|
|
134
|
+
getEventLogs: () => {
|
|
135
|
+
throw new Error('Function not implemented.');
|
|
136
|
+
},
|
|
137
|
+
getInternalTransactionOfTransaction: () => {
|
|
138
|
+
throw new Error('Function not implemented.');
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../explorer/moralis/create.ts"],"names":[],"mappings":"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"}
|