@layerzerolabs/onesig-core 0.1.2 → 0.2.23

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.
@@ -0,0 +1,43 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/error.ts
5
+ var OneSigCoreError = class _OneSigCoreError extends Error {
6
+ static {
7
+ __name(this, "OneSigCoreError");
8
+ }
9
+ #code;
10
+ constructor(code, message) {
11
+ super(`[${code}] ${message}`);
12
+ this.#code = code;
13
+ }
14
+ get code() {
15
+ return this.#code;
16
+ }
17
+ static is(input, code) {
18
+ if (input instanceof _OneSigCoreError) {
19
+ if (code) {
20
+ return input.code === code;
21
+ }
22
+ return true;
23
+ } else {
24
+ return false;
25
+ }
26
+ }
27
+ };
28
+ async function getErrorFromCall(method) {
29
+ try {
30
+ await method();
31
+ } catch (error) {
32
+ if (OneSigCoreError.is(error)) {
33
+ return error.code;
34
+ }
35
+ throw error;
36
+ }
37
+ return null;
38
+ }
39
+ __name(getErrorFromCall, "getErrorFromCall");
40
+
41
+ export { OneSigCoreError, __name, getErrorFromCall };
42
+ //# sourceMappingURL=WGY3RCNT.js.map
43
+ //# sourceMappingURL=WGY3RCNT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error.ts"],"names":["OneSigCoreError","Error","code","message","is","input","getErrorFromCall","method","error"],"mappings":";;;;AAWO,IAAMA,eAAAA,GAAN,MAAMA,gBAAAA,SAAwBC,KAAAA,CAAAA;EAXrC;;;AAYI,EAAA,KAAA;AAEA,EAAA,WAAA,CAAYC,MAA2BC,OAAAA,EAAiB;AACpD,IAAA,KAAA,CAAM,CAAA,CAAA,EAAID,IAAAA,CAAAA,EAAAA,EAASC,OAAAA,CAAAA,CAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQD,IAAAA;AACjB,EAAA;AAEA,EAAA,IAAIA,IAAAA,GAAO;AACP,IAAA,OAAO,IAAA,CAAK,KAAA;AAChB,EAAA;EAEA,OAAOE,EAAAA,CAAGC,OAAgBH,IAAAA,EAAsD;AAC5E,IAAA,IAAIG,iBAAiBL,gBAAAA,EAAiB;AAClC,MAAA,IAAIE,IAAAA,EAAM;AACN,QAAA,OAAOG,MAAMH,IAAAA,KAASA,IAAAA;AAC1B,MAAA;AAEA,MAAA,OAAO,IAAA;IACX,CAAA,MAAO;AACH,MAAA,OAAO,KAAA;AACX,IAAA;AACJ,EAAA;AACJ;AAEA,eAAsBI,iBAAiBC,MAAAA,EAA8B;AACjE,EAAA,IAAI;AACA,IAAA,MAAMA,MAAAA,EAAAA;AACV,EAAA,CAAA,CAAA,OAASC,KAAAA,EAAO;AACZ,IAAA,IAAIR,eAAAA,CAAgBI,EAAAA,CAAGI,KAAAA,CAAAA,EAAQ;AAC3B,MAAA,OAAOA,KAAAA,CAAMN,IAAAA;AACjB,IAAA;AAEA,IAAA,MAAMM,KAAAA;AACV,EAAA;AAEA,EAAA,OAAO,IAAA;AACX;AAZsBF,MAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA","file":"WGY3RCNT.js","sourcesContent":["const _codes = [\n 'LEAF_SEEN_TWICE',\n 'NONCE_ID_SEEN_TWICE',\n 'INVALID_SIGNATURE_INPUT',\n 'ONE_SIGNER_REQUIRED',\n 'ADDRESS_SIGNATURE_LENGTH_MISMATCH',\n 'CANNOT_CONCAT_INPUT',\n] as const;\n\nexport type OneSigCoreErrorCode = (typeof _codes)[number];\n\nexport class OneSigCoreError extends Error {\n #code: OneSigCoreErrorCode;\n\n constructor(code: OneSigCoreErrorCode, message: string) {\n super(`[${code}] ${message}`);\n this.#code = code;\n }\n\n get code() {\n return this.#code;\n }\n\n static is(input: unknown, code?: OneSigCoreErrorCode): input is OneSigCoreError {\n if (input instanceof OneSigCoreError) {\n if (code) {\n return input.code === code;\n }\n\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport async function getErrorFromCall(method: () => Promise<unknown>) {\n try {\n await method();\n } catch (error) {\n if (OneSigCoreError.is(error)) {\n return error.code;\n }\n\n throw error;\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+
6
+ // src/error.ts
7
+ var OneSigCoreError = class _OneSigCoreError extends Error {
8
+ static {
9
+ __name(this, "OneSigCoreError");
10
+ }
11
+ #code;
12
+ constructor(code, message) {
13
+ super(`[${code}] ${message}`);
14
+ this.#code = code;
15
+ }
16
+ get code() {
17
+ return this.#code;
18
+ }
19
+ static is(input, code) {
20
+ if (input instanceof _OneSigCoreError) {
21
+ if (code) {
22
+ return input.code === code;
23
+ }
24
+ return true;
25
+ } else {
26
+ return false;
27
+ }
28
+ }
29
+ };
30
+ async function getErrorFromCall(method) {
31
+ try {
32
+ await method();
33
+ } catch (error) {
34
+ if (OneSigCoreError.is(error)) {
35
+ return error.code;
36
+ }
37
+ throw error;
38
+ }
39
+ return null;
40
+ }
41
+ __name(getErrorFromCall, "getErrorFromCall");
42
+
43
+ exports.OneSigCoreError = OneSigCoreError;
44
+ exports.__name = __name;
45
+ exports.getErrorFromCall = getErrorFromCall;
46
+ //# sourceMappingURL=XDTXKETK.cjs.map
47
+ //# sourceMappingURL=XDTXKETK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error.ts"],"names":["OneSigCoreError","Error","code","message","is","input","getErrorFromCall","method","error"],"mappings":";;;;;;AAWO,IAAMA,eAAAA,GAAN,MAAMA,gBAAAA,SAAwBC,KAAAA,CAAAA;EAXrC;;;AAYI,EAAA,KAAA;AAEA,EAAA,WAAA,CAAYC,MAA2BC,OAAAA,EAAiB;AACpD,IAAA,KAAA,CAAM,CAAA,CAAA,EAAID,IAAAA,CAAAA,EAAAA,EAASC,OAAAA,CAAAA,CAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQD,IAAAA;AACjB,EAAA;AAEA,EAAA,IAAIA,IAAAA,GAAO;AACP,IAAA,OAAO,IAAA,CAAK,KAAA;AAChB,EAAA;EAEA,OAAOE,EAAAA,CAAGC,OAAgBH,IAAAA,EAAsD;AAC5E,IAAA,IAAIG,iBAAiBL,gBAAAA,EAAiB;AAClC,MAAA,IAAIE,IAAAA,EAAM;AACN,QAAA,OAAOG,MAAMH,IAAAA,KAASA,IAAAA;AAC1B,MAAA;AAEA,MAAA,OAAO,IAAA;IACX,CAAA,MAAO;AACH,MAAA,OAAO,KAAA;AACX,IAAA;AACJ,EAAA;AACJ;AAEA,eAAsBI,iBAAiBC,MAAAA,EAA8B;AACjE,EAAA,IAAI;AACA,IAAA,MAAMA,MAAAA,EAAAA;AACV,EAAA,CAAA,CAAA,OAASC,KAAAA,EAAO;AACZ,IAAA,IAAIR,eAAAA,CAAgBI,EAAAA,CAAGI,KAAAA,CAAAA,EAAQ;AAC3B,MAAA,OAAOA,KAAAA,CAAMN,IAAAA;AACjB,IAAA;AAEA,IAAA,MAAMM,KAAAA;AACV,EAAA;AAEA,EAAA,OAAO,IAAA;AACX;AAZsBF,MAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA","file":"XDTXKETK.cjs","sourcesContent":["const _codes = [\n 'LEAF_SEEN_TWICE',\n 'NONCE_ID_SEEN_TWICE',\n 'INVALID_SIGNATURE_INPUT',\n 'ONE_SIGNER_REQUIRED',\n 'ADDRESS_SIGNATURE_LENGTH_MISMATCH',\n 'CANNOT_CONCAT_INPUT',\n] as const;\n\nexport type OneSigCoreErrorCode = (typeof _codes)[number];\n\nexport class OneSigCoreError extends Error {\n #code: OneSigCoreErrorCode;\n\n constructor(code: OneSigCoreErrorCode, message: string) {\n super(`[${code}] ${message}`);\n this.#code = code;\n }\n\n get code() {\n return this.#code;\n }\n\n static is(input: unknown, code?: OneSigCoreErrorCode): input is OneSigCoreError {\n if (input instanceof OneSigCoreError) {\n if (code) {\n return input.code === code;\n }\n\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport async function getErrorFromCall(method: () => Promise<unknown>) {\n try {\n await method();\n } catch (error) {\n if (OneSigCoreError.is(error)) {\n return error.code;\n }\n\n throw error;\n }\n\n return null;\n}\n"]}
package/dist/error.cjs ADDED
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var XDTXKETK_cjs = require('./XDTXKETK.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "OneSigCoreError", {
8
+ enumerable: true,
9
+ get: function () { return XDTXKETK_cjs.OneSigCoreError; }
10
+ });
11
+ Object.defineProperty(exports, "getErrorFromCall", {
12
+ enumerable: true,
13
+ get: function () { return XDTXKETK_cjs.getErrorFromCall; }
14
+ });
15
+ //# sourceMappingURL=error.cjs.map
16
+ //# sourceMappingURL=error.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"error.cjs"}
@@ -0,0 +1,11 @@
1
+ declare const _codes: readonly ["LEAF_SEEN_TWICE", "NONCE_ID_SEEN_TWICE", "INVALID_SIGNATURE_INPUT", "ONE_SIGNER_REQUIRED", "ADDRESS_SIGNATURE_LENGTH_MISMATCH", "CANNOT_CONCAT_INPUT"];
2
+ export type OneSigCoreErrorCode = (typeof _codes)[number];
3
+ export declare class OneSigCoreError extends Error {
4
+ #private;
5
+ constructor(code: OneSigCoreErrorCode, message: string);
6
+ get code(): "LEAF_SEEN_TWICE" | "NONCE_ID_SEEN_TWICE" | "INVALID_SIGNATURE_INPUT" | "ONE_SIGNER_REQUIRED" | "ADDRESS_SIGNATURE_LENGTH_MISMATCH" | "CANNOT_CONCAT_INPUT";
7
+ static is(input: unknown, code?: OneSigCoreErrorCode): input is OneSigCoreError;
8
+ }
9
+ export declare function getErrorFromCall(method: () => Promise<unknown>): Promise<"LEAF_SEEN_TWICE" | "NONCE_ID_SEEN_TWICE" | "INVALID_SIGNATURE_INPUT" | "ONE_SIGNER_REQUIRED" | "ADDRESS_SIGNATURE_LENGTH_MISMATCH" | "CANNOT_CONCAT_INPUT" | null>;
10
+ export {};
11
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,MAAM,mKAOF,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,qBAAa,eAAgB,SAAQ,KAAK;;gBAG1B,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;IAKtD,IAAI,IAAI,gKAEP;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,KAAK,IAAI,eAAe;CAWlF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,+KAYpE"}
package/dist/error.js ADDED
@@ -0,0 +1,3 @@
1
+ export { OneSigCoreError, getErrorFromCall } from './WGY3RCNT.js';
2
+ //# sourceMappingURL=error.js.map
3
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"error.js"}
@@ -1,46 +1,15 @@
1
- var __typeError = (msg) => {
2
- throw TypeError(msg);
3
- };
4
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
1
+ 'use strict';
8
2
 
9
- // src/index.ts
10
- import { ethers } from "ethers";
11
- import { MerkleTree } from "merkletreejs";
3
+ var XDTXKETK_cjs = require('./XDTXKETK.cjs');
4
+ var ethers = require('ethers');
5
+ var merkletreejs = require('merkletreejs');
12
6
 
13
- // src/error.ts
14
- var _code;
15
- var _OneSigCoreError = class _OneSigCoreError extends Error {
16
- constructor(code, message) {
17
- super(`[${code}] ${message}`);
18
- __privateAdd(this, _code);
19
- __privateSet(this, _code, code);
20
- }
21
- get code() {
22
- return __privateGet(this, _code);
23
- }
24
- static is(input, code) {
25
- if (input instanceof _OneSigCoreError) {
26
- if (code) {
27
- return input.code === code;
28
- }
29
- return true;
30
- } else {
31
- return false;
32
- }
33
- }
34
- };
35
- _code = new WeakMap();
36
- var OneSigCoreError = _OneSigCoreError;
37
-
38
- // src/index.ts
39
7
  function readByteFromHex(input, byteOffset) {
40
8
  const charOffset = byteOffset * 2;
41
9
  const sub = input.substring(charOffset, charOffset + 2);
42
10
  return parseInt(sub, 16);
43
11
  }
12
+ XDTXKETK_cjs.__name(readByteFromHex, "readByteFromHex");
44
13
  function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }) {
45
14
  if (targetOneSigAddress.byteLength !== 32) {
46
15
  throw new Error("Contract address must be 32 bytes");
@@ -58,6 +27,7 @@ function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }) {
58
27
  }
59
28
  return storage;
60
29
  }
30
+ XDTXKETK_cjs.__name(encodeLeafHeader, "encodeLeafHeader");
61
31
  function encodeLeaf(gen, index) {
62
32
  const leaf = gen.leafs[index];
63
33
  if (!leaf) {
@@ -71,8 +41,9 @@ function encodeLeaf(gen, index) {
71
41
  }),
72
42
  gen.encodeCalls(leaf.calls)
73
43
  ]);
74
- return ethers.utils.keccak256(ethers.utils.keccak256(leafData));
44
+ return ethers.ethers.utils.keccak256(ethers.ethers.utils.keccak256(leafData));
75
45
  }
46
+ XDTXKETK_cjs.__name(encodeLeaf, "encodeLeaf");
76
47
  function makeOneSigTree(input) {
77
48
  const encodedLeafs = [];
78
49
  const seenNonceIds = /* @__PURE__ */ new Set();
@@ -81,18 +52,18 @@ function makeOneSigTree(input) {
81
52
  const leaf = gen.leafs[i];
82
53
  const nonceIdCombo = `${leaf.nonce}.${leaf.oneSigId}`;
83
54
  if (seenNonceIds.has(nonceIdCombo)) {
84
- throw new OneSigCoreError(
85
- "NONCE_ID_SEEN_TWICE",
86
- "Two calls should not be made for the same chain/nonce twice"
87
- );
55
+ throw new XDTXKETK_cjs.OneSigCoreError("NONCE_ID_SEEN_TWICE", "Two calls should not be made for the same chain/nonce twice");
88
56
  }
89
57
  seenNonceIds.add(nonceIdCombo);
90
58
  encodedLeafs.push(encodeLeaf(gen, i));
91
59
  }
92
60
  }
93
- const tree = new MerkleTree(encodedLeafs, ethers.utils.keccak256, { sortPairs: true });
61
+ const tree = new merkletreejs.MerkleTree(encodedLeafs, ethers.ethers.utils.keccak256, {
62
+ sort: true
63
+ });
94
64
  return tree;
95
65
  }
66
+ XDTXKETK_cjs.__name(makeOneSigTree, "makeOneSigTree");
96
67
  function compareAddresses(a, b) {
97
68
  const aNumeric = BigInt(a);
98
69
  const bNumeric = BigInt(b);
@@ -104,36 +75,36 @@ function compareAddresses(a, b) {
104
75
  return 1;
105
76
  }
106
77
  }
107
- var _value;
108
- var _Signature = class _Signature {
78
+ XDTXKETK_cjs.__name(compareAddresses, "compareAddresses");
79
+ var Signature = class _Signature {
80
+ static {
81
+ XDTXKETK_cjs.__name(this, "Signature");
82
+ }
83
+ #value;
109
84
  constructor(input) {
110
- __privateAdd(this, _value);
111
85
  let value = input;
112
86
  if (value instanceof _Signature) {
113
87
  value = value.get();
114
88
  }
115
89
  if (typeof value === "string") {
116
90
  if (!value.startsWith("0x")) {
117
- throw new OneSigCoreError(
118
- "INVALID_SIGNATURE_INPUT",
119
- "Signature takes in hex encoded strings prefixed with 0x only"
120
- );
91
+ throw new XDTXKETK_cjs.OneSigCoreError("INVALID_SIGNATURE_INPUT", "Signature takes in hex encoded strings prefixed with 0x only");
121
92
  }
122
93
  value = Buffer.from(value.substring(2), "hex");
123
94
  }
124
95
  if (value.length % 65 !== 0) {
125
- throw new OneSigCoreError("INVALID_SIGNATURE_INPUT", "Each signature must be 65 bytes long");
96
+ throw new XDTXKETK_cjs.OneSigCoreError("INVALID_SIGNATURE_INPUT", "Each signature must be 65 bytes long");
126
97
  }
127
- __privateSet(this, _value, value);
98
+ this.#value = value;
128
99
  }
129
100
  get() {
130
- return __privateGet(this, _value);
101
+ return this.#value;
131
102
  }
132
103
  toHexString() {
133
104
  return `0x${this.get().toString("hex")}`;
134
105
  }
135
106
  get signatureCount() {
136
- const count = __privateGet(this, _value).length / 65;
107
+ const count = this.#value.length / 65;
137
108
  if (Math.floor(count) !== count) {
138
109
  throw new Error("Count is not an int");
139
110
  }
@@ -149,7 +120,7 @@ var _Signature = class _Signature {
149
120
  const signatureBuffers = input.map(function(singleInput) {
150
121
  const signature = new _Signature(singleInput);
151
122
  if (signature.signatureCount !== 1) {
152
- throw new OneSigCoreError("CANNOT_CONCAT_INPUT", "Cannot concatenate pre-concatenated signatures");
123
+ throw new XDTXKETK_cjs.OneSigCoreError("CANNOT_CONCAT_INPUT", "Cannot concatenate pre-concatenated signatures");
153
124
  }
154
125
  return signature.get();
155
126
  });
@@ -161,19 +132,16 @@ var _Signature = class _Signature {
161
132
  if (typeof sortMethod === "string" || Buffer.isBuffer(sortMethod)) {
162
133
  addresses = [];
163
134
  for (const signature of signatureBuffers) {
164
- const recovered = ethers.utils.recoverAddress(sortMethod, signature);
135
+ const recovered = ethers.ethers.utils.recoverAddress(sortMethod, signature);
165
136
  addresses.push(recovered);
166
137
  }
167
138
  } else {
168
139
  addresses = sortMethod;
169
140
  }
170
141
  if (addresses.length !== signatureBuffers.length) {
171
- throw new OneSigCoreError(
172
- "ADDRESS_SIGNATURE_LENGTH_MISMATCH",
173
- "Mismatch in addresses provided signatures"
174
- );
142
+ throw new XDTXKETK_cjs.OneSigCoreError("ADDRESS_SIGNATURE_LENGTH_MISMATCH", "Mismatch in addresses provided signatures");
175
143
  }
176
- const indexMapping = new Array(addresses.length).fill(0).map((_, i) => i).sort(function(a, b) {
144
+ const indexMapping = new Array(addresses.length).fill(0).map((_, i) => i).sort((a, b) => {
177
145
  return compareAddresses(addresses[a], addresses[b]);
178
146
  });
179
147
  orderedSignatures = indexMapping.map((index) => signatureBuffers[index]);
@@ -182,41 +150,58 @@ var _Signature = class _Signature {
182
150
  return new this(combined);
183
151
  }
184
152
  };
185
- _value = new WeakMap();
186
- var Signature = _Signature;
187
153
  var ONE_SIG_TYPED_DATA_DOMAIN = {
188
154
  name: "OneSig",
189
155
  version: "0.0.1",
190
156
  chainId: 1,
191
- // this is hardcoded to Ethereum mainnet
192
157
  verifyingContract: "0x000000000000000000000000000000000000dEaD"
193
- // this is hardcoded to a dead address
194
158
  };
195
- function getOneSigTypedDataDomain() {
159
+ var getOneSigTypedDataDomain = /* @__PURE__ */ XDTXKETK_cjs.__name(() => {
196
160
  return ONE_SIG_TYPED_DATA_DOMAIN;
197
- }
161
+ }, "getOneSigTypedDataDomain");
198
162
  var ONE_SIG_TYPED_DATA_DOMAIN_TYPES = {
199
163
  EIP712Domain: [
200
- { name: "name", type: "string" },
201
- { name: "version", type: "string" },
202
- { name: "chainId", type: "uint256" },
203
- { name: "verifyingContract", type: "address" }
164
+ {
165
+ name: "name",
166
+ type: "string"
167
+ },
168
+ {
169
+ name: "version",
170
+ type: "string"
171
+ },
172
+ {
173
+ name: "chainId",
174
+ type: "uint256"
175
+ },
176
+ {
177
+ name: "verifyingContract",
178
+ type: "address"
179
+ }
204
180
  ]
205
181
  };
206
- function getOneSigTypedDataDomainTypes() {
182
+ var getOneSigTypedDataDomainTypes = /* @__PURE__ */ XDTXKETK_cjs.__name(() => {
207
183
  return ONE_SIG_TYPED_DATA_DOMAIN_TYPES;
208
- }
184
+ }, "getOneSigTypedDataDomainTypes");
209
185
  var ONE_SIG_TYPED_DATA_PRIMARY_TYPES = {
210
186
  SignMerkleRoot: [
211
- { name: "seed", type: "bytes32" },
212
- { name: "merkleRoot", type: "bytes32" },
213
- { name: "expiry", type: "uint256" }
187
+ {
188
+ name: "seed",
189
+ type: "bytes32"
190
+ },
191
+ {
192
+ name: "merkleRoot",
193
+ type: "bytes32"
194
+ },
195
+ {
196
+ name: "expiry",
197
+ type: "uint256"
198
+ }
214
199
  ]
215
200
  };
216
- function getOneSigTypedDataPrimaryTypes() {
201
+ var getOneSigTypedDataPrimaryTypes = /* @__PURE__ */ XDTXKETK_cjs.__name(() => {
217
202
  return ONE_SIG_TYPED_DATA_PRIMARY_TYPES;
218
- }
219
- function getSigningData(tree, { seed, expiry }) {
203
+ }, "getOneSigTypedDataPrimaryTypes");
204
+ var getSigningData = /* @__PURE__ */ XDTXKETK_cjs.__name((tree, { seed, expiry }) => {
220
205
  return [
221
206
  getOneSigTypedDataDomain(),
222
207
  getOneSigTypedDataPrimaryTypes(),
@@ -226,22 +211,20 @@ function getSigningData(tree, { seed, expiry }) {
226
211
  merkleRoot: tree.getHexRoot()
227
212
  }
228
213
  ];
229
- }
230
- function getDigestToSign(tree, options) {
231
- return ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));
232
- }
214
+ }, "getSigningData");
215
+ var getDigestToSign = /* @__PURE__ */ XDTXKETK_cjs.__name((tree, options) => {
216
+ return ethers.ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));
217
+ }, "getDigestToSign");
233
218
  async function signOneSigTree(tree, signers, options, enc = "string") {
234
219
  if (signers.length <= 0) {
235
- throw new OneSigCoreError("ONE_SIGNER_REQUIRED", "1+ signer must be provided");
220
+ throw new XDTXKETK_cjs.OneSigCoreError("ONE_SIGNER_REQUIRED", "1+ signer must be provided");
236
221
  }
237
222
  const toSign = getSigningData(tree, options);
238
- const signatures = await Promise.all(
239
- signers.map(async function(signer) {
240
- const data = await signer._signTypedData(...toSign);
241
- return new Signature(data);
242
- })
243
- );
244
- const signingDigest = ethers.utils._TypedDataEncoder.hash(...toSign);
223
+ const signatures = await Promise.all(signers.map(async function(signer) {
224
+ const data = await signer._signTypedData(...toSign);
225
+ return new Signature(data);
226
+ }));
227
+ const signingDigest = ethers.ethers.utils._TypedDataEncoder.hash(...toSign);
245
228
  const sig = Signature.concatenateSignatures(signatures, signingDigest);
246
229
  if (enc === "signature") {
247
230
  return sig;
@@ -251,17 +234,22 @@ async function signOneSigTree(tree, signers, options, enc = "string") {
251
234
  throw new Error("Invalid encoding");
252
235
  }
253
236
  }
254
- export {
255
- MerkleTree,
256
- Signature,
257
- compareAddresses,
258
- encodeLeaf,
259
- encodeLeafHeader,
260
- getDigestToSign,
261
- getOneSigTypedDataDomain,
262
- getOneSigTypedDataDomainTypes,
263
- getOneSigTypedDataPrimaryTypes,
264
- getSigningData,
265
- makeOneSigTree,
266
- signOneSigTree
267
- };
237
+ XDTXKETK_cjs.__name(signOneSigTree, "signOneSigTree");
238
+
239
+ Object.defineProperty(exports, "MerkleTree", {
240
+ enumerable: true,
241
+ get: function () { return merkletreejs.MerkleTree; }
242
+ });
243
+ exports.Signature = Signature;
244
+ exports.compareAddresses = compareAddresses;
245
+ exports.encodeLeaf = encodeLeaf;
246
+ exports.encodeLeafHeader = encodeLeafHeader;
247
+ exports.getDigestToSign = getDigestToSign;
248
+ exports.getOneSigTypedDataDomain = getOneSigTypedDataDomain;
249
+ exports.getOneSigTypedDataDomainTypes = getOneSigTypedDataDomainTypes;
250
+ exports.getOneSigTypedDataPrimaryTypes = getOneSigTypedDataPrimaryTypes;
251
+ exports.getSigningData = getSigningData;
252
+ exports.makeOneSigTree = makeOneSigTree;
253
+ exports.signOneSigTree = signOneSigTree;
254
+ //# sourceMappingURL=index.cjs.map
255
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":["readByteFromHex","input","byteOffset","charOffset","sub","substring","parseInt","encodeLeafHeader","targetOneSigAddress","oneSigId","nonce","byteLength","Error","storage","Buffer","alloc","idStr","toString","padStart","nonceStr","i","encodeLeaf","gen","index","leaf","leafs","leafData","concat","encodeAddress","encodeCalls","calls","ethers","utils","keccak256","makeOneSigTree","encodedLeafs","seenNonceIds","Set","length","nonceIdCombo","has","OneSigCoreError","add","push","tree","MerkleTree","sort","compareAddresses","a","b","aNumeric","BigInt","bNumeric","Signature","value","get","startsWith","from","toHexString","signatureCount","count","Math","floor","concatenateSignatures","sortMethod","signatureBuffers","map","singleInput","signature","orderedSignatures","addresses","isBuffer","recovered","recoverAddress","indexMapping","Array","fill","_","combined","ONE_SIG_TYPED_DATA_DOMAIN","name","version","chainId","verifyingContract","getOneSigTypedDataDomain","__name","ONE_SIG_TYPED_DATA_DOMAIN_TYPES","EIP712Domain","type","getOneSigTypedDataDomainTypes","ONE_SIG_TYPED_DATA_PRIMARY_TYPES","SignMerkleRoot","getOneSigTypedDataPrimaryTypes","getSigningData","seed","expiry","merkleRoot","getHexRoot","getDigestToSign","options","_TypedDataEncoder","hash","signOneSigTree","signers","enc","toSign","signatures","Promise","all","signer","data","_signTypedData","signingDigest","sig"],"mappings":";;;;;;AAgCA,SAASA,eAAAA,CAAgBC,OAAeC,UAAAA,EAAkB;AACtD,EAAA,MAAMC,aAAaD,UAAAA,GAAa,CAAA;AAChC,EAAA,MAAME,GAAAA,GAAMH,KAAAA,CAAMI,SAAAA,CAAUF,UAAAA,EAAYA,aAAa,CAAA,CAAA;AACrD,EAAA,OAAOG,QAAAA,CAASF,KAAK,EAAA,CAAA;AACzB;AAJSJ,mBAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAMF,SAASO,gBAAAA,CAAiB,EAC7BC,mBAAAA,EACAC,QAAAA,EACAC,OAAK,EAC6B;AAClC,EAAA,IAAIF,mBAAAA,CAAoBG,eAAe,EAAA,EAAI;AACvC,IAAA,MAAM,IAAIC,MAAM,mCAAA,CAAA;AACpB,EAAA;AAEA,EAAA,MAAMC,OAAAA,GAAUC,MAAAA,CAAOC,KAAAA,CAAM,EAAA,CAAA;AAC7BF,EAAAA,OAAAA,CAAQ,CAAA,CAAA,GAAK,CAAA;AAEb,EAAA,MAAMG,QAAQP,QAAAA,CAASQ,QAAAA,CAAS,EAAA,CAAA,CAAIC,QAAAA,CAAS,IAAI,GAAA,CAAA;AACjD,EAAA,MAAMC,WAAWT,KAAAA,CAAMO,QAAAA,CAAS,EAAA,CAAA,CAAIC,QAAAA,CAAS,IAAI,GAAA,CAAA;AAEjD,EAAA,KAAA,IAASE,CAAAA,GAAI,CAAA,EAAGA,CAAAA,GAAI,EAAA,EAAIA,CAAAA,EAAAA,EAAK;AACzB,IAAA,IAAIA,IAAI,CAAA,EAAG;AACPP,MAAAA,OAAAA,CAAQO,CAAAA,GAAI,CAAA,CAAA,GAAKpB,eAAAA,CAAgBgB,OAAOI,CAAAA,CAAAA;AACxCP,MAAAA,OAAAA,CAAQO,CAAAA,GAAI,EAAA,CAAA,GAAMpB,eAAAA,CAAgBmB,UAAUC,CAAAA,CAAAA;AAChD,IAAA;AAEAP,IAAAA,OAAAA,CAAQO,CAAAA,GAAI,CAAA,CAAA,GAAKZ,mBAAAA,CAAoBY,CAAAA,CAAAA;AACzC,EAAA;AAEA,EAAA,OAAOP,OAAAA;AACX;AAzBgBN,mBAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AA2BT,SAASc,UAAAA,CAAWC,KAA0BC,KAAAA,EAAa;AAC9D,EAAA,MAAMC,IAAAA,GAAOF,GAAAA,CAAIG,KAAAA,CAAMF,KAAAA,CAAAA;AAEvB,EAAA,IAAI,CAACC,IAAAA,EAAM;AACP,IAAA,MAAM,IAAIZ,MAAM,qBAAA,CAAA;AACpB,EAAA;AAEA,EAAA,MAAMc,QAAAA,GAAWZ,OAAOa,MAAAA,CAAO;IAC3BpB,gBAAAA,CAAiB;AACbG,MAAAA,KAAAA,EAAOc,IAAAA,CAAKd,KAAAA;AACZD,MAAAA,QAAAA,EAAUe,IAAAA,CAAKf,QAAAA;MACfD,mBAAAA,EAAqBc,GAAAA,CAAIM,aAAAA,CAAcJ,IAAAA,CAAKhB,mBAAmB;KACnE,CAAA;IACAc,GAAAA,CAAIO,WAAAA,CAAYL,KAAKM,KAAK;AAC7B,GAAA,CAAA;AAED,EAAA,OAAOC,cAAOC,KAAAA,CAAMC,SAAAA,CAAUF,cAAOC,KAAAA,CAAMC,SAAAA,CAAUP,QAAAA,CAAAA,CAAAA;AACzD;AAjBgBL,mBAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAmBT,SAASa,eAAejC,KAAAA,EAA4B;AACvD,EAAA,MAAMkC,eAAe,EAAA;AACrB,EAAA,MAAMC,YAAAA,uBAAmBC,GAAAA,EAAAA;AAEzB,EAAA,KAAA,MAAWf,OAAOrB,KAAAA,EAAO;AACrB,IAAA,KAAA,IAASmB,IAAI,CAAA,EAAGA,CAAAA,GAAIE,GAAAA,CAAIG,KAAAA,CAAMa,QAAQlB,CAAAA,EAAAA,EAAK;AACvC,MAAA,MAAMI,IAAAA,GAAOF,GAAAA,CAAIG,KAAAA,CAAML,CAAAA,CAAAA;AAGvB,MAAA,MAAMmB,eAAe,CAAA,EAAGf,IAAAA,CAAKd,KAAK,CAAA,CAAA,EAAIc,KAAKf,QAAQ,CAAA,CAAA;AACnD,MAAA,IAAI2B,YAAAA,CAAaI,GAAAA,CAAID,YAAAA,CAAAA,EAAe;AAChC,QAAA,MAAM,IAAIE,4BAAAA,CACN,qBAAA,EACA,6DAAA,CAAA;AAER,MAAA;AACAL,MAAAA,YAAAA,CAAaM,IAAIH,YAAAA,CAAAA;AAEjBJ,MAAAA,YAAAA,CAAaQ,IAAAA,CAAKtB,UAAAA,CAAWC,GAAAA,EAAKF,CAAAA,CAAAA,CAAAA;AACtC,IAAA;AACJ,EAAA;AAKA,EAAA,MAAMwB,OAAO,IAAIC,uBAAAA,CAAWV,YAAAA,EAAcJ,aAAAA,CAAOC,MAAMC,SAAAA,EAAW;IAAEa,IAAAA,EAAM;GAAK,CAAA;AAE/E,EAAA,OAAOF,IAAAA;AACX;AA5BgBV,mBAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AA8BT,SAASa,gBAAAA,CAAiBC,GAAWC,CAAAA,EAAS;AACjD,EAAA,MAAMC,QAAAA,GAAWC,OAAOH,CAAAA,CAAAA;AACxB,EAAA,MAAMI,QAAAA,GAAWD,OAAOF,CAAAA,CAAAA;AAExB,EAAA,IAAIC,aAAaE,QAAAA,EAAU;AACvB,IAAA,OAAO,CAAA;AACX,EAAA,CAAA,MAAA,IAAWF,WAAWE,QAAAA,EAAU;AAC5B,IAAA,OAAO,EAAA;EACX,CAAA,MAAO;AACH,IAAA,OAAO,CAAA;AACX,EAAA;AACJ;AAXgBL,mBAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AAgBT,IAAMM,SAAAA,GAAN,MAAMA,UAAAA,CAAAA;EAhIb;;;AAiII,EAAA,MAAA;AAEA,EAAA,WAAA,CAAYpD,KAAAA,EAAsB;AAC9B,IAAA,IAAIqD,KAAAA,GAAQrD,KAAAA;AACZ,IAAA,IAAIqD,iBAAiBD,UAAAA,EAAW;AAC5BC,MAAAA,KAAAA,GAAQA,MAAMC,GAAAA,EAAG;AACrB,IAAA;AAEA,IAAA,IAAI,OAAOD,UAAU,QAAA,EAAU;AAC3B,MAAA,IAAI,CAACA,KAAAA,CAAME,UAAAA,CAAW,IAAA,CAAA,EAAO;AACzB,QAAA,MAAM,IAAIf,4BAAAA,CACN,yBAAA,EACA,8DAAA,CAAA;AAER,MAAA;AAEAa,MAAAA,KAAAA,GAAQxC,OAAO2C,IAAAA,CAAKH,KAAAA,CAAMjD,SAAAA,CAAU,CAAA,GAAI,KAAA,CAAA;AAC5C,IAAA;AAEA,IAAA,IAAIiD,KAAAA,CAAMhB,MAAAA,GAAS,EAAA,KAAO,CAAA,EAAG;AACzB,MAAA,MAAM,IAAIG,4BAAAA,CACN,yBAAA,EACA,sCAAA,CAAA;AAER,IAAA;AAEA,IAAA,IAAA,CAAK,MAAA,GAASa,KAAAA;AAClB,EAAA;EAEAC,GAAAA,GAAM;AACF,IAAA,OAAO,IAAA,CAAK,MAAA;AAChB,EAAA;EAEAG,WAAAA,GAAyB;AACrB,IAAA,OAAO,KAAK,IAAA,CAAKH,GAAAA,EAAG,CAAGtC,QAAAA,CAAS,KAAA,CAAA,CAAA,CAAA;AACpC,EAAA;AAEA,EAAA,IAAI0C,cAAAA,GAAiB;AACjB,IAAA,MAAMC,KAAAA,GAAQ,IAAA,CAAK,MAAA,CAAOtB,MAAAA,GAAS,EAAA;AACnC,IAAA,IAAIuB,IAAAA,CAAKC,KAAAA,CAAMF,KAAAA,CAAAA,KAAWA,KAAAA,EAAO;AAC7B,MAAA,MAAM,IAAIhD,MAAM,qBAAA,CAAA;AACpB,IAAA;AACA,IAAA,OAAOgD,KAAAA;AACX,EAAA;;;;;;;EAoBA,OAAOG,qBAAAA,CACH9D,OACA+D,UAAAA,EACF;AACE,IAAA,MAAMC,gBAAAA,GAAmBhE,KAAAA,CAAMiE,GAAAA,CAAI,SAAUC,WAAAA,EAAW;AACpD,MAAA,MAAMC,SAAAA,GAAY,IAAIf,UAAAA,CAAUc,WAAAA,CAAAA;AAEhC,MAAA,IAAIC,SAAAA,CAAUT,mBAAmB,CAAA,EAAG;AAChC,QAAA,MAAM,IAAIlB,4BAAAA,CACN,qBAAA,EACA,gDAAA,CAAA;AAER,MAAA;AAEA,MAAA,OAAO2B,UAAUb,GAAAA,EAAG;IACxB,CAAA,CAAA;AAEA,IAAA,IAAIc,iBAAAA;AAEJ,IAAA,IAAIL,eAAe,KAAA,EAAO;AACtBK,MAAAA,iBAAAA,GAAoBJ,gBAAAA;IACxB,CAAA,MAAO;AACH,MAAA,IAAIK,SAAAA;AACJ,MAAA,IAAI,OAAON,UAAAA,KAAe,QAAA,IAAYlD,MAAAA,CAAOyD,QAAAA,CAASP,UAAAA,CAAAA,EAAa;AAC/DM,QAAAA,SAAAA,GAAY,EAAA;AAEZ,QAAA,KAAA,MAAWF,aAAaH,gBAAAA,EAAkB;AACtC,UAAA,MAAMO,SAAAA,GAAYzC,aAAAA,CAAOC,KAAAA,CAAMyC,cAAAA,CAAeT,YAAYI,SAAAA,CAAAA;AAC1DE,UAAAA,SAAAA,CAAU3B,KAAK6B,SAAAA,CAAAA;AACnB,QAAA;MACJ,CAAA,MAAO;AACHF,QAAAA,SAAAA,GAAYN,UAAAA;AAChB,MAAA;AAEA,MAAA,IAAIM,SAAAA,CAAUhC,MAAAA,KAAW2B,gBAAAA,CAAiB3B,MAAAA,EAAQ;AAC9C,QAAA,MAAM,IAAIG,4BAAAA,CACN,mCAAA,EACA,2CAAA,CAAA;AAER,MAAA;AAGA,MAAA,MAAMiC,eAAe,IAAIC,KAAAA,CAAML,UAAUhC,MAAM,CAAA,CAC1CsC,KAAK,CAAA,CAAA,CACLV,GAAAA,CAAI,CAACW,GAAGzD,CAAAA,KAAMA,CAAAA,EAEd0B,IAAAA,CAAK,CAACE,GAAGC,CAAAA,KAAAA;AACN,QAAA,OAAOF,iBAAiBuB,SAAAA,CAAUtB,CAAAA,CAAAA,EAAIsB,SAAAA,CAAUrB,CAAAA,CAAE,CAAA;MACtD,CAAA,CAAA;AAEJoB,MAAAA,iBAAAA,GAAoBK,aAAaR,GAAAA,CAAI,CAAC3C,KAAAA,KAAU0C,gBAAAA,CAAiB1C,KAAAA,CAAM,CAAA;AAC3E,IAAA;AAEA,IAAA,MAAMuD,QAAAA,GAAWhE,MAAAA,CAAOa,MAAAA,CAAO0C,iBAAAA,CAAAA;AAE/B,IAAA,OAAO,IAAI,KAAKS,QAAAA,CAAAA;AACpB,EAAA;AACJ;AAEA,IAAMC,yBAAAA,GAA6C;EAC/CC,IAAAA,EAAM,QAAA;EACNC,OAAAA,EAAS,OAAA;EACTC,OAAAA,EAAS,CAAA;EACTC,iBAAAA,EAAmB;AACvB,CAAA;AAEO,IAAMC,2CAA2BC,mBAAA,CAAA,MAAA;AACpC,EAAA,OAAON,yBAAAA;AACX,CAAA,EAFwC,0BAAA;AAIxC,IAAMO,+BAAAA,GAAoE;EACtEC,YAAAA,EAAc;AACV,IAAA;MAAEP,IAAAA,EAAM,MAAA;MAAQQ,IAAAA,EAAM;AAAS,KAAA;AAC/B,IAAA;MAAER,IAAAA,EAAM,SAAA;MAAWQ,IAAAA,EAAM;AAAS,KAAA;AAClC,IAAA;MAAER,IAAAA,EAAM,SAAA;MAAWQ,IAAAA,EAAM;AAAU,KAAA;AACnC,IAAA;MAAER,IAAAA,EAAM,mBAAA;MAAqBQ,IAAAA,EAAM;AAAU;;AAErD,CAAA;AAEO,IAAMC,gDAAgCJ,mBAAA,CAAA,MAAA;AACzC,EAAA,OAAOC,+BAAAA;AACX,CAAA,EAF6C,+BAAA;AAI7C,IAAMI,gCAAAA,GAAqE;EACvEC,cAAAA,EAAgB;AACZ,IAAA;MAAEX,IAAAA,EAAM,MAAA;MAAQQ,IAAAA,EAAM;AAAU,KAAA;AAChC,IAAA;MAAER,IAAAA,EAAM,YAAA;MAAcQ,IAAAA,EAAM;AAAU,KAAA;AACtC,IAAA;MAAER,IAAAA,EAAM,QAAA;MAAUQ,IAAAA,EAAM;AAAU;;AAE1C,CAAA;AAEO,IAAMI,iDAAiCP,mBAAA,CAAA,MAAA;AAC1C,EAAA,OAAOK,gCAAAA;AACX,CAAA,EAF8C,gCAAA;AAIvC,IAAMG,iCAAiBR,mBAAA,CAAA,CAC1BzC,IAAAA,EACA,EAAEkD,IAAAA,EAAMC,QAAM,KAAkB;AAEhC,EAAA,OAAO;IACHX,wBAAAA,EAAAA;IACAQ,8BAAAA,EAAAA;AACA,IAAA;AACIE,MAAAA,IAAAA;AACAC,MAAAA,MAAAA;AACAC,MAAAA,UAAAA,EAAYpD,KAAKqD,UAAAA;AACrB;;AAER,CAAA,EAb8B,gBAAA;AAevB,IAAMC,eAAAA,mBAAkBb,mBAAA,CAAA,CAACzC,IAAAA,EAAkBuD,OAAAA,KAAAA;AAC9C,EAAA,OAAOpE,aAAAA,CAAOC,MAAMoE,iBAAAA,CAAkBC,IAAAA,CAAI,GAAIR,cAAAA,CAAejD,IAAAA,EAAMuD,OAAAA,CAAAA,CAAAA;AACvE,CAAA,EAF+B,iBAAA;AAgB/B,eAAsBG,cAAAA,CAClB1D,IAAAA,EACA2D,OAAAA,EACAJ,OAAAA,EACAK,MAA8B,QAAA,EAAQ;AAEtC,EAAA,IAAID,OAAAA,CAAQjE,UAAU,CAAA,EAAG;AACrB,IAAA,MAAM,IAAIG,4BAAAA,CAAgB,qBAAA,EAAuB,4BAAA,CAAA;AACrD,EAAA;AAEA,EAAA,MAAMgE,MAAAA,GAASZ,cAAAA,CAAejD,IAAAA,EAAMuD,OAAAA,CAAAA;AAEpC,EAAA,MAAMO,aAAa,MAAMC,OAAAA,CAAQC,IAC7BL,OAAAA,CAAQrC,GAAAA,CAAI,eAAgB2C,MAAAA,EAAM;AAC9B,IAAA,MAAMC,IAAAA,GAAO,MAAMD,MAAAA,CAAOE,cAAAA,CAAc,GAAIN,MAAAA,CAAAA;AAC5C,IAAA,OAAO,IAAIpD,UAAUyD,IAAAA,CAAAA;AACzB,EAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAME,gBAAgBjF,aAAAA,CAAOC,KAAAA,CAAMoE,iBAAAA,CAAkBC,IAAAA,CAAI,GAAII,MAAAA,CAAAA;AAE7D,EAAA,MAAMQ,GAAAA,GAAM5D,SAAAA,CAAUU,qBAAAA,CAAsB2C,UAAAA,EAAYM,aAAAA,CAAAA;AAExD,EAAA,IAAIR,QAAQ,WAAA,EAAa;AACrB,IAAA,OAAOS,GAAAA;AACX,EAAA,CAAA,MAAA,IAAWT,QAAQ,QAAA,EAAU;AACzB,IAAA,OAAOS,IAAIvD,WAAAA,EAAW;EAC1B,CAAA,MAAO;AACH,IAAA,MAAM,IAAI9C,MAAM,kBAAA,CAAA;AACpB,EAAA;AACJ;AA9BsB0F,mBAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA","file":"index.cjs","sourcesContent":["import type { TypedDataSigner } from '@ethersproject/abstract-signer';\nimport type { BigNumber, TypedDataDomain, TypedDataField } from 'ethers';\nimport { ethers } from 'ethers';\nimport { MerkleTree } from 'merkletreejs';\n\nimport type { HexString } from '@layerzerolabs/typescript-utils';\n\nimport { OneSigCoreError } from './error';\n\n// Re-export MerkleTree and TypedDataSigner to avoid duplicate dependencies and version differences\nexport { MerkleTree, type TypedDataSigner };\n\nexport interface BaseLeafData<TargetAddressType = unknown, CallData = unknown> {\n nonce: bigint;\n oneSigId: bigint;\n targetOneSigAddress: TargetAddressType;\n calls: CallData[];\n}\n\nexport interface SigningOptions {\n seed: string | Uint8Array;\n expiry: number | string | BigNumber;\n}\n\n// We can use any here as it will be overridden by implementation\n\nexport interface GenerateLeafsResult<Leaf extends BaseLeafData = BaseLeafData<any, any>> {\n encodeCalls: (calls: Leaf['calls']) => Buffer;\n encodeAddress: (address: Leaf['targetOneSigAddress']) => Buffer;\n leafs: Leaf[];\n}\n\nfunction readByteFromHex(input: string, byteOffset: number) {\n const charOffset = byteOffset * 2;\n const sub = input.substring(charOffset, charOffset + 2);\n return parseInt(sub, 16);\n}\n\nexport function encodeLeafHeader({\n targetOneSigAddress,\n oneSigId,\n nonce,\n}: Omit<BaseLeafData<Buffer>, 'calls'>) {\n if (targetOneSigAddress.byteLength !== 32) {\n throw new Error('Contract address must be 32 bytes');\n }\n\n const storage = Buffer.alloc(49);\n storage[0] = 1;\n\n const idStr = oneSigId.toString(16).padStart(16, '0');\n const nonceStr = nonce.toString(16).padStart(16, '0');\n\n for (let i = 0; i < 32; i++) {\n if (i < 8) {\n storage[i + 1] = readByteFromHex(idStr, i); // oneSigId\n storage[i + 41] = readByteFromHex(nonceStr, i); // nonce\n }\n\n storage[i + 9] = targetOneSigAddress[i]; // target address\n }\n\n return storage;\n}\n\nexport function encodeLeaf(gen: GenerateLeafsResult, index: number) {\n const leaf = gen.leafs[index];\n\n if (!leaf) {\n throw new Error('Leaf does not exist');\n }\n\n const leafData = Buffer.concat([\n encodeLeafHeader({\n nonce: leaf.nonce,\n oneSigId: leaf.oneSigId,\n targetOneSigAddress: gen.encodeAddress(leaf.targetOneSigAddress),\n }) as unknown as Uint8Array,\n gen.encodeCalls(leaf.calls) as unknown as Uint8Array,\n ]);\n\n return ethers.utils.keccak256(ethers.utils.keccak256(leafData));\n}\n\nexport function makeOneSigTree(input: GenerateLeafsResult[]) {\n const encodedLeafs = [];\n const seenNonceIds = new Set();\n\n for (const gen of input) {\n for (let i = 0; i < gen.leafs.length; i++) {\n const leaf = gen.leafs[i];\n\n // Ensure that two calls with the same nonce/oneSigId have not already been seen\n const nonceIdCombo = `${leaf.nonce}.${leaf.oneSigId}`;\n if (seenNonceIds.has(nonceIdCombo)) {\n throw new OneSigCoreError(\n 'NONCE_ID_SEEN_TWICE',\n 'Two calls should not be made for the same chain/nonce twice',\n );\n }\n seenNonceIds.add(nonceIdCombo);\n\n encodedLeafs.push(encodeLeaf(gen, i));\n }\n }\n\n // Using sort: true instead of sortPairs: true for better determinism and multiProof compatibility.\n // sort: true enables both sortLeaves and sortPairs, ensuring consistent leaf ordering\n // and makes the tree structure completely predictable regardless of input order.\n const tree = new MerkleTree(encodedLeafs, ethers.utils.keccak256, { sort: true });\n\n return tree;\n}\n\nexport function compareAddresses(a: string, b: string): number {\n const aNumeric = BigInt(a);\n const bNumeric = BigInt(b);\n\n if (aNumeric === bNumeric) {\n return 0;\n } else if (aNumeric < bNumeric) {\n return -1;\n } else {\n return 1;\n }\n}\n\n// XXX:TODO At some point this should be moved away\ntype SignatureLike = Buffer | string | Signature | HexString;\n\nexport class Signature {\n #value: Buffer;\n\n constructor(input: SignatureLike) {\n let value = input;\n if (value instanceof Signature) {\n value = value.get();\n }\n\n if (typeof value === 'string') {\n if (!value.startsWith('0x')) {\n throw new OneSigCoreError(\n 'INVALID_SIGNATURE_INPUT',\n 'Signature takes in hex encoded strings prefixed with 0x only',\n );\n }\n\n value = Buffer.from(value.substring(2), 'hex');\n }\n\n if (value.length % 65 !== 0) {\n throw new OneSigCoreError(\n 'INVALID_SIGNATURE_INPUT',\n 'Each signature must be 65 bytes long',\n );\n }\n\n this.#value = value;\n }\n\n get() {\n return this.#value;\n }\n\n toHexString(): HexString {\n return `0x${this.get().toString('hex')}`;\n }\n\n get signatureCount() {\n const count = this.#value.length / 65;\n if (Math.floor(count) !== count) {\n throw new Error('Count is not an int');\n }\n return count;\n }\n\n /**\n * Concatenate signatures without changing ordering\n */\n static concatenateSignatures(input: SignatureLike[], sortMethod: false): Signature;\n /**\n * Concatenate signatures based on addresses provided, with each signature corresponding to the address in the same index\n */\n static concatenateSignatures(input: SignatureLike[], addresses: string[]): Signature;\n /**\n * Concatenate signatures based on the signature data, ordering based on the recovered address\n */\n static concatenateSignatures(input: SignatureLike[], digest: Buffer | string): Signature;\n /**\n * Concatenate and order signatures based on data provided\n * @param input An array of signatures to concat\n * @param sortMethod Parameter specifing how to order each signature\n * @returns The concatenated signature\n */\n static concatenateSignatures(\n input: SignatureLike[],\n sortMethod: string[] | Buffer | false | string,\n ) {\n const signatureBuffers = input.map(function (singleInput) {\n const signature = new Signature(singleInput);\n\n if (signature.signatureCount !== 1) {\n throw new OneSigCoreError(\n 'CANNOT_CONCAT_INPUT',\n 'Cannot concatenate pre-concatenated signatures',\n );\n }\n\n return signature.get();\n });\n\n let orderedSignatures;\n\n if (sortMethod === false) {\n orderedSignatures = signatureBuffers;\n } else {\n let addresses;\n if (typeof sortMethod === 'string' || Buffer.isBuffer(sortMethod)) {\n addresses = [];\n\n for (const signature of signatureBuffers) {\n const recovered = ethers.utils.recoverAddress(sortMethod, signature);\n addresses.push(recovered);\n }\n } else {\n addresses = sortMethod;\n }\n\n if (addresses.length !== signatureBuffers.length) {\n throw new OneSigCoreError(\n 'ADDRESS_SIGNATURE_LENGTH_MISMATCH',\n 'Mismatch in addresses provided signatures',\n );\n }\n\n // Create an array with the same length of addresses with incrementing values ([0, 1, ... 5])\n const indexMapping = new Array(addresses.length)\n .fill(0)\n .map((_, i) => i)\n // Sort this array based on the references to the address array, so we can apply the same order to the signatures\n .sort((a, b) => {\n return compareAddresses(addresses[a], addresses[b]);\n });\n\n orderedSignatures = indexMapping.map((index) => signatureBuffers[index]);\n }\n\n const combined = Buffer.concat(orderedSignatures);\n\n return new this(combined);\n }\n}\n\nconst ONE_SIG_TYPED_DATA_DOMAIN: TypedDataDomain = {\n name: 'OneSig',\n version: '0.0.1',\n chainId: 1, // this is hardcoded to Ethereum mainnet\n verifyingContract: '0x000000000000000000000000000000000000dEaD', // this is hardcoded to a dead address\n};\n\nexport const getOneSigTypedDataDomain = (): TypedDataDomain => {\n return ONE_SIG_TYPED_DATA_DOMAIN;\n};\n\nconst ONE_SIG_TYPED_DATA_DOMAIN_TYPES: Record<string, TypedDataField[]> = {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n};\n\nexport const getOneSigTypedDataDomainTypes = (): Record<string, TypedDataField[]> => {\n return ONE_SIG_TYPED_DATA_DOMAIN_TYPES;\n};\n\nconst ONE_SIG_TYPED_DATA_PRIMARY_TYPES: Record<string, TypedDataField[]> = {\n SignMerkleRoot: [\n { name: 'seed', type: 'bytes32' },\n { name: 'merkleRoot', type: 'bytes32' },\n { name: 'expiry', type: 'uint256' },\n ],\n};\n\nexport const getOneSigTypedDataPrimaryTypes = (): Record<string, TypedDataField[]> => {\n return ONE_SIG_TYPED_DATA_PRIMARY_TYPES;\n};\n\nexport const getSigningData = (\n tree: MerkleTree,\n { seed, expiry }: SigningOptions,\n): Parameters<TypedDataSigner['_signTypedData']> => {\n return [\n getOneSigTypedDataDomain(),\n getOneSigTypedDataPrimaryTypes(),\n {\n seed: seed,\n expiry: expiry,\n merkleRoot: tree.getHexRoot(),\n },\n ];\n};\n\nexport const getDigestToSign = (tree: MerkleTree, options: SigningOptions) => {\n return ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));\n};\n\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc?: 'string',\n): Promise<string>;\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc: 'signature',\n): Promise<Signature>;\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc: 'signature' | 'string' = 'string',\n): Promise<Signature | string> {\n if (signers.length <= 0) {\n throw new OneSigCoreError('ONE_SIGNER_REQUIRED', '1+ signer must be provided');\n }\n\n const toSign = getSigningData(tree, options);\n\n const signatures = await Promise.all(\n signers.map(async function (signer): Promise<Signature> {\n const data = await signer._signTypedData(...toSign);\n return new Signature(data);\n }),\n );\n\n const signingDigest = ethers.utils._TypedDataEncoder.hash(...toSign);\n\n const sig = Signature.concatenateSignatures(signatures, signingDigest);\n\n if (enc === 'signature') {\n return sig;\n } else if (enc === 'string') {\n return sig.toHexString();\n } else {\n throw new Error('Invalid encoding');\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,35 +1,33 @@
1
- import { BigNumber, TypedDataDomain, TypedDataField } from 'ethers';
1
+ import type { TypedDataSigner } from '@ethersproject/abstract-signer';
2
+ import type { BigNumber, TypedDataDomain, TypedDataField } from 'ethers';
2
3
  import { MerkleTree } from 'merkletreejs';
3
- export { MerkleTree } from 'merkletreejs';
4
- import { TypedDataSigner } from '@ethersproject/abstract-signer';
5
- export { TypedDataSigner } from '@ethersproject/abstract-signer';
6
-
7
- interface BaseLeafData<TargetAddressType = unknown, CallData = unknown> {
4
+ import type { HexString } from '@layerzerolabs/typescript-utils';
5
+ export { MerkleTree, type TypedDataSigner };
6
+ export interface BaseLeafData<TargetAddressType = unknown, CallData = unknown> {
8
7
  nonce: bigint;
9
8
  oneSigId: bigint;
10
9
  targetOneSigAddress: TargetAddressType;
11
10
  calls: CallData[];
12
11
  }
13
- interface SigningOptions {
12
+ export interface SigningOptions {
14
13
  seed: string | Uint8Array;
15
14
  expiry: number | string | BigNumber;
16
15
  }
17
- interface GenerateLeafsResult<Leaf extends BaseLeafData = BaseLeafData<any, any>> {
16
+ export interface GenerateLeafsResult<Leaf extends BaseLeafData = BaseLeafData<any, any>> {
18
17
  encodeCalls: (calls: Leaf['calls']) => Buffer;
19
18
  encodeAddress: (address: Leaf['targetOneSigAddress']) => Buffer;
20
19
  leafs: Leaf[];
21
20
  }
22
- declare function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }: Omit<BaseLeafData<Buffer>, 'calls'>): Buffer;
23
- declare function encodeLeaf(gen: GenerateLeafsResult, index: number): string;
24
- declare function makeOneSigTree(input: GenerateLeafsResult[]): MerkleTree;
25
- declare function compareAddresses(a: string, b: string): number;
26
- type HexStringLike = `0x${string}`;
27
- type SignatureLike = Buffer | string | Signature | HexStringLike;
28
- declare class Signature {
21
+ export declare function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce, }: Omit<BaseLeafData<Buffer>, 'calls'>): Buffer<ArrayBuffer>;
22
+ export declare function encodeLeaf(gen: GenerateLeafsResult, index: number): string;
23
+ export declare function makeOneSigTree(input: GenerateLeafsResult[]): MerkleTree;
24
+ export declare function compareAddresses(a: string, b: string): number;
25
+ type SignatureLike = Buffer | string | Signature | HexString;
26
+ export declare class Signature {
29
27
  #private;
30
28
  constructor(input: SignatureLike);
31
- get(): Buffer;
32
- toHexString(): HexStringLike;
29
+ get(): Buffer<ArrayBufferLike>;
30
+ toHexString(): HexString;
33
31
  get signatureCount(): number;
34
32
  /**
35
33
  * Concatenate signatures without changing ordering
@@ -44,12 +42,11 @@ declare class Signature {
44
42
  */
45
43
  static concatenateSignatures(input: SignatureLike[], digest: Buffer | string): Signature;
46
44
  }
47
- declare function getOneSigTypedDataDomain(): TypedDataDomain;
48
- declare function getOneSigTypedDataDomainTypes(): Record<string, TypedDataField[]>;
49
- declare function getOneSigTypedDataPrimaryTypes(): Record<string, TypedDataField[]>;
50
- declare function getSigningData(tree: MerkleTree, { seed, expiry }: SigningOptions): Parameters<TypedDataSigner['_signTypedData']>;
51
- declare function getDigestToSign(tree: MerkleTree, options: SigningOptions): string;
52
- declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc?: 'string'): Promise<string>;
53
- declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc: 'signature'): Promise<Signature>;
54
-
55
- export { type BaseLeafData, type GenerateLeafsResult, Signature, type SigningOptions, compareAddresses, encodeLeaf, encodeLeafHeader, getDigestToSign, getOneSigTypedDataDomain, getOneSigTypedDataDomainTypes, getOneSigTypedDataPrimaryTypes, getSigningData, makeOneSigTree, signOneSigTree };
45
+ export declare const getOneSigTypedDataDomain: () => TypedDataDomain;
46
+ export declare const getOneSigTypedDataDomainTypes: () => Record<string, TypedDataField[]>;
47
+ export declare const getOneSigTypedDataPrimaryTypes: () => Record<string, TypedDataField[]>;
48
+ export declare const getSigningData: (tree: MerkleTree, { seed, expiry }: SigningOptions) => Parameters<TypedDataSigner["_signTypedData"]>;
49
+ export declare const getDigestToSign: (tree: MerkleTree, options: SigningOptions) => string;
50
+ export declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc?: 'string'): Promise<string>;
51
+ export declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc: 'signature'): Promise<Signature>;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,80 +1,14 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __typeError = (msg) => {
7
- throw TypeError(msg);
8
- };
9
- var __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from))
16
- if (!__hasOwnProp.call(to, key) && key !== except)
17
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
- }
19
- return to;
20
- };
21
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
1
+ import { __name, OneSigCoreError } from './WGY3RCNT.js';
2
+ import { ethers } from 'ethers';
3
+ import { MerkleTree } from 'merkletreejs';
4
+ export { MerkleTree } from 'merkletreejs';
26
5
 
27
- // src/index.ts
28
- var src_exports = {};
29
- __export(src_exports, {
30
- MerkleTree: () => import_merkletreejs.MerkleTree,
31
- Signature: () => Signature,
32
- compareAddresses: () => compareAddresses,
33
- encodeLeaf: () => encodeLeaf,
34
- encodeLeafHeader: () => encodeLeafHeader,
35
- getDigestToSign: () => getDigestToSign,
36
- getOneSigTypedDataDomain: () => getOneSigTypedDataDomain,
37
- getOneSigTypedDataDomainTypes: () => getOneSigTypedDataDomainTypes,
38
- getOneSigTypedDataPrimaryTypes: () => getOneSigTypedDataPrimaryTypes,
39
- getSigningData: () => getSigningData,
40
- makeOneSigTree: () => makeOneSigTree,
41
- signOneSigTree: () => signOneSigTree
42
- });
43
- module.exports = __toCommonJS(src_exports);
44
- var import_ethers = require("ethers");
45
- var import_merkletreejs = require("merkletreejs");
46
-
47
- // src/error.ts
48
- var _code;
49
- var _OneSigCoreError = class _OneSigCoreError extends Error {
50
- constructor(code, message) {
51
- super(`[${code}] ${message}`);
52
- __privateAdd(this, _code);
53
- __privateSet(this, _code, code);
54
- }
55
- get code() {
56
- return __privateGet(this, _code);
57
- }
58
- static is(input, code) {
59
- if (input instanceof _OneSigCoreError) {
60
- if (code) {
61
- return input.code === code;
62
- }
63
- return true;
64
- } else {
65
- return false;
66
- }
67
- }
68
- };
69
- _code = new WeakMap();
70
- var OneSigCoreError = _OneSigCoreError;
71
-
72
- // src/index.ts
73
6
  function readByteFromHex(input, byteOffset) {
74
7
  const charOffset = byteOffset * 2;
75
8
  const sub = input.substring(charOffset, charOffset + 2);
76
9
  return parseInt(sub, 16);
77
10
  }
11
+ __name(readByteFromHex, "readByteFromHex");
78
12
  function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }) {
79
13
  if (targetOneSigAddress.byteLength !== 32) {
80
14
  throw new Error("Contract address must be 32 bytes");
@@ -92,6 +26,7 @@ function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }) {
92
26
  }
93
27
  return storage;
94
28
  }
29
+ __name(encodeLeafHeader, "encodeLeafHeader");
95
30
  function encodeLeaf(gen, index) {
96
31
  const leaf = gen.leafs[index];
97
32
  if (!leaf) {
@@ -105,8 +40,9 @@ function encodeLeaf(gen, index) {
105
40
  }),
106
41
  gen.encodeCalls(leaf.calls)
107
42
  ]);
108
- return import_ethers.ethers.utils.keccak256(import_ethers.ethers.utils.keccak256(leafData));
43
+ return ethers.utils.keccak256(ethers.utils.keccak256(leafData));
109
44
  }
45
+ __name(encodeLeaf, "encodeLeaf");
110
46
  function makeOneSigTree(input) {
111
47
  const encodedLeafs = [];
112
48
  const seenNonceIds = /* @__PURE__ */ new Set();
@@ -115,18 +51,18 @@ function makeOneSigTree(input) {
115
51
  const leaf = gen.leafs[i];
116
52
  const nonceIdCombo = `${leaf.nonce}.${leaf.oneSigId}`;
117
53
  if (seenNonceIds.has(nonceIdCombo)) {
118
- throw new OneSigCoreError(
119
- "NONCE_ID_SEEN_TWICE",
120
- "Two calls should not be made for the same chain/nonce twice"
121
- );
54
+ throw new OneSigCoreError("NONCE_ID_SEEN_TWICE", "Two calls should not be made for the same chain/nonce twice");
122
55
  }
123
56
  seenNonceIds.add(nonceIdCombo);
124
57
  encodedLeafs.push(encodeLeaf(gen, i));
125
58
  }
126
59
  }
127
- const tree = new import_merkletreejs.MerkleTree(encodedLeafs, import_ethers.ethers.utils.keccak256, { sortPairs: true });
60
+ const tree = new MerkleTree(encodedLeafs, ethers.utils.keccak256, {
61
+ sort: true
62
+ });
128
63
  return tree;
129
64
  }
65
+ __name(makeOneSigTree, "makeOneSigTree");
130
66
  function compareAddresses(a, b) {
131
67
  const aNumeric = BigInt(a);
132
68
  const bNumeric = BigInt(b);
@@ -138,36 +74,36 @@ function compareAddresses(a, b) {
138
74
  return 1;
139
75
  }
140
76
  }
141
- var _value;
142
- var _Signature = class _Signature {
77
+ __name(compareAddresses, "compareAddresses");
78
+ var Signature = class _Signature {
79
+ static {
80
+ __name(this, "Signature");
81
+ }
82
+ #value;
143
83
  constructor(input) {
144
- __privateAdd(this, _value);
145
84
  let value = input;
146
85
  if (value instanceof _Signature) {
147
86
  value = value.get();
148
87
  }
149
88
  if (typeof value === "string") {
150
89
  if (!value.startsWith("0x")) {
151
- throw new OneSigCoreError(
152
- "INVALID_SIGNATURE_INPUT",
153
- "Signature takes in hex encoded strings prefixed with 0x only"
154
- );
90
+ throw new OneSigCoreError("INVALID_SIGNATURE_INPUT", "Signature takes in hex encoded strings prefixed with 0x only");
155
91
  }
156
92
  value = Buffer.from(value.substring(2), "hex");
157
93
  }
158
94
  if (value.length % 65 !== 0) {
159
95
  throw new OneSigCoreError("INVALID_SIGNATURE_INPUT", "Each signature must be 65 bytes long");
160
96
  }
161
- __privateSet(this, _value, value);
97
+ this.#value = value;
162
98
  }
163
99
  get() {
164
- return __privateGet(this, _value);
100
+ return this.#value;
165
101
  }
166
102
  toHexString() {
167
103
  return `0x${this.get().toString("hex")}`;
168
104
  }
169
105
  get signatureCount() {
170
- const count = __privateGet(this, _value).length / 65;
106
+ const count = this.#value.length / 65;
171
107
  if (Math.floor(count) !== count) {
172
108
  throw new Error("Count is not an int");
173
109
  }
@@ -195,19 +131,16 @@ var _Signature = class _Signature {
195
131
  if (typeof sortMethod === "string" || Buffer.isBuffer(sortMethod)) {
196
132
  addresses = [];
197
133
  for (const signature of signatureBuffers) {
198
- const recovered = import_ethers.ethers.utils.recoverAddress(sortMethod, signature);
134
+ const recovered = ethers.utils.recoverAddress(sortMethod, signature);
199
135
  addresses.push(recovered);
200
136
  }
201
137
  } else {
202
138
  addresses = sortMethod;
203
139
  }
204
140
  if (addresses.length !== signatureBuffers.length) {
205
- throw new OneSigCoreError(
206
- "ADDRESS_SIGNATURE_LENGTH_MISMATCH",
207
- "Mismatch in addresses provided signatures"
208
- );
141
+ throw new OneSigCoreError("ADDRESS_SIGNATURE_LENGTH_MISMATCH", "Mismatch in addresses provided signatures");
209
142
  }
210
- const indexMapping = new Array(addresses.length).fill(0).map((_, i) => i).sort(function(a, b) {
143
+ const indexMapping = new Array(addresses.length).fill(0).map((_, i) => i).sort((a, b) => {
211
144
  return compareAddresses(addresses[a], addresses[b]);
212
145
  });
213
146
  orderedSignatures = indexMapping.map((index) => signatureBuffers[index]);
@@ -216,41 +149,58 @@ var _Signature = class _Signature {
216
149
  return new this(combined);
217
150
  }
218
151
  };
219
- _value = new WeakMap();
220
- var Signature = _Signature;
221
152
  var ONE_SIG_TYPED_DATA_DOMAIN = {
222
153
  name: "OneSig",
223
154
  version: "0.0.1",
224
155
  chainId: 1,
225
- // this is hardcoded to Ethereum mainnet
226
156
  verifyingContract: "0x000000000000000000000000000000000000dEaD"
227
- // this is hardcoded to a dead address
228
157
  };
229
- function getOneSigTypedDataDomain() {
158
+ var getOneSigTypedDataDomain = /* @__PURE__ */ __name(() => {
230
159
  return ONE_SIG_TYPED_DATA_DOMAIN;
231
- }
160
+ }, "getOneSigTypedDataDomain");
232
161
  var ONE_SIG_TYPED_DATA_DOMAIN_TYPES = {
233
162
  EIP712Domain: [
234
- { name: "name", type: "string" },
235
- { name: "version", type: "string" },
236
- { name: "chainId", type: "uint256" },
237
- { name: "verifyingContract", type: "address" }
163
+ {
164
+ name: "name",
165
+ type: "string"
166
+ },
167
+ {
168
+ name: "version",
169
+ type: "string"
170
+ },
171
+ {
172
+ name: "chainId",
173
+ type: "uint256"
174
+ },
175
+ {
176
+ name: "verifyingContract",
177
+ type: "address"
178
+ }
238
179
  ]
239
180
  };
240
- function getOneSigTypedDataDomainTypes() {
181
+ var getOneSigTypedDataDomainTypes = /* @__PURE__ */ __name(() => {
241
182
  return ONE_SIG_TYPED_DATA_DOMAIN_TYPES;
242
- }
183
+ }, "getOneSigTypedDataDomainTypes");
243
184
  var ONE_SIG_TYPED_DATA_PRIMARY_TYPES = {
244
185
  SignMerkleRoot: [
245
- { name: "seed", type: "bytes32" },
246
- { name: "merkleRoot", type: "bytes32" },
247
- { name: "expiry", type: "uint256" }
186
+ {
187
+ name: "seed",
188
+ type: "bytes32"
189
+ },
190
+ {
191
+ name: "merkleRoot",
192
+ type: "bytes32"
193
+ },
194
+ {
195
+ name: "expiry",
196
+ type: "uint256"
197
+ }
248
198
  ]
249
199
  };
250
- function getOneSigTypedDataPrimaryTypes() {
200
+ var getOneSigTypedDataPrimaryTypes = /* @__PURE__ */ __name(() => {
251
201
  return ONE_SIG_TYPED_DATA_PRIMARY_TYPES;
252
- }
253
- function getSigningData(tree, { seed, expiry }) {
202
+ }, "getOneSigTypedDataPrimaryTypes");
203
+ var getSigningData = /* @__PURE__ */ __name((tree, { seed, expiry }) => {
254
204
  return [
255
205
  getOneSigTypedDataDomain(),
256
206
  getOneSigTypedDataPrimaryTypes(),
@@ -260,22 +210,20 @@ function getSigningData(tree, { seed, expiry }) {
260
210
  merkleRoot: tree.getHexRoot()
261
211
  }
262
212
  ];
263
- }
264
- function getDigestToSign(tree, options) {
265
- return import_ethers.ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));
266
- }
213
+ }, "getSigningData");
214
+ var getDigestToSign = /* @__PURE__ */ __name((tree, options) => {
215
+ return ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));
216
+ }, "getDigestToSign");
267
217
  async function signOneSigTree(tree, signers, options, enc = "string") {
268
218
  if (signers.length <= 0) {
269
219
  throw new OneSigCoreError("ONE_SIGNER_REQUIRED", "1+ signer must be provided");
270
220
  }
271
221
  const toSign = getSigningData(tree, options);
272
- const signatures = await Promise.all(
273
- signers.map(async function(signer) {
274
- const data = await signer._signTypedData(...toSign);
275
- return new Signature(data);
276
- })
277
- );
278
- const signingDigest = import_ethers.ethers.utils._TypedDataEncoder.hash(...toSign);
222
+ const signatures = await Promise.all(signers.map(async function(signer) {
223
+ const data = await signer._signTypedData(...toSign);
224
+ return new Signature(data);
225
+ }));
226
+ const signingDigest = ethers.utils._TypedDataEncoder.hash(...toSign);
279
227
  const sig = Signature.concatenateSignatures(signatures, signingDigest);
280
228
  if (enc === "signature") {
281
229
  return sig;
@@ -285,3 +233,8 @@ async function signOneSigTree(tree, signers, options, enc = "string") {
285
233
  throw new Error("Invalid encoding");
286
234
  }
287
235
  }
236
+ __name(signOneSigTree, "signOneSigTree");
237
+
238
+ export { Signature, compareAddresses, encodeLeaf, encodeLeafHeader, getDigestToSign, getOneSigTypedDataDomain, getOneSigTypedDataDomainTypes, getOneSigTypedDataPrimaryTypes, getSigningData, makeOneSigTree, signOneSigTree };
239
+ //# sourceMappingURL=index.js.map
240
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":["readByteFromHex","input","byteOffset","charOffset","sub","substring","parseInt","encodeLeafHeader","targetOneSigAddress","oneSigId","nonce","byteLength","Error","storage","Buffer","alloc","idStr","toString","padStart","nonceStr","i","encodeLeaf","gen","index","leaf","leafs","leafData","concat","encodeAddress","encodeCalls","calls","ethers","utils","keccak256","makeOneSigTree","encodedLeafs","seenNonceIds","Set","length","nonceIdCombo","has","OneSigCoreError","add","push","tree","MerkleTree","sort","compareAddresses","a","b","aNumeric","BigInt","bNumeric","Signature","value","get","startsWith","from","toHexString","signatureCount","count","Math","floor","concatenateSignatures","sortMethod","signatureBuffers","map","singleInput","signature","orderedSignatures","addresses","isBuffer","recovered","recoverAddress","indexMapping","Array","fill","_","combined","ONE_SIG_TYPED_DATA_DOMAIN","name","version","chainId","verifyingContract","getOneSigTypedDataDomain","ONE_SIG_TYPED_DATA_DOMAIN_TYPES","EIP712Domain","type","getOneSigTypedDataDomainTypes","ONE_SIG_TYPED_DATA_PRIMARY_TYPES","SignMerkleRoot","getOneSigTypedDataPrimaryTypes","getSigningData","seed","expiry","merkleRoot","getHexRoot","getDigestToSign","options","_TypedDataEncoder","hash","signOneSigTree","signers","enc","toSign","signatures","Promise","all","signer","data","_signTypedData","signingDigest","sig"],"mappings":"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","file":"index.js","sourcesContent":["import type { TypedDataSigner } from '@ethersproject/abstract-signer';\nimport type { BigNumber, TypedDataDomain, TypedDataField } from 'ethers';\nimport { ethers } from 'ethers';\nimport { MerkleTree } from 'merkletreejs';\n\nimport type { HexString } from '@layerzerolabs/typescript-utils';\n\nimport { OneSigCoreError } from './error';\n\n// Re-export MerkleTree and TypedDataSigner to avoid duplicate dependencies and version differences\nexport { MerkleTree, type TypedDataSigner };\n\nexport interface BaseLeafData<TargetAddressType = unknown, CallData = unknown> {\n nonce: bigint;\n oneSigId: bigint;\n targetOneSigAddress: TargetAddressType;\n calls: CallData[];\n}\n\nexport interface SigningOptions {\n seed: string | Uint8Array;\n expiry: number | string | BigNumber;\n}\n\n// We can use any here as it will be overridden by implementation\n\nexport interface GenerateLeafsResult<Leaf extends BaseLeafData = BaseLeafData<any, any>> {\n encodeCalls: (calls: Leaf['calls']) => Buffer;\n encodeAddress: (address: Leaf['targetOneSigAddress']) => Buffer;\n leafs: Leaf[];\n}\n\nfunction readByteFromHex(input: string, byteOffset: number) {\n const charOffset = byteOffset * 2;\n const sub = input.substring(charOffset, charOffset + 2);\n return parseInt(sub, 16);\n}\n\nexport function encodeLeafHeader({\n targetOneSigAddress,\n oneSigId,\n nonce,\n}: Omit<BaseLeafData<Buffer>, 'calls'>) {\n if (targetOneSigAddress.byteLength !== 32) {\n throw new Error('Contract address must be 32 bytes');\n }\n\n const storage = Buffer.alloc(49);\n storage[0] = 1;\n\n const idStr = oneSigId.toString(16).padStart(16, '0');\n const nonceStr = nonce.toString(16).padStart(16, '0');\n\n for (let i = 0; i < 32; i++) {\n if (i < 8) {\n storage[i + 1] = readByteFromHex(idStr, i); // oneSigId\n storage[i + 41] = readByteFromHex(nonceStr, i); // nonce\n }\n\n storage[i + 9] = targetOneSigAddress[i]; // target address\n }\n\n return storage;\n}\n\nexport function encodeLeaf(gen: GenerateLeafsResult, index: number) {\n const leaf = gen.leafs[index];\n\n if (!leaf) {\n throw new Error('Leaf does not exist');\n }\n\n const leafData = Buffer.concat([\n encodeLeafHeader({\n nonce: leaf.nonce,\n oneSigId: leaf.oneSigId,\n targetOneSigAddress: gen.encodeAddress(leaf.targetOneSigAddress),\n }) as unknown as Uint8Array,\n gen.encodeCalls(leaf.calls) as unknown as Uint8Array,\n ]);\n\n return ethers.utils.keccak256(ethers.utils.keccak256(leafData));\n}\n\nexport function makeOneSigTree(input: GenerateLeafsResult[]) {\n const encodedLeafs = [];\n const seenNonceIds = new Set();\n\n for (const gen of input) {\n for (let i = 0; i < gen.leafs.length; i++) {\n const leaf = gen.leafs[i];\n\n // Ensure that two calls with the same nonce/oneSigId have not already been seen\n const nonceIdCombo = `${leaf.nonce}.${leaf.oneSigId}`;\n if (seenNonceIds.has(nonceIdCombo)) {\n throw new OneSigCoreError(\n 'NONCE_ID_SEEN_TWICE',\n 'Two calls should not be made for the same chain/nonce twice',\n );\n }\n seenNonceIds.add(nonceIdCombo);\n\n encodedLeafs.push(encodeLeaf(gen, i));\n }\n }\n\n // Using sort: true instead of sortPairs: true for better determinism and multiProof compatibility.\n // sort: true enables both sortLeaves and sortPairs, ensuring consistent leaf ordering\n // and makes the tree structure completely predictable regardless of input order.\n const tree = new MerkleTree(encodedLeafs, ethers.utils.keccak256, { sort: true });\n\n return tree;\n}\n\nexport function compareAddresses(a: string, b: string): number {\n const aNumeric = BigInt(a);\n const bNumeric = BigInt(b);\n\n if (aNumeric === bNumeric) {\n return 0;\n } else if (aNumeric < bNumeric) {\n return -1;\n } else {\n return 1;\n }\n}\n\n// XXX:TODO At some point this should be moved away\ntype SignatureLike = Buffer | string | Signature | HexString;\n\nexport class Signature {\n #value: Buffer;\n\n constructor(input: SignatureLike) {\n let value = input;\n if (value instanceof Signature) {\n value = value.get();\n }\n\n if (typeof value === 'string') {\n if (!value.startsWith('0x')) {\n throw new OneSigCoreError(\n 'INVALID_SIGNATURE_INPUT',\n 'Signature takes in hex encoded strings prefixed with 0x only',\n );\n }\n\n value = Buffer.from(value.substring(2), 'hex');\n }\n\n if (value.length % 65 !== 0) {\n throw new OneSigCoreError(\n 'INVALID_SIGNATURE_INPUT',\n 'Each signature must be 65 bytes long',\n );\n }\n\n this.#value = value;\n }\n\n get() {\n return this.#value;\n }\n\n toHexString(): HexString {\n return `0x${this.get().toString('hex')}`;\n }\n\n get signatureCount() {\n const count = this.#value.length / 65;\n if (Math.floor(count) !== count) {\n throw new Error('Count is not an int');\n }\n return count;\n }\n\n /**\n * Concatenate signatures without changing ordering\n */\n static concatenateSignatures(input: SignatureLike[], sortMethod: false): Signature;\n /**\n * Concatenate signatures based on addresses provided, with each signature corresponding to the address in the same index\n */\n static concatenateSignatures(input: SignatureLike[], addresses: string[]): Signature;\n /**\n * Concatenate signatures based on the signature data, ordering based on the recovered address\n */\n static concatenateSignatures(input: SignatureLike[], digest: Buffer | string): Signature;\n /**\n * Concatenate and order signatures based on data provided\n * @param input An array of signatures to concat\n * @param sortMethod Parameter specifing how to order each signature\n * @returns The concatenated signature\n */\n static concatenateSignatures(\n input: SignatureLike[],\n sortMethod: string[] | Buffer | false | string,\n ) {\n const signatureBuffers = input.map(function (singleInput) {\n const signature = new Signature(singleInput);\n\n if (signature.signatureCount !== 1) {\n throw new OneSigCoreError(\n 'CANNOT_CONCAT_INPUT',\n 'Cannot concatenate pre-concatenated signatures',\n );\n }\n\n return signature.get();\n });\n\n let orderedSignatures;\n\n if (sortMethod === false) {\n orderedSignatures = signatureBuffers;\n } else {\n let addresses;\n if (typeof sortMethod === 'string' || Buffer.isBuffer(sortMethod)) {\n addresses = [];\n\n for (const signature of signatureBuffers) {\n const recovered = ethers.utils.recoverAddress(sortMethod, signature);\n addresses.push(recovered);\n }\n } else {\n addresses = sortMethod;\n }\n\n if (addresses.length !== signatureBuffers.length) {\n throw new OneSigCoreError(\n 'ADDRESS_SIGNATURE_LENGTH_MISMATCH',\n 'Mismatch in addresses provided signatures',\n );\n }\n\n // Create an array with the same length of addresses with incrementing values ([0, 1, ... 5])\n const indexMapping = new Array(addresses.length)\n .fill(0)\n .map((_, i) => i)\n // Sort this array based on the references to the address array, so we can apply the same order to the signatures\n .sort((a, b) => {\n return compareAddresses(addresses[a], addresses[b]);\n });\n\n orderedSignatures = indexMapping.map((index) => signatureBuffers[index]);\n }\n\n const combined = Buffer.concat(orderedSignatures);\n\n return new this(combined);\n }\n}\n\nconst ONE_SIG_TYPED_DATA_DOMAIN: TypedDataDomain = {\n name: 'OneSig',\n version: '0.0.1',\n chainId: 1, // this is hardcoded to Ethereum mainnet\n verifyingContract: '0x000000000000000000000000000000000000dEaD', // this is hardcoded to a dead address\n};\n\nexport const getOneSigTypedDataDomain = (): TypedDataDomain => {\n return ONE_SIG_TYPED_DATA_DOMAIN;\n};\n\nconst ONE_SIG_TYPED_DATA_DOMAIN_TYPES: Record<string, TypedDataField[]> = {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n};\n\nexport const getOneSigTypedDataDomainTypes = (): Record<string, TypedDataField[]> => {\n return ONE_SIG_TYPED_DATA_DOMAIN_TYPES;\n};\n\nconst ONE_SIG_TYPED_DATA_PRIMARY_TYPES: Record<string, TypedDataField[]> = {\n SignMerkleRoot: [\n { name: 'seed', type: 'bytes32' },\n { name: 'merkleRoot', type: 'bytes32' },\n { name: 'expiry', type: 'uint256' },\n ],\n};\n\nexport const getOneSigTypedDataPrimaryTypes = (): Record<string, TypedDataField[]> => {\n return ONE_SIG_TYPED_DATA_PRIMARY_TYPES;\n};\n\nexport const getSigningData = (\n tree: MerkleTree,\n { seed, expiry }: SigningOptions,\n): Parameters<TypedDataSigner['_signTypedData']> => {\n return [\n getOneSigTypedDataDomain(),\n getOneSigTypedDataPrimaryTypes(),\n {\n seed: seed,\n expiry: expiry,\n merkleRoot: tree.getHexRoot(),\n },\n ];\n};\n\nexport const getDigestToSign = (tree: MerkleTree, options: SigningOptions) => {\n return ethers.utils._TypedDataEncoder.hash(...getSigningData(tree, options));\n};\n\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc?: 'string',\n): Promise<string>;\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc: 'signature',\n): Promise<Signature>;\nexport async function signOneSigTree(\n tree: MerkleTree,\n signers: TypedDataSigner[],\n options: SigningOptions,\n enc: 'signature' | 'string' = 'string',\n): Promise<Signature | string> {\n if (signers.length <= 0) {\n throw new OneSigCoreError('ONE_SIGNER_REQUIRED', '1+ signer must be provided');\n }\n\n const toSign = getSigningData(tree, options);\n\n const signatures = await Promise.all(\n signers.map(async function (signer): Promise<Signature> {\n const data = await signer._signTypedData(...toSign);\n return new Signature(data);\n }),\n );\n\n const signingDigest = ethers.utils._TypedDataEncoder.hash(...toSign);\n\n const sig = Signature.concatenateSignatures(signatures, signingDigest);\n\n if (enc === 'signature') {\n return sig;\n } else if (enc === 'string') {\n return sig.toHexString();\n } else {\n throw new Error('Invalid encoding');\n }\n}\n"]}
package/package.json CHANGED
@@ -1,63 +1,45 @@
1
1
  {
2
2
  "name": "@layerzerolabs/onesig-core",
3
- "version": "0.1.2",
3
+ "version": "0.2.23",
4
+ "private": false,
4
5
  "license": "GPL-3.0-only",
6
+ "type": "module",
5
7
  "exports": {
6
- ".": {
7
- "types": "./dist/index.d.ts",
8
- "import": "./dist/index.mjs",
9
- "require": "./dist/index.js"
10
- },
11
- "./package.json": "./package.json"
8
+ "types": "./dist/index.d.ts",
9
+ "require": "./dist/index.cjs",
10
+ "import": "./dist/index.js",
11
+ "default": "./dist/index.cjs"
12
12
  },
13
- "main": "./dist/index.js",
13
+ "main": "./dist/index.cjs",
14
+ "module": "./dist/index.js",
14
15
  "types": "./dist/index.d.ts",
15
16
  "files": [
16
17
  "dist/**/*"
17
18
  ],
18
- "lint-staged": {
19
- "**/*.{js,ts,tsx}": [
20
- "pnpm prettier --write --ignore-unknown .",
21
- "pnpm eslint --fix"
22
- ],
23
- "**/*.json": [
24
- "pnpm prettier --write --ignore-unknown ."
25
- ]
26
- },
27
19
  "dependencies": {
28
20
  "@ethersproject/abstract-signer": "^5.8.0",
29
21
  "ethers": "^5.8.0",
30
- "merkletreejs": "^0.3.11"
22
+ "merkletreejs": "^0.3.11",
23
+ "@layerzerolabs/typescript-utils": "0.2.23"
31
24
  },
32
25
  "devDependencies": {
33
- "@jest/globals": "^29.7.0",
34
- "@layerzerolabs/eslint-config-next": "^3.0.92",
35
- "@layerzerolabs/prettier-config-next": "^3.0.92",
36
- "@rushstack/eslint-patch": "^1.7.0",
37
- "@types/node": "20.10.0",
38
- "dotenv": "^16.4.1",
39
- "eslint": "^8.55.0",
40
- "eslint-plugin-jest-extended": "~2.0.0",
41
- "husky": "^8.0.3",
42
- "jest": "^29.7.0",
43
- "lint-staged": "^15.2.2",
44
- "prettier": "^3.2.5",
45
- "rimraf": "^5.0.5",
46
- "typescript": "^5.3.3"
47
- },
48
- "packageManager": "pnpm@8.14.0",
49
- "engines": {
50
- "node": ">=20.10.0"
26
+ "@types/node": "^22.18.6",
27
+ "dotenv": "16.4.5",
28
+ "eslint": "^9.17.0",
29
+ "prettier": "3.5.3",
30
+ "tsup": "^8.4.0",
31
+ "typescript": "^5.8.2",
32
+ "vitest": "^3.2.3",
33
+ "@layerzerolabs/typescript-configuration": "0.2.23",
34
+ "@layerzerolabs/tsup-configuration": "0.2.23"
51
35
  },
52
36
  "publishConfig": {
53
- "access": "public"
37
+ "access": "restricted",
38
+ "registry": "https://registry.npmjs.org/"
54
39
  },
55
40
  "scripts": {
56
- "build:js": "pnpm tsup --config ../../tsup.config.ts ./src/index.ts",
57
- "clean": "pnpm clean:prebuild",
58
- "clean:prebuild": "rimraf dist",
59
- "lint:fix": "eslint --fix '**/*.{js,ts,json}' && prettier --write .",
60
- "lint:js": "eslint '**/*.{js,ts,json}' && prettier --check .",
61
- "test": "jest --verbose --ci"
41
+ "build": "tsup",
42
+ "lint": "eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)",
43
+ "test": "vitest --run --pass-with-no-tests --typecheck"
62
44
  }
63
45
  }
package/LICENSE.md DELETED
@@ -1,9 +0,0 @@
1
- GPL-3.0 License
2
-
3
- Copyright (C) 2025 LayerZero Labs Ltd.
4
-
5
- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.
6
-
7
- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
-
9
- You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
package/dist/index.d.mts DELETED
@@ -1,55 +0,0 @@
1
- import { BigNumber, TypedDataDomain, TypedDataField } from 'ethers';
2
- import { MerkleTree } from 'merkletreejs';
3
- export { MerkleTree } from 'merkletreejs';
4
- import { TypedDataSigner } from '@ethersproject/abstract-signer';
5
- export { TypedDataSigner } from '@ethersproject/abstract-signer';
6
-
7
- interface BaseLeafData<TargetAddressType = unknown, CallData = unknown> {
8
- nonce: bigint;
9
- oneSigId: bigint;
10
- targetOneSigAddress: TargetAddressType;
11
- calls: CallData[];
12
- }
13
- interface SigningOptions {
14
- seed: string | Uint8Array;
15
- expiry: number | string | BigNumber;
16
- }
17
- interface GenerateLeafsResult<Leaf extends BaseLeafData = BaseLeafData<any, any>> {
18
- encodeCalls: (calls: Leaf['calls']) => Buffer;
19
- encodeAddress: (address: Leaf['targetOneSigAddress']) => Buffer;
20
- leafs: Leaf[];
21
- }
22
- declare function encodeLeafHeader({ targetOneSigAddress, oneSigId, nonce }: Omit<BaseLeafData<Buffer>, 'calls'>): Buffer;
23
- declare function encodeLeaf(gen: GenerateLeafsResult, index: number): string;
24
- declare function makeOneSigTree(input: GenerateLeafsResult[]): MerkleTree;
25
- declare function compareAddresses(a: string, b: string): number;
26
- type HexStringLike = `0x${string}`;
27
- type SignatureLike = Buffer | string | Signature | HexStringLike;
28
- declare class Signature {
29
- #private;
30
- constructor(input: SignatureLike);
31
- get(): Buffer;
32
- toHexString(): HexStringLike;
33
- get signatureCount(): number;
34
- /**
35
- * Concatenate signatures without changing ordering
36
- */
37
- static concatenateSignatures(input: SignatureLike[], sortMethod: false): Signature;
38
- /**
39
- * Concatenate signatures based on addresses provided, with each signature corresponding to the address in the same index
40
- */
41
- static concatenateSignatures(input: SignatureLike[], addresses: string[]): Signature;
42
- /**
43
- * Concatenate signatures based on the signature data, ordering based on the recovered address
44
- */
45
- static concatenateSignatures(input: SignatureLike[], digest: Buffer | string): Signature;
46
- }
47
- declare function getOneSigTypedDataDomain(): TypedDataDomain;
48
- declare function getOneSigTypedDataDomainTypes(): Record<string, TypedDataField[]>;
49
- declare function getOneSigTypedDataPrimaryTypes(): Record<string, TypedDataField[]>;
50
- declare function getSigningData(tree: MerkleTree, { seed, expiry }: SigningOptions): Parameters<TypedDataSigner['_signTypedData']>;
51
- declare function getDigestToSign(tree: MerkleTree, options: SigningOptions): string;
52
- declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc?: 'string'): Promise<string>;
53
- declare function signOneSigTree(tree: MerkleTree, signers: TypedDataSigner[], options: SigningOptions, enc: 'signature'): Promise<Signature>;
54
-
55
- export { type BaseLeafData, type GenerateLeafsResult, Signature, type SigningOptions, compareAddresses, encodeLeaf, encodeLeafHeader, getDigestToSign, getOneSigTypedDataDomain, getOneSigTypedDataDomainTypes, getOneSigTypedDataPrimaryTypes, getSigningData, makeOneSigTree, signOneSigTree };