@fileverse-dev/formulajs 4.4.11-mod-27 → 4.4.11-mod-30
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/lib/browser/formula.js +314 -1005
- package/lib/browser/formula.min.js +2 -10
- package/lib/browser/formula.min.js.map +1 -1
- package/lib/cjs/index.cjs +130 -840
- package/lib/esm/crypto-constants.mjs +94 -76
- package/lib/esm/index.mjs +130 -840
- package/package.json +1 -1
- package/types/cjs/index.d.cts +2 -2
- package/types/esm/index.d.mts +2 -2
package/lib/cjs/index.cjs
CHANGED
|
@@ -13108,6 +13108,10 @@ const ERROR_MESSAGES_FLAG = {
|
|
|
13108
13108
|
INVALID_PARAM: '_INVALID_PARAM'
|
|
13109
13109
|
};
|
|
13110
13110
|
|
|
13111
|
+
const UTILITY = {
|
|
13112
|
+
ALCHEMY_API_KEY: 'ALCHEMY_API_KEY'
|
|
13113
|
+
};
|
|
13114
|
+
|
|
13111
13115
|
const SERVICE_API_KEY = {
|
|
13112
13116
|
Etherscan: "ETHERSCAN_API_KEY",
|
|
13113
13117
|
Coingecko: "COINGECKO_API_KEY",
|
|
@@ -13128,6 +13132,44 @@ if(!timestamp || !chain || !apiKey) return
|
|
|
13128
13132
|
|
|
13129
13133
|
};
|
|
13130
13134
|
|
|
13135
|
+
function toTimestamp(dateStr) {
|
|
13136
|
+
// Expecting format: "DD/MM/YYYY"
|
|
13137
|
+
const [day, month, year] = dateStr.split("/").map(Number);
|
|
13138
|
+
const date = new Date(year, month - 1, day);
|
|
13139
|
+
return Math.floor(date.getTime() / 1000); // Unix timestamp in seconds
|
|
13140
|
+
}
|
|
13141
|
+
|
|
13142
|
+
const isAddress = (input) => {
|
|
13143
|
+
return (/^0x[a-fA-F0-9]{40}$/.test(input))
|
|
13144
|
+
};
|
|
13145
|
+
|
|
13146
|
+
async function fromEnsNameToAddress(name) {
|
|
13147
|
+
if (typeof ethers === "undefined") {
|
|
13148
|
+
await new Promise((resolve, reject) => {
|
|
13149
|
+
const script = document.createElement("script");
|
|
13150
|
+
script.src = "https://cdn.jsdelivr.net/npm/ethers@6.10.0/dist/ethers.umd.min.js";
|
|
13151
|
+
script.onload = resolve;
|
|
13152
|
+
script.onerror = reject;
|
|
13153
|
+
document.head.appendChild(script);
|
|
13154
|
+
});
|
|
13155
|
+
}
|
|
13156
|
+
|
|
13157
|
+
const ALCHEMY_KEY = window.localStorage.getItem(UTILITY.ALCHEMY_API_KEY);
|
|
13158
|
+
if(!ALCHEMY_KEY){
|
|
13159
|
+
console.error("alchemy api key missing");
|
|
13160
|
+
return null
|
|
13161
|
+
}
|
|
13162
|
+
const provider = new ethers.AlchemyProvider("mainnet", ALCHEMY_KEY);
|
|
13163
|
+
|
|
13164
|
+
try {
|
|
13165
|
+
const resolved = await provider.resolveName(name); // ENS ➝ address
|
|
13166
|
+
return resolved || null;
|
|
13167
|
+
} catch (err) {
|
|
13168
|
+
console.error("ENS resolution failed:", err.message);
|
|
13169
|
+
return null;
|
|
13170
|
+
}
|
|
13171
|
+
}
|
|
13172
|
+
|
|
13131
13173
|
async function handleScanRequest({
|
|
13132
13174
|
scanKey,
|
|
13133
13175
|
baseUrl,
|
|
@@ -13146,6 +13188,14 @@ async function handleScanRequest({
|
|
|
13146
13188
|
let chainId = CHAIN_ID_MAP[chain?.toLowerCase()];
|
|
13147
13189
|
if (!chainId) return `${scanKey}${ERROR_MESSAGES_FLAG.INVALID_CHAIN}`;
|
|
13148
13190
|
|
|
13191
|
+
if(!isAddress(address)){
|
|
13192
|
+
address = await fromEnsNameToAddress(address);
|
|
13193
|
+
}
|
|
13194
|
+
|
|
13195
|
+
if(!address){
|
|
13196
|
+
return `${address}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`
|
|
13197
|
+
}
|
|
13198
|
+
|
|
13149
13199
|
const ACTION_MAP = {
|
|
13150
13200
|
'all-txns': 'txlist',
|
|
13151
13201
|
'token-txns': 'tokentx',
|
|
@@ -13168,8 +13218,8 @@ if (scanKey === SERVICE_API_KEY.Gnosisscan) chainId = 'gnosis';
|
|
|
13168
13218
|
|
|
13169
13219
|
if (!isNaN(startDate) && !isNaN(endDate)) {
|
|
13170
13220
|
const [startBlock, endBlock] = await Promise.all([
|
|
13171
|
-
fromTimeStampToBlock(startDate, chain, API_KEY),
|
|
13172
|
-
fromTimeStampToBlock(endDate, chain, API_KEY),
|
|
13221
|
+
fromTimeStampToBlock(toTimestamp(startDate), chain, API_KEY),
|
|
13222
|
+
fromTimeStampToBlock(toTimestamp(endDate), chain, API_KEY),
|
|
13173
13223
|
]);
|
|
13174
13224
|
url += `&startblock=${startBlock}&endblock=${endBlock}`;
|
|
13175
13225
|
}
|
|
@@ -13193,834 +13243,58 @@ if (scanKey === SERVICE_API_KEY.Gnosisscan) chainId = 'gnosis';
|
|
|
13193
13243
|
}
|
|
13194
13244
|
}
|
|
13195
13245
|
|
|
13196
|
-
function
|
|
13197
|
-
// Expecting format: "DD/MM/YYYY"
|
|
13198
|
-
const [day, month, year] = dateStr.split("/").map(Number);
|
|
13199
|
-
const date = new Date(year, month - 1, day);
|
|
13200
|
-
return Math.floor(date.getTime() / 1000); // Unix timestamp in seconds
|
|
13201
|
-
}
|
|
13202
|
-
|
|
13203
|
-
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
13204
|
-
|
|
13205
|
-
var sha3 = {exports: {}};
|
|
13206
|
-
|
|
13207
|
-
/**
|
|
13208
|
-
* [js-sha3]{@link https://github.com/emn178/js-sha3}
|
|
13209
|
-
*
|
|
13210
|
-
* @version 0.9.3
|
|
13211
|
-
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
|
13212
|
-
* @copyright Chen, Yi-Cyuan 2015-2023
|
|
13213
|
-
* @license MIT
|
|
13214
|
-
*/
|
|
13215
|
-
|
|
13216
|
-
var hasRequiredSha3;
|
|
13217
|
-
|
|
13218
|
-
function requireSha3 () {
|
|
13219
|
-
if (hasRequiredSha3) return sha3.exports;
|
|
13220
|
-
hasRequiredSha3 = 1;
|
|
13221
|
-
(function (module) {
|
|
13222
|
-
/*jslint bitwise: true */
|
|
13223
|
-
(function () {
|
|
13224
|
-
|
|
13225
|
-
var INPUT_ERROR = 'input is invalid type';
|
|
13226
|
-
var FINALIZE_ERROR = 'finalize already called';
|
|
13227
|
-
var WINDOW = typeof window === 'object';
|
|
13228
|
-
var root = WINDOW ? window : {};
|
|
13229
|
-
if (root.JS_SHA3_NO_WINDOW) {
|
|
13230
|
-
WINDOW = false;
|
|
13231
|
-
}
|
|
13232
|
-
var WEB_WORKER = !WINDOW && typeof self === 'object';
|
|
13233
|
-
var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
|
13234
|
-
if (NODE_JS) {
|
|
13235
|
-
root = commonjsGlobal;
|
|
13236
|
-
} else if (WEB_WORKER) {
|
|
13237
|
-
root = self;
|
|
13238
|
-
}
|
|
13239
|
-
var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && 'object' === 'object' && module.exports;
|
|
13240
|
-
var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
|
|
13241
|
-
var HEX_CHARS = '0123456789abcdef'.split('');
|
|
13242
|
-
var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
|
|
13243
|
-
var CSHAKE_PADDING = [4, 1024, 262144, 67108864];
|
|
13244
|
-
var KECCAK_PADDING = [1, 256, 65536, 16777216];
|
|
13245
|
-
var PADDING = [6, 1536, 393216, 100663296];
|
|
13246
|
-
var SHIFT = [0, 8, 16, 24];
|
|
13247
|
-
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
|
|
13248
|
-
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
|
|
13249
|
-
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
|
|
13250
|
-
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
|
|
13251
|
-
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
|
|
13252
|
-
var BITS = [224, 256, 384, 512];
|
|
13253
|
-
var SHAKE_BITS = [128, 256];
|
|
13254
|
-
var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];
|
|
13255
|
-
var CSHAKE_BYTEPAD = {
|
|
13256
|
-
'128': 168,
|
|
13257
|
-
'256': 136
|
|
13258
|
-
};
|
|
13259
|
-
|
|
13260
|
-
|
|
13261
|
-
var isArray = root.JS_SHA3_NO_NODE_JS || !Array.isArray
|
|
13262
|
-
? function (obj) {
|
|
13263
|
-
return Object.prototype.toString.call(obj) === '[object Array]';
|
|
13264
|
-
}
|
|
13265
|
-
: Array.isArray;
|
|
13266
|
-
|
|
13267
|
-
var isView = (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView))
|
|
13268
|
-
? function (obj) {
|
|
13269
|
-
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
|
13270
|
-
}
|
|
13271
|
-
: ArrayBuffer.isView;
|
|
13272
|
-
|
|
13273
|
-
// [message: string, isString: bool]
|
|
13274
|
-
var formatMessage = function (message) {
|
|
13275
|
-
var type = typeof message;
|
|
13276
|
-
if (type === 'string') {
|
|
13277
|
-
return [message, true];
|
|
13278
|
-
}
|
|
13279
|
-
if (type !== 'object' || message === null) {
|
|
13280
|
-
throw new Error(INPUT_ERROR);
|
|
13281
|
-
}
|
|
13282
|
-
if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
|
|
13283
|
-
return [new Uint8Array(message), false];
|
|
13284
|
-
}
|
|
13285
|
-
if (!isArray(message) && !isView(message)) {
|
|
13286
|
-
throw new Error(INPUT_ERROR);
|
|
13287
|
-
}
|
|
13288
|
-
return [message, false];
|
|
13289
|
-
};
|
|
13290
|
-
|
|
13291
|
-
var empty = function (message) {
|
|
13292
|
-
return formatMessage(message)[0].length === 0;
|
|
13293
|
-
};
|
|
13294
|
-
|
|
13295
|
-
var cloneArray = function (array) {
|
|
13296
|
-
var newArray = [];
|
|
13297
|
-
for (var i = 0; i < array.length; ++i) {
|
|
13298
|
-
newArray[i] = array[i];
|
|
13299
|
-
}
|
|
13300
|
-
return newArray;
|
|
13301
|
-
};
|
|
13302
|
-
|
|
13303
|
-
var createOutputMethod = function (bits, padding, outputType) {
|
|
13304
|
-
return function (message) {
|
|
13305
|
-
return new Keccak(bits, padding, bits).update(message)[outputType]();
|
|
13306
|
-
};
|
|
13307
|
-
};
|
|
13308
|
-
|
|
13309
|
-
var createShakeOutputMethod = function (bits, padding, outputType) {
|
|
13310
|
-
return function (message, outputBits) {
|
|
13311
|
-
return new Keccak(bits, padding, outputBits).update(message)[outputType]();
|
|
13312
|
-
};
|
|
13313
|
-
};
|
|
13314
|
-
|
|
13315
|
-
var createCshakeOutputMethod = function (bits, padding, outputType) {
|
|
13316
|
-
return function (message, outputBits, n, s) {
|
|
13317
|
-
return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();
|
|
13318
|
-
};
|
|
13319
|
-
};
|
|
13320
|
-
|
|
13321
|
-
var createKmacOutputMethod = function (bits, padding, outputType) {
|
|
13322
|
-
return function (key, message, outputBits, s) {
|
|
13323
|
-
return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();
|
|
13324
|
-
};
|
|
13325
|
-
};
|
|
13326
|
-
|
|
13327
|
-
var createOutputMethods = function (method, createMethod, bits, padding) {
|
|
13328
|
-
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
|
13329
|
-
var type = OUTPUT_TYPES[i];
|
|
13330
|
-
method[type] = createMethod(bits, padding, type);
|
|
13331
|
-
}
|
|
13332
|
-
return method;
|
|
13333
|
-
};
|
|
13334
|
-
|
|
13335
|
-
var createMethod = function (bits, padding) {
|
|
13336
|
-
var method = createOutputMethod(bits, padding, 'hex');
|
|
13337
|
-
method.create = function () {
|
|
13338
|
-
return new Keccak(bits, padding, bits);
|
|
13339
|
-
};
|
|
13340
|
-
method.update = function (message) {
|
|
13341
|
-
return method.create().update(message);
|
|
13342
|
-
};
|
|
13343
|
-
return createOutputMethods(method, createOutputMethod, bits, padding);
|
|
13344
|
-
};
|
|
13345
|
-
|
|
13346
|
-
var createShakeMethod = function (bits, padding) {
|
|
13347
|
-
var method = createShakeOutputMethod(bits, padding, 'hex');
|
|
13348
|
-
method.create = function (outputBits) {
|
|
13349
|
-
return new Keccak(bits, padding, outputBits);
|
|
13350
|
-
};
|
|
13351
|
-
method.update = function (message, outputBits) {
|
|
13352
|
-
return method.create(outputBits).update(message);
|
|
13353
|
-
};
|
|
13354
|
-
return createOutputMethods(method, createShakeOutputMethod, bits, padding);
|
|
13355
|
-
};
|
|
13356
|
-
|
|
13357
|
-
var createCshakeMethod = function (bits, padding) {
|
|
13358
|
-
var w = CSHAKE_BYTEPAD[bits];
|
|
13359
|
-
var method = createCshakeOutputMethod(bits, padding, 'hex');
|
|
13360
|
-
method.create = function (outputBits, n, s) {
|
|
13361
|
-
if (empty(n) && empty(s)) {
|
|
13362
|
-
return methods['shake' + bits].create(outputBits);
|
|
13363
|
-
} else {
|
|
13364
|
-
return new Keccak(bits, padding, outputBits).bytepad([n, s], w);
|
|
13365
|
-
}
|
|
13366
|
-
};
|
|
13367
|
-
method.update = function (message, outputBits, n, s) {
|
|
13368
|
-
return method.create(outputBits, n, s).update(message);
|
|
13369
|
-
};
|
|
13370
|
-
return createOutputMethods(method, createCshakeOutputMethod, bits, padding);
|
|
13371
|
-
};
|
|
13372
|
-
|
|
13373
|
-
var createKmacMethod = function (bits, padding) {
|
|
13374
|
-
var w = CSHAKE_BYTEPAD[bits];
|
|
13375
|
-
var method = createKmacOutputMethod(bits, padding, 'hex');
|
|
13376
|
-
method.create = function (key, outputBits, s) {
|
|
13377
|
-
return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);
|
|
13378
|
-
};
|
|
13379
|
-
method.update = function (key, message, outputBits, s) {
|
|
13380
|
-
return method.create(key, outputBits, s).update(message);
|
|
13381
|
-
};
|
|
13382
|
-
return createOutputMethods(method, createKmacOutputMethod, bits, padding);
|
|
13383
|
-
};
|
|
13384
|
-
|
|
13385
|
-
var algorithms = [
|
|
13386
|
-
{ name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },
|
|
13387
|
-
{ name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },
|
|
13388
|
-
{ name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },
|
|
13389
|
-
{ name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },
|
|
13390
|
-
{ name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }
|
|
13391
|
-
];
|
|
13392
|
-
|
|
13393
|
-
var methods = {}, methodNames = [];
|
|
13394
|
-
|
|
13395
|
-
for (var i = 0; i < algorithms.length; ++i) {
|
|
13396
|
-
var algorithm = algorithms[i];
|
|
13397
|
-
var bits = algorithm.bits;
|
|
13398
|
-
for (var j = 0; j < bits.length; ++j) {
|
|
13399
|
-
var methodName = algorithm.name + '_' + bits[j];
|
|
13400
|
-
methodNames.push(methodName);
|
|
13401
|
-
methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);
|
|
13402
|
-
if (algorithm.name !== 'sha3') {
|
|
13403
|
-
var newMethodName = algorithm.name + bits[j];
|
|
13404
|
-
methodNames.push(newMethodName);
|
|
13405
|
-
methods[newMethodName] = methods[methodName];
|
|
13406
|
-
}
|
|
13407
|
-
}
|
|
13408
|
-
}
|
|
13409
|
-
|
|
13410
|
-
function Keccak(bits, padding, outputBits) {
|
|
13411
|
-
this.blocks = [];
|
|
13412
|
-
this.s = [];
|
|
13413
|
-
this.padding = padding;
|
|
13414
|
-
this.outputBits = outputBits;
|
|
13415
|
-
this.reset = true;
|
|
13416
|
-
this.finalized = false;
|
|
13417
|
-
this.block = 0;
|
|
13418
|
-
this.start = 0;
|
|
13419
|
-
this.blockCount = (1600 - (bits << 1)) >> 5;
|
|
13420
|
-
this.byteCount = this.blockCount << 2;
|
|
13421
|
-
this.outputBlocks = outputBits >> 5;
|
|
13422
|
-
this.extraBytes = (outputBits & 31) >> 3;
|
|
13423
|
-
|
|
13424
|
-
for (var i = 0; i < 50; ++i) {
|
|
13425
|
-
this.s[i] = 0;
|
|
13426
|
-
}
|
|
13427
|
-
}
|
|
13428
|
-
|
|
13429
|
-
Keccak.prototype.update = function (message) {
|
|
13430
|
-
if (this.finalized) {
|
|
13431
|
-
throw new Error(FINALIZE_ERROR);
|
|
13432
|
-
}
|
|
13433
|
-
var result = formatMessage(message);
|
|
13434
|
-
message = result[0];
|
|
13435
|
-
var isString = result[1];
|
|
13436
|
-
var blocks = this.blocks, byteCount = this.byteCount, length = message.length,
|
|
13437
|
-
blockCount = this.blockCount, index = 0, s = this.s, i, code;
|
|
13438
|
-
|
|
13439
|
-
while (index < length) {
|
|
13440
|
-
if (this.reset) {
|
|
13441
|
-
this.reset = false;
|
|
13442
|
-
blocks[0] = this.block;
|
|
13443
|
-
for (i = 1; i < blockCount + 1; ++i) {
|
|
13444
|
-
blocks[i] = 0;
|
|
13445
|
-
}
|
|
13446
|
-
}
|
|
13447
|
-
if (isString) {
|
|
13448
|
-
for (i = this.start; index < length && i < byteCount; ++index) {
|
|
13449
|
-
code = message.charCodeAt(index);
|
|
13450
|
-
if (code < 0x80) {
|
|
13451
|
-
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
|
13452
|
-
} else if (code < 0x800) {
|
|
13453
|
-
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
|
13454
|
-
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
|
13455
|
-
} else if (code < 0xd800 || code >= 0xe000) {
|
|
13456
|
-
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
|
13457
|
-
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
|
13458
|
-
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
|
13459
|
-
} else {
|
|
13460
|
-
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
|
13461
|
-
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
|
13462
|
-
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
|
13463
|
-
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
|
13464
|
-
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
|
13465
|
-
}
|
|
13466
|
-
}
|
|
13467
|
-
} else {
|
|
13468
|
-
for (i = this.start; index < length && i < byteCount; ++index) {
|
|
13469
|
-
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
|
13470
|
-
}
|
|
13471
|
-
}
|
|
13472
|
-
this.lastByteIndex = i;
|
|
13473
|
-
if (i >= byteCount) {
|
|
13474
|
-
this.start = i - byteCount;
|
|
13475
|
-
this.block = blocks[blockCount];
|
|
13476
|
-
for (i = 0; i < blockCount; ++i) {
|
|
13477
|
-
s[i] ^= blocks[i];
|
|
13478
|
-
}
|
|
13479
|
-
f(s);
|
|
13480
|
-
this.reset = true;
|
|
13481
|
-
} else {
|
|
13482
|
-
this.start = i;
|
|
13483
|
-
}
|
|
13484
|
-
}
|
|
13485
|
-
return this;
|
|
13486
|
-
};
|
|
13487
|
-
|
|
13488
|
-
Keccak.prototype.encode = function (x, right) {
|
|
13489
|
-
var o = x & 255, n = 1;
|
|
13490
|
-
var bytes = [o];
|
|
13491
|
-
x = x >> 8;
|
|
13492
|
-
o = x & 255;
|
|
13493
|
-
while (o > 0) {
|
|
13494
|
-
bytes.unshift(o);
|
|
13495
|
-
x = x >> 8;
|
|
13496
|
-
o = x & 255;
|
|
13497
|
-
++n;
|
|
13498
|
-
}
|
|
13499
|
-
if (right) {
|
|
13500
|
-
bytes.push(n);
|
|
13501
|
-
} else {
|
|
13502
|
-
bytes.unshift(n);
|
|
13503
|
-
}
|
|
13504
|
-
this.update(bytes);
|
|
13505
|
-
return bytes.length;
|
|
13506
|
-
};
|
|
13507
|
-
|
|
13508
|
-
Keccak.prototype.encodeString = function (str) {
|
|
13509
|
-
var result = formatMessage(str);
|
|
13510
|
-
str = result[0];
|
|
13511
|
-
var isString = result[1];
|
|
13512
|
-
var bytes = 0, length = str.length;
|
|
13513
|
-
if (isString) {
|
|
13514
|
-
for (var i = 0; i < str.length; ++i) {
|
|
13515
|
-
var code = str.charCodeAt(i);
|
|
13516
|
-
if (code < 0x80) {
|
|
13517
|
-
bytes += 1;
|
|
13518
|
-
} else if (code < 0x800) {
|
|
13519
|
-
bytes += 2;
|
|
13520
|
-
} else if (code < 0xd800 || code >= 0xe000) {
|
|
13521
|
-
bytes += 3;
|
|
13522
|
-
} else {
|
|
13523
|
-
code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
|
|
13524
|
-
bytes += 4;
|
|
13525
|
-
}
|
|
13526
|
-
}
|
|
13527
|
-
} else {
|
|
13528
|
-
bytes = length;
|
|
13529
|
-
}
|
|
13530
|
-
bytes += this.encode(bytes * 8);
|
|
13531
|
-
this.update(str);
|
|
13532
|
-
return bytes;
|
|
13533
|
-
};
|
|
13534
|
-
|
|
13535
|
-
Keccak.prototype.bytepad = function (strs, w) {
|
|
13536
|
-
var bytes = this.encode(w);
|
|
13537
|
-
for (var i = 0; i < strs.length; ++i) {
|
|
13538
|
-
bytes += this.encodeString(strs[i]);
|
|
13539
|
-
}
|
|
13540
|
-
var paddingBytes = (w - bytes % w) % w;
|
|
13541
|
-
var zeros = [];
|
|
13542
|
-
zeros.length = paddingBytes;
|
|
13543
|
-
this.update(zeros);
|
|
13544
|
-
return this;
|
|
13545
|
-
};
|
|
13546
|
-
|
|
13547
|
-
Keccak.prototype.finalize = function () {
|
|
13548
|
-
if (this.finalized) {
|
|
13549
|
-
return;
|
|
13550
|
-
}
|
|
13551
|
-
this.finalized = true;
|
|
13552
|
-
var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
|
|
13553
|
-
blocks[i >> 2] |= this.padding[i & 3];
|
|
13554
|
-
if (this.lastByteIndex === this.byteCount) {
|
|
13555
|
-
blocks[0] = blocks[blockCount];
|
|
13556
|
-
for (i = 1; i < blockCount + 1; ++i) {
|
|
13557
|
-
blocks[i] = 0;
|
|
13558
|
-
}
|
|
13559
|
-
}
|
|
13560
|
-
blocks[blockCount - 1] |= 0x80000000;
|
|
13561
|
-
for (i = 0; i < blockCount; ++i) {
|
|
13562
|
-
s[i] ^= blocks[i];
|
|
13563
|
-
}
|
|
13564
|
-
f(s);
|
|
13565
|
-
};
|
|
13566
|
-
|
|
13567
|
-
Keccak.prototype.toString = Keccak.prototype.hex = function () {
|
|
13568
|
-
this.finalize();
|
|
13569
|
-
|
|
13570
|
-
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
|
13571
|
-
extraBytes = this.extraBytes, i = 0, j = 0;
|
|
13572
|
-
var hex = '', block;
|
|
13573
|
-
while (j < outputBlocks) {
|
|
13574
|
-
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
|
13575
|
-
block = s[i];
|
|
13576
|
-
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
|
|
13577
|
-
HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
|
|
13578
|
-
HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
|
|
13579
|
-
HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
|
|
13580
|
-
}
|
|
13581
|
-
if (j % blockCount === 0) {
|
|
13582
|
-
s = cloneArray(s);
|
|
13583
|
-
f(s);
|
|
13584
|
-
i = 0;
|
|
13585
|
-
}
|
|
13586
|
-
}
|
|
13587
|
-
if (extraBytes) {
|
|
13588
|
-
block = s[i];
|
|
13589
|
-
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
|
|
13590
|
-
if (extraBytes > 1) {
|
|
13591
|
-
hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
|
|
13592
|
-
}
|
|
13593
|
-
if (extraBytes > 2) {
|
|
13594
|
-
hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
|
|
13595
|
-
}
|
|
13596
|
-
}
|
|
13597
|
-
return hex;
|
|
13598
|
-
};
|
|
13599
|
-
|
|
13600
|
-
Keccak.prototype.arrayBuffer = function () {
|
|
13601
|
-
this.finalize();
|
|
13602
|
-
|
|
13603
|
-
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
|
13604
|
-
extraBytes = this.extraBytes, i = 0, j = 0;
|
|
13605
|
-
var bytes = this.outputBits >> 3;
|
|
13606
|
-
var buffer;
|
|
13607
|
-
if (extraBytes) {
|
|
13608
|
-
buffer = new ArrayBuffer((outputBlocks + 1) << 2);
|
|
13609
|
-
} else {
|
|
13610
|
-
buffer = new ArrayBuffer(bytes);
|
|
13611
|
-
}
|
|
13612
|
-
var array = new Uint32Array(buffer);
|
|
13613
|
-
while (j < outputBlocks) {
|
|
13614
|
-
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
|
13615
|
-
array[j] = s[i];
|
|
13616
|
-
}
|
|
13617
|
-
if (j % blockCount === 0) {
|
|
13618
|
-
s = cloneArray(s);
|
|
13619
|
-
f(s);
|
|
13620
|
-
}
|
|
13621
|
-
}
|
|
13622
|
-
if (extraBytes) {
|
|
13623
|
-
array[j] = s[i];
|
|
13624
|
-
buffer = buffer.slice(0, bytes);
|
|
13625
|
-
}
|
|
13626
|
-
return buffer;
|
|
13627
|
-
};
|
|
13628
|
-
|
|
13629
|
-
Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;
|
|
13630
|
-
|
|
13631
|
-
Keccak.prototype.digest = Keccak.prototype.array = function () {
|
|
13632
|
-
this.finalize();
|
|
13633
|
-
|
|
13634
|
-
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
|
13635
|
-
extraBytes = this.extraBytes, i = 0, j = 0;
|
|
13636
|
-
var array = [], offset, block;
|
|
13637
|
-
while (j < outputBlocks) {
|
|
13638
|
-
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
|
13639
|
-
offset = j << 2;
|
|
13640
|
-
block = s[i];
|
|
13641
|
-
array[offset] = block & 0xFF;
|
|
13642
|
-
array[offset + 1] = (block >> 8) & 0xFF;
|
|
13643
|
-
array[offset + 2] = (block >> 16) & 0xFF;
|
|
13644
|
-
array[offset + 3] = (block >> 24) & 0xFF;
|
|
13645
|
-
}
|
|
13646
|
-
if (j % blockCount === 0) {
|
|
13647
|
-
s = cloneArray(s);
|
|
13648
|
-
f(s);
|
|
13649
|
-
}
|
|
13650
|
-
}
|
|
13651
|
-
if (extraBytes) {
|
|
13652
|
-
offset = j << 2;
|
|
13653
|
-
block = s[i];
|
|
13654
|
-
array[offset] = block & 0xFF;
|
|
13655
|
-
if (extraBytes > 1) {
|
|
13656
|
-
array[offset + 1] = (block >> 8) & 0xFF;
|
|
13657
|
-
}
|
|
13658
|
-
if (extraBytes > 2) {
|
|
13659
|
-
array[offset + 2] = (block >> 16) & 0xFF;
|
|
13660
|
-
}
|
|
13661
|
-
}
|
|
13662
|
-
return array;
|
|
13663
|
-
};
|
|
13664
|
-
|
|
13665
|
-
function Kmac(bits, padding, outputBits) {
|
|
13666
|
-
Keccak.call(this, bits, padding, outputBits);
|
|
13667
|
-
}
|
|
13668
|
-
|
|
13669
|
-
Kmac.prototype = new Keccak();
|
|
13670
|
-
|
|
13671
|
-
Kmac.prototype.finalize = function () {
|
|
13672
|
-
this.encode(this.outputBits, true);
|
|
13673
|
-
return Keccak.prototype.finalize.call(this);
|
|
13674
|
-
};
|
|
13675
|
-
|
|
13676
|
-
var f = function (s) {
|
|
13677
|
-
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
|
|
13678
|
-
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
|
|
13679
|
-
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
|
|
13680
|
-
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
|
|
13681
|
-
for (n = 0; n < 48; n += 2) {
|
|
13682
|
-
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
|
|
13683
|
-
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
|
|
13684
|
-
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
|
|
13685
|
-
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
|
|
13686
|
-
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
|
|
13687
|
-
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
|
|
13688
|
-
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
|
|
13689
|
-
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
|
|
13690
|
-
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
|
|
13691
|
-
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
|
|
13692
|
-
|
|
13693
|
-
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
|
|
13694
|
-
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
|
|
13695
|
-
s[0] ^= h;
|
|
13696
|
-
s[1] ^= l;
|
|
13697
|
-
s[10] ^= h;
|
|
13698
|
-
s[11] ^= l;
|
|
13699
|
-
s[20] ^= h;
|
|
13700
|
-
s[21] ^= l;
|
|
13701
|
-
s[30] ^= h;
|
|
13702
|
-
s[31] ^= l;
|
|
13703
|
-
s[40] ^= h;
|
|
13704
|
-
s[41] ^= l;
|
|
13705
|
-
h = c0 ^ ((c4 << 1) | (c5 >>> 31));
|
|
13706
|
-
l = c1 ^ ((c5 << 1) | (c4 >>> 31));
|
|
13707
|
-
s[2] ^= h;
|
|
13708
|
-
s[3] ^= l;
|
|
13709
|
-
s[12] ^= h;
|
|
13710
|
-
s[13] ^= l;
|
|
13711
|
-
s[22] ^= h;
|
|
13712
|
-
s[23] ^= l;
|
|
13713
|
-
s[32] ^= h;
|
|
13714
|
-
s[33] ^= l;
|
|
13715
|
-
s[42] ^= h;
|
|
13716
|
-
s[43] ^= l;
|
|
13717
|
-
h = c2 ^ ((c6 << 1) | (c7 >>> 31));
|
|
13718
|
-
l = c3 ^ ((c7 << 1) | (c6 >>> 31));
|
|
13719
|
-
s[4] ^= h;
|
|
13720
|
-
s[5] ^= l;
|
|
13721
|
-
s[14] ^= h;
|
|
13722
|
-
s[15] ^= l;
|
|
13723
|
-
s[24] ^= h;
|
|
13724
|
-
s[25] ^= l;
|
|
13725
|
-
s[34] ^= h;
|
|
13726
|
-
s[35] ^= l;
|
|
13727
|
-
s[44] ^= h;
|
|
13728
|
-
s[45] ^= l;
|
|
13729
|
-
h = c4 ^ ((c8 << 1) | (c9 >>> 31));
|
|
13730
|
-
l = c5 ^ ((c9 << 1) | (c8 >>> 31));
|
|
13731
|
-
s[6] ^= h;
|
|
13732
|
-
s[7] ^= l;
|
|
13733
|
-
s[16] ^= h;
|
|
13734
|
-
s[17] ^= l;
|
|
13735
|
-
s[26] ^= h;
|
|
13736
|
-
s[27] ^= l;
|
|
13737
|
-
s[36] ^= h;
|
|
13738
|
-
s[37] ^= l;
|
|
13739
|
-
s[46] ^= h;
|
|
13740
|
-
s[47] ^= l;
|
|
13741
|
-
h = c6 ^ ((c0 << 1) | (c1 >>> 31));
|
|
13742
|
-
l = c7 ^ ((c1 << 1) | (c0 >>> 31));
|
|
13743
|
-
s[8] ^= h;
|
|
13744
|
-
s[9] ^= l;
|
|
13745
|
-
s[18] ^= h;
|
|
13746
|
-
s[19] ^= l;
|
|
13747
|
-
s[28] ^= h;
|
|
13748
|
-
s[29] ^= l;
|
|
13749
|
-
s[38] ^= h;
|
|
13750
|
-
s[39] ^= l;
|
|
13751
|
-
s[48] ^= h;
|
|
13752
|
-
s[49] ^= l;
|
|
13753
|
-
|
|
13754
|
-
b0 = s[0];
|
|
13755
|
-
b1 = s[1];
|
|
13756
|
-
b32 = (s[11] << 4) | (s[10] >>> 28);
|
|
13757
|
-
b33 = (s[10] << 4) | (s[11] >>> 28);
|
|
13758
|
-
b14 = (s[20] << 3) | (s[21] >>> 29);
|
|
13759
|
-
b15 = (s[21] << 3) | (s[20] >>> 29);
|
|
13760
|
-
b46 = (s[31] << 9) | (s[30] >>> 23);
|
|
13761
|
-
b47 = (s[30] << 9) | (s[31] >>> 23);
|
|
13762
|
-
b28 = (s[40] << 18) | (s[41] >>> 14);
|
|
13763
|
-
b29 = (s[41] << 18) | (s[40] >>> 14);
|
|
13764
|
-
b20 = (s[2] << 1) | (s[3] >>> 31);
|
|
13765
|
-
b21 = (s[3] << 1) | (s[2] >>> 31);
|
|
13766
|
-
b2 = (s[13] << 12) | (s[12] >>> 20);
|
|
13767
|
-
b3 = (s[12] << 12) | (s[13] >>> 20);
|
|
13768
|
-
b34 = (s[22] << 10) | (s[23] >>> 22);
|
|
13769
|
-
b35 = (s[23] << 10) | (s[22] >>> 22);
|
|
13770
|
-
b16 = (s[33] << 13) | (s[32] >>> 19);
|
|
13771
|
-
b17 = (s[32] << 13) | (s[33] >>> 19);
|
|
13772
|
-
b48 = (s[42] << 2) | (s[43] >>> 30);
|
|
13773
|
-
b49 = (s[43] << 2) | (s[42] >>> 30);
|
|
13774
|
-
b40 = (s[5] << 30) | (s[4] >>> 2);
|
|
13775
|
-
b41 = (s[4] << 30) | (s[5] >>> 2);
|
|
13776
|
-
b22 = (s[14] << 6) | (s[15] >>> 26);
|
|
13777
|
-
b23 = (s[15] << 6) | (s[14] >>> 26);
|
|
13778
|
-
b4 = (s[25] << 11) | (s[24] >>> 21);
|
|
13779
|
-
b5 = (s[24] << 11) | (s[25] >>> 21);
|
|
13780
|
-
b36 = (s[34] << 15) | (s[35] >>> 17);
|
|
13781
|
-
b37 = (s[35] << 15) | (s[34] >>> 17);
|
|
13782
|
-
b18 = (s[45] << 29) | (s[44] >>> 3);
|
|
13783
|
-
b19 = (s[44] << 29) | (s[45] >>> 3);
|
|
13784
|
-
b10 = (s[6] << 28) | (s[7] >>> 4);
|
|
13785
|
-
b11 = (s[7] << 28) | (s[6] >>> 4);
|
|
13786
|
-
b42 = (s[17] << 23) | (s[16] >>> 9);
|
|
13787
|
-
b43 = (s[16] << 23) | (s[17] >>> 9);
|
|
13788
|
-
b24 = (s[26] << 25) | (s[27] >>> 7);
|
|
13789
|
-
b25 = (s[27] << 25) | (s[26] >>> 7);
|
|
13790
|
-
b6 = (s[36] << 21) | (s[37] >>> 11);
|
|
13791
|
-
b7 = (s[37] << 21) | (s[36] >>> 11);
|
|
13792
|
-
b38 = (s[47] << 24) | (s[46] >>> 8);
|
|
13793
|
-
b39 = (s[46] << 24) | (s[47] >>> 8);
|
|
13794
|
-
b30 = (s[8] << 27) | (s[9] >>> 5);
|
|
13795
|
-
b31 = (s[9] << 27) | (s[8] >>> 5);
|
|
13796
|
-
b12 = (s[18] << 20) | (s[19] >>> 12);
|
|
13797
|
-
b13 = (s[19] << 20) | (s[18] >>> 12);
|
|
13798
|
-
b44 = (s[29] << 7) | (s[28] >>> 25);
|
|
13799
|
-
b45 = (s[28] << 7) | (s[29] >>> 25);
|
|
13800
|
-
b26 = (s[38] << 8) | (s[39] >>> 24);
|
|
13801
|
-
b27 = (s[39] << 8) | (s[38] >>> 24);
|
|
13802
|
-
b8 = (s[48] << 14) | (s[49] >>> 18);
|
|
13803
|
-
b9 = (s[49] << 14) | (s[48] >>> 18);
|
|
13804
|
-
|
|
13805
|
-
s[0] = b0 ^ (~b2 & b4);
|
|
13806
|
-
s[1] = b1 ^ (~b3 & b5);
|
|
13807
|
-
s[10] = b10 ^ (~b12 & b14);
|
|
13808
|
-
s[11] = b11 ^ (~b13 & b15);
|
|
13809
|
-
s[20] = b20 ^ (~b22 & b24);
|
|
13810
|
-
s[21] = b21 ^ (~b23 & b25);
|
|
13811
|
-
s[30] = b30 ^ (~b32 & b34);
|
|
13812
|
-
s[31] = b31 ^ (~b33 & b35);
|
|
13813
|
-
s[40] = b40 ^ (~b42 & b44);
|
|
13814
|
-
s[41] = b41 ^ (~b43 & b45);
|
|
13815
|
-
s[2] = b2 ^ (~b4 & b6);
|
|
13816
|
-
s[3] = b3 ^ (~b5 & b7);
|
|
13817
|
-
s[12] = b12 ^ (~b14 & b16);
|
|
13818
|
-
s[13] = b13 ^ (~b15 & b17);
|
|
13819
|
-
s[22] = b22 ^ (~b24 & b26);
|
|
13820
|
-
s[23] = b23 ^ (~b25 & b27);
|
|
13821
|
-
s[32] = b32 ^ (~b34 & b36);
|
|
13822
|
-
s[33] = b33 ^ (~b35 & b37);
|
|
13823
|
-
s[42] = b42 ^ (~b44 & b46);
|
|
13824
|
-
s[43] = b43 ^ (~b45 & b47);
|
|
13825
|
-
s[4] = b4 ^ (~b6 & b8);
|
|
13826
|
-
s[5] = b5 ^ (~b7 & b9);
|
|
13827
|
-
s[14] = b14 ^ (~b16 & b18);
|
|
13828
|
-
s[15] = b15 ^ (~b17 & b19);
|
|
13829
|
-
s[24] = b24 ^ (~b26 & b28);
|
|
13830
|
-
s[25] = b25 ^ (~b27 & b29);
|
|
13831
|
-
s[34] = b34 ^ (~b36 & b38);
|
|
13832
|
-
s[35] = b35 ^ (~b37 & b39);
|
|
13833
|
-
s[44] = b44 ^ (~b46 & b48);
|
|
13834
|
-
s[45] = b45 ^ (~b47 & b49);
|
|
13835
|
-
s[6] = b6 ^ (~b8 & b0);
|
|
13836
|
-
s[7] = b7 ^ (~b9 & b1);
|
|
13837
|
-
s[16] = b16 ^ (~b18 & b10);
|
|
13838
|
-
s[17] = b17 ^ (~b19 & b11);
|
|
13839
|
-
s[26] = b26 ^ (~b28 & b20);
|
|
13840
|
-
s[27] = b27 ^ (~b29 & b21);
|
|
13841
|
-
s[36] = b36 ^ (~b38 & b30);
|
|
13842
|
-
s[37] = b37 ^ (~b39 & b31);
|
|
13843
|
-
s[46] = b46 ^ (~b48 & b40);
|
|
13844
|
-
s[47] = b47 ^ (~b49 & b41);
|
|
13845
|
-
s[8] = b8 ^ (~b0 & b2);
|
|
13846
|
-
s[9] = b9 ^ (~b1 & b3);
|
|
13847
|
-
s[18] = b18 ^ (~b10 & b12);
|
|
13848
|
-
s[19] = b19 ^ (~b11 & b13);
|
|
13849
|
-
s[28] = b28 ^ (~b20 & b22);
|
|
13850
|
-
s[29] = b29 ^ (~b21 & b23);
|
|
13851
|
-
s[38] = b38 ^ (~b30 & b32);
|
|
13852
|
-
s[39] = b39 ^ (~b31 & b33);
|
|
13853
|
-
s[48] = b48 ^ (~b40 & b42);
|
|
13854
|
-
s[49] = b49 ^ (~b41 & b43);
|
|
13855
|
-
|
|
13856
|
-
s[0] ^= RC[n];
|
|
13857
|
-
s[1] ^= RC[n + 1];
|
|
13858
|
-
}
|
|
13859
|
-
};
|
|
13860
|
-
|
|
13861
|
-
if (COMMON_JS) {
|
|
13862
|
-
module.exports = methods;
|
|
13863
|
-
} else {
|
|
13864
|
-
for (i = 0; i < methodNames.length; ++i) {
|
|
13865
|
-
root[methodNames[i]] = methods[methodNames[i]];
|
|
13866
|
-
}
|
|
13867
|
-
}
|
|
13868
|
-
})();
|
|
13869
|
-
} (sha3));
|
|
13870
|
-
return sha3.exports;
|
|
13871
|
-
}
|
|
13872
|
-
|
|
13873
|
-
var sha3Exports = requireSha3();
|
|
13874
|
-
|
|
13875
|
-
async function toEnsName(address) {
|
|
13876
|
-
const reverseName = address.toLowerCase().replace(/^0x/, "") + ".addr.reverse";
|
|
13877
|
-
const node = namehash(reverseName);
|
|
13878
|
-
const endpoint = "https://cloudflare-eth.com";
|
|
13879
|
-
|
|
13880
|
-
// Step 1: Get resolver address from ENS registry
|
|
13881
|
-
const resolverRes = await fetch(endpoint, {
|
|
13882
|
-
method: "POST",
|
|
13883
|
-
headers: { "Content-Type": "application/json" },
|
|
13884
|
-
body: JSON.stringify({
|
|
13885
|
-
jsonrpc: "2.0",
|
|
13886
|
-
id: 1,
|
|
13887
|
-
method: "eth_call",
|
|
13888
|
-
params: [
|
|
13889
|
-
{
|
|
13890
|
-
to: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
|
13891
|
-
data: "0x0178b8bf" + node.slice(2).padStart(64, "0")
|
|
13892
|
-
},
|
|
13893
|
-
"latest"
|
|
13894
|
-
]
|
|
13895
|
-
})
|
|
13896
|
-
});
|
|
13897
|
-
|
|
13898
|
-
const { result: resolverHex } = await resolverRes.json();
|
|
13899
|
-
const resolverAddress = "0x" + resolverHex.slice(-40);
|
|
13900
|
-
if (!/^0x[0-9a-f]{40}$/i.test(resolverAddress)) return null;
|
|
13901
|
-
|
|
13902
|
-
// Step 2: Call resolver.name(node)
|
|
13903
|
-
const nameRes = await fetch(endpoint, {
|
|
13904
|
-
method: "POST",
|
|
13905
|
-
headers: { "Content-Type": "application/json" },
|
|
13906
|
-
body: JSON.stringify({
|
|
13907
|
-
jsonrpc: "2.0",
|
|
13908
|
-
id: 2,
|
|
13909
|
-
method: "eth_call",
|
|
13910
|
-
params: [
|
|
13911
|
-
{
|
|
13912
|
-
to: resolverAddress,
|
|
13913
|
-
data: "0x691f3431" + node.slice(2)
|
|
13914
|
-
},
|
|
13915
|
-
"latest"
|
|
13916
|
-
]
|
|
13917
|
-
})
|
|
13918
|
-
});
|
|
13919
|
-
|
|
13920
|
-
const { result: nameHex } = await nameRes.json();
|
|
13921
|
-
if (!nameHex || nameHex === "0x") return null;
|
|
13922
|
-
|
|
13923
|
-
// Decode hex ENS name
|
|
13924
|
-
const hex = nameHex.slice(2);
|
|
13925
|
-
let name = "";
|
|
13926
|
-
for (let i = 0; i < hex.length; i += 2) {
|
|
13927
|
-
const code = parseInt(hex.slice(i, i + 2), 16);
|
|
13928
|
-
if (code === 0) break;
|
|
13929
|
-
name += String.fromCharCode(code);
|
|
13930
|
-
}
|
|
13931
|
-
|
|
13932
|
-
return name || null;
|
|
13933
|
-
}
|
|
13934
|
-
|
|
13935
|
-
// ENS Namehash using js-sha3
|
|
13936
|
-
function namehash(name) {
|
|
13937
|
-
let node = "0000000000000000000000000000000000000000000000000000000000000000";
|
|
13938
|
-
if (name) {
|
|
13939
|
-
const labels = name.toLowerCase().split(".");
|
|
13940
|
-
for (let i = labels.length - 1; i >= 0; i--) {
|
|
13941
|
-
const labelSha = sha3Exports.sha3_256.array(labels[i]);
|
|
13942
|
-
const combined = node + bytesToHex(labelSha);
|
|
13943
|
-
node = sha3Exports.sha3_256.array(hexToBytes(combined));
|
|
13944
|
-
node = bytesToHex(node);
|
|
13945
|
-
}
|
|
13946
|
-
}
|
|
13947
|
-
return "0x" + node;
|
|
13948
|
-
}
|
|
13949
|
-
|
|
13950
|
-
// Helpers
|
|
13951
|
-
function hexToBytes(hex) {
|
|
13952
|
-
hex = hex.replace(/^0x/, "");
|
|
13953
|
-
const bytes = new Uint8Array(hex.length / 2);
|
|
13954
|
-
for (let i = 0; i < bytes.length; i++) {
|
|
13955
|
-
bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
13956
|
-
}
|
|
13957
|
-
return bytes;
|
|
13958
|
-
}
|
|
13959
|
-
|
|
13960
|
-
function bytesToHex(bytes) {
|
|
13961
|
-
return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
|
|
13962
|
-
}
|
|
13963
|
-
|
|
13964
|
-
async function FIREFLY(platform, contentType, identifier) {
|
|
13246
|
+
async function FIREFLY(platform, contentType, identifier, start = 0, end = 10) {
|
|
13965
13247
|
const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Firefly);
|
|
13966
13248
|
if (!API_KEY) return `${SERVICE_API_KEY.Firefly}${ERROR_MESSAGES_FLAG.MISSING_KEY}`;
|
|
13967
13249
|
|
|
13968
13250
|
const baseUrl = "https://openapi.firefly.land/v1/fileverse/fetch";
|
|
13969
|
-
const headers = {
|
|
13970
|
-
|
|
13251
|
+
const headers = { "x-api-key": API_KEY };
|
|
13252
|
+
|
|
13253
|
+
const typeMap = {
|
|
13254
|
+
farcaster: {
|
|
13255
|
+
posts: "farcasterid",
|
|
13256
|
+
replies: "farcasterpostid",
|
|
13257
|
+
channels: "farcasterchannels",
|
|
13258
|
+
},
|
|
13259
|
+
lens: {
|
|
13260
|
+
posts: "lensid",
|
|
13261
|
+
replies: "lenspostid",
|
|
13262
|
+
}
|
|
13971
13263
|
};
|
|
13972
13264
|
|
|
13973
|
-
|
|
13974
|
-
|
|
13265
|
+
const platformType = typeMap[platform]?.[contentType];
|
|
13266
|
+
if (!platformType) return `${SERVICE_API_KEY.Firefly}${ERROR_MESSAGES_FLAG.INVALID_TYPE}`;
|
|
13975
13267
|
|
|
13976
|
-
|
|
13977
|
-
|
|
13978
|
-
|
|
13979
|
-
|
|
13980
|
-
|
|
13981
|
-
type = "farcasterid";
|
|
13982
|
-
query = normalizedId;
|
|
13983
|
-
} else if (contentType === "replies") {
|
|
13984
|
-
type = "farcasterpostid";
|
|
13985
|
-
query = normalizedId.startsWith("0x") ? normalizedId : Number(normalizedId).toString();
|
|
13986
|
-
} else {
|
|
13987
|
-
return `${SERVICE_API_KEY.Firefly}${ERROR_MESSAGES_FLAG.INVALID_TYPE}`;
|
|
13988
|
-
}
|
|
13989
|
-
} else if (platform === "lens") {
|
|
13990
|
-
if (contentType === "posts") {
|
|
13991
|
-
type = "lensid";
|
|
13992
|
-
query = normalizedId;
|
|
13993
|
-
} else if (contentType === "replies") {
|
|
13994
|
-
type = "lenspostid";
|
|
13995
|
-
query = normalizedId;
|
|
13996
|
-
} else {
|
|
13997
|
-
return `${SERVICE_API_KEY.Firefly}${ERROR_MESSAGES_FLAG.INVALID_TYPE}`;
|
|
13998
|
-
}
|
|
13999
|
-
} else {
|
|
14000
|
-
return `${SERVICE_API_KEY.Firefly}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`;
|
|
14001
|
-
}
|
|
13268
|
+
const query = identifier
|
|
13269
|
+
.split(",")
|
|
13270
|
+
.map(s => s.trim())
|
|
13271
|
+
.filter(Boolean)
|
|
13272
|
+
.join(",");
|
|
14002
13273
|
|
|
14003
13274
|
const url = new URL(baseUrl);
|
|
14004
13275
|
url.searchParams.set("query", query);
|
|
14005
|
-
url.searchParams.set("type",
|
|
14006
|
-
url.searchParams.set("
|
|
14007
|
-
url.searchParams.set("
|
|
13276
|
+
url.searchParams.set("type", platformType);
|
|
13277
|
+
url.searchParams.set("start", String(start));
|
|
13278
|
+
url.searchParams.set("end", String(end));
|
|
14008
13279
|
|
|
14009
13280
|
try {
|
|
14010
13281
|
const res = await fetch(url.toString(), { headers });
|
|
14011
13282
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
13283
|
+
|
|
14012
13284
|
const json = await res.json();
|
|
14013
|
-
|
|
14014
|
-
|
|
14015
|
-
|
|
14016
|
-
|
|
14017
|
-
|
|
14018
|
-
|
|
14019
|
-
|
|
14020
|
-
}
|
|
14021
|
-
|
|
14022
|
-
|
|
14023
|
-
|
|
13285
|
+
if (!Array.isArray(json?.data)) return [];
|
|
13286
|
+
|
|
13287
|
+
return json.data.map(item => {
|
|
13288
|
+
const flat = {};
|
|
13289
|
+
for (const [key, value] of Object.entries(item)) {
|
|
13290
|
+
if (typeof value !== "object" || value === null) {
|
|
13291
|
+
flat[key] = value;
|
|
13292
|
+
}
|
|
13293
|
+
}
|
|
13294
|
+
flat.platform = platform;
|
|
13295
|
+
return flat;
|
|
13296
|
+
});
|
|
13297
|
+
|
|
14024
13298
|
} catch (err) {
|
|
14025
13299
|
console.error("FIREFLY fetch error:", err);
|
|
14026
13300
|
return ERROR_MESSAGES_FLAG.DEFAULT;
|
|
@@ -14028,6 +13302,9 @@ async function FIREFLY(platform, contentType, identifier) {
|
|
|
14028
13302
|
}
|
|
14029
13303
|
|
|
14030
13304
|
|
|
13305
|
+
|
|
13306
|
+
|
|
13307
|
+
|
|
14031
13308
|
async function BLOCKSCOUT(address, type, chain, startTimestamp, endTimestamp, page, offset) {
|
|
14032
13309
|
if (!chain) {
|
|
14033
13310
|
chain = 'ethereum';
|
|
@@ -14043,6 +13320,23 @@ async function BLOCKSCOUT(address, type, chain, startTimestamp, endTimestamp, pa
|
|
|
14043
13320
|
startTimestamp = Math.floor(startTimestamp / 1000);
|
|
14044
13321
|
}
|
|
14045
13322
|
|
|
13323
|
+
if(isNaN(startTimestamp)){
|
|
13324
|
+
startTimestamp = toTimestamp(startTimestamp);
|
|
13325
|
+
}
|
|
13326
|
+
|
|
13327
|
+
|
|
13328
|
+
if(isNaN(endTimestamp) && endTimestamp){
|
|
13329
|
+
endTimestamp = toTimestamp(endTimestamp);
|
|
13330
|
+
}
|
|
13331
|
+
|
|
13332
|
+
if(!isAddress(address)){
|
|
13333
|
+
address = await fromEnsNameToAddress(address);
|
|
13334
|
+
}
|
|
13335
|
+
|
|
13336
|
+
if(!address){
|
|
13337
|
+
return `${address}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`
|
|
13338
|
+
}
|
|
13339
|
+
|
|
14046
13340
|
const hostname = BLOCKSCOUT_CHAINS_MAP[chain];
|
|
14047
13341
|
|
|
14048
13342
|
let requestUrl;
|
|
@@ -14167,7 +13461,7 @@ async function NEYNAR(
|
|
|
14167
13461
|
return ERROR_MESSAGES_FLAG.DEFAULT;
|
|
14168
13462
|
}
|
|
14169
13463
|
}
|
|
14170
|
-
async function
|
|
13464
|
+
async function GNOSISPAY({
|
|
14171
13465
|
cardId,
|
|
14172
13466
|
startDate,
|
|
14173
13467
|
endDate,
|
|
@@ -14183,11 +13477,11 @@ async function GNOSIS({
|
|
|
14183
13477
|
url.searchParams.set('limit', limit.toString());
|
|
14184
13478
|
url.searchParams.set('offset', offset.toString());
|
|
14185
13479
|
|
|
14186
|
-
if (!isNaN(startDate)) {
|
|
13480
|
+
if (!isNaN(toTimestamp(startDate))) {
|
|
14187
13481
|
url.searchParams.set('startDate', new Date(startDate * 1000).toISOString());
|
|
14188
13482
|
}
|
|
14189
13483
|
|
|
14190
|
-
if (!isNaN(endDate)) {
|
|
13484
|
+
if (!isNaN(toTimestamp(endDate))) {
|
|
14191
13485
|
url.searchParams.set('endDate', new Date(endDate * 1000).toISOString());
|
|
14192
13486
|
}
|
|
14193
13487
|
|
|
@@ -14253,12 +13547,15 @@ async function COINGECKO(category, param1, param2, page = 1, perPage = 2) {
|
|
|
14253
13547
|
};
|
|
14254
13548
|
|
|
14255
13549
|
let url = '';
|
|
13550
|
+
const lowerCategory = (category || '').toLowerCase();
|
|
14256
13551
|
|
|
14257
|
-
switch (
|
|
13552
|
+
switch (lowerCategory) {
|
|
14258
13553
|
case 'price': {
|
|
14259
13554
|
const token = param1;
|
|
14260
13555
|
const vsCurrencies = param2;
|
|
14261
|
-
if (!token || !vsCurrencies)
|
|
13556
|
+
if (!token || !vsCurrencies) {
|
|
13557
|
+
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`;
|
|
13558
|
+
}
|
|
14262
13559
|
url = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=${vsCurrencies}&ids=${token}`;
|
|
14263
13560
|
break;
|
|
14264
13561
|
}
|
|
@@ -14272,29 +13569,28 @@ async function COINGECKO(category, param1, param2, page = 1, perPage = 2) {
|
|
|
14272
13569
|
hyperliquid: 'hyperliquid',
|
|
14273
13570
|
bitcoin: 'bitcoin-ecosystem',
|
|
14274
13571
|
pump: 'pump-ecosystem',
|
|
13572
|
+
aiagents: 'ai-agents',
|
|
13573
|
+
meme: 'meme-token',
|
|
14275
13574
|
};
|
|
14276
13575
|
|
|
14277
13576
|
const key = param1?.toLowerCase();
|
|
14278
|
-
const categoryVal =
|
|
14279
|
-
|
|
14280
|
-
if (param1 && !categoryVal) {
|
|
14281
|
-
return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`;
|
|
14282
|
-
}
|
|
14283
|
-
|
|
13577
|
+
const categoryVal = ecosystemMap[key] || '';
|
|
14284
13578
|
const trend = param2 ? `&price_change_percentage=${param2}` : '';
|
|
13579
|
+
|
|
14285
13580
|
url = `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&include_tokens=top&page=${page}&per_page=${perPage}`;
|
|
13581
|
+
if (key && !categoryVal) return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`;
|
|
14286
13582
|
if (categoryVal) url += `&category=${categoryVal}`;
|
|
14287
13583
|
if (trend) url += trend;
|
|
14288
13584
|
break;
|
|
14289
13585
|
}
|
|
14290
13586
|
|
|
14291
13587
|
case 'stablecoins': {
|
|
14292
|
-
const category = param1 === 'all'
|
|
13588
|
+
const category = !param1 || param1.toLowerCase() === 'all'
|
|
14293
13589
|
? 'stablecoins'
|
|
14294
|
-
: param1
|
|
14295
|
-
const trend = param2 ? `&price_change_percentage=${param2}` : '';
|
|
13590
|
+
: param1.toLowerCase();
|
|
14296
13591
|
|
|
14297
|
-
|
|
13592
|
+
const trend = param2 ? `&price_change_percentage=${param2}` : '';
|
|
13593
|
+
url = `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&category=${category}&order=market_cap_desc&page=${page}&per_page=${perPage}${trend}`;
|
|
14298
13594
|
break;
|
|
14299
13595
|
}
|
|
14300
13596
|
|
|
@@ -14326,7 +13622,7 @@ async function COINGECKO(category, param1, param2, page = 1, perPage = 2) {
|
|
|
14326
13622
|
}
|
|
14327
13623
|
}
|
|
14328
13624
|
|
|
14329
|
-
if (
|
|
13625
|
+
if (lowerCategory === 'price') {
|
|
14330
13626
|
const output = {};
|
|
14331
13627
|
for (const [token, prices] of Object.entries(json)) {
|
|
14332
13628
|
for (const [currency, value] of Object.entries(prices)) {
|
|
@@ -14376,11 +13672,11 @@ async function EOA(
|
|
|
14376
13672
|
const ADDRESS_MAP = {};
|
|
14377
13673
|
|
|
14378
13674
|
for (const input of INPUTS) {
|
|
14379
|
-
if (
|
|
13675
|
+
if (isAddress(input)) {
|
|
14380
13676
|
ADDRESS_MAP[input.toLowerCase()] = null; // it's a direct address
|
|
14381
13677
|
} else {
|
|
14382
13678
|
try {
|
|
14383
|
-
const resolved = await
|
|
13679
|
+
const resolved = await fromEnsNameToAddress(input); // ENS -> address
|
|
14384
13680
|
if (resolved) ADDRESS_MAP[resolved.toLowerCase()] = input;
|
|
14385
13681
|
} catch {
|
|
14386
13682
|
return `${input}${ERROR_MESSAGES_FLAG.INVALID_PARAM}`;
|
|
@@ -14472,12 +13768,6 @@ async function EOA(
|
|
|
14472
13768
|
}
|
|
14473
13769
|
}
|
|
14474
13770
|
|
|
14475
|
-
|
|
14476
|
-
|
|
14477
|
-
|
|
14478
|
-
|
|
14479
|
-
|
|
14480
|
-
|
|
14481
13771
|
async function FLVURL(token, vs_currencies) {
|
|
14482
13772
|
return new Promise((resolve) => {
|
|
14483
13773
|
setTimeout(() => {
|
|
@@ -14681,7 +13971,7 @@ exports.GAUSS = GAUSS;
|
|
|
14681
13971
|
exports.GCD = GCD;
|
|
14682
13972
|
exports.GEOMEAN = GEOMEAN;
|
|
14683
13973
|
exports.GESTEP = GESTEP;
|
|
14684
|
-
exports.
|
|
13974
|
+
exports.GNOSISPAY = GNOSISPAY;
|
|
14685
13975
|
exports.GNOSISSCAN = GNOSISSCAN;
|
|
14686
13976
|
exports.GROWTH = GROWTH;
|
|
14687
13977
|
exports.HARMEAN = HARMEAN;
|