@ethersproject/rlp
Advanced tools
Comparing version 5.6.0 to 6.0.0-beta.1
@@ -1,2 +0,2 @@ | ||
export declare const version = "rlp/5.6.0"; | ||
export declare const version = "@ethersproject/rlp@6.0.0-beta.1"; | ||
//# sourceMappingURL=_version.d.ts.map |
@@ -1,5 +0,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.version = void 0; | ||
exports.version = "rlp/5.6.0"; | ||
export const version = "@ethersproject/rlp@6.0.0-beta.1"; | ||
//# sourceMappingURL=_version.js.map |
@@ -1,4 +0,4 @@ | ||
import { BytesLike } from "@ethersproject/bytes"; | ||
export declare function encode(object: any): string; | ||
export declare function decode(data: BytesLike): any; | ||
export { encodeRlp } from "./encode.js"; | ||
export { decodeRlp } from "./decode.js"; | ||
export type { RlpStructuredData } from "./types.js"; | ||
//# sourceMappingURL=index.d.ts.map |
125
lib/index.js
@@ -1,124 +0,3 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.decode = exports.encode = void 0; | ||
//See: https://github.com/ethereum/wiki/wiki/RLP | ||
var bytes_1 = require("@ethersproject/bytes"); | ||
var logger_1 = require("@ethersproject/logger"); | ||
var _version_1 = require("./_version"); | ||
var logger = new logger_1.Logger(_version_1.version); | ||
function arrayifyInteger(value) { | ||
var result = []; | ||
while (value) { | ||
result.unshift(value & 0xff); | ||
value >>= 8; | ||
} | ||
return result; | ||
} | ||
function unarrayifyInteger(data, offset, length) { | ||
var result = 0; | ||
for (var i = 0; i < length; i++) { | ||
result = (result * 256) + data[offset + i]; | ||
} | ||
return result; | ||
} | ||
function _encode(object) { | ||
if (Array.isArray(object)) { | ||
var payload_1 = []; | ||
object.forEach(function (child) { | ||
payload_1 = payload_1.concat(_encode(child)); | ||
}); | ||
if (payload_1.length <= 55) { | ||
payload_1.unshift(0xc0 + payload_1.length); | ||
return payload_1; | ||
} | ||
var length_1 = arrayifyInteger(payload_1.length); | ||
length_1.unshift(0xf7 + length_1.length); | ||
return length_1.concat(payload_1); | ||
} | ||
if (!(0, bytes_1.isBytesLike)(object)) { | ||
logger.throwArgumentError("RLP object must be BytesLike", "object", object); | ||
} | ||
var data = Array.prototype.slice.call((0, bytes_1.arrayify)(object)); | ||
if (data.length === 1 && data[0] <= 0x7f) { | ||
return data; | ||
} | ||
else if (data.length <= 55) { | ||
data.unshift(0x80 + data.length); | ||
return data; | ||
} | ||
var length = arrayifyInteger(data.length); | ||
length.unshift(0xb7 + length.length); | ||
return length.concat(data); | ||
} | ||
function encode(object) { | ||
return (0, bytes_1.hexlify)(_encode(object)); | ||
} | ||
exports.encode = encode; | ||
function _decodeChildren(data, offset, childOffset, length) { | ||
var result = []; | ||
while (childOffset < offset + 1 + length) { | ||
var decoded = _decode(data, childOffset); | ||
result.push(decoded.result); | ||
childOffset += decoded.consumed; | ||
if (childOffset > offset + 1 + length) { | ||
logger.throwError("child data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
} | ||
return { consumed: (1 + length), result: result }; | ||
} | ||
// returns { consumed: number, result: Object } | ||
function _decode(data, offset) { | ||
if (data.length === 0) { | ||
logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
// Array with extra length prefix | ||
if (data[offset] >= 0xf8) { | ||
var lengthLength = data[offset] - 0xf7; | ||
if (offset + 1 + lengthLength > data.length) { | ||
logger.throwError("data short segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
var length_2 = unarrayifyInteger(data, offset + 1, lengthLength); | ||
if (offset + 1 + lengthLength + length_2 > data.length) { | ||
logger.throwError("data long segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length_2); | ||
} | ||
else if (data[offset] >= 0xc0) { | ||
var length_3 = data[offset] - 0xc0; | ||
if (offset + 1 + length_3 > data.length) { | ||
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
return _decodeChildren(data, offset, offset + 1, length_3); | ||
} | ||
else if (data[offset] >= 0xb8) { | ||
var lengthLength = data[offset] - 0xb7; | ||
if (offset + 1 + lengthLength > data.length) { | ||
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
var length_4 = unarrayifyInteger(data, offset + 1, lengthLength); | ||
if (offset + 1 + lengthLength + length_4 > data.length) { | ||
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
var result = (0, bytes_1.hexlify)(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length_4)); | ||
return { consumed: (1 + lengthLength + length_4), result: result }; | ||
} | ||
else if (data[offset] >= 0x80) { | ||
var length_5 = data[offset] - 0x80; | ||
if (offset + 1 + length_5 > data.length) { | ||
logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); | ||
} | ||
var result = (0, bytes_1.hexlify)(data.slice(offset + 1, offset + 1 + length_5)); | ||
return { consumed: (1 + length_5), result: result }; | ||
} | ||
return { consumed: 1, result: (0, bytes_1.hexlify)(data[offset]) }; | ||
} | ||
function decode(data) { | ||
var bytes = (0, bytes_1.arrayify)(data); | ||
var decoded = _decode(bytes, 0); | ||
if (decoded.consumed !== bytes.length) { | ||
logger.throwArgumentError("invalid rlp data", "data", data); | ||
} | ||
return decoded.result; | ||
} | ||
exports.decode = decode; | ||
export { encodeRlp } from "./encode.js"; | ||
export { decodeRlp } from "./decode.js"; | ||
//# sourceMappingURL=index.js.map |
MIT License | ||
Copyright (c) 2019 Richard Moore | ||
Copyright (c) 2022 Richard Moore | ||
@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy |
{ | ||
"author": "Richard Moore <me@ricmoo.com>", | ||
"dependencies": { | ||
"@ethersproject/bytes": "^5.6.0", | ||
"@ethersproject/logger": "^5.6.0" | ||
"@ethersproject/bytes": "^6.0.0-beta.1", | ||
"@ethersproject/logger": "^6.0.0-beta.1" | ||
}, | ||
"description": "Recursive-Length Prefix (RLP) coder.", | ||
"engines": { | ||
"node": ">=12.17.0" | ||
}, | ||
"ethereum": "donations.ethers.eth", | ||
"funding": [ | ||
{ | ||
"type": "individual", | ||
"url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" | ||
}, | ||
{ | ||
"type": "individual", | ||
"url": "https://www.buymeacoffee.com/ricmoo" | ||
} | ||
], | ||
"gitHead": "b8cda5dffdcb688e38d7c6a0aec4c7b8b59c1af5", | ||
"gitHead": "77f691b3bc3a6387a5184ec9b1779faab4bcb30d", | ||
"keywords": [ | ||
@@ -27,6 +20,6 @@ "Ethereum", | ||
"main": "./lib/index.js", | ||
"module": "./lib.esm/index.js", | ||
"name": "@ethersproject/rlp", | ||
"publishConfig": { | ||
"access": "public" | ||
"access": "public", | ||
"tag": "beta" | ||
}, | ||
@@ -42,5 +35,6 @@ "repository": { | ||
"sideEffects": false, | ||
"tarballHash": "0xfb6b03ac40a056e6874c7208726479000ccb916e34c4377103567b66a24c7f36", | ||
"tarballHash": "0x36ddb7b810f7a32e7fa6fc6fb4e0d0a9ced175d7d2e447e592ed630ec3f35722", | ||
"type": "module", | ||
"types": "./lib/index.d.ts", | ||
"version": "5.6.0" | ||
"version": "6.0.0-beta.1" | ||
} |
@@ -1,1 +0,1 @@ | ||
export const version = "rlp/5.6.0"; | ||
export const version = "@ethersproject/rlp@6.0.0-beta.1"; |
@@ -1,155 +0,4 @@ | ||
"use strict"; | ||
export { encodeRlp } from "./encode.js"; | ||
export { decodeRlp } from "./decode.js"; | ||
//See: https://github.com/ethereum/wiki/wiki/RLP | ||
import { arrayify, BytesLike, hexlify, isBytesLike } from "@ethersproject/bytes"; | ||
import { Logger } from "@ethersproject/logger"; | ||
import { version } from "./_version"; | ||
const logger = new Logger(version); | ||
function arrayifyInteger(value: number): Array<number> { | ||
const result = []; | ||
while (value) { | ||
result.unshift(value & 0xff); | ||
value >>= 8; | ||
} | ||
return result; | ||
} | ||
function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number { | ||
let result = 0; | ||
for (let i = 0; i < length; i++) { | ||
result = (result * 256) + data[offset + i]; | ||
} | ||
return result; | ||
} | ||
function _encode(object: Array<any> | string): Array<number> { | ||
if (Array.isArray(object)) { | ||
let payload: Array<number> = []; | ||
object.forEach(function(child) { | ||
payload = payload.concat(_encode(child)); | ||
}); | ||
if (payload.length <= 55) { | ||
payload.unshift(0xc0 + payload.length) | ||
return payload; | ||
} | ||
const length = arrayifyInteger(payload.length); | ||
length.unshift(0xf7 + length.length); | ||
return length.concat(payload); | ||
} | ||
if (!isBytesLike(object)) { | ||
logger.throwArgumentError("RLP object must be BytesLike", "object", object); | ||
} | ||
const data: Array<number> = Array.prototype.slice.call(arrayify(object)); | ||
if (data.length === 1 && data[0] <= 0x7f) { | ||
return data; | ||
} else if (data.length <= 55) { | ||
data.unshift(0x80 + data.length); | ||
return data; | ||
} | ||
const length = arrayifyInteger(data.length); | ||
length.unshift(0xb7 + length.length); | ||
return length.concat(data); | ||
} | ||
export function encode(object: any): string { | ||
return hexlify(_encode(object)); | ||
} | ||
type Decoded = { | ||
result: any; | ||
consumed: number; | ||
}; | ||
function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded { | ||
const result = []; | ||
while (childOffset < offset + 1 + length) { | ||
const decoded = _decode(data, childOffset); | ||
result.push(decoded.result); | ||
childOffset += decoded.consumed; | ||
if (childOffset > offset + 1 + length) { | ||
logger.throwError("child data too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
} | ||
return {consumed: (1 + length), result: result}; | ||
} | ||
// returns { consumed: number, result: Object } | ||
function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } { | ||
if (data.length === 0) { | ||
logger.throwError("data too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
// Array with extra length prefix | ||
if (data[offset] >= 0xf8) { | ||
const lengthLength = data[offset] - 0xf7; | ||
if (offset + 1 + lengthLength > data.length) { | ||
logger.throwError("data short segment too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
const length = unarrayifyInteger(data, offset + 1, lengthLength); | ||
if (offset + 1 + lengthLength + length > data.length) { | ||
logger.throwError("data long segment too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); | ||
} else if (data[offset] >= 0xc0) { | ||
const length = data[offset] - 0xc0; | ||
if (offset + 1 + length > data.length) { | ||
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
return _decodeChildren(data, offset, offset + 1, length); | ||
} else if (data[offset] >= 0xb8) { | ||
const lengthLength = data[offset] - 0xb7; | ||
if (offset + 1 + lengthLength > data.length) { | ||
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
const length = unarrayifyInteger(data, offset + 1, lengthLength); | ||
if (offset + 1 + lengthLength + length > data.length) { | ||
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); | ||
return { consumed: (1 + lengthLength + length), result: result } | ||
} else if (data[offset] >= 0x80) { | ||
const length = data[offset] - 0x80; | ||
if (offset + 1 + length > data.length) { | ||
logger.throwError("data too short", Logger.errors.BUFFER_OVERRUN, { }); | ||
} | ||
const result = hexlify(data.slice(offset + 1, offset + 1 + length)); | ||
return { consumed: (1 + length), result: result } | ||
} | ||
return { consumed: 1, result: hexlify(data[offset]) }; | ||
} | ||
export function decode(data: BytesLike): any { | ||
const bytes = arrayify(data); | ||
const decoded = _decode(bytes, 0); | ||
if (decoded.consumed !== bytes.length) { | ||
logger.throwArgumentError("invalid rlp data", "data", data); | ||
} | ||
return decoded.result; | ||
} | ||
export type { RlpStructuredData } from "./types.js"; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
33
Yes
20650
292
3
1
0
1
+ Added@ethersproject/bytes@6.0.0-beta.3(transitive)
+ Added@ethersproject/logger@6.0.0-beta.7(transitive)
- Removed@ethersproject/bytes@5.7.0(transitive)
- Removed@ethersproject/logger@5.7.0(transitive)