@waku/rln 0.1.5-9901863.0 → 0.1.5-a824fff.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/bundle/index.js +2 -1
- package/bundle/packages/rln/dist/contract/constants.js +2 -1
- package/bundle/packages/rln/dist/contract/rln_base_contract.js +70 -65
- package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
- package/bundle/packages/rln/dist/credentials_manager.js +10 -28
- package/bundle/packages/rln/dist/identity.js +0 -8
- package/bundle/packages/rln/dist/keystore/keystore.js +28 -15
- package/bundle/packages/rln/dist/utils/metamask.js +2 -2
- package/bundle/packages/rln/dist/zerokit.js +5 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/contract/constants.d.ts +1 -1
- package/dist/contract/constants.js +1 -1
- package/dist/contract/constants.js.map +1 -1
- package/dist/contract/index.d.ts +1 -0
- package/dist/contract/index.js +1 -0
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/rln_base_contract.d.ts +5 -11
- package/dist/contract/rln_base_contract.js +68 -63
- package/dist/contract/rln_base_contract.js.map +1 -1
- package/dist/contract/types.d.ts +5 -0
- package/dist/contract/types.js.map +1 -1
- package/dist/credentials_manager.d.ts +3 -9
- package/dist/credentials_manager.js +10 -28
- package/dist/credentials_manager.js.map +1 -1
- package/dist/identity.d.ts +0 -1
- package/dist/identity.js +0 -8
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/keystore/keystore.d.ts +1 -0
- package/dist/keystore/keystore.js +28 -15
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/types.d.ts +2 -2
- package/dist/rln.js.map +1 -1
- package/dist/zerokit.d.ts +3 -3
- package/dist/zerokit.js +5 -5
- package/dist/zerokit.js.map +1 -1
- package/package.json +1 -1
- package/src/contract/constants.ts +1 -1
- package/src/contract/index.ts +1 -0
- package/src/contract/rln_base_contract.ts +100 -93
- package/src/contract/types.ts +5 -0
- package/src/credentials_manager.ts +10 -34
- package/src/identity.ts +0 -9
- package/src/index.ts +3 -1
- package/src/keystore/keystore.ts +54 -29
- package/src/keystore/types.ts +2 -2
- package/src/rln.ts +1 -0
- package/src/zerokit.ts +3 -3
- package/bundle/_virtual/__node-resolve_empty.js +0 -6
- package/bundle/_virtual/_node-resolve_empty.js +0 -3
- package/bundle/_virtual/bn.js +0 -3
- package/bundle/_virtual/common.js +0 -3
- package/bundle/_virtual/common2.js +0 -3
- package/bundle/_virtual/hash.js +0 -3
- package/bundle/_virtual/inherits_browser.js +0 -3
- package/bundle/_virtual/ripemd.js +0 -3
- package/bundle/_virtual/sha.js +0 -3
- package/bundle/_virtual/sha3.js +0 -3
- package/bundle/_virtual/utils3.js +0 -3
- package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +0 -96
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +0 -148
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +0 -26
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +0 -20
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +0 -210
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +0 -18
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +0 -30
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +0 -26
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +0 -22
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +0 -43
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +0 -19
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +0 -58
- package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +0 -854
- package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +0 -609
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +0 -66
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +0 -302
- package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +0 -110
- package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +0 -20
- package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +0 -120
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +0 -287
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +0 -402
- package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +0 -3
- package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +0 -8
- package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +0 -3
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +0 -893
- package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +0 -256
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +0 -36
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +0 -135
- package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +0 -8
- package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +0 -64
- package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +0 -443
- package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +0 -8
- package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +0 -660
- package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +0 -352
- package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +0 -248
- package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +0 -127
- package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +0 -2007
- package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +0 -422
- package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +0 -674
- package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +0 -132
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +0 -120
- package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +0 -8
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +0 -2430
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +0 -76
- package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +0 -219
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +0 -279
- package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +0 -69
- package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +0 -404
- package/bundle/node_modules/bech32/index.js +0 -187
- package/bundle/node_modules/bn.js/lib/bn.js +0 -3361
- package/bundle/node_modules/hash.js/lib/hash/common.js +0 -97
- package/bundle/node_modules/hash.js/lib/hash/hmac.js +0 -51
- package/bundle/node_modules/hash.js/lib/hash/ripemd.js +0 -152
- package/bundle/node_modules/hash.js/lib/hash/sha/1.js +0 -81
- package/bundle/node_modules/hash.js/lib/hash/sha/224.js +0 -33
- package/bundle/node_modules/hash.js/lib/hash/sha/256.js +0 -113
- package/bundle/node_modules/hash.js/lib/hash/sha/384.js +0 -39
- package/bundle/node_modules/hash.js/lib/hash/sha/512.js +0 -336
- package/bundle/node_modules/hash.js/lib/hash/sha/common.js +0 -53
- package/bundle/node_modules/hash.js/lib/hash/sha.js +0 -14
- package/bundle/node_modules/hash.js/lib/hash/utils.js +0 -282
- package/bundle/node_modules/hash.js/lib/hash.js +0 -33
- package/bundle/node_modules/inherits/inherits_browser.js +0 -33
- package/bundle/node_modules/minimalistic-assert/index.js +0 -13
package/src/keystore/keystore.ts
CHANGED
@@ -14,7 +14,6 @@ import {
|
|
14
14
|
import _ from "lodash";
|
15
15
|
import { v4 as uuidV4 } from "uuid";
|
16
16
|
|
17
|
-
import { IdentityCredential } from "../identity.js";
|
18
17
|
import { buildBigIntFromUint8Array } from "../utils/bytes.js";
|
19
18
|
|
20
19
|
import { decryptEipKeystore, keccak256Checksum } from "./cipher.js";
|
@@ -22,8 +21,8 @@ import { isCredentialValid, isKeystoreValid } from "./schema_validator.js";
|
|
22
21
|
import type {
|
23
22
|
Keccak256Hash,
|
24
23
|
KeystoreEntity,
|
24
|
+
KeystoreMembershipInfo,
|
25
25
|
MembershipHash,
|
26
|
-
MembershipInfo,
|
27
26
|
Password,
|
28
27
|
Sha256Hash
|
29
28
|
} from "./types.js";
|
@@ -251,27 +250,27 @@ export class Keystore {
|
|
251
250
|
const str = bytesToUtf8(bytes);
|
252
251
|
const obj = JSON.parse(str);
|
253
252
|
|
254
|
-
//
|
255
|
-
const { idTrapdoor, idNullifier, idSecretHash, idCommitment } = _.get(
|
256
|
-
obj,
|
257
|
-
"identityCredential",
|
258
|
-
{}
|
259
|
-
);
|
260
|
-
|
261
|
-
const idTrapdoorArray = new Uint8Array(idTrapdoor || []);
|
262
|
-
const idNullifierArray = new Uint8Array(idNullifier || []);
|
263
|
-
const idSecretHashArray = new Uint8Array(idSecretHash || []);
|
264
|
-
const idCommitmentArray = new Uint8Array(idCommitment || []);
|
265
|
-
const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitmentArray);
|
266
|
-
|
253
|
+
// TODO: add runtime validation of nwaku credentials
|
267
254
|
return {
|
268
|
-
identity:
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
255
|
+
identity: {
|
256
|
+
IDCommitment: Keystore.fromArraylikeToBytes(
|
257
|
+
_.get(obj, "identityCredential.idCommitment", [])
|
258
|
+
),
|
259
|
+
IDTrapdoor: Keystore.fromArraylikeToBytes(
|
260
|
+
_.get(obj, "identityCredential.idTrapdoor", [])
|
261
|
+
),
|
262
|
+
IDNullifier: Keystore.fromArraylikeToBytes(
|
263
|
+
_.get(obj, "identityCredential.idNullifier", [])
|
264
|
+
),
|
265
|
+
IDCommitmentBigInt: buildBigIntFromUint8Array(
|
266
|
+
Keystore.fromArraylikeToBytes(
|
267
|
+
_.get(obj, "identityCredential.idCommitment", [])
|
268
|
+
)
|
269
|
+
),
|
270
|
+
IDSecretHash: Keystore.fromArraylikeToBytes(
|
271
|
+
_.get(obj, "identityCredential.idSecretHash", [])
|
272
|
+
)
|
273
|
+
},
|
275
274
|
membership: {
|
276
275
|
treeIndex: _.get(obj, "treeIndex"),
|
277
276
|
chainId: _.get(obj, "membershipContract.chainId"),
|
@@ -285,9 +284,35 @@ export class Keystore {
|
|
285
284
|
}
|
286
285
|
}
|
287
286
|
|
287
|
+
private static fromArraylikeToBytes(
|
288
|
+
obj:
|
289
|
+
| number[]
|
290
|
+
| {
|
291
|
+
[key: number]: number;
|
292
|
+
}
|
293
|
+
): Uint8Array {
|
294
|
+
if (Array.isArray(obj)) {
|
295
|
+
return new Uint8Array(obj);
|
296
|
+
}
|
297
|
+
|
298
|
+
const bytes = [];
|
299
|
+
let index = 0;
|
300
|
+
let lastElement = obj[index];
|
301
|
+
|
302
|
+
while (lastElement !== undefined) {
|
303
|
+
bytes.push(lastElement);
|
304
|
+
index += 1;
|
305
|
+
lastElement = obj[index];
|
306
|
+
}
|
307
|
+
|
308
|
+
return new Uint8Array(bytes);
|
309
|
+
}
|
310
|
+
|
288
311
|
// follows nwaku implementation
|
289
312
|
// https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
|
290
|
-
private static computeMembershipHash(
|
313
|
+
private static computeMembershipHash(
|
314
|
+
info: KeystoreMembershipInfo
|
315
|
+
): MembershipHash {
|
291
316
|
return bytesToHex(
|
292
317
|
sha256(utf8ToBytes(`${info.chainId}${info.address}${info.treeIndex}`))
|
293
318
|
).toUpperCase();
|
@@ -298,16 +323,16 @@ export class Keystore {
|
|
298
323
|
private static fromIdentityToBytes(options: KeystoreEntity): Uint8Array {
|
299
324
|
return utf8ToBytes(
|
300
325
|
JSON.stringify({
|
301
|
-
membershipContract: {
|
302
|
-
chainId: options.membership.chainId,
|
303
|
-
address: options.membership.address
|
304
|
-
},
|
305
326
|
treeIndex: options.membership.treeIndex,
|
306
327
|
identityCredential: {
|
307
|
-
|
328
|
+
idCommitment: Array.from(options.identity.IDCommitment),
|
308
329
|
idNullifier: Array.from(options.identity.IDNullifier),
|
309
330
|
idSecretHash: Array.from(options.identity.IDSecretHash),
|
310
|
-
|
331
|
+
idTrapdoor: Array.from(options.identity.IDTrapdoor)
|
332
|
+
},
|
333
|
+
membershipContract: {
|
334
|
+
chainId: options.membership.chainId,
|
335
|
+
address: options.membership.address
|
311
336
|
},
|
312
337
|
userMessageLimit: options.membership.rateLimit
|
313
338
|
})
|
package/src/keystore/types.ts
CHANGED
@@ -7,7 +7,7 @@ export type Password = string | Uint8Array;
|
|
7
7
|
|
8
8
|
// see reference
|
9
9
|
// https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
|
10
|
-
export type
|
10
|
+
export type KeystoreMembershipInfo = {
|
11
11
|
chainId: string;
|
12
12
|
address: string;
|
13
13
|
treeIndex: number;
|
@@ -16,7 +16,7 @@ export type MembershipInfo = {
|
|
16
16
|
|
17
17
|
export type KeystoreEntity = {
|
18
18
|
identity: IdentityCredential;
|
19
|
-
membership:
|
19
|
+
membership: KeystoreMembershipInfo;
|
20
20
|
};
|
21
21
|
|
22
22
|
export type DecryptedCredentials = KeystoreEntity;
|
package/src/rln.ts
CHANGED
package/src/zerokit.ts
CHANGED
@@ -16,7 +16,7 @@ export class Zerokit {
|
|
16
16
|
public constructor(
|
17
17
|
private readonly zkRLN: number,
|
18
18
|
private readonly witnessCalculator: WitnessCalculator,
|
19
|
-
private readonly
|
19
|
+
private readonly _rateLimit: number = DEFAULT_RATE_LIMIT
|
20
20
|
) {}
|
21
21
|
|
22
22
|
public get getZkRLN(): number {
|
@@ -27,8 +27,8 @@ export class Zerokit {
|
|
27
27
|
return this.witnessCalculator;
|
28
28
|
}
|
29
29
|
|
30
|
-
public get
|
31
|
-
return this.
|
30
|
+
public get rateLimit(): number {
|
31
|
+
return this._rateLimit;
|
32
32
|
}
|
33
33
|
|
34
34
|
public generateIdentityCredentials(): IdentityCredential {
|
package/bundle/_virtual/bn.js
DELETED
package/bundle/_virtual/hash.js
DELETED
package/bundle/_virtual/sha.js
DELETED
package/bundle/_virtual/sha3.js
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
import { arrayify } from '../../bytes/lib.esm/index.js';
|
2
|
-
import { defineReadOnly } from '../../properties/lib.esm/index.js';
|
3
|
-
import { Logger } from '../../logger/lib.esm/index.js';
|
4
|
-
import { version } from './_version.js';
|
5
|
-
import { Reader, Writer } from './coders/abstract-coder.js';
|
6
|
-
import { AddressCoder } from './coders/address.js';
|
7
|
-
import { ArrayCoder } from './coders/array.js';
|
8
|
-
import { BooleanCoder } from './coders/boolean.js';
|
9
|
-
import { BytesCoder } from './coders/bytes.js';
|
10
|
-
import { FixedBytesCoder } from './coders/fixed-bytes.js';
|
11
|
-
import { NullCoder } from './coders/null.js';
|
12
|
-
import { NumberCoder } from './coders/number.js';
|
13
|
-
import { StringCoder } from './coders/string.js';
|
14
|
-
import { TupleCoder } from './coders/tuple.js';
|
15
|
-
import { ParamType } from './fragments.js';
|
16
|
-
|
17
|
-
const logger = new Logger(version);
|
18
|
-
const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
|
19
|
-
const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
|
20
|
-
class AbiCoder {
|
21
|
-
constructor(coerceFunc) {
|
22
|
-
defineReadOnly(this, "coerceFunc", coerceFunc || null);
|
23
|
-
}
|
24
|
-
_getCoder(param) {
|
25
|
-
switch (param.baseType) {
|
26
|
-
case "address":
|
27
|
-
return new AddressCoder(param.name);
|
28
|
-
case "bool":
|
29
|
-
return new BooleanCoder(param.name);
|
30
|
-
case "string":
|
31
|
-
return new StringCoder(param.name);
|
32
|
-
case "bytes":
|
33
|
-
return new BytesCoder(param.name);
|
34
|
-
case "array":
|
35
|
-
return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);
|
36
|
-
case "tuple":
|
37
|
-
return new TupleCoder((param.components || []).map((component) => {
|
38
|
-
return this._getCoder(component);
|
39
|
-
}), param.name);
|
40
|
-
case "":
|
41
|
-
return new NullCoder(param.name);
|
42
|
-
}
|
43
|
-
// u?int[0-9]*
|
44
|
-
let match = param.type.match(paramTypeNumber);
|
45
|
-
if (match) {
|
46
|
-
let size = parseInt(match[2] || "256");
|
47
|
-
if (size === 0 || size > 256 || (size % 8) !== 0) {
|
48
|
-
logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param);
|
49
|
-
}
|
50
|
-
return new NumberCoder(size / 8, (match[1] === "int"), param.name);
|
51
|
-
}
|
52
|
-
// bytes[0-9]+
|
53
|
-
match = param.type.match(paramTypeBytes);
|
54
|
-
if (match) {
|
55
|
-
let size = parseInt(match[1]);
|
56
|
-
if (size === 0 || size > 32) {
|
57
|
-
logger.throwArgumentError("invalid bytes length", "param", param);
|
58
|
-
}
|
59
|
-
return new FixedBytesCoder(size, param.name);
|
60
|
-
}
|
61
|
-
return logger.throwArgumentError("invalid type", "type", param.type);
|
62
|
-
}
|
63
|
-
_getWordSize() { return 32; }
|
64
|
-
_getReader(data, allowLoose) {
|
65
|
-
return new Reader(data, this._getWordSize(), this.coerceFunc, allowLoose);
|
66
|
-
}
|
67
|
-
_getWriter() {
|
68
|
-
return new Writer(this._getWordSize());
|
69
|
-
}
|
70
|
-
getDefaultValue(types) {
|
71
|
-
const coders = types.map((type) => this._getCoder(ParamType.from(type)));
|
72
|
-
const coder = new TupleCoder(coders, "_");
|
73
|
-
return coder.defaultValue();
|
74
|
-
}
|
75
|
-
encode(types, values) {
|
76
|
-
if (types.length !== values.length) {
|
77
|
-
logger.throwError("types/values length mismatch", Logger.errors.INVALID_ARGUMENT, {
|
78
|
-
count: { types: types.length, values: values.length },
|
79
|
-
value: { types: types, values: values }
|
80
|
-
});
|
81
|
-
}
|
82
|
-
const coders = types.map((type) => this._getCoder(ParamType.from(type)));
|
83
|
-
const coder = (new TupleCoder(coders, "_"));
|
84
|
-
const writer = this._getWriter();
|
85
|
-
coder.encode(writer, values);
|
86
|
-
return writer.data;
|
87
|
-
}
|
88
|
-
decode(types, data, loose) {
|
89
|
-
const coders = types.map((type) => this._getCoder(ParamType.from(type)));
|
90
|
-
const coder = new TupleCoder(coders, "_");
|
91
|
-
return coder.decode(this._getReader(arrayify(data), loose));
|
92
|
-
}
|
93
|
-
}
|
94
|
-
const defaultAbiCoder = new AbiCoder();
|
95
|
-
|
96
|
-
export { AbiCoder, defaultAbiCoder };
|
@@ -1,148 +0,0 @@
|
|
1
|
-
import { arrayify, hexlify, hexConcat, concat } from '../../../bytes/lib.esm/index.js';
|
2
|
-
import { defineReadOnly } from '../../../properties/lib.esm/index.js';
|
3
|
-
import { Logger } from '../../../logger/lib.esm/index.js';
|
4
|
-
import { version } from '../_version.js';
|
5
|
-
import { BigNumber } from '../../../bignumber/lib.esm/bignumber.js';
|
6
|
-
|
7
|
-
const logger = new Logger(version);
|
8
|
-
function checkResultErrors(result) {
|
9
|
-
// Find the first error (if any)
|
10
|
-
const errors = [];
|
11
|
-
const checkErrors = function (path, object) {
|
12
|
-
if (!Array.isArray(object)) {
|
13
|
-
return;
|
14
|
-
}
|
15
|
-
for (let key in object) {
|
16
|
-
const childPath = path.slice();
|
17
|
-
childPath.push(key);
|
18
|
-
try {
|
19
|
-
checkErrors(childPath, object[key]);
|
20
|
-
}
|
21
|
-
catch (error) {
|
22
|
-
errors.push({ path: childPath, error: error });
|
23
|
-
}
|
24
|
-
}
|
25
|
-
};
|
26
|
-
checkErrors([], result);
|
27
|
-
return errors;
|
28
|
-
}
|
29
|
-
class Coder {
|
30
|
-
constructor(name, type, localName, dynamic) {
|
31
|
-
// @TODO: defineReadOnly these
|
32
|
-
this.name = name;
|
33
|
-
this.type = type;
|
34
|
-
this.localName = localName;
|
35
|
-
this.dynamic = dynamic;
|
36
|
-
}
|
37
|
-
_throwError(message, value) {
|
38
|
-
logger.throwArgumentError(message, this.localName, value);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
class Writer {
|
42
|
-
constructor(wordSize) {
|
43
|
-
defineReadOnly(this, "wordSize", wordSize || 32);
|
44
|
-
this._data = [];
|
45
|
-
this._dataLength = 0;
|
46
|
-
this._padding = new Uint8Array(wordSize);
|
47
|
-
}
|
48
|
-
get data() {
|
49
|
-
return hexConcat(this._data);
|
50
|
-
}
|
51
|
-
get length() { return this._dataLength; }
|
52
|
-
_writeData(data) {
|
53
|
-
this._data.push(data);
|
54
|
-
this._dataLength += data.length;
|
55
|
-
return data.length;
|
56
|
-
}
|
57
|
-
appendWriter(writer) {
|
58
|
-
return this._writeData(concat(writer._data));
|
59
|
-
}
|
60
|
-
// Arrayish items; padded on the right to wordSize
|
61
|
-
writeBytes(value) {
|
62
|
-
let bytes = arrayify(value);
|
63
|
-
const paddingOffset = bytes.length % this.wordSize;
|
64
|
-
if (paddingOffset) {
|
65
|
-
bytes = concat([bytes, this._padding.slice(paddingOffset)]);
|
66
|
-
}
|
67
|
-
return this._writeData(bytes);
|
68
|
-
}
|
69
|
-
_getValue(value) {
|
70
|
-
let bytes = arrayify(BigNumber.from(value));
|
71
|
-
if (bytes.length > this.wordSize) {
|
72
|
-
logger.throwError("value out-of-bounds", Logger.errors.BUFFER_OVERRUN, {
|
73
|
-
length: this.wordSize,
|
74
|
-
offset: bytes.length
|
75
|
-
});
|
76
|
-
}
|
77
|
-
if (bytes.length % this.wordSize) {
|
78
|
-
bytes = concat([this._padding.slice(bytes.length % this.wordSize), bytes]);
|
79
|
-
}
|
80
|
-
return bytes;
|
81
|
-
}
|
82
|
-
// BigNumberish items; padded on the left to wordSize
|
83
|
-
writeValue(value) {
|
84
|
-
return this._writeData(this._getValue(value));
|
85
|
-
}
|
86
|
-
writeUpdatableValue() {
|
87
|
-
const offset = this._data.length;
|
88
|
-
this._data.push(this._padding);
|
89
|
-
this._dataLength += this.wordSize;
|
90
|
-
return (value) => {
|
91
|
-
this._data[offset] = this._getValue(value);
|
92
|
-
};
|
93
|
-
}
|
94
|
-
}
|
95
|
-
class Reader {
|
96
|
-
constructor(data, wordSize, coerceFunc, allowLoose) {
|
97
|
-
defineReadOnly(this, "_data", arrayify(data));
|
98
|
-
defineReadOnly(this, "wordSize", wordSize || 32);
|
99
|
-
defineReadOnly(this, "_coerceFunc", coerceFunc);
|
100
|
-
defineReadOnly(this, "allowLoose", allowLoose);
|
101
|
-
this._offset = 0;
|
102
|
-
}
|
103
|
-
get data() { return hexlify(this._data); }
|
104
|
-
get consumed() { return this._offset; }
|
105
|
-
// The default Coerce function
|
106
|
-
static coerce(name, value) {
|
107
|
-
let match = name.match("^u?int([0-9]+)$");
|
108
|
-
if (match && parseInt(match[1]) <= 48) {
|
109
|
-
value = value.toNumber();
|
110
|
-
}
|
111
|
-
return value;
|
112
|
-
}
|
113
|
-
coerce(name, value) {
|
114
|
-
if (this._coerceFunc) {
|
115
|
-
return this._coerceFunc(name, value);
|
116
|
-
}
|
117
|
-
return Reader.coerce(name, value);
|
118
|
-
}
|
119
|
-
_peekBytes(offset, length, loose) {
|
120
|
-
let alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;
|
121
|
-
if (this._offset + alignedLength > this._data.length) {
|
122
|
-
if (this.allowLoose && loose && this._offset + length <= this._data.length) {
|
123
|
-
alignedLength = length;
|
124
|
-
}
|
125
|
-
else {
|
126
|
-
logger.throwError("data out-of-bounds", Logger.errors.BUFFER_OVERRUN, {
|
127
|
-
length: this._data.length,
|
128
|
-
offset: this._offset + alignedLength
|
129
|
-
});
|
130
|
-
}
|
131
|
-
}
|
132
|
-
return this._data.slice(this._offset, this._offset + alignedLength);
|
133
|
-
}
|
134
|
-
subReader(offset) {
|
135
|
-
return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc, this.allowLoose);
|
136
|
-
}
|
137
|
-
readBytes(length, loose) {
|
138
|
-
let bytes = this._peekBytes(0, length, !!loose);
|
139
|
-
this._offset += bytes.length;
|
140
|
-
// @TODO: Make sure the length..end bytes are all 0?
|
141
|
-
return bytes.slice(0, length);
|
142
|
-
}
|
143
|
-
readValue() {
|
144
|
-
return BigNumber.from(this.readBytes(this.wordSize));
|
145
|
-
}
|
146
|
-
}
|
147
|
-
|
148
|
-
export { Coder, Reader, Writer, checkResultErrors };
|
@@ -1,26 +0,0 @@
|
|
1
|
-
import { getAddress } from '../../../address/lib.esm/index.js';
|
2
|
-
import { hexZeroPad } from '../../../bytes/lib.esm/index.js';
|
3
|
-
import { Coder } from './abstract-coder.js';
|
4
|
-
|
5
|
-
class AddressCoder extends Coder {
|
6
|
-
constructor(localName) {
|
7
|
-
super("address", "address", localName, false);
|
8
|
-
}
|
9
|
-
defaultValue() {
|
10
|
-
return "0x0000000000000000000000000000000000000000";
|
11
|
-
}
|
12
|
-
encode(writer, value) {
|
13
|
-
try {
|
14
|
-
value = getAddress(value);
|
15
|
-
}
|
16
|
-
catch (error) {
|
17
|
-
this._throwError(error.message, value);
|
18
|
-
}
|
19
|
-
return writer.writeValue(value);
|
20
|
-
}
|
21
|
-
decode(reader) {
|
22
|
-
return getAddress(hexZeroPad(reader.readValue().toHexString(), 20));
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
export { AddressCoder };
|
@@ -1,20 +0,0 @@
|
|
1
|
-
import { Coder } from './abstract-coder.js';
|
2
|
-
|
3
|
-
// Clones the functionality of an existing Coder, but without a localName
|
4
|
-
class AnonymousCoder extends Coder {
|
5
|
-
constructor(coder) {
|
6
|
-
super(coder.name, coder.type, undefined, coder.dynamic);
|
7
|
-
this.coder = coder;
|
8
|
-
}
|
9
|
-
defaultValue() {
|
10
|
-
return this.coder.defaultValue();
|
11
|
-
}
|
12
|
-
encode(writer, value) {
|
13
|
-
return this.coder.encode(writer, value);
|
14
|
-
}
|
15
|
-
decode(reader) {
|
16
|
-
return this.coder.decode(reader);
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
export { AnonymousCoder };
|