@pioneer-platform/pioneer-coins 9.5.0 → 9.7.0
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/.turbo/turbo-build.log +1 -0
- package/CHANGELOG.md +22 -0
- package/build.sh +16 -25
- package/lib/index.js.map +24 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$ tsc -p .
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @pioneer-platform/pioneer-coins
|
|
2
2
|
|
|
3
|
+
## 9.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Automated minor version bump for all packages
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @pioneer-platform/loggerdog@8.7.0
|
|
13
|
+
|
|
14
|
+
## 9.6.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- Automated minor version bump for all packages
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
- @pioneer-platform/loggerdog@8.6.0
|
|
24
|
+
|
|
3
25
|
## 9.5.0
|
|
4
26
|
|
|
5
27
|
### Minor Changes
|
package/build.sh
CHANGED
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
|
|
2
1
|
#!/bin/bash
|
|
2
|
+
# Fast Bun build (replaces slow tsc)
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function deployDevelop {
|
|
9
|
-
echo -e " THE ACTUAL DEVELOP DEPLOY FOR PACKAGE 1"
|
|
10
|
-
}
|
|
4
|
+
OUTDIR="${1:-lib}"
|
|
5
|
+
ENTRY="${2:-src/index.ts}"
|
|
11
6
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
# Clean output
|
|
8
|
+
rm -rf "$OUTDIR"
|
|
9
|
+
mkdir -p "$OUTDIR"
|
|
15
10
|
|
|
11
|
+
# Build with Bun (10x faster than tsc)
|
|
12
|
+
bun build "$ENTRY" \
|
|
13
|
+
--outdir "$OUTDIR" \
|
|
14
|
+
--target node \
|
|
15
|
+
--format cjs \
|
|
16
|
+
--sourcemap \
|
|
17
|
+
--minify
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
# Generate TypeScript declarations
|
|
20
|
+
bunx tsc --emitDeclarationOnly --outDir "$OUTDIR" --project .
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
develop )
|
|
22
|
-
deployDevelop
|
|
23
|
-
;;
|
|
24
|
-
master )
|
|
25
|
-
deployProduction
|
|
26
|
-
;;
|
|
27
|
-
*)
|
|
28
|
-
echo -e " no build steps expected for branch $1"
|
|
29
|
-
exit 0
|
|
30
|
-
;;
|
|
31
|
-
esac
|
|
22
|
+
echo "✅ Built $OUTDIR"
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../support/loggerdog/lib/index.js", "../../../../node_modules/@noble/hashes/cryptoNode.js", "../../../../node_modules/@noble/hashes/utils.js", "../../../../node_modules/@noble/hashes/_md.js", "../../../../node_modules/@noble/hashes/_u64.js", "../../../../node_modules/@noble/hashes/sha2.js", "../../../../node_modules/@noble/hashes/sha256.js", "../../../../node_modules/bs58check/node_modules/bs58/node_modules/base-x/src/index.js", "../../../../node_modules/bs58check/node_modules/bs58/index.js", "../../../../node_modules/bs58check/base.js", "../../../../node_modules/bs58check/index.js", "../src/paths.ts", "../src/coins.ts", "../src/address.ts", "../src/thorchain.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar LOG_LEVELS = {\n TEST: { val: 0, label: 'TEST', color: 'color: cyan' },\n EMERG: { val: 0, label: 'EMERG', color: 'color: magenta' },\n ALERT: { val: 1, label: 'ALERT', color: 'color: magenta' },\n CRIT: { val: 2, label: 'CRIT', color: 'color: red' },\n ERROR: { val: 3, label: 'ERROR', color: 'color: red' },\n WARN: { val: 4, label: 'WARN', color: 'color: orange' },\n NOTICE: { val: 5, label: 'NOTICE', color: 'color: yellow' },\n VERBOSE: { val: 6, label: 'VERBOSE', color: 'color: cyan' },\n INFO: { val: 6, label: 'INFO', color: 'color: cyan' },\n DEBUG: { val: 7, label: 'DEBUG', color: 'color: green' },\n DEBUGV: { val: 8, label: 'DEBUG', color: 'color: green' },\n DEBUGVV: { val: 9, label: 'DEBUG', color: 'color: green' }\n};\nvar DEFAULT_LOG_LEVEL = typeof process !== 'undefined' ? (process.env['DEFAULT_LOG_LEVEL'] || 'INFO') : 'INFO';\nfunction _extractContext(stack, depth) {\n try {\n var arr = stack.split('\\n');\n var chunks = arr[depth].split('/');\n var business = chunks[chunks.length - 1]; // ha ha!\n var matches = business.match(/^([^:]+):(\\d+):(\\d+)/i) || \"\";\n var filename = matches[1];\n var line = matches[2];\n var pos = matches[3];\n return { filename: filename, line: line, pos: pos };\n }\n catch (ex) {\n return { filename: 'unknown' };\n }\n}\nfunction _getContextString() {\n var stack = new Error().stack || \"\";\n // console.log(`stack`, stack)\n var _a = _extractContext(stack, 3), filename = _a.filename, line = _a.line, pos = _a.pos;\n return \"[\".concat(filename, \":\").concat(line, \":\").concat(pos, \"]\");\n}\nvar Logger = /** @class */ (function () {\n function Logger() {\n var stack = new Error().stack || \"\";\n // console.log(`stack`, stack)\n var ctx = _extractContext(stack, 3);\n this._tag = ctx.filename || \"\";\n for (var lvl in LOG_LEVELS) {\n // @ts-ignore\n this[lvl.toLowerCase()] = this._log.bind(this, lvl);\n }\n this._setLogLevel();\n }\n Logger.prototype._setLogLevel = function () {\n var tag = this._tag.split('.')[0]; // strip out suffix\n tag = tag.toUpperCase().replace('-', '_'); // CAPITALS_AND_UNDERSCORES\n var level = typeof process !== 'undefined' ? (process.env['LOG_LEVEL_' + tag] || null) : null;\n //console.log(\"level: \",level)\n // @ts-ignore\n if (level && LOG_LEVELS[level] !== undefined) {\n // @ts-ignore\n this._level = LOG_LEVELS[level].val;\n }\n else {\n // @ts-ignore\n this._level = LOG_LEVELS[DEFAULT_LOG_LEVEL].val;\n }\n };\n Logger.prototype._log = function (level) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n //console.log('level: ',level)\n //console.log('this._level: ',this._level)\n //console.log('LOG_LEVELS[level].val: ',LOG_LEVELS[level].val)\n if (this._level >= LOG_LEVELS[level].val) {\n var dt = new Date().toISOString().replace('T', ' ');\n var ctx = _getContextString();\n var label = LOG_LEVELS[level].label;\n var color = LOG_LEVELS[level].color;\n var message = void 0;\n if (typeof process !== 'undefined' && process.env['STRUCTURED_LOGGING']) {\n message = {};\n //console.log(args)\n var tag = args[0];\n var param = args[1];\n var value = args[2];\n if (typeof (args) === 'object') {\n message.loggerdog = true;\n message.label = label;\n message.param = param;\n message.value = value;\n message.ctx = ctx;\n message.dt = dt;\n message.tag = tag.toString();\n message.raw = args.toString();\n }\n else {\n message.raw = args;\n }\n console.log('%c ' + dt, color, label, ctx, message);\n }\n else {\n console.log.apply(console, __spreadArray(['%c ' + dt, color, label, ctx], args, false));\n }\n }\n };\n return Logger;\n}());\nvar getLogger = function () {\n return new Logger();\n};\nexports.default = getLogger; // ES6 default export\nmodule.exports = getLogger; // CommonJS\n",
|
|
6
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\n/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nconst nc = require(\"node:crypto\");\nexports.crypto = nc && typeof nc === 'object' && 'webcrypto' in nc\n ? nc.webcrypto\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n//# sourceMappingURL=cryptoNode.js.map",
|
|
7
|
+
"\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map",
|
|
8
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map",
|
|
9
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map",
|
|
10
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map",
|
|
11
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha224 = exports.SHA224 = exports.sha256 = exports.SHA256 = void 0;\n/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA256 = sha2_ts_1.SHA256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha256 = sha2_ts_1.sha256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA224 = sha2_ts_1.SHA224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha224 = sha2_ts_1.sha224;\n//# sourceMappingURL=sha256.js.map",
|
|
12
|
+
"'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n",
|
|
13
|
+
"const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n",
|
|
14
|
+
"'use strict'\n\nvar base58 = require('bs58')\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var payloadU8 = Uint8Array.from(payload)\n var checksum = checksumFn(payloadU8)\n var length = payloadU8.length + 4\n var both = new Uint8Array(length)\n both.set(payloadU8, 0)\n both.set(checksum.subarray(0, 4), payloadU8.length)\n return base58.encode(both, length)\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n",
|
|
15
|
+
"'use strict'\n\nvar { sha256 } = require('@noble/hashes/sha256')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n",
|
|
16
|
+
"const log = require('@pioneer-platform/loggerdog')()\nexport const blockchains = [\n // 'eip155:42161',\n // 'eip155:43114',\n // 'eip155:56',\n 'cosmos:maya-mainnet-v1',\n 'binance:bnb-beacon-chain',\n 'bip122:000000000000000000651ef99cb9fcbe',\n 'bip122:000000000019d6689c085ae165831e93',\n // 'eip155:8453',\n 'cosmos:cosmoshub-4',\n 'bip122:dash-hash',\n 'bip122:digibytes-hash',\n 'bip122:00000000001a91e3dace36e2be3bf030',\n 'cosmos:kaiyo-1',\n 'eos:cf057bbfb72640471fd910bcb67639c2',\n 'eip155:1',\n 'bip122:12a765e31ffd4059bada1e25190f6e98',\n 'cosmos:maya-mainnet-v1',\n // 'eip155:10',\n 'cosmos:osmosis-1',\n // 'eip155:137',\n 'ripple:4109c6f2045fc7eff4cde8f9905d19c2',\n 'cosmos:thorchain-mainnet-v1',\n 'bip122:0000000000196a45'\n]\n\n/*\n Create paths from user input\n\n blockchainchain\n\n script type\n\n account number\n\n\n //custom paths\n\n if evm\n\n */\n\n\nexport function createPath(entry:any){\n try{\n\n }catch(e){\n\n }\n}\n\n\nexport function getPaths(blockchains?:any,isTestnet?:boolean) {\n let output = []\n if(!blockchains) blockchains = []\n if(blockchains.indexOf('bip122:000000000019d6689c085ae165831e93') >= 0){\n if(isTestnet){\n output.push({\n note:\"Bitcoin testnet account 0\",\n testnet:true,\n networks: ['bip122:000000000019d6689c085ae165831e93'],\n script_type:\"p2wpkh\", //bech32\n available_scripts_types:['p2pkh','p2sh','p2wpkh','p2sh-p2wpkh'],\n type:\"zpub\",\n addressNList: [0x80000000 + 84, 0x80000000 + 1, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 84, 0x80000000 + 1, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n })\n }else{\n //legacy bip44\n output.push({\n note:\"Bitcoin account 0\",\n networks: ['bip122:000000000019d6689c085ae165831e93'],\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh','p2sh','p2wpkh','p2sh-p2wpkh'],\n type:\"xpub\",\n addressNList: [0x80000000 + 44, 0x80000000 + 0, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 0, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n })\n\n //TODO non-native segwit wraped p2sh\n output.push({\n note:\"Bitcoin account 0 Segwit (p2sh-p2wpkh) (ypub) (bip49)\",\n networks: ['bip122:000000000019d6689c085ae165831e93'],\n script_type:\"p2sh-p2wpkh\",\n available_scripts_types:['p2pkh','p2sh','p2wpkh','p2sh-p2wpkh'],\n type:\"ypub\",\n addressNList: [0x80000000 + 49, 0x80000000 + 0, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 49, 0x80000000 + 0, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n })\n\n //bech32 bip84\n output.push({\n note:\"Bitcoin account 0 Native Segwit (Bech32)\",\n networks: ['bip122:000000000019d6689c085ae165831e93'],\n script_type:\"p2wpkh\", //bech32\n available_scripts_types:['p2pkh','p2sh','p2wpkh','p2sh-p2wpkh'],\n type:\"zpub\",\n addressNList: [0x80000000 + 84, 0x80000000 + 0, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 84, 0x80000000 + 0, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n })\n }\n }\n\n if (blockchains.some((blockchain: string) => blockchain.includes('eip155:'))) {\n let entry:any = {\n note:\" ETH primary (default)\",\n networks: ['eip155:1','eip155:*'],\n type:\"address\",\n addressNList: [0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n }\n if(isTestnet) entry.testnet = true\n output.push(entry)\n }\n\n // if(blockchains.indexOf('eip155:43114') >= 0){\n // let entry:any = {\n // note:\" AVAX primary (default)\",\n // symbol: 'AVAX',\n // symbolSwapKit: 'AVAX',\n // network: 'eip155:43114',\n // script_type:\"avalanche\",\n // available_scripts_types:['avalanche'],\n // type:\"address\",\n // addressNList: [0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0],\n // addressNListMaster: [0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0, 0],\n // curve: 'secp256k1',\n // showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n // blockchain: 'avalanche'\n // }\n // if(isTestnet) entry.testnet = true\n // output.push(entry)\n // }\n\n if(blockchains.indexOf('cosmos:mayachain-mainnet-v1') >= 0){\n let entry:any = {\n note:\" Default COCAO path \",\n type:\"address\",\n addressNList: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n script_type:\"mayachain\",\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['cosmos:mayachain-mainnet-v1'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('cosmos:thorchain-mainnet-v1') >= 0){\n let entry:any = {\n note:\" Default RUNE path \",\n type:\"address\",\n addressNList: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n script_type:\"thorchain\",\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['cosmos:thorchain-mainnet-v1'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('cosmos:secret-mainnet-v1') >= 0){\n let entry:any = {\n note:\" Default Secret path \",\n type:\"address\",\n addressNList: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n script_type:\"secret\",\n showDisplay: false,\n networks: ['cosmos:secret-mainnet-v1'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('cosmos:cosmoshub-4') >= 0){\n let entry:any = {\n note:\" Default ATOM path \",\n type:\"address\",\n script_type:\"cosmos\",\n available_scripts_types:['cosmos'],\n addressNList: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, \n networks: ['cosmos:cosmoshub-4'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('cosmos:osmosis-1') >= 0){\n let entry:any = {\n note:\" Default OSMO path \",\n type:\"address\",\n script_type:\"bech32\",\n available_scripts_types:['bech32'],\n addressNList: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['cosmos:osmosis-1'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('bip122:000000000000000000651ef99cb9fcbe') >= 0){\n let entry:any = {\n note:\"Bitcoin Cash Default path\",\n type:\"xpub\",\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 145, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 145, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['bip122:000000000000000000651ef99cb9fcbe'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('bip122:12a765e31ffd4059bada1e25190f6e98') >= 0){\n let entry:any = {\n note:\"Litecoin Default path\",\n type:\"xpub\",\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 2, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 2, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['bip122:12a765e31ffd4059bada1e25190f6e98'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n\n //bech32 bip84\n output.push({\n note:\"Litecoin account Native Segwit (Bech32)\",\n networks: ['bip122:12a765e31ffd4059bada1e25190f6e98'],\n script_type:\"p2wpkh\", //bech32\n available_scripts_types:['p2pkh','p2sh','p2wpkh','p2sh-p2wpkh'],\n type:\"zpub\",\n addressNList: [0x80000000 + 84, 0x80000000 + 2, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 84, 0x80000000 + 2, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n })\n output.push(entry)\n }\n\n if(blockchains.indexOf('bip122:00000000001a91e3dace36e2be3bf030') >= 0){\n let entry:any = {\n note:\"Dogecoin Default path\",\n type:\"xpub\",\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 3, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 3, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n networks: ['bip122:00000000001a91e3dace36e2be3bf030'],\n }\n if(isTestnet) {\n entry.testnet = true\n }\n output.push(entry)\n }\n \n if(blockchains.indexOf('bip122:000007d91d1254d60e2dd1ae58038307') >= 0){\n let entry:any = {\n note:\"Default dash path\",\n type:\"xpub\",\n networks: ['bip122:000007d91d1254d60e2dd1ae58038307'],\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 5, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 5, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('ripple:4109c6f2045fc7eff4cde8f9905d19c2') >= 0){\n let entry:any = {\n note:\"Default ripple path\",\n type:\"address\",\n networks: ['ripple:4109c6f2045fc7eff4cde8f9905d19c2'],\n blockchain: 'ripple',\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 144, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 144, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n }\n output.push(entry)\n }\n\n if(blockchains.indexOf('bip122:0000000000196a45') >= 0){\n let entry:any = {\n note:\"Default zcash path\",\n type:\"address\",\n networks: ['bip122:0000000000196a45'],\n blockchain: 'zcash',\n script_type:\"p2pkh\",\n available_scripts_types:['p2pkh'],\n addressNList: [0x80000000 + 44, 0x80000000 + 133, 0x80000000 + 0],\n addressNListMaster: [0x80000000 + 44, 0x80000000 + 133, 0x80000000 + 0, 0, 0],\n curve: 'secp256k1',\n showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n }\n output.push(entry)\n }\n\n return output\n}\n\n\n// {\n// note:\"\",\n// type:\"address\",\n// script_type:\"binance\",\n// available_scripts_types:['binance'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 714, 0x80000000 + 0, 0 , 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Binance',\n// symbol: 'BNB',\n// network: 'BNB',\n// },\n// {\n// note:\" Default ATOM path \",\n// type:\"address\",\n// script_type:\"cosmos\",\n// available_scripts_types:['cosmos'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Cosmos',\n// symbol: 'ATOM',\n// network: 'ATOM',\n// },\n\n//TODO More paths\n// [\n//\n// // {\n// // note:\"Bitcoin account 1\",\n// // coin: 'Bitcoin',\n// // symbol: 'BTC',\n// // network: 'BTC',\n// // script_type:\"p2pkh\",\n// // available_scripts_types:['p2pkh'],\n// // type:\"xpub\",\n// // addressNList: [0x80000000 + 44, 0x80000000 + 0, 0x80000000 + 1],\n// // curve: 'secp256k1',\n// // showDisplay: false // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// // },\n// // {\n// // note:\"bitcoin segwit bip49\",\n// // coin: 'Bitcoin',\n// // symbol: 'BTC',\n// // network: 'BTC',\n// // script_type:\"p2pkh\",\n// // available_scripts_types:['p2pkh'],\n// // type:\"xpub\",\n// // addressNList: [0x80000000 + 49, 0x80000000 + 0, 0x80000000 + 0],\n// // curve: 'secp256k1',\n// // showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// // scriptType: 'p2sh'\n// // },\n// {\n// note:\"Standard bitcoin cash default path\",\n// type:\"xpub\",\n// script_type:\"p2pkh\",\n// available_scripts_types:['p2pkh'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 145, 0x80000000 + 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'BitcoinCash',\n// symbol: 'BCH',\n// network: 'BCH',\n// },\n// {\n// note:\"Default litecoin path\",\n// coin: 'Litecoin',\n// symbol: 'LTC',\n// network: 'LTC',\n// script_type:\"p2pkh\",\n// available_scripts_types:['p2pkh'],\n// type:\"xpub\",\n// addressNList: [0x80000000 + 44, 0x80000000 + 2, 0x80000000 + 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// },\n// {\n// note:\"Default dogecoin path\",\n// coin: 'Dogecoin',\n// symbol: 'DOGE',\n// network: 'DOGE',\n// script_type:\"p2pkh\",\n// available_scripts_types:['p2pkh'],\n// type:\"xpub\",\n// addressNList: [0x80000000 + 44, 0x80000000 + 3, 0x80000000 + 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// },\n// {\n// note:\"Default dash path\",\n// coin: 'Dash',\n// symbol: 'DASH',\n// network: 'DASH',\n// script_type:\"p2pkh\",\n// available_scripts_types:['p2pkh'],\n// type:\"xpub\",\n// addressNList: [0x80000000 + 44, 0x80000000 + 5, 0x80000000 + 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// },\n// {\n// note:\" ETH primary (default)\",\n// symbol: 'ETH',\n// network: 'ETH',\n// script_type:\"eth\",\n// available_scripts_types:['eth'],\n// type:\"address\",\n// addressNList: [0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0,0,0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Ethereum'\n// },\n// // {\n// // note:\" ETH primary (ledger)\",\n// // symbol: 'ETH',\n// // network: 'ETH',\n// // script_type:\"eth\",\n// // available_scripts_types:['eth'],\n// // type:\"address\",\n// // addressNList: [0x80000000 + 44, 0x80000000 + 60, 0],\n// // curve: 'secp256k1',\n// // showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// // coin: 'Ethereum'\n// // },\n// {\n// note:\"Fio primary\",\n// type:\"address\",\n// script_type:\"fio\",\n// available_scripts_types:['fio'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 235, 0x80000000 + 0, 0, 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Fio',\n// symbol: 'FIO',\n// network: 'FIO',\n// },\n// {\n// note:\" Default eos path \",\n// type:\"address\",\n// script_type:\"eos\",\n// available_scripts_types:['eos'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 194, 0x80000000 + 0, 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Eos',\n// symbol: 'EOS',\n// network: 'EOS',\n// },\n// {\n// note:\"\",\n// type:\"address\",\n// script_type:\"binance\",\n// available_scripts_types:['binance'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 714, 0x80000000 + 0, 0 , 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Binance',\n// symbol: 'BNB',\n// network: 'BNB',\n// },\n// {\n// note:\" Default ATOM path \",\n// type:\"address\",\n// script_type:\"cosmos\",\n// available_scripts_types:['cosmos'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0, 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Cosmos',\n// symbol: 'ATOM',\n// network: 'ATOM',\n// },\n// {\n// note:\" Default RUNE path \",\n// type:\"address\",\n// script_type:\"tthor\",\n// available_scripts_types:['tthor'],\n// addressNList: [0x80000000 + 44, 0x80000000 + 931, 0x80000000 + 0, 0, 0],\n// curve: 'secp256k1',\n// showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// coin: 'Thorchain',\n// symbol: 'RUNE',\n// network: 'RUNE',\n// },\n// // {\n// // note:\"\",\n// // type:\"address\",\n// // addressNList: [0x80000000 + 44, 0x80000000 + 118, 0x80000000 + 0, 0x80000000 + 0],\n// // curve: 'secp256k1',\n// // showDisplay: false, // Not supported by TrezorConnect or Ledger, but KeepKey should do it\n// // coin: 'Cardano',\n// // symbol: 'ADA'\n// // }\n//\n// ]\n",
|
|
17
|
+
"\nconst TAG = \" | coin tools | \"\nconst log = require('@pioneer-platform/loggerdog')()\n// const bitcoin = require(\"bitcoinjs-lib\");\n// const ethUtils = require('ethereumjs-util');\n// const ripemd160 = require(\"crypto-js/ripemd160\")\n// const CryptoJS = require(\"crypto-js\")\n// const sha256 = require(\"crypto-js/sha256\")\n// const bech32 = require(`bech32`)\n//import BigNumber from 'bignumber.js'\nconst b58 = require('bs58check');\n\n/*\n Rango Blockchain naming conventions\n bitcoin -> BTC\n ethereum -> ETH\n cosmos -> COSMOS\n osmosis -> OSMOSIS\n\n */\n\nexport const getRangoBlockchainName = function(blockchain:string){\n try{\n let rangoName\n switch (blockchain) {\n case \"bitcoin\":\n rangoName = \"BTC\";\n break;\n case \"bitcoincash\":\n rangoName = \"BCH\";\n break;\n case \"avalanche\":\n rangoName = \"AVAX_CCHAIN\";\n break;\n case \"ethereum\":\n rangoName = \"ETH\";\n break;\n case \"cosmos\":\n rangoName = \"COSMOS\";\n break;\n case \"thorchain\":\n rangoName = \"THOR\";\n break;\n case \"osmosis\":\n rangoName = \"OSMOSIS\";\n break;\n default:\n throw Error(\"Unknown rango name for blockchain\"+blockchain)\n }\n return rangoName\n }catch(e){\n log.error(e)\n }\n}\n\n/*\n Swap protocals\n\n */\n\nexport const getSwapProtocals = function(asset:string, network:string){\n try{\n let output = []\n if(network === 'ETH'){\n output.push('0x')\n }\n let thorchainAssets = [ 'BCH', 'BNB', 'BTC', 'ETH', 'LTC' ]\n if(thorchainAssets.indexOf(asset) >= 0){\n output.push('thorchain')\n }\n let osmoAssets = [ 'OSMO', 'ATOM' ]\n if(osmoAssets.indexOf(asset) >= 0){\n output.push('osmosis')\n }\n return output\n }catch(e){\n log.error(e)\n }\n}\n\n\n/*\n TODO SS caip decoder\n\n */\n\n\n/*\n Thorchain string parser\n\n */\n\nexport const parseThorchainAssetString = function(input:string){\n try{\n let parts = input.split(\".\")\n let network = parts[0]\n let asset\n let symbol\n let contract\n if(parts[1].indexOf(\"-\") >= 0){\n //is Token\n let parts2 = parts[1].split(\"-\")\n contract = parts2[1]\n asset = parts2[0]\n symbol = parts2[0]\n }else{\n //is Native asset\n asset = parts[0]\n symbol = parts[0]\n }\n return {\n asset,\n symbol,\n network,\n contract\n }\n }catch(e){\n log.error(e)\n }\n}\n\nexport enum HDWALLETS {\n 'pioneer',\n 'trezor',\n 'keepkey',\n 'ledger'\n}\n\nexport const THORCHAIN_NETWORKS = [\n {\n \"symbol\": \"ARB\",\n \"image\": \"https://pioneers.dev/coins/arbitrum.png\"\n },\n {\n \"symbol\": \"AVAX\",\n \"image\": \"https://pioneers.dev/coins/avalanche.png\"\n },\n {\n \"symbol\": \"BNB\",\n \"image\": \"https://pioneers.dev/coins/binance.png\"\n },\n {\n \"symbol\": \"BSC\",\n \"image\": \"https://pioneers.dev/coins/binance.png\"\n },\n {\n \"symbol\": \"BTC\",\n \"image\": \"https://pioneers.dev/coins/bitcoin.png\"\n },\n {\n \"symbol\": \"BCH\",\n \"image\": \"https://pioneers.dev/coins/bitcoincash.png\"\n },\n {\n \"symbol\": \"GAIA\",\n \"image\": \"https://pioneers.dev/coins/cosmos.png\"\n },\n {\n \"symbol\": \"DOGE\",\n \"image\": \"https://pioneers.dev/coins/dogecoin.png\"\n },\n {\n \"symbol\": \"ETH\",\n \"image\": \"https://pioneers.dev/coins/ethereum.png\"\n },\n {\n \"symbol\": \"LTC\",\n \"image\": \"https://pioneers.dev/coins/litecoin.png\"\n },\n {\n \"symbol\": \"OP\",\n \"image\": \"https://pioneers.dev/coins/optimism.png\"\n },\n {\n \"symbol\": \"MATIC\",\n \"image\": \"https://pioneers.dev/coins/polygon.png\"\n },\n {\n \"symbol\": \"THOR\",\n \"image\": \"https://pioneers.dev/coins/undefined.png\"\n }\n]\n\n/*\n\n\n*/\n\nexport const UTXO_COINS = [\n 'BTC',\n 'BCH',\n 'DASH',\n 'DGB',\n 'DOGE',\n 'LTC',\n 'TEST'\n]\n\n/*\n Name maps\n */\nexport const COIN_MAP = {\n arbitrum: \"ARB\",\n bitcoin: \"BTC\",\n cosmos: \"ATOM\",\n osmosis: \"OSMO\",\n testnet: \"TEST\",\n bitcoincash: \"BCH\",\n litecoin: \"LTC\",\n dash: \"DASH\",\n digibyte: \"DGB\",\n dogecoin: \"DOGE\",\n ethereum: \"ETH\",\n avalanche: \"AVAX\",\n polygon: \"MATIC\",\n cardano: \"ADA\",\n binance: \"BNB\",\n thorchain: \"RUNE\",\n eos: \"EOS\",\n ripple: \"XRP\",\n fio: \"FIO\",\n};\n\nexport const COIN_MAP_LONG = {\n BTC: \"bitcoin\",\n ATOM: \"cosmos\",\n GAIA: \"cosmos\",\n ARB: \"arbitrum\",\n OSMO: \"osmosis\",\n BASE: \"base\",\n OP: \"optimism\",\n TEST: \"testnet\",\n BCH: \"bitcoincash\",\n BSC: \"binance\",\n LTC: \"litecoin\",\n DASH: \"dash\",\n DGB: \"digibyte\",\n DOGE: \"dogecoin\",\n RUNE: \"thorchain\",\n THOR: \"thorchain\",\n MAYA: \"mayachain\",\n CACAO: \"mayachain\",\n ETH: \"ethereum\",\n AVAX: \"avalanche\",\n ADA: \"cardano\",\n MATIC: \"polygon\",\n BNB: \"binance\",\n EOS: \"eos\",\n XRP: \"ripple\",\n FIO: \"fio\",\n};\n\nexport const COIN_MAP_LONG_XCHAIN = {\n BTC: \"bitcoin\",\n ATOM: \"cosmos\",\n OSMO: \"osmosis\",\n TEST: \"testnet\",\n BCH: \"bitcoincash\",\n LTC: \"litecoin\",\n DASH: \"dash\",\n DGB: \"digibyte\",\n DOGE: \"dogecoin\",\n RUNE: \"thorchain\",\n ETH: \"ethereum\",\n ADA: \"cardano\",\n MATIC: \"polygon\",\n BNB: \"binance\",\n EOS: \"eos\",\n FIO: \"fio\",\n};\n\n\n\nexport const COIN_MAP_KEEPKEY_LONG = {\n BTC: \"Bitcoin\",\n GAIA: \"Cosmos\",\n ATOM: \"Cosmos\",\n ARB: \"Arbitrum\",\n OSMO: \"Osmosis\",\n TEST: \"Testnet\",\n BCH: \"BitcoinCash\",\n LTC: \"Litecoin\",\n DASH: \"Dash\",\n DGB: \"DigiByte\",\n DOGE: \"Dogecoin\",\n RUNE: \"Thorchain\",\n THOR: \"Thorchain\",\n ETH: \"Ethereum\",\n ADA: \"Cardano\",\n MATIC: \"Polygon\",\n BSC: \"Binance\",\n BNB: \"Binance\",\n AVAX: \"Avalanche\",\n EOS: \"Eos\",\n FIO: \"Fio\",\n ZEC: 'Zcash',\n};\n\nexport const SLIP_44_BY_LONG:any = {\n bitcoin: 0,\n testnet: 1,\n bitcoincash: 145,\n bitcoingold: 156,\n litecoin: 2,\n dash: 5,\n digibyte: 20,\n dogecoin: 3,\n bitcoinsv: 236,\n ethereum: 60,\n avalanche: 60,\n cosmos: 118,\n osmosis: 118,\n binance: 714,\n ripple: 144,\n eos: 194,\n fio: 235,\n thorchain: 931,\n cardano: 1815,\n secret: 529,\n terra: 931,\n kava: 459,\n};\n\nexport const GET_NETWORK_NAME = function(network:string){\n let networkName\n switch (network) {\n case \"1\":\n networkName = \"Main\";\n break;\n case \"2\":\n networkName = \"Morden\";\n break;\n case \"3\":\n networkName = \"Ropsten\";\n break;\n case \"4\":\n networkName = \"Rinkeby\";\n break;\n case \"42\":\n networkName = \"Kovan\";\n break;\n default:\n networkName = \"Unknown\";\n }\n return networkName\n}\n\nconst HARDENED = 0x80000000;\nexport function bip32Like(path: string): boolean {\n if (path == \"m/\") return true;\n return /^m(((\\/[0-9]+h)+|(\\/[0-9]+H)+|(\\/[0-9]+')*)((\\/[0-9]+)*))$/.test(path);\n}\n\nexport function bip32ToAddressNList(path: string): number[] {\n if (!bip32Like(path)) {\n throw new Error(`Not a bip32 path: '${path}'`);\n }\n if (/^m\\//i.test(path)) {\n path = path.slice(2);\n }\n const segments = path.split(\"/\");\n if (segments.length === 1 && segments[0] === \"\") return [];\n const ret = new Array(segments.length);\n for (let i = 0; i < segments.length; i++) {\n const tmp = /(\\d+)([hH\\']?)/.exec(segments[i]);\n if (tmp === null) {\n throw new Error(\"Invalid input\");\n }\n ret[i] = parseInt(tmp[1], 10);\n if (ret[i] >= HARDENED) {\n throw new Error(\"Invalid child index\");\n }\n if (tmp[2] === \"h\" || tmp[2] === \"H\" || tmp[2] === \"'\") {\n ret[i] += HARDENED;\n } else if (tmp[2].length !== 0) {\n throw new Error(\"Invalid modifier\");\n }\n }\n return ret;\n}\n\nexport function addressNListToBIP32(address: number[]): string {\n return `m/${address.map((num) => (num >= HARDENED ? `${num - HARDENED}'` : num)).join(\"/\")}`;\n}\n\nexport function getNativeAssetForBlockchain(blockchain:string){\n // @ts-ignore\n if(COIN_MAP[blockchain.toLowerCase()]){\n // @ts-ignore\n return COIN_MAP[blockchain.toLowerCase()]\n } else {\n throw Error(\" Unknown blockchain! \"+blockchain)\n }\n}\n\n\nexport const supportedBlockchains:any = [];\nexport const supportedAssets:any = [];\n\nsupportedBlockchains.push(\n \"Bitcoin\",\n \"Ethereum\",\n \"Thorchain\",\n \"Secret\",\n \"Kava\",\n \"Terra\",\n \"BinanceSmartChain\",\n \"Cardano\",\n \"Eos\",\n \"Fio\",\n \"Cosmos\",\n \"Osmosis\",\n \"Binance\",\n \"BitcoinCash\",\n \"Litecoin\",\n \"Avalanche\"\n);\n\nsupportedAssets.push(\n \"BTC\",\n \"ETH\",\n \"RUNE\",\n \"SCRT\",\n \"KAVA\",\n \"LUNA\",\n \"BNB\",\n \"ADA\",\n \"EOS\",\n \"FIO\",\n \"ATOM\",\n \"OSMO\",\n \"BNB\",\n \"BCH\",\n \"LTC\",\n \"AVAX\"\n);\n\n// (only 1 native assets for each enabled blockchain)\nexport const COIN_ICONS_BY_SYMBOL = {\n BTC:\"https://assets.coingecko.com/coins/images/1/small/bitcoin.png?1547033579\",\n ETH:\"https://assets.coingecko.com/coins/images/279/large/ethereum.png?1595348880\",\n LTC:\"https://assets.coingecko.com/coins/images/16724/thumb/ltc.png\",\n BNB:\"https://assets.coingecko.com/coins/images/825/thumb/binance-coin-logo.png?1547034615\",\n BCH:\"https://assets.coingecko.com/coins/images/780/thumb/bitcoin-cash-circle.png?1594689492\",\n OSMO:\"https://assets.coingecko.com/coins/images/16724/thumb/osmo.png\",\n ATOM:\"https://assets.coingecko.com/coins/images/16724/thumb/atom.png\",\n FIO:\"https://assets.coingecko.com/coins/images/16724/thumb/fio.png\",\n EOS:\"https://assets.coingecko.com/coins/images/16724/thumb/eos.png\",\n RUNE:\"https://assets.coingecko.com/coins/images/6595/thumb/RUNE.png\",\n ADA:\"https://assets.coingecko.com/coins/images/16724/thumb/ada.png\",\n LUNA:\"https://assets.coingecko.com/coins/images/8284/thumb/luna1557227471663.png?1567147072\",\n KAVA:\"https://assets.coingecko.com/coins/images/16724/thumb/kava.png\",\n SCRT:\"https://assets.coingecko.com/coins/images/16724/thumb/scrt.png\",\n}\n\n//TODO add more flags by networks\nconst NETWORKS:any = {\n btc: {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bc',\n bip32: {\n public: 0x0488b21e,\n private: 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n },\n bch: {\n messagePrefix: '\\x18Bitcoin Cash Signed Message:\\n',\n bip32: {\n public: 0x0488B21e,\n private: 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n },\n test: {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'tb',\n bip32: {\n public: 0x043587cf,\n private: 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n },\n ltc: {\n messagePrefix: '\\x19Litecoin Signed Message:\\n',\n bip32: {\n public: 0x019da462,\n private: 0x019d9cfe\n },\n pubKeyHash: 0x30,\n scriptHash: 0x32,\n wif: 0xb0\n },\n doge: {\n messagePrefix: '\\x19Dogecoin Signed Message:\\n',\n bip32: {\n public: 0x02FD3929,\n private: 0x02FD3955\n },\n pubKeyHash: 0x1e,\n scriptHash: 0x16,\n wif: 0x9e\n },\n dash: {\n messagePrefix: 'unused',\n bip32: {\n public: 0x0488b21e,\n private: 0x0488ade4\n },\n pubKeyHash: 0x4c,\n scriptHash: 0x10,\n wif: 0xcc\n },\n dgb: {\n messagePrefix: '\\x18DigiByte Signed Message:\\n',\n bip32: {\n public: 0x0488B21E,\n private: 0x0488ADE4,\n },\n pubKeyHash: 0x1e,\n scriptHash: 0x3f,\n wif: 0x80,\n },\n rdd: {\n messagePrefix: '\\x18Reddcoin Signed Message:\\n',\n bip32: {\n public: 0x0488B21E,\n private: 0x0488ADE4,\n },\n pubKeyHash: 0x3d,\n scriptHash: 0x05,\n wif: 0xbd,\n },\n testnet: {\n base: {\n messagePrefix: \"\\x18Bitcoin Signed Message:\\n\",\n bech32: \"tb\",\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef,\n },\n p2sh: {\n bip32: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n },\n p2pkh: {\n bip32: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n },\n \"p2sh-p2wpkh\": {\n bip32: {\n public: 0x044a5262,\n private: 0x044a4e28,\n },\n },\n p2wpkh: {\n bip32: {\n public: 0x045f1cf6,\n private: 0x045f18bc,\n },\n },\n },\n}\n\nexport enum PoSchains {\n 'eos',\n 'cosmos',\n 'osmosis',\n 'binance',\n 'fio',\n 'terra',\n 'kava',\n 'secret'\n}\n\nexport const CURRENCY_DECIMALS:any = {\n 'btc': 8,\n 'rune': 8,\n 'dash': 8,\n 'atom': 6,\n 'osmo': 6,\n 'ltc': 8,\n 'bch': 8,\n 'doge': 8,\n 'eth': 18,\n 'gnt': 18,\n 'usdt': 6,\n 'trx': 6,\n 'bnb': 8,\n 'poly': 18,\n 'gno': 18,\n 'sngls': 0,\n 'icn': 18,\n 'dgd': 9,\n 'mln': 18,\n 'rep': 18,\n 'swt': 18,\n 'wings': 18,\n 'trst': 6,\n 'rlc': 9,\n 'gup': 3,\n 'ant': 18,\n 'bat': 18,\n 'bnt': 18,\n 'snt': 18,\n 'nmr': 18,\n 'edg': 0,\n 'eos': 18,\n 'cvc': 8,\n 'link': 18,\n 'knc': 18,\n 'mtl': 8,\n 'pay': 18,\n 'fun': 8,\n 'dnt': 18,\n 'zrx': 18,\n '1st': 18,\n 'omg': 18,\n 'salt': 8,\n 'rcn': 18,\n 'storj': 8,\n 'zil': 12,\n 'mana': 18,\n 'tusd': 18,\n 'ae': 18,\n 'dai': 18,\n 'mkr': 18\n}\n\nexport function getPrecision(asset:string){\n if(CURRENCY_DECIMALS[asset.toLowerCase()]){\n return CURRENCY_DECIMALS[asset.toLowerCase()]\n } else {\n throw Error(\" Unknown asset! \"+asset)\n }\n}\n\nexport function nativeToBaseAmount(asset:string,amount:number){\n if(!CURRENCY_DECIMALS[asset.toLowerCase()]) throw Error(\"Unknown asset!\")\n let output:any = amount / Math.pow(10, CURRENCY_DECIMALS[asset.toLowerCase()]);\n return output\n}\n\nexport function baseAmountToNative(asset:string,amount:number){\n if(!CURRENCY_DECIMALS[asset.toLowerCase()]) throw Error(\"Unknown asset!\")\n let output:any = amount * Math.pow(10, CURRENCY_DECIMALS[asset.toLowerCase()]);\n output = parseInt(output)\n return output\n}\n\nexport const stakingCoins = [\"EOS\", \"ATOM\"];\n\nexport const segwitCoins = [\"Bitcoin\", \"Testnet\", \"BitcoinGold\", \"Litecoin\"];\n\nexport function getExplorerUrl(network:string,token:string, testnet:boolean){\n if(testnet){\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://blockstream.info/testnet'\n break\n case 'ethereum':\n href = 'https://ropsten.etherscan.io/'\n break\n }\n return href\n }else{\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://blockstream.info'\n break\n case 'ethereum':\n href = 'https://etherscan.io'\n break\n case 'bitcoinCash':\n href = 'https://blockchair.com/bitcoin-cash'\n break\n case 'binance':\n href = 'https://explorer.binance.org'\n break\n case 'thorchain':\n href = 'https://thorchain.net'\n break\n case 'cosmos':\n href = 'https://www.mintscan.io'\n break\n case 'osmosis':\n href = 'https://www.mintscan.io'\n break\n case 'dash':\n return `https://chainz.cryptoid.info/dash`\n case 'doge':\n return `https://dogechain.info`\n }\n return href\n }\n}\n\nexport function getExplorerAddressUrl(address:string,network:string,token:string, testnet:boolean){\n if(testnet){\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://blockstream.info/testnet/address/'+address\n break\n case 'ethereum':\n href = 'https://ropsten.etherscan.io/address/'+address\n break\n }\n return href\n }else{\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://www.blockchain.com/'\n break\n case 'ethereum':\n href = 'https://etherscan.io'\n break\n case 'bitcoinCash':\n href = 'https://blockchair.com/bitcoin-cash'\n break\n case 'binance':\n href = 'https://explorer.binance.org'\n break\n case 'cosmos':\n href = 'https://www.mintscan.io'\n break\n case 'dash':\n return `https://chainz.cryptoid.info/dash`\n case 'doge':\n return `https://dogechain.info`\n }\n return href\n }\n}\n\nexport function needsMemoByNetwork(network:string){\n let needsMemo = false\n switch (network) {\n case 'thorchain':\n needsMemo = true\n break\n case 'osmosis':\n needsMemo = true\n break\n case 'cosmos':\n needsMemo = true\n break\n }\n return needsMemo\n}\n\nexport function getExplorerTxUrl(network:string,txid:string, testnet:boolean){\n if(testnet){\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://blockstream.info/testnet/tx/'+txid\n break\n case 'ethereum':\n href = 'https://ropsten.etherscan.io/tx/'+txid\n break\n }\n return href\n }else{\n let href\n switch (network) {\n case 'bitcoin':\n href = 'https://blockstream.info/tx/'+txid\n break\n case 'ethereum':\n href = 'https://etherscan.io/tx/'+txid\n break\n case 'bitcoinCash':\n href = 'https://blockchair.com/bitcoin-cash/tx/'+txid\n break\n case 'binance':\n href = 'https://explorer.binance.org/tx/'+txid\n break\n case 'thorchain':\n href = 'https://thorchain.net/tx/'+txid\n break\n case 'osmosis':\n href = 'https://www.mintscan.io/osmosis/txs/'+txid\n break\n case 'cosmos':\n href = 'https://www.mintscan.io/cosmos/txs/'+txid\n break\n case 'dash':\n return `https://chainz.cryptoid.info/dash`+txid\n case 'doge':\n return `https://dogechain.info/tx/`+txid\n }\n return href\n }\n}\n\n\n// All known xpub formats\nconst prefixes:any = new Map(\n [\n ['xpub', '0488b21e'],\n ['ypub', '049d7cb2'],\n ['Ypub', '0295b43f'],\n ['zpub', '04b24746'],\n ['Zpub', '02aa7ed3'],\n ['tpub', '043587cf'],\n ['upub', '044a5262'],\n ['Upub', '024289ef'],\n ['vpub', '045f1cf6'],\n ['Vpub', '02575483'],\n ['Ltub', '02575483'],\n ]\n);\n\nenum AddressTypes {\n \"bech32\",\n \"legacy\"\n}\n\nexport function xpubConvert(xpub:string,target:string){\n if (!prefixes.has(target)) {\n return \"Invalid target version\";\n }\n\n // trim whitespace\n xpub = xpub.trim();\n\n var data = b58.decode(xpub);\n data = data.slice(4);\n data = Buffer.concat([Buffer.from(prefixes.get(target),'hex'), data]);\n return b58.encode(data);\n}\n",
|
|
18
|
+
"/*\n Validate universial addresses\n\n */\nconst log = require('@pioneer-platform/loggerdog')()\n\nimport { getPaths, blockchains } from './paths'\nimport { COIN_MAP_KEEPKEY_LONG, addressNListToBIP32 } from './coins'\n\nexport enum Coin {\n BTC = \"Bitcoin\",\n ATOM = \"Cosmos\",\n ARB = \"Arbitrum\",\n OSMO = \"Osmosis\",\n TEST = \"Testnet\",\n BCH = \"BitcoinCash\",\n LTC = \"Litecoin\",\n DASH = \"Dash\",\n DGB = \"DigiByte\",\n DOGE = \"Dogecoin\",\n RUNE = \"Thorchain\",\n ETH = \"Ethereum\",\n ADA = \"Cardano\",\n MATIC = \"Polygon\",\n BNB = \"Binance\",\n AVAX = \"Avalanche\",\n EOS = \"Eos\",\n FIO = \"Fio\",\n}\n\nexport interface AddressInfo {\n address_n: number[];\n path: string;\n coin: Coin; // Using enum type here\n script_type: string;\n curve: string;\n show_display: boolean;\n}\n\nlet EVM_COINS = [\"AVAX\", \"ARB\", \"MATIC\", \"AVAX\",\"BASE\"]\n\nexport const addressInfoForCoin = (symbol: string, isTestnet?: boolean, scriptType?:string, showDisplay?:boolean, path?:any): any => {\n if(!isTestnet) isTestnet = false\n if(!showDisplay) showDisplay = false\n const paths = getPaths(blockchains);\n console.log(\"paths: \", paths)\n //thorswap hack\n if(symbol === \"THOR\") symbol = \"RUNE\"\n if(symbol === \"GAIA\") symbol = \"ATOM\"\n //if any EVM\n if(EVM_COINS.includes(symbol)) symbol = \"ETH\"\n \n // log.info('paths', paths)\n symbol = symbol.toUpperCase()\n const blockchainEntries = paths.filter((entry: any) => entry.symbol === symbol.toUpperCase());\n // log.info('blockchainEntries', blockchainEntries)\n if (!blockchainEntries) {\n throw new Error(`Blockchain symbol '${symbol}' not found.`);\n }\n let entry: any;\n if(scriptType && blockchainEntries.length > 1){\n //filter path by script type\n entry = blockchainEntries.find((entry: any) => entry.script_type === scriptType);\n } else {\n entry = blockchainEntries[0]\n }\n //validate script type options\n if(!entry) throw new Error(`Blockchain symbol '${symbol}' not found.`);\n const addressInfo = {\n address_n: entry.addressNListMaster,\n path:addressNListToBIP32(entry.addressNListMaster),\n // @ts-ignore\n coin: COIN_MAP_KEEPKEY_LONG[symbol.toUpperCase()],\n script_type: scriptType || entry.script_type,\n showDisplay: entry.showDisplay\n };\n\n // if (isTestnet && blockchainEntry.testnet) {\n // addressInfo.addressNList[1] += 1; // Incrementing the account index for testnet\n // }\n\n return addressInfo;\n};\n",
|
|
19
|
+
"/*\n Thorchain Memo Toolkit\n ----------------------\n*/\n\nconst assetShortCodeMap:any = {\n 'r': 'THOR.RUNE',\n 'b': 'BTC.BTC',\n 'e': 'ETH.ETH',\n 'n': 'BNB.BNB',\n 'g': 'GAIA.ATOM',\n 'd': 'DOGE.DOGE',\n 'l': 'LTC.LTC',\n 'c': 'BCH.BCH',\n 'a': 'AVAX.AVAX',\n 's': 'BSC.BNB',\n 'LUNA': 'TERRA.LUNA',\n 'ATOM': 'GAIA.ATOM',\n 'BNB': 'BNB.BNB',\n 'BTC': 'BTC.BTC',\n 'LTC': 'LTC.LTC',\n 'BCH': 'BCH.BCH',\n 'DOGE': 'DOGE.DOGE',\n 'ETH': 'ETH.ETH',\n 'AVAX': 'AVAX.AVAX',\n '67C': 'BNB.RUNE-67C',\n 'B1A': 'BNB.RUNE-B1A',\n 'TOR': 'THOR.TOR',\n 'THORBTC': 'THOR.BTC'\n};\n\n// Utility function to interpret shortened asset names\nfunction interpretAssetShortCode(shortCode:string) {\n return assetShortCodeMap[shortCode] || shortCode;\n}\n\n// Define the base transaction interface\ninterface BaseTx {\n type: string;\n asset: string;\n destAddr: string;\n}\n\n// Specific transaction interfaces\ninterface SwapTx extends BaseTx {\n lim?: string; // Keep as string to avoid precision loss\n interval?: string; // Stream interval in seconds\n quantity?: number; // Deprecated - not in standard memo\n affiliate?: string;\n fee?: string; // Basis points as string\n dexAggregatorAddr?: string;\n finalAssetAddr?: string;\n minAmountOut?: string; // Keep as string to avoid precision loss\n}\n\ninterface DepositTx extends BaseTx {\n affiliate?: string;\n fee?: number;\n}\n\ninterface WithdrawTx extends BaseTx {\n pool: string;\n basisPoints?: number;\n}\n\ninterface LoanTx extends BaseTx {\n minOut?: number;\n affiliate?: string;\n fee?: number;\n}\n\ninterface LoanOpenTx extends BaseTx {\n minOut?: number;\n affiliate?: string;\n fee?: number;\n}\n\ninterface LoanRepayTx extends BaseTx {\n minOut?: number;\n}\n\ninterface AddLiquidityTx extends BaseTx {\n pairedAddr?: string;\n affiliate?: string;\n fee?: number;\n}\n\ninterface WithdrawLiquidityTx extends BaseTx {\n basisPoints: number;\n singleAsset?: string;\n}\n\ninterface BondTx extends BaseTx {\n nodeAddr: string;\n provider?: string;\n fee?: number;\n}\n\ninterface UnbondTx extends BaseTx {\n nodeAddr: string;\n amount: number;\n provider?: string;\n}\n\ninterface MigrateTx extends BaseTx {\n blockHeight: number;\n}\n\ninterface NoOpTx extends BaseTx {\n noVault?: boolean;\n}\n\n// Additional interface for Aggregate Swap Transactions\ninterface AggregateSwapTx extends SwapTx {\n dexAggregatorAddr: string;\n finalAssetAddr: string;\n minAmountOut: string; // Keep as string to match SwapTx\n}\n\n// Utility function to interpret shortened parts (parsing only, no sci notation)\nfunction interpretShortenedPart(part:any) {\n // No scientific notation in THORChain memos - keep as is\n return part;\n}\n\n// Function to build an Aggregate Swap transaction memo\nfunction buildAggregateSwapMemo(tx: AggregateSwapTx): string {\n const limInterval = `${tx.lim || ''}/${tx.interval || ''}`;\n const parts = [\n 'SWAP',\n tx.asset,\n tx.destAddr,\n limInterval,\n tx.affiliate || '',\n tx.fee || '',\n tx.dexAggregatorAddr,\n tx.finalAssetAddr,\n tx.minAmountOut || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// More transaction types (LoanRepaymentTx, LiquidityTx, etc.) can be defined similarly\n\n// Utility function to check and truncate memo length\nfunction truncateMemo(memo: string, limit: number = 250): string {\n const buffer = Buffer.from(memo, 'utf-8');\n if (buffer.length > limit) {\n throw new Error(`Memo exceeds the ${limit} byte limit.`);\n }\n return memo;\n}\n\n// Removed toScientificNotation - THORChain requires plain integers\n\n// Function to build a Swap transaction memo\nfunction buildSwapMemo(tx: SwapTx): string {\n // Always emit fully-qualified CHAIN.SYMBOL - never shorthand\n const assetFQ = tx.asset; // e.g. 'BTC.BTC', 'ETH.ETH'\n\n let parts = ['=', assetFQ, tx.destAddr];\n\n // Handle lim and interval (no quantity in standard swap)\n if (tx.lim !== undefined || tx.interval !== undefined) {\n // Integers only, no sci-notation\n const lim = tx.lim !== undefined ? String(tx.lim) : '';\n const interval = tx.interval !== undefined ? String(tx.interval) : '';\n parts.push(`${lim}${interval ? '/' + interval : ''}`);\n } else {\n parts.push(''); // Add empty string for missing lim/interval\n }\n\n // Base swap supports optional affiliate tag + bp (basis points 0..1000)\n if (tx.affiliate !== undefined) parts.push(tx.affiliate);\n if (tx.fee !== undefined) parts.push(String(tx.fee)); // basis points\n\n let memo = parts.join(':');\n memo = memo.replace(/:{2,}/g, '::').replace(/:+$/, '');\n return truncateMemo(memo);\n}\n\n// Function to build a Deposit transaction memo\nfunction buildDepositMemo(tx: DepositTx): string {\n const feeValue = tx.fee ?? 0; // Use 0 as a default if tx.fee is undefined\n const fee = isNaN(feeValue) ? '0.05' : feeValue.toString();\n const affiliate = tx.affiliate || 'thor1affiliate'; // Default affiliate\n const parts = [\n 'DEPOSIT',\n tx.asset,\n tx.destAddr,\n affiliate,\n fee\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// Function to build a Withdraw transaction memo\nfunction buildWithdrawMemo(tx: WithdrawTx): string {\n const parts = [\n 'WITHDRAW',\n tx.asset,\n tx.destAddr,\n tx.pool,\n tx.basisPoints?.toString() || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// Function to build a Loan Open transaction memo\nfunction buildLoanOpenMemo(tx: LoanOpenTx): string {\n const feeValue = tx.fee ?? 0; // Use 0 as a default if tx.fee is undefined\n const fee = isNaN(feeValue) ? '0.2' : feeValue.toString();\n const affiliate = tx.affiliate || 'thor1loanaff'; // Default affiliate\n const parts = [\n 'LOAN+',\n tx.asset,\n tx.destAddr,\n tx.minOut?.toString() || '',\n affiliate,\n fee\n ];\n return truncateMemo(parts.join(':'));\n}\n\nfunction buildLoanRepayMemo(tx: LoanRepayTx): string {\n const parts = [\n 'LOAN-',\n tx.asset,\n tx.destAddr,\n tx.minOut?.toString() || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\nfunction buildAddLiquidityMemo(tx: AddLiquidityTx): string {\n const parts = [\n 'ADD',\n tx.asset,\n tx.pairedAddr || '',\n tx.affiliate || '',\n tx.fee?.toString() || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\nfunction buildWithdrawLiquidityMemo(tx: WithdrawLiquidityTx): string {\n const parts = [\n 'WD',\n tx.asset,\n tx.basisPoints.toString(),\n tx.singleAsset || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// Function to build a Bond transaction memo\nfunction buildBondMemo(tx: BondTx): string {\n const parts = [\n 'BOND',\n tx.nodeAddr,\n tx.provider || '',\n tx.fee?.toString() || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// Function to build an Unbond transaction memo\nfunction buildUnbondMemo(tx: UnbondTx): string {\n const parts = [\n 'UNBOND',\n tx.nodeAddr,\n tx.amount.toString(),\n tx.provider || ''\n ];\n return truncateMemo(parts.join(':'));\n}\n\n// Function to build a Migrate transaction memo\nfunction buildMigrateMemo(tx: MigrateTx): string {\n return truncateMemo(`MIGRATE:${tx.blockHeight}`);\n}\n\n// Function to build a No-Operation (NOOP) memo\nfunction buildNoOpMemo(tx: NoOpTx): string {\n const parts = [\n '*NOOP*',\n tx.noVault ? 'NOVAULT' : ''\n ];\n return truncateMemo(parts.filter(part => part).join(':'));\n}\n\n// Main function to create a memo from any transaction type\n// Comprehensive validation result type\nexport interface MemoValidation {\n ok: boolean;\n errors: string[];\n warnings: string[];\n normalized?: string;\n fields?: {\n chain: string;\n symbol: string;\n destination: string;\n limit?: string;\n stream?: string;\n affiliateTag?: string;\n affiliateBP?: number;\n };\n suggestedFix?: string;\n}\n\n// Basic destination sanity check by chain\nfunction basicDestCheck(chain: string, dest: string): string | undefined {\n if (chain === 'BTC') {\n // BTC: accept base58 (1..,3..) or bech32 (bc1.., tb1..)\n const isB58 = /^[123mn][1-9A-HJ-NP-Za-km-z]{24,}$/;\n const isBech32 = /^(bc1|tb1)[a-z0-9]{20,}$/;\n if (!isB58.test(dest) && !isBech32.test(dest)) {\n return 'destination does not look like a valid BTC address';\n }\n }\n if (chain === 'ETH') {\n if (!/^0x[a-fA-F0-9]{40}$/.test(dest)) {\n return 'destination is not a valid Ethereum address';\n }\n }\n if (chain === 'DASH') {\n if (!/^X[1-9A-HJ-NP-Za-km-z]{33}$/.test(dest)) {\n return 'destination does not look like a valid DASH address';\n }\n }\n return undefined;\n}\n\n/**\n * Comprehensive THORChain Swap Memo Validator\n *\n * Validates memos of the form:\n * =:<CHAIN>.<SYMBOL>:<DEST>[:<limit>[/<stream]][:<affiliateTag>:<affiliateBP>]\n *\n * @param memoRaw - The raw memo string to validate\n * @returns MemoValidation object with validation results\n */\nexport function validateThorchainSwapMemo(memoRaw: string): MemoValidation {\n const errors: string[] = [];\n const warnings: string[] = [];\n const MAX_MEMO_LEN = 250;\n const ASCII_SAFE = /^[\\x20-\\x7E]+$/; // printable ASCII (no control chars)\n\n if (!memoRaw || memoRaw.trim() === '') {\n return { ok: false, errors: ['memo is empty'], warnings };\n }\n\n const memo = memoRaw.trim();\n\n if (memo.length > MAX_MEMO_LEN) {\n errors.push(`memo exceeds ${MAX_MEMO_LEN} bytes`);\n }\n if (!ASCII_SAFE.test(memo)) {\n errors.push('memo must be printable ASCII (no control characters)');\n }\n if (!memo.startsWith('=:')) {\n errors.push('memo must start with \"=:<CHAIN>.<SYMBOL>:\"');\n }\n\n // Early exit if start is wrong\n if (errors.length) return { ok: false, errors, warnings };\n\n // Split by colon\n const parts = memo.slice(2).split(':');\n\n if (parts.length < 2) {\n errors.push('memo missing destination segment');\n return { ok: false, errors, warnings };\n }\n\n let chainDotSymbol = parts[0];\n let shorthandFix: string | undefined;\n\n // Check if it's a shorthand that needs expansion\n const maybeSh = chainDotSymbol.toLowerCase();\n if (assetShortCodeMap[maybeSh]) {\n // This is a shorthand - it's invalid in the memo itself\n errors.push(`shorthand \"${chainDotSymbol}\" not allowed - must use full CHAIN.SYMBOL format`);\n shorthandFix = assetShortCodeMap[maybeSh];\n if (shorthandFix) {\n chainDotSymbol = shorthandFix;\n warnings.push(`expanded shorthand \"${parts[0]}\" to \"${shorthandFix}\"`);\n }\n }\n\n const cs = chainDotSymbol.split('.');\n if (cs.length !== 2) {\n errors.push('first segment must be \"<CHAIN>.<SYMBOL>\" (e.g., BTC.BTC)');\n if (cs.length === 1 && !assetShortCodeMap[cs[0].toLowerCase()]) {\n // Not even a valid shorthand\n errors.push(`\"${cs[0]}\" is not a valid chain identifier`);\n }\n return { ok: false, errors, warnings };\n }\n\n const chain = cs[0];\n const symbol = cs[1];\n if (!/^[A-Z0-9]+$/.test(chain) || !/^[A-Z0-9\\-]+$/.test(symbol)) {\n errors.push('CHAIN and SYMBOL must be uppercase alphanumerics');\n }\n\n const destination = parts[1];\n if (!destination) errors.push('destination is empty');\n\n // Optional limit/stream\n let limit: string | undefined;\n let stream: string | undefined;\n if (parts[2] !== undefined && parts[2] !== '') {\n const ls = parts[2].split('/');\n limit = ls[0];\n if (limit && !/^\\d+$/.test(limit)) {\n errors.push('limit must be a non-negative integer');\n }\n if (ls.length > 1) {\n stream = ls[1];\n if (stream && !/^\\d+$/.test(stream)) {\n errors.push('stream must be a non-negative integer');\n }\n }\n }\n\n // Optional affiliate\n let affiliateTag: string | undefined;\n let affiliateBP: number | undefined;\n if (parts[3] !== undefined && parts[3] !== '') {\n affiliateTag = parts[3];\n if (/\\s/.test(affiliateTag)) warnings.push('affiliateTag should not contain spaces');\n }\n if (parts[4] !== undefined && parts[4] !== '') {\n if (!/^\\d+$/.test(parts[4])) {\n errors.push('affiliateBP must be integer 0..1000');\n } else {\n affiliateBP = Number(parts[4]);\n if (affiliateBP < 0 || affiliateBP > 1000) {\n errors.push('affiliateBP out of range (0..1000)');\n }\n }\n }\n\n // Destination validation - convert warnings to errors for critical issues\n const destErr = basicDestCheck(chain, destination);\n if (destErr) {\n // For ETH, a bad address is an error, not a warning\n if (chain === 'ETH' && destination.length < 42) {\n errors.push(destErr);\n } else {\n warnings.push(destErr);\n }\n }\n\n const normalized =\n `=:` +\n `${chain}.${symbol}:` +\n `${destination}` +\n (limit !== undefined || stream !== undefined\n ? `:${limit ?? '0'}${stream !== undefined ? `/${stream}` : ''}`\n : '') +\n (affiliateTag !== undefined\n ? `:${affiliateTag}:${affiliateBP ?? 0}`\n : '');\n\n return {\n ok: errors.length === 0,\n errors,\n warnings,\n normalized,\n fields: {\n chain,\n symbol,\n destination,\n limit,\n stream,\n affiliateTag,\n affiliateBP,\n },\n suggestedFix: shorthandFix ? normalized : undefined,\n };\n}\n\n// Validate a THORChain memo - returns true if valid, false otherwise\nexport function validateMemo(memo: string): boolean {\n try {\n if (!memo || memo.trim() === '') return false;\n\n const trimmed = memo.trim();\n\n // Check basic format\n if (!trimmed.startsWith('=:') && !trimmed.startsWith('SWAP:') &&\n !trimmed.startsWith('DEPOSIT:') && !trimmed.startsWith('WITHDRAW:') &&\n !trimmed.startsWith('LOAN+:') && !trimmed.startsWith('LOAN-:') &&\n !trimmed.startsWith('ADD:') && !trimmed.startsWith('WD:') &&\n !trimmed.startsWith('BOND:') && !trimmed.startsWith('UNBOND:') &&\n !trimmed.startsWith('MIGRATE:') && !trimmed.startsWith('*NOOP*:')) {\n return false;\n }\n\n // For swap memos, validate format more strictly\n if (trimmed.startsWith('=:') || trimmed.startsWith('SWAP:')) {\n const prefix = trimmed.startsWith('=:') ? '=:' : 'SWAP:';\n const parts = trimmed.slice(prefix.length).split(':');\n\n // Must have at least asset and destination\n if (parts.length < 2) return false;\n\n // Check asset format (must be CHAIN.SYMBOL)\n const asset = parts[0];\n\n // Don't allow single-letter shorthands in validation\n if (asset.length === 1) return false;\n\n const assetParts = asset.split('.');\n if (assetParts.length !== 2) return false;\n\n const [chain, symbol] = assetParts;\n\n // Must be uppercase alphanumeric (symbol can have dash)\n if (!/^[A-Z0-9]+$/.test(chain)) return false;\n if (!/^[A-Z0-9\\-]+$/.test(symbol)) return false;\n\n // Must have destination\n const destination = parts[1];\n if (!destination || destination.trim() === '') return false;\n\n // Check optional limit/stream format\n if (parts[2] && parts[2] !== '') {\n const limitStream = parts[2].split('/');\n // Limit must be integer if present\n if (limitStream[0] && !/^\\d+$/.test(limitStream[0])) return false;\n // Stream must be integer if present\n if (limitStream[1] && !/^\\d+$/.test(limitStream[1])) return false;\n }\n\n // Check affiliate BP if present\n if (parts[4] && parts[4] !== '') {\n if (!/^\\d+$/.test(parts[4])) return false;\n const bp = parseInt(parts[4]);\n if (bp < 0 || bp > 1000) return false;\n }\n }\n\n // Check memo length\n if (Buffer.from(trimmed, 'utf-8').length > 250) return false;\n\n // If we made it here, memo is valid\n return true;\n\n } catch (error) {\n // Any error means invalid memo\n return false;\n }\n}\n\n// Normalize and validate swap memo\nexport function normalizeSwapMemo(memo: string): string {\n // Ensure \"=:\" prefix and fully qualified asset\n if (!memo.startsWith('=:')) {\n if (memo.startsWith('=')) memo = memo.replace(/^=/, '=:');\n else if (memo.startsWith('SWAP:')) memo = memo.replace(/^SWAP:/, '=:');\n }\n\n const parts = memo.slice(2).split(':');\n if (parts.length < 2) throw new Error('Memo missing asset/destination');\n\n // Expand single-letter shorthand if present (parse-time convenience only)\n const cs = parts[0];\n const fix = assetShortCodeMap[cs] || assetShortCodeMap[cs.toUpperCase()];\n if (fix) parts[0] = fix;\n\n // Enforce UPPERCASE CHAIN.SYMBOL\n const [chain, symbol] = parts[0].split('.');\n if (!chain || !symbol) throw new Error('Asset must be CHAIN.SYMBOL');\n parts[0] = `${chain.toUpperCase()}.${symbol.toUpperCase()}`;\n\n const normalized = `=:` + parts.join(':');\n // guard length\n return truncateMemo(normalized, 250);\n}\n\nexport function createMemo(tx: BaseTx): string {\n switch (tx.type) {\n case 'SWAP':\n return buildSwapMemo(tx as SwapTx);\n case 'DEPOSIT':\n return buildDepositMemo(tx as DepositTx);\n case 'WITHDRAW':\n return buildWithdrawMemo(tx as WithdrawTx);\n case 'BOND':\n return buildBondMemo(tx as BondTx);\n case 'UNBOND':\n return buildUnbondMemo(tx as UnbondTx);\n case 'MIGRATE':\n return buildMigrateMemo(tx as MigrateTx);\n case '*NOOP*':\n return buildNoOpMemo(tx as NoOpTx);\n case 'AGGREGATE_SWAP':\n return buildAggregateSwapMemo(tx as AggregateSwapTx);\n case 'LOAN+':\n return buildLoanOpenMemo(tx as LoanOpenTx);\n case 'LOAN-':\n return buildLoanRepayMemo(tx as LoanRepayTx);\n case 'ADD':\n return buildAddLiquidityMemo(tx as AddLiquidityTx);\n case 'WD':\n return buildWithdrawLiquidityMemo(tx as WithdrawLiquidityTx);\n default:\n throw new Error('Unsupported transaction type.');\n }\n}\n\n// Function to parse a memo string into a transaction object\nexport function parseMemo(memo: string): BaseTx {\n const parts = memo.split(':').map(part => {\n return interpretAssetShortCode(part) || interpretShortenedPart(part);\n });\n\n const typeMap:any = {\n '=': 'SWAP',\n '+': 'DEPOSIT',\n '-': 'WITHDRAW',\n // Add other shorthand mappings as needed\n };\n\n const type = typeMap[parts[0]] || parts[0];\n const asset = parts[1];\n const destAddr = parts[2];\n\n switch (type) {\n case 'SWAP': {\n const asset = parts[1];\n const destAddr = parts[2];\n const [lim, interval] = (parts[3] || '').split('/');\n return {\n type: 'SWAP',\n asset,\n destAddr,\n lim: lim || undefined, // keep as string\n interval: interval || undefined, // keep as string\n affiliate: parts[4] || undefined,\n fee: parts[5] || undefined, // keep as string (bp)\n } as SwapTx;\n }\n case 'DEPOSIT':\n return {\n type,\n asset,\n destAddr,\n affiliate: parts[3] || null,\n fee: parts[4] ? parseFloat(parts[4]) : null,\n } as DepositTx;\n case 'WITHDRAW':\n return {\n type,\n asset,\n destAddr,\n pool: parts[3],\n basisPoints: parts[4] ? parseInt(parts[4]) : null,\n } as WithdrawTx;\n case 'LOAN+':\n return {\n type,\n asset,\n destAddr,\n minOut: parts[3] ? parseInt(parts[3]) : null,\n affiliate: parts[4] || null,\n fee: parts[5] ? parseFloat(parts[5]) : null,\n } as LoanOpenTx;\n case 'LOAN-':\n return {\n type,\n asset,\n destAddr,\n minOut: parts[3] ? parseInt(parts[3]) : null,\n } as LoanRepayTx;\n case 'ADD':\n return {\n type,\n asset,\n pairedAddr: parts[3] || null,\n affiliate: parts[4] || null,\n fee: parts[5] ? parseFloat(parts[5]) : null,\n } as AddLiquidityTx;\n case 'WD':\n return {\n type,\n asset,\n basisPoints: parseInt(parts[3]),\n singleAsset: parts[4] || null,\n } as WithdrawLiquidityTx;\n case 'BOND':\n return {\n type,\n asset,\n nodeAddr: parts[3],\n provider: parts[4] || null,\n fee: parts[5] ? parseFloat(parts[5]) : null,\n } as BondTx;\n case 'UNBOND':\n return {\n type,\n asset,\n nodeAddr: parts[3],\n amount: parseInt(parts[4]),\n provider: parts[5] || null,\n } as UnbondTx;\n case 'MIGRATE':\n return {\n type,\n asset,\n blockHeight: parseInt(parts[1]), // Ensure this parses the block height correctly\n } as MigrateTx;\n case '*NOOP*':\n return {\n type,\n asset,\n noVault: parts[1] === 'NOVAULT',\n } as NoOpTx;\n case 'AGGREGATE_SWAP': {\n const [lim, interval] = (parts[3] || '').split('/');\n return {\n type: 'AGGREGATE_SWAP',\n asset,\n destAddr,\n lim: lim || undefined,\n interval: interval || undefined,\n affiliate: parts[4] || undefined,\n fee: parts[5] || undefined,\n dexAggregatorAddr: parts[6] || '',\n finalAssetAddr: parts[7] || '',\n minAmountOut: parts[8] || undefined,\n } as AggregateSwapTx;\n }\n // Removed duplicate cases - already handled above\n default:\n throw new Error(`Unsupported memo type: ${type}`);\n }\n}\n\n/**\n * Thorchain Swap Memo Validator\n *\n * Supports memos of the form:\n * =:<CHAIN>.<SYMBOL>:<DEST>[:<limit>[/<stream]][:<affiliateTag>:<affiliateBP>]\n *\n * Examples:\n * =:BTC.BTC:bc1qxyz...\n * =:BTC.BTC:bc1qxyz...:120000\n * =:BTC.BTC:1JNYtQ...:120000/30\n * =:ETH.ETH:0xabc...:0:agg:25\n */\n\nconst SHORTHANDS = {\n 'b': 'BTC.BTC',\n 'btc': 'BTC.BTC',\n 'e': 'ETH.ETH',\n 'eth': 'ETH.ETH',\n 'r': 'THOR.RUNE',\n 'd': 'DOGE.DOGE',\n 'l': 'LTC.LTC',\n 'c': 'BCH.BCH',\n 'a': 'AVAX.AVAX',\n 's': 'BSC.BNB',\n 'n': 'BNB.BNB',\n 'g': 'GAIA.ATOM',\n};\n\nconst MAX_MEMO_LEN = 250;\nconst ASCII_SAFE = /^[\\x20-\\x7E]+$/; // printable ASCII (no control chars)\n\n"
|
|
20
|
+
],
|
|
21
|
+
"mappings": "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ACb,EACA,CACI,OAAU,OACV,MAAS,yCACb,EACA,CACI,OAAU,MACV,MAAS,yCACb,EACA,CACI,OAAU,MACV,MAAS,yCACb,EACA,CACI,OAAU,KACV,MAAS,yCACb,EACA,CACI,OAAU,QACV,MAAS,wCACb,EACA,CACI,OAAU,OACV,MAAS,0CACb,CACJ,EAOa,GAAa,CACtB,MACA,MACA,OACA,MACA,OACA,MACA,MACJ,EAKa,GAAW,CACpB,SAAU,MACV,QAAS,MACT,OAAQ,OACR,QAAS,OACT,QAAS,OACT,YAAa,MACb,SAAU,MACV,KAAM,OACN,SAAU,MACV,SAAU,OACV,SAAU,MACV,UAAW,OACX,QAAS,QACT,QAAS,MACT,QAAS,MACT,UAAW,OACX,IAAK,MACL,OAAQ,MACR,IAAK,KACT,EAEa,GAAgB,CACzB,IAAK,UACL,KAAM,SACN,KAAM,SACN,IAAK,WACL,KAAM,UACN,KAAM,OACN,GAAI,WACJ,KAAM,UACN,IAAK,cACL,IAAK,UACL,IAAK,WACL,KAAM,OACN,IAAK,WACL,KAAM,WACN,KAAM,YACN,KAAM,YACN,KAAM,YACN,MAAO,YACP,IAAK,WACL,KAAM,YACN,IAAK,UACL,MAAO,UACP,IAAK,UACL,IAAK,MACL,IAAK,SACL,IAAK,KACT,EAEa,GAAuB,CAChC,IAAK,UACL,KAAM,SACN,KAAM,UACN,KAAM,UACN,IAAK,cACL,IAAK,WACL,KAAM,OACN,IAAK,WACL,KAAM,WACN,KAAM,YACN,IAAK,WACL,IAAK,UACL,MAAO,UACP,IAAK,UACL,IAAK,MACL,IAAK,KACT,EAIa,GAAwB,CACjC,IAAK,UACL,KAAM,SACN,KAAM,SACN,IAAK,WACL,KAAM,UACN,KAAM,UACN,IAAK,cACL,IAAK,WACL,KAAM,OACN,IAAK,WACL,KAAM,WACN,KAAM,YACN,KAAM,YACN,IAAK,WACL,IAAK,UACL,MAAO,UACP,IAAK,UACL,IAAK,UACL,KAAM,YACN,IAAK,MACL,IAAK,MACL,IAAK,OACT,EAEa,GAAsB,CAC/B,QAAS,EACT,QAAS,EACT,YAAa,IACb,YAAa,IACb,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",
|
|
22
|
+
"debugId": "298BC5C451774F3864756E2164756E21",
|
|
23
|
+
"names": []
|
|
24
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pioneer-platform/pioneer-coins",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.7.0",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"types": "./lib/index.d.ts",
|
|
6
6
|
"_moduleAliases": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"prepublish": "pnpm run build"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@pioneer-platform/loggerdog": "^8.
|
|
18
|
+
"@pioneer-platform/loggerdog": "^8.7.0",
|
|
19
19
|
"bignumber.js": "^9.0.1",
|
|
20
20
|
"bs58check": "^3.0.1"
|
|
21
21
|
},
|