@feelyourprotocol/util 8141.0.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/LICENSE +373 -0
- package/README.md +297 -0
- package/dist/cjs/account.d.ts +165 -0
- package/dist/cjs/account.d.ts.map +1 -0
- package/dist/cjs/account.js +530 -0
- package/dist/cjs/account.js.map +1 -0
- package/dist/cjs/address.d.ts +67 -0
- package/dist/cjs/address.d.ts.map +1 -0
- package/dist/cjs/address.js +136 -0
- package/dist/cjs/address.js.map +1 -0
- package/dist/cjs/authorization.d.ts +41 -0
- package/dist/cjs/authorization.d.ts.map +1 -0
- package/dist/cjs/authorization.js +135 -0
- package/dist/cjs/authorization.js.map +1 -0
- package/dist/cjs/bal.d.ts +129 -0
- package/dist/cjs/bal.d.ts.map +1 -0
- package/dist/cjs/bal.js +529 -0
- package/dist/cjs/bal.js.map +1 -0
- package/dist/cjs/binaryTree.d.ts +148 -0
- package/dist/cjs/binaryTree.d.ts.map +1 -0
- package/dist/cjs/binaryTree.js +240 -0
- package/dist/cjs/binaryTree.js.map +1 -0
- package/dist/cjs/blobs.d.ts +76 -0
- package/dist/cjs/blobs.d.ts.map +1 -0
- package/dist/cjs/blobs.js +175 -0
- package/dist/cjs/blobs.js.map +1 -0
- package/dist/cjs/bytes.d.ts +291 -0
- package/dist/cjs/bytes.d.ts.map +1 -0
- package/dist/cjs/bytes.js +606 -0
- package/dist/cjs/bytes.js.map +1 -0
- package/dist/cjs/constants.d.ts +91 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +97 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/db.d.ts +65 -0
- package/dist/cjs/db.d.ts.map +1 -0
- package/dist/cjs/db.js +14 -0
- package/dist/cjs/db.js.map +1 -0
- package/dist/cjs/env.d.ts +9 -0
- package/dist/cjs/env.d.ts.map +1 -0
- package/dist/cjs/env.js +13 -0
- package/dist/cjs/env.js.map +1 -0
- package/dist/cjs/errors.d.ts +3 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +19 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/helpers.d.ts +21 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +50 -0
- package/dist/cjs/helpers.js.map +1 -0
- package/dist/cjs/index.d.ts +67 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +93 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal.d.ts +72 -0
- package/dist/cjs/internal.d.ts.map +1 -0
- package/dist/cjs/internal.js +182 -0
- package/dist/cjs/internal.js.map +1 -0
- package/dist/cjs/kzg.d.ts +14 -0
- package/dist/cjs/kzg.d.ts.map +1 -0
- package/dist/cjs/kzg.js +3 -0
- package/dist/cjs/kzg.js.map +1 -0
- package/dist/cjs/lock.d.ts +15 -0
- package/dist/cjs/lock.d.ts.map +1 -0
- package/dist/cjs/lock.js +45 -0
- package/dist/cjs/lock.js.map +1 -0
- package/dist/cjs/mapDB.d.ts +17 -0
- package/dist/cjs/mapDB.d.ts.map +1 -0
- package/dist/cjs/mapDB.js +46 -0
- package/dist/cjs/mapDB.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/provider.d.ts +46 -0
- package/dist/cjs/provider.d.ts.map +1 -0
- package/dist/cjs/provider.js +84 -0
- package/dist/cjs/provider.js.map +1 -0
- package/dist/cjs/request.d.ts +20 -0
- package/dist/cjs/request.d.ts.map +1 -0
- package/dist/cjs/request.js +35 -0
- package/dist/cjs/request.js.map +1 -0
- package/dist/cjs/signature.d.ts +47 -0
- package/dist/cjs/signature.d.ts.map +1 -0
- package/dist/cjs/signature.js +147 -0
- package/dist/cjs/signature.js.map +1 -0
- package/dist/cjs/tasks.d.ts +32 -0
- package/dist/cjs/tasks.d.ts.map +1 -0
- package/dist/cjs/tasks.js +51 -0
- package/dist/cjs/tasks.js.map +1 -0
- package/dist/cjs/types.d.ts +64 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +78 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/units.d.ts +22 -0
- package/dist/cjs/units.d.ts.map +1 -0
- package/dist/cjs/units.js +51 -0
- package/dist/cjs/units.js.map +1 -0
- package/dist/cjs/withdrawal.d.ts +72 -0
- package/dist/cjs/withdrawal.d.ts.map +1 -0
- package/dist/cjs/withdrawal.js +93 -0
- package/dist/cjs/withdrawal.js.map +1 -0
- package/dist/esm/account.d.ts +165 -0
- package/dist/esm/account.d.ts.map +1 -0
- package/dist/esm/account.js +505 -0
- package/dist/esm/account.js.map +1 -0
- package/dist/esm/address.d.ts +67 -0
- package/dist/esm/address.d.ts.map +1 -0
- package/dist/esm/address.js +125 -0
- package/dist/esm/address.js.map +1 -0
- package/dist/esm/authorization.d.ts +41 -0
- package/dist/esm/authorization.d.ts.map +1 -0
- package/dist/esm/authorization.js +126 -0
- package/dist/esm/authorization.js.map +1 -0
- package/dist/esm/bal.d.ts +129 -0
- package/dist/esm/bal.d.ts.map +1 -0
- package/dist/esm/bal.js +522 -0
- package/dist/esm/bal.js.map +1 -0
- package/dist/esm/binaryTree.d.ts +148 -0
- package/dist/esm/binaryTree.d.ts.map +1 -0
- package/dist/esm/binaryTree.js +226 -0
- package/dist/esm/binaryTree.js.map +1 -0
- package/dist/esm/blobs.d.ts +76 -0
- package/dist/esm/blobs.d.ts.map +1 -0
- package/dist/esm/blobs.js +163 -0
- package/dist/esm/blobs.js.map +1 -0
- package/dist/esm/bytes.d.ts +291 -0
- package/dist/esm/bytes.d.ts.map +1 -0
- package/dist/esm/bytes.js +562 -0
- package/dist/esm/bytes.js.map +1 -0
- package/dist/esm/constants.d.ts +91 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +94 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/db.d.ts +65 -0
- package/dist/esm/db.d.ts.map +1 -0
- package/dist/esm/db.js +11 -0
- package/dist/esm/db.js.map +1 -0
- package/dist/esm/env.d.ts +9 -0
- package/dist/esm/env.d.ts.map +1 -0
- package/dist/esm/env.js +9 -0
- package/dist/esm/env.js.map +1 -0
- package/dist/esm/errors.d.ts +3 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +14 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/helpers.d.ts +21 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +43 -0
- package/dist/esm/helpers.js.map +1 -0
- package/dist/esm/index.d.ts +67 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +67 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal.d.ts +72 -0
- package/dist/esm/internal.d.ts.map +1 -0
- package/dist/esm/internal.js +170 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/kzg.d.ts +14 -0
- package/dist/esm/kzg.d.ts.map +1 -0
- package/dist/esm/kzg.js +2 -0
- package/dist/esm/kzg.js.map +1 -0
- package/dist/esm/lock.d.ts +15 -0
- package/dist/esm/lock.d.ts.map +1 -0
- package/dist/esm/lock.js +41 -0
- package/dist/esm/lock.js.map +1 -0
- package/dist/esm/mapDB.d.ts +17 -0
- package/dist/esm/mapDB.d.ts.map +1 -0
- package/dist/esm/mapDB.js +42 -0
- package/dist/esm/mapDB.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/provider.d.ts +46 -0
- package/dist/esm/provider.d.ts.map +1 -0
- package/dist/esm/provider.js +79 -0
- package/dist/esm/provider.js.map +1 -0
- package/dist/esm/request.d.ts +20 -0
- package/dist/esm/request.d.ts.map +1 -0
- package/dist/esm/request.js +30 -0
- package/dist/esm/request.js.map +1 -0
- package/dist/esm/signature.d.ts +47 -0
- package/dist/esm/signature.d.ts.map +1 -0
- package/dist/esm/signature.js +137 -0
- package/dist/esm/signature.js.map +1 -0
- package/dist/esm/tasks.d.ts +32 -0
- package/dist/esm/tasks.d.ts.map +1 -0
- package/dist/esm/tasks.js +47 -0
- package/dist/esm/tasks.js.map +1 -0
- package/dist/esm/types.d.ts +64 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +71 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/units.d.ts +22 -0
- package/dist/esm/units.d.ts.map +1 -0
- package/dist/esm/units.js +46 -0
- package/dist/esm/units.js.map +1 -0
- package/dist/esm/withdrawal.d.ts +72 -0
- package/dist/esm/withdrawal.d.ts.map +1 -0
- package/dist/esm/withdrawal.js +86 -0
- package/dist/esm/withdrawal.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +116 -0
- package/src/account.ts +630 -0
- package/src/address.ts +158 -0
- package/src/authorization.ts +180 -0
- package/src/bal.ts +761 -0
- package/src/binaryTree.ts +353 -0
- package/src/blobs.ts +209 -0
- package/src/bytes.ts +659 -0
- package/src/constants.ts +125 -0
- package/src/db.ts +86 -0
- package/src/env.ts +9 -0
- package/src/errors.ts +28 -0
- package/src/helpers.ts +46 -0
- package/src/index.ts +88 -0
- package/src/internal.ts +212 -0
- package/src/kzg.ts +24 -0
- package/src/lock.ts +42 -0
- package/src/mapDB.ts +57 -0
- package/src/provider.ts +109 -0
- package/src/request.ts +48 -0
- package/src/signature.ts +202 -0
- package/src/tasks.ts +59 -0
- package/src/types.ts +177 -0
- package/src/units.ts +56 -0
- package/src/withdrawal.ts +133 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isZeroAddress = exports.zeroAddress = exports.importPublic = exports.privateToAddress = exports.privateToPublic = exports.publicToAddress = exports.pubToAddress = exports.isValidPublic = exports.isValidPrivate = exports.generateAddress2 = exports.generateAddress = exports.isValidChecksumAddress = exports.toChecksumAddress = exports.isValidAddress = exports.Account = void 0;
|
|
4
|
+
exports.createAccount = createAccount;
|
|
5
|
+
exports.createAccountFromBytesArray = createAccountFromBytesArray;
|
|
6
|
+
exports.createPartialAccount = createPartialAccount;
|
|
7
|
+
exports.createAccountFromRLP = createAccountFromRLP;
|
|
8
|
+
exports.createPartialAccountFromRLP = createPartialAccountFromRLP;
|
|
9
|
+
exports.accountBodyFromSlim = accountBodyFromSlim;
|
|
10
|
+
exports.accountBodyToSlim = accountBodyToSlim;
|
|
11
|
+
exports.accountBodyToRLP = accountBodyToRLP;
|
|
12
|
+
const rlp_1 = require("@feelyourprotocol/rlp");
|
|
13
|
+
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
14
|
+
const sha3_js_1 = require("@noble/hashes/sha3.js");
|
|
15
|
+
const bytes_ts_1 = require("./bytes.js");
|
|
16
|
+
const constants_ts_1 = require("./constants.js");
|
|
17
|
+
const errors_ts_1 = require("./errors.js");
|
|
18
|
+
const helpers_ts_1 = require("./helpers.js");
|
|
19
|
+
const internal_ts_1 = require("./internal.js");
|
|
20
|
+
/**
|
|
21
|
+
* Handles the null indicator for RLP encoded accounts
|
|
22
|
+
* @returns {null} is the null indicator is 0
|
|
23
|
+
* @returns The unchanged value is the null indicator is 1
|
|
24
|
+
* @throws if the null indicator is > 1
|
|
25
|
+
* @throws if the length of values is < 2
|
|
26
|
+
* @param value The value to convert
|
|
27
|
+
* @returns The converted value
|
|
28
|
+
*/
|
|
29
|
+
function handleNullIndicator(values) {
|
|
30
|
+
// Needed if some values are not provided to the array (e.g. partial account RLP)
|
|
31
|
+
if (values[0] === undefined) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const nullIndicator = (0, bytes_ts_1.bytesToInt)(values[0]);
|
|
35
|
+
if (nullIndicator === 0) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
if (nullIndicator > 1) {
|
|
39
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Invalid isNullIndicator=${nullIndicator}`);
|
|
40
|
+
}
|
|
41
|
+
if (values.length < 2) {
|
|
42
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Invalid values length=${values.length}`);
|
|
43
|
+
}
|
|
44
|
+
return values[1];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Account class to load and maintain the basic account objects.
|
|
48
|
+
* Supports partial loading and access required for stateless with null
|
|
49
|
+
* as the placeholder.
|
|
50
|
+
*
|
|
51
|
+
* Note: passing undefined in constructor is different from null
|
|
52
|
+
* While undefined leads to default assignment, null is retained
|
|
53
|
+
* to track the information not available/loaded because of partial
|
|
54
|
+
* witness access
|
|
55
|
+
*/
|
|
56
|
+
class Account {
|
|
57
|
+
get version() {
|
|
58
|
+
if (this._version !== null) {
|
|
59
|
+
return this._version;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
throw Error(`version=${this._version} not loaded`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
set version(_version) {
|
|
66
|
+
this._version = _version;
|
|
67
|
+
}
|
|
68
|
+
get nonce() {
|
|
69
|
+
if (this._nonce !== null) {
|
|
70
|
+
return this._nonce;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw Error(`nonce=${this._nonce} not loaded`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
set nonce(_nonce) {
|
|
77
|
+
this._nonce = _nonce;
|
|
78
|
+
}
|
|
79
|
+
get balance() {
|
|
80
|
+
if (this._balance !== null) {
|
|
81
|
+
return this._balance;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw Error(`balance=${this._balance} not loaded`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
set balance(_balance) {
|
|
88
|
+
this._balance = _balance;
|
|
89
|
+
}
|
|
90
|
+
get storageRoot() {
|
|
91
|
+
if (this._storageRoot !== null) {
|
|
92
|
+
return this._storageRoot;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw Error(`storageRoot=${this._storageRoot} not loaded`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
set storageRoot(_storageRoot) {
|
|
99
|
+
this._storageRoot = _storageRoot;
|
|
100
|
+
}
|
|
101
|
+
get codeHash() {
|
|
102
|
+
if (this._codeHash !== null) {
|
|
103
|
+
return this._codeHash;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw Error(`codeHash=${this._codeHash} not loaded`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
set codeHash(_codeHash) {
|
|
110
|
+
this._codeHash = _codeHash;
|
|
111
|
+
}
|
|
112
|
+
get codeSize() {
|
|
113
|
+
if (this._codeSize !== null) {
|
|
114
|
+
return this._codeSize;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw Error(`codeSize=${this._codeSize} not loaded`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
set codeSize(_codeSize) {
|
|
121
|
+
this._codeSize = _codeSize;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* This constructor assigns and validates the values.
|
|
125
|
+
* It is not recommended to use this constructor directly. Instead use the static
|
|
126
|
+
* factory methods to assist in creating an Account from varying data types.
|
|
127
|
+
* undefined get assigned with the defaults, but null args are retained as is
|
|
128
|
+
* @deprecated
|
|
129
|
+
*/
|
|
130
|
+
constructor(nonce = constants_ts_1.BIGINT_0, balance = constants_ts_1.BIGINT_0, storageRoot = constants_ts_1.KECCAK256_RLP, codeHash = constants_ts_1.KECCAK256_NULL, codeSize = 0, version = 0) {
|
|
131
|
+
this._nonce = null;
|
|
132
|
+
this._balance = null;
|
|
133
|
+
this._storageRoot = null;
|
|
134
|
+
this._codeHash = null;
|
|
135
|
+
// codeSize and version is separately stored in VKT
|
|
136
|
+
this._codeSize = null;
|
|
137
|
+
this._version = null;
|
|
138
|
+
this._nonce = nonce;
|
|
139
|
+
this._balance = balance;
|
|
140
|
+
this._storageRoot = storageRoot;
|
|
141
|
+
this._codeHash = codeHash;
|
|
142
|
+
if (codeSize === null && codeHash !== null && !this.isContract()) {
|
|
143
|
+
codeSize = 0;
|
|
144
|
+
}
|
|
145
|
+
this._codeSize = codeSize;
|
|
146
|
+
this._version = version;
|
|
147
|
+
this._validate();
|
|
148
|
+
}
|
|
149
|
+
_validate() {
|
|
150
|
+
if (this._nonce !== null && this._nonce < constants_ts_1.BIGINT_0) {
|
|
151
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('nonce must be greater than zero');
|
|
152
|
+
}
|
|
153
|
+
if (this._balance !== null && this._balance < constants_ts_1.BIGINT_0) {
|
|
154
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('balance must be greater than zero');
|
|
155
|
+
}
|
|
156
|
+
if (this._storageRoot !== null && this._storageRoot.length !== 32) {
|
|
157
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('storageRoot must have a length of 32');
|
|
158
|
+
}
|
|
159
|
+
if (this._codeHash !== null && this._codeHash.length !== 32) {
|
|
160
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('codeHash must have a length of 32');
|
|
161
|
+
}
|
|
162
|
+
if (this._codeSize !== null && this._codeSize < constants_ts_1.BIGINT_0) {
|
|
163
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('codeSize must be greater than zero');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Returns an array of Uint8Arrays of the raw bytes for the account, in order.
|
|
168
|
+
*/
|
|
169
|
+
raw() {
|
|
170
|
+
return [
|
|
171
|
+
(0, bytes_ts_1.bigIntToUnpaddedBytes)(this.nonce),
|
|
172
|
+
(0, bytes_ts_1.bigIntToUnpaddedBytes)(this.balance),
|
|
173
|
+
this.storageRoot,
|
|
174
|
+
this.codeHash,
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Returns the RLP serialization of the account as a `Uint8Array`.
|
|
179
|
+
*/
|
|
180
|
+
serialize() {
|
|
181
|
+
return rlp_1.RLP.encode(this.raw());
|
|
182
|
+
}
|
|
183
|
+
serializeWithPartialInfo() {
|
|
184
|
+
const partialData = [];
|
|
185
|
+
const zeroEncoded = (0, bytes_ts_1.intToUnpaddedBytes)(0);
|
|
186
|
+
const oneEncoded = (0, bytes_ts_1.intToUnpaddedBytes)(1);
|
|
187
|
+
if (this._nonce !== null) {
|
|
188
|
+
partialData.push([oneEncoded, (0, bytes_ts_1.bigIntToUnpaddedBytes)(this._nonce)]);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
partialData.push([zeroEncoded]);
|
|
192
|
+
}
|
|
193
|
+
if (this._balance !== null) {
|
|
194
|
+
partialData.push([oneEncoded, (0, bytes_ts_1.bigIntToUnpaddedBytes)(this._balance)]);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
partialData.push([zeroEncoded]);
|
|
198
|
+
}
|
|
199
|
+
if (this._storageRoot !== null) {
|
|
200
|
+
partialData.push([oneEncoded, this._storageRoot]);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
partialData.push([zeroEncoded]);
|
|
204
|
+
}
|
|
205
|
+
if (this._codeHash !== null) {
|
|
206
|
+
partialData.push([oneEncoded, this._codeHash]);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
partialData.push([zeroEncoded]);
|
|
210
|
+
}
|
|
211
|
+
if (this._codeSize !== null) {
|
|
212
|
+
partialData.push([oneEncoded, (0, bytes_ts_1.intToUnpaddedBytes)(this._codeSize)]);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
partialData.push([zeroEncoded]);
|
|
216
|
+
}
|
|
217
|
+
if (this._version !== null) {
|
|
218
|
+
partialData.push([oneEncoded, (0, bytes_ts_1.intToUnpaddedBytes)(this._version)]);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
partialData.push([zeroEncoded]);
|
|
222
|
+
}
|
|
223
|
+
return rlp_1.RLP.encode(partialData);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Returns a `Boolean` determining if the account is a contract.
|
|
227
|
+
*/
|
|
228
|
+
isContract() {
|
|
229
|
+
if (this._codeHash === null && this._codeSize === null) {
|
|
230
|
+
throw Error(`Insufficient data as codeHash=null and codeSize=null`);
|
|
231
|
+
}
|
|
232
|
+
return ((this._codeHash !== null && !(0, bytes_ts_1.equalsBytes)(this._codeHash, constants_ts_1.KECCAK256_NULL)) ||
|
|
233
|
+
(this._codeSize !== null && this._codeSize !== 0));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Returns a `Boolean` determining if the account is empty complying to the definition of
|
|
237
|
+
* account emptiness in [EIP-161](https://eips.ethereum.org/EIPS/eip-161):
|
|
238
|
+
* "An account is considered empty when it has no code and zero nonce and zero balance."
|
|
239
|
+
*/
|
|
240
|
+
isEmpty() {
|
|
241
|
+
// helpful for determination in partial accounts
|
|
242
|
+
if ((this._balance !== null && this.balance !== constants_ts_1.BIGINT_0) ||
|
|
243
|
+
(this._nonce !== null && this.nonce !== constants_ts_1.BIGINT_0) ||
|
|
244
|
+
(this._codeHash !== null && !(0, bytes_ts_1.equalsBytes)(this.codeHash, constants_ts_1.KECCAK256_NULL))) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
return (this.balance === constants_ts_1.BIGINT_0 &&
|
|
248
|
+
this.nonce === constants_ts_1.BIGINT_0 &&
|
|
249
|
+
(0, bytes_ts_1.equalsBytes)(this.codeHash, constants_ts_1.KECCAK256_NULL));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.Account = Account;
|
|
253
|
+
// Account constructors
|
|
254
|
+
function createAccount(accountData) {
|
|
255
|
+
const { nonce, balance, storageRoot, codeHash } = accountData;
|
|
256
|
+
if (nonce === null || balance === null || storageRoot === null || codeHash === null) {
|
|
257
|
+
throw Error(`Partial fields not supported in fromAccountData`);
|
|
258
|
+
}
|
|
259
|
+
return new Account(nonce !== undefined ? (0, bytes_ts_1.bytesToBigInt)((0, bytes_ts_1.toBytes)(nonce)) : undefined, balance !== undefined ? (0, bytes_ts_1.bytesToBigInt)((0, bytes_ts_1.toBytes)(balance)) : undefined, storageRoot !== undefined ? (0, bytes_ts_1.toBytes)(storageRoot) : undefined, codeHash !== undefined ? (0, bytes_ts_1.toBytes)(codeHash) : undefined);
|
|
260
|
+
}
|
|
261
|
+
function createAccountFromBytesArray(values) {
|
|
262
|
+
const [nonce, balance, storageRoot, codeHash] = values;
|
|
263
|
+
return new Account((0, bytes_ts_1.bytesToBigInt)(nonce), (0, bytes_ts_1.bytesToBigInt)(balance), storageRoot, codeHash);
|
|
264
|
+
}
|
|
265
|
+
function createPartialAccount(partialAccountData) {
|
|
266
|
+
const { nonce, balance, storageRoot, codeHash, codeSize, version } = partialAccountData;
|
|
267
|
+
if (nonce === null &&
|
|
268
|
+
balance === null &&
|
|
269
|
+
storageRoot === null &&
|
|
270
|
+
codeHash === null &&
|
|
271
|
+
codeSize === null &&
|
|
272
|
+
version === null) {
|
|
273
|
+
throw Error(`All partial fields null`);
|
|
274
|
+
}
|
|
275
|
+
return new Account(nonce !== undefined && nonce !== null ? (0, bytes_ts_1.bytesToBigInt)((0, bytes_ts_1.toBytes)(nonce)) : nonce, balance !== undefined && balance !== null ? (0, bytes_ts_1.bytesToBigInt)((0, bytes_ts_1.toBytes)(balance)) : balance, storageRoot !== undefined && storageRoot !== null ? (0, bytes_ts_1.toBytes)(storageRoot) : storageRoot, codeHash !== undefined && codeHash !== null ? (0, bytes_ts_1.toBytes)(codeHash) : codeHash, codeSize !== undefined && codeSize !== null ? (0, bytes_ts_1.bytesToInt)((0, bytes_ts_1.toBytes)(codeSize)) : codeSize, version !== undefined && version !== null ? (0, bytes_ts_1.bytesToInt)((0, bytes_ts_1.toBytes)(version)) : version);
|
|
276
|
+
}
|
|
277
|
+
function createAccountFromRLP(serialized) {
|
|
278
|
+
const values = rlp_1.RLP.decode(serialized);
|
|
279
|
+
if (!Array.isArray(values)) {
|
|
280
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Invalid serialized account input. Must be array');
|
|
281
|
+
}
|
|
282
|
+
return createAccountFromBytesArray(values);
|
|
283
|
+
}
|
|
284
|
+
function createPartialAccountFromRLP(serialized) {
|
|
285
|
+
const values = rlp_1.RLP.decode(serialized);
|
|
286
|
+
if (!Array.isArray(values)) {
|
|
287
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Invalid serialized account input. Must be array');
|
|
288
|
+
}
|
|
289
|
+
for (const value of values) {
|
|
290
|
+
// Ensure that each array item is an array
|
|
291
|
+
if (!Array.isArray(value)) {
|
|
292
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Invalid partial encoding. Each item must be an array');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const [nonceRaw, balanceRaw, storageRoot, codeHash, codeSizeRaw, versionRaw] = values.map(handleNullIndicator);
|
|
296
|
+
const nonce = nonceRaw === null ? null : (0, bytes_ts_1.bytesToBigInt)(nonceRaw);
|
|
297
|
+
const balance = balanceRaw === null ? null : (0, bytes_ts_1.bytesToBigInt)(balanceRaw);
|
|
298
|
+
const codeSize = codeSizeRaw === null ? null : (0, bytes_ts_1.bytesToInt)(codeSizeRaw);
|
|
299
|
+
const version = versionRaw === null ? null : (0, bytes_ts_1.bytesToInt)(versionRaw);
|
|
300
|
+
return createPartialAccount({ balance, nonce, storageRoot, codeHash, codeSize, version });
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Checks if the address is a valid. Accepts checksummed addresses too.
|
|
304
|
+
*/
|
|
305
|
+
const isValidAddress = function (hexAddress) {
|
|
306
|
+
try {
|
|
307
|
+
(0, helpers_ts_1.assertIsString)(hexAddress);
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
return /^0x[0-9a-fA-F]{40}$/.test(hexAddress);
|
|
313
|
+
};
|
|
314
|
+
exports.isValidAddress = isValidAddress;
|
|
315
|
+
/**
|
|
316
|
+
* Returns a checksummed address.
|
|
317
|
+
*
|
|
318
|
+
* If an eip1191ChainId is provided, the chainId will be included in the checksum calculation. This
|
|
319
|
+
* has the effect of checksummed addresses for one chain having invalid checksums for others.
|
|
320
|
+
* For more details see [EIP-1191](https://eips.ethereum.org/EIPS/eip-1191).
|
|
321
|
+
*
|
|
322
|
+
* WARNING: Checksums with and without the chainId will differ and the EIP-1191 checksum is not
|
|
323
|
+
* backwards compatible to the original widely adopted checksum format standard introduced in
|
|
324
|
+
* [EIP-55](https://eips.ethereum.org/EIPS/eip-55), so this will break in existing applications.
|
|
325
|
+
* Usage of this EIP is therefore discouraged unless you have a very targeted use case.
|
|
326
|
+
*/
|
|
327
|
+
const toChecksumAddress = function (hexAddress, eip1191ChainId) {
|
|
328
|
+
(0, helpers_ts_1.assertIsHexString)(hexAddress);
|
|
329
|
+
const address = (0, internal_ts_1.stripHexPrefix)(hexAddress).toLowerCase();
|
|
330
|
+
let prefix = '';
|
|
331
|
+
if (eip1191ChainId !== undefined) {
|
|
332
|
+
const chainId = (0, bytes_ts_1.bytesToBigInt)((0, bytes_ts_1.toBytes)(eip1191ChainId));
|
|
333
|
+
prefix = chainId.toString() + '0x';
|
|
334
|
+
}
|
|
335
|
+
const bytes = (0, bytes_ts_1.utf8ToBytes)(prefix + address);
|
|
336
|
+
const hash = (0, bytes_ts_1.bytesToHex)((0, sha3_js_1.keccak_256)(bytes)).slice(2);
|
|
337
|
+
let ret = '';
|
|
338
|
+
for (let i = 0; i < address.length; i++) {
|
|
339
|
+
if (parseInt(hash[i], 16) >= 8) {
|
|
340
|
+
ret += address[i].toUpperCase();
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
ret += address[i];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return `0x${ret}`;
|
|
347
|
+
};
|
|
348
|
+
exports.toChecksumAddress = toChecksumAddress;
|
|
349
|
+
/**
|
|
350
|
+
* Checks if the address is a valid checksummed address.
|
|
351
|
+
*
|
|
352
|
+
* See toChecksumAddress' documentation for details about the eip1191ChainId parameter.
|
|
353
|
+
*/
|
|
354
|
+
const isValidChecksumAddress = function (hexAddress, eip1191ChainId) {
|
|
355
|
+
return (0, exports.isValidAddress)(hexAddress) && (0, exports.toChecksumAddress)(hexAddress, eip1191ChainId) === hexAddress;
|
|
356
|
+
};
|
|
357
|
+
exports.isValidChecksumAddress = isValidChecksumAddress;
|
|
358
|
+
/**
|
|
359
|
+
* Generates an address of a newly created contract.
|
|
360
|
+
* @param from The address which is creating this new address
|
|
361
|
+
* @param nonce The nonce of the from account
|
|
362
|
+
*/
|
|
363
|
+
const generateAddress = function (from, nonce) {
|
|
364
|
+
(0, helpers_ts_1.assertIsBytes)(from);
|
|
365
|
+
(0, helpers_ts_1.assertIsBytes)(nonce);
|
|
366
|
+
if ((0, bytes_ts_1.bytesToBigInt)(nonce) === constants_ts_1.BIGINT_0) {
|
|
367
|
+
// in RLP we want to encode null in the case of zero nonce
|
|
368
|
+
// read the RLP documentation for an answer if you dare
|
|
369
|
+
return (0, sha3_js_1.keccak_256)(rlp_1.RLP.encode([from, Uint8Array.from([])])).subarray(-20);
|
|
370
|
+
}
|
|
371
|
+
// Only take the lower 160bits of the hash
|
|
372
|
+
return (0, sha3_js_1.keccak_256)(rlp_1.RLP.encode([from, nonce])).subarray(-20);
|
|
373
|
+
};
|
|
374
|
+
exports.generateAddress = generateAddress;
|
|
375
|
+
/**
|
|
376
|
+
* Generates an address for a contract created using CREATE2.
|
|
377
|
+
* @param from The address which is creating this new address
|
|
378
|
+
* @param salt A salt
|
|
379
|
+
* @param initCode The init code of the contract being created
|
|
380
|
+
*/
|
|
381
|
+
const generateAddress2 = function (from, salt, initCode) {
|
|
382
|
+
(0, helpers_ts_1.assertIsBytes)(from);
|
|
383
|
+
(0, helpers_ts_1.assertIsBytes)(salt);
|
|
384
|
+
(0, helpers_ts_1.assertIsBytes)(initCode);
|
|
385
|
+
if (from.length !== 20) {
|
|
386
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Expected from to be of length 20');
|
|
387
|
+
}
|
|
388
|
+
if (salt.length !== 32) {
|
|
389
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Expected salt to be of length 32');
|
|
390
|
+
}
|
|
391
|
+
const address = (0, sha3_js_1.keccak_256)((0, bytes_ts_1.concatBytes)((0, bytes_ts_1.hexToBytes)('0xff'), from, salt, (0, sha3_js_1.keccak_256)(initCode)));
|
|
392
|
+
return address.subarray(-20);
|
|
393
|
+
};
|
|
394
|
+
exports.generateAddress2 = generateAddress2;
|
|
395
|
+
/**
|
|
396
|
+
* Checks if the private key satisfies the rules of the curve secp256k1.
|
|
397
|
+
*/
|
|
398
|
+
const isValidPrivate = function (privateKey) {
|
|
399
|
+
return secp256k1_js_1.secp256k1.utils.isValidSecretKey(privateKey);
|
|
400
|
+
};
|
|
401
|
+
exports.isValidPrivate = isValidPrivate;
|
|
402
|
+
/**
|
|
403
|
+
* Checks if the public key satisfies the rules of the curve secp256k1
|
|
404
|
+
* and the requirements of Ethereum.
|
|
405
|
+
* @param publicKey The two points of an uncompressed key, unless sanitize is enabled
|
|
406
|
+
* @param sanitize Accept public keys in other formats
|
|
407
|
+
*/
|
|
408
|
+
const isValidPublic = function (publicKey, sanitize = false) {
|
|
409
|
+
(0, helpers_ts_1.assertIsBytes)(publicKey);
|
|
410
|
+
if (publicKey.length === 64) {
|
|
411
|
+
// Convert to SEC1 for secp256k1
|
|
412
|
+
// Automatically checks whether point is on curve
|
|
413
|
+
try {
|
|
414
|
+
secp256k1_js_1.secp256k1.Point.fromBytes((0, bytes_ts_1.concatBytes)(Uint8Array.from([4]), publicKey));
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
if (!sanitize) {
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
424
|
+
try {
|
|
425
|
+
secp256k1_js_1.secp256k1.Point.fromBytes(publicKey);
|
|
426
|
+
return true;
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
exports.isValidPublic = isValidPublic;
|
|
433
|
+
/**
|
|
434
|
+
* Returns the ethereum address of a given public key.
|
|
435
|
+
* Accepts "Ethereum public keys" and SEC1 encoded keys.
|
|
436
|
+
* @param pubKey The two points of an uncompressed key, unless sanitize is enabled
|
|
437
|
+
* @param sanitize Accept public keys in other formats
|
|
438
|
+
*/
|
|
439
|
+
const pubToAddress = function (pubKey, sanitize = false) {
|
|
440
|
+
(0, helpers_ts_1.assertIsBytes)(pubKey);
|
|
441
|
+
if (sanitize && pubKey.length !== 64) {
|
|
442
|
+
pubKey = secp256k1_js_1.secp256k1.Point.fromBytes(pubKey).toBytes(false).slice(1);
|
|
443
|
+
}
|
|
444
|
+
if (pubKey.length !== 64) {
|
|
445
|
+
throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Expected pubKey to be of length 64');
|
|
446
|
+
}
|
|
447
|
+
// Only take the lower 160bits of the hash
|
|
448
|
+
return (0, sha3_js_1.keccak_256)(pubKey).subarray(-20);
|
|
449
|
+
};
|
|
450
|
+
exports.pubToAddress = pubToAddress;
|
|
451
|
+
exports.publicToAddress = exports.pubToAddress;
|
|
452
|
+
/**
|
|
453
|
+
* Returns the ethereum public key of a given private key.
|
|
454
|
+
* @param privateKey A private key must be 256 bits wide
|
|
455
|
+
*/
|
|
456
|
+
const privateToPublic = function (privateKey) {
|
|
457
|
+
(0, helpers_ts_1.assertIsBytes)(privateKey);
|
|
458
|
+
// skip the type flag and use the X, Y points
|
|
459
|
+
return secp256k1_js_1.secp256k1.getPublicKey(privateKey, false).slice(1);
|
|
460
|
+
};
|
|
461
|
+
exports.privateToPublic = privateToPublic;
|
|
462
|
+
/**
|
|
463
|
+
* Returns the ethereum address of a given private key.
|
|
464
|
+
* @param privateKey A private key must be 256 bits wide
|
|
465
|
+
*/
|
|
466
|
+
const privateToAddress = function (privateKey) {
|
|
467
|
+
return (0, exports.publicToAddress)((0, exports.privateToPublic)(privateKey));
|
|
468
|
+
};
|
|
469
|
+
exports.privateToAddress = privateToAddress;
|
|
470
|
+
/**
|
|
471
|
+
* Converts a public key to the Ethereum format.
|
|
472
|
+
*/
|
|
473
|
+
const importPublic = function (publicKey) {
|
|
474
|
+
(0, helpers_ts_1.assertIsBytes)(publicKey);
|
|
475
|
+
if (publicKey.length !== 64) {
|
|
476
|
+
publicKey = secp256k1_js_1.secp256k1.Point.fromBytes(publicKey).toBytes(false).slice(1);
|
|
477
|
+
}
|
|
478
|
+
return publicKey;
|
|
479
|
+
};
|
|
480
|
+
exports.importPublic = importPublic;
|
|
481
|
+
/**
|
|
482
|
+
* Returns the zero address.
|
|
483
|
+
*/
|
|
484
|
+
const zeroAddress = function () {
|
|
485
|
+
return (0, bytes_ts_1.bytesToHex)(new Uint8Array(20));
|
|
486
|
+
};
|
|
487
|
+
exports.zeroAddress = zeroAddress;
|
|
488
|
+
/**
|
|
489
|
+
* Checks if a given address is the zero address.
|
|
490
|
+
*/
|
|
491
|
+
const isZeroAddress = function (hexAddress) {
|
|
492
|
+
try {
|
|
493
|
+
(0, helpers_ts_1.assertIsString)(hexAddress);
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
const zeroAddr = (0, exports.zeroAddress)();
|
|
499
|
+
return zeroAddr === hexAddress;
|
|
500
|
+
};
|
|
501
|
+
exports.isZeroAddress = isZeroAddress;
|
|
502
|
+
function accountBodyFromSlim(body) {
|
|
503
|
+
const [nonce, balance, storageRoot, codeHash] = body;
|
|
504
|
+
return [
|
|
505
|
+
nonce,
|
|
506
|
+
balance,
|
|
507
|
+
storageRoot.length === 0 ? constants_ts_1.KECCAK256_RLP : storageRoot,
|
|
508
|
+
codeHash.length === 0 ? constants_ts_1.KECCAK256_NULL : codeHash,
|
|
509
|
+
];
|
|
510
|
+
}
|
|
511
|
+
const emptyUint8Arr = new Uint8Array(0);
|
|
512
|
+
function accountBodyToSlim(body) {
|
|
513
|
+
const [nonce, balance, storageRoot, codeHash] = body;
|
|
514
|
+
return [
|
|
515
|
+
nonce,
|
|
516
|
+
balance,
|
|
517
|
+
(0, bytes_ts_1.equalsBytes)(storageRoot, constants_ts_1.KECCAK256_RLP) ? emptyUint8Arr : storageRoot,
|
|
518
|
+
(0, bytes_ts_1.equalsBytes)(codeHash, constants_ts_1.KECCAK256_NULL) ? emptyUint8Arr : codeHash,
|
|
519
|
+
];
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Converts a slim account (per snap protocol spec) to the RLP encoded version of the account
|
|
523
|
+
* @param body Array of 4 Uint8Array-like items to represent the account
|
|
524
|
+
* @returns RLP encoded version of the account
|
|
525
|
+
*/
|
|
526
|
+
function accountBodyToRLP(body, couldBeSlim = true) {
|
|
527
|
+
const accountBody = couldBeSlim ? accountBodyFromSlim(body) : body;
|
|
528
|
+
return rlp_1.RLP.encode(accountBody);
|
|
529
|
+
}
|
|
530
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/account.ts"],"names":[],"mappings":";;;AA+SA,sCAYC;AAED,kEAIC;AAED,oDAsBC;AAED,oDAQC;AAED,kEAuBC;AA4ND,kDAQC;AAGD,8CAQC;AAOD,4CAGC;AArnBD,yCAAqC;AACrC,6DAAsD;AACtD,mDAAkD;AAElD,yCAWmB;AACnB,iDAAwE;AACxE,2CAAwD;AACxD,6CAA+E;AAC/E,+CAA8C;AAsB9C;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,MAAqC;IAChE,iFAAiF;IACjF,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC,CAAe,CAAC,CAAA;IAEzD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAA,sCAA0B,EAAC,2BAA2B,aAAa,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAA,sCAA0B,EAAC,yBAAyB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAe,CAAA;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAa,OAAO;IASlB,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,WAAW,IAAI,CAAC,QAAQ,aAAa,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,aAAa,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,WAAW,IAAI,CAAC,QAAQ,aAAa,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,YAAY,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,eAAe,IAAI,CAAC,YAAY,aAAa,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,YAAwB;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,aAAa,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,SAAqB;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,aAAa,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,SAAiB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,YACE,QAAuB,uBAAQ,EAC/B,UAAyB,uBAAQ,EACjC,cAAiC,4BAAa,EAC9C,WAA8B,6BAAc,EAC5C,WAA0B,CAAC,EAC3B,UAAyB,CAAC;QAvF5B,WAAM,GAAkB,IAAI,CAAA;QAC5B,aAAQ,GAAkB,IAAI,CAAA;QAC9B,iBAAY,GAAsB,IAAI,CAAA;QACtC,cAAS,GAAsB,IAAI,CAAA;QACnC,mDAAmD;QACnD,cAAS,GAAkB,IAAI,CAAA;QAC/B,aAAQ,GAAkB,IAAI,CAAA;QAmF5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;QAC/B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAEzB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACjE,QAAQ,GAAG,CAAC,CAAA;QACd,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QAEvB,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,uBAAQ,EAAE,CAAC;YACnD,MAAM,IAAA,sCAA0B,EAAC,iCAAiC,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,uBAAQ,EAAE,CAAC;YACvD,MAAM,IAAA,sCAA0B,EAAC,mCAAmC,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAClE,MAAM,IAAA,sCAA0B,EAAC,sCAAsC,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC5D,MAAM,IAAA,sCAA0B,EAAC,mCAAmC,CAAC,CAAA;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,uBAAQ,EAAE,CAAC;YACzD,MAAM,IAAA,sCAA0B,EAAC,oCAAoC,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG;QACD,OAAO;YACL,IAAA,gCAAqB,EAAC,IAAI,CAAC,KAAK,CAAC;YACjC,IAAA,gCAAqB,EAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,QAAQ;SACd,CAAA;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,SAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,wBAAwB;QACtB,MAAM,WAAW,GAAG,EAAE,CAAA;QACtB,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC,CAAC,CAAC,CAAA;QACzC,MAAM,UAAU,GAAG,IAAA,6BAAkB,EAAC,CAAC,CAAC,CAAA;QAExC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAA,gCAAqB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAA,gCAAqB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAA,6BAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,OAAO,SAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAA;QACrE,CAAC;QACD,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,6BAAc,CAAC,CAAC;YACzE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAClD,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,gDAAgD;QAChD,IACE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,uBAAQ,CAAC;YACrD,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,uBAAQ,CAAC;YACjD,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,IAAA,sBAAW,EAAC,IAAI,CAAC,QAAQ,EAAE,6BAAc,CAAC,CAAC,EACxE,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,CACL,IAAI,CAAC,OAAO,KAAK,uBAAQ;YACzB,IAAI,CAAC,KAAK,KAAK,uBAAQ;YACvB,IAAA,sBAAW,EAAC,IAAI,CAAC,QAAQ,EAAE,6BAAc,CAAC,CAC3C,CAAA;IACH,CAAC;CACF;AA3ND,0BA2NC;AAED,uBAAuB;AAEvB,SAAgB,aAAa,CAAC,WAAwB;IACpD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAA;IAC7D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpF,MAAM,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,IAAI,OAAO,CAChB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,IAAA,kBAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAC/D,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,IAAA,kBAAO,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACnE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,EAC5D,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACvD,CAAA;AACH,CAAC;AAED,SAAgB,2BAA2B,CAAC,MAAoB;IAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAA;IAEtD,OAAO,IAAI,OAAO,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,IAAA,wBAAa,EAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;AACzF,CAAC;AAED,SAAgB,oBAAoB,CAAC,kBAAsC;IACzE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAA;IAEvF,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,IAAI;QAChB,WAAW,KAAK,IAAI;QACpB,QAAQ,KAAK,IAAI;QACjB,QAAQ,KAAK,IAAI;QACjB,OAAO,KAAK,IAAI,EAChB,CAAC;QACD,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,IAAI,OAAO,CAChB,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,IAAA,kBAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAC7E,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,IAAA,kBAAO,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EACrF,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EACtF,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC1E,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EACtF,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,IAAA,kBAAO,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACnF,CAAA;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,UAAsB;IACzD,MAAM,MAAM,GAAG,SAAG,CAAC,MAAM,CAAC,UAAU,CAAiB,CAAA;IAErD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAA,sCAA0B,EAAC,iDAAiD,CAAC,CAAA;IACrF,CAAC;IAED,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAA;AAC5C,CAAC;AAED,SAAgB,2BAA2B,CAAC,UAAsB;IAChE,MAAM,MAAM,GAAG,SAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAErC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAA,sCAA0B,EAAC,iDAAiD,CAAC,CAAA;IACrF,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,0CAA0C;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAA,sCAA0B,EAAC,sDAAsD,CAAC,CAAA;QAC1F,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,GAC1E,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAEjC,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAA;IACtE,MAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,WAAW,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,UAAU,CAAC,CAAA;IAEnE,OAAO,oBAAoB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;AAC3F,CAAC;AAED;;GAEG;AACI,MAAM,cAAc,GAAG,UAAU,UAAkB;IACxD,IAAI,CAAC;QACH,IAAA,2BAAc,EAAC,UAAU,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAC/C,CAAC,CAAA;AARY,QAAA,cAAc,kBAQ1B;AAED;;;;;;;;;;;GAWG;AACI,MAAM,iBAAiB,GAAG,UAC/B,UAAkB,EAClB,cAA2B;IAE3B,IAAA,8BAAiB,EAAC,UAAU,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,IAAA,4BAAc,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;IAExD,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAA,wBAAa,EAAC,IAAA,kBAAO,EAAC,cAAc,CAAC,CAAC,CAAA;QACtD,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAA;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,sBAAW,EAAC,MAAM,GAAG,OAAO,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAA,qBAAU,EAAC,IAAA,oBAAU,EAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACnD,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,GAAG,EAAE,CAAA;AACnB,CAAC,CAAA;AA1BY,QAAA,iBAAiB,qBA0B7B;AAED;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,UACpC,UAAkB,EAClB,cAA2B;IAE3B,OAAO,IAAA,sBAAc,EAAC,UAAU,CAAC,IAAI,IAAA,yBAAiB,EAAC,UAAU,EAAE,cAAc,CAAC,KAAK,UAAU,CAAA;AACnG,CAAC,CAAA;AALY,QAAA,sBAAsB,0BAKlC;AAED;;;;GAIG;AACI,MAAM,eAAe,GAAG,UAAU,IAAgB,EAAE,KAAiB;IAC1E,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAA;IACnB,IAAA,0BAAa,EAAC,KAAK,CAAC,CAAA;IAEpB,IAAI,IAAA,wBAAa,EAAC,KAAK,CAAC,KAAK,uBAAQ,EAAE,CAAC;QACtC,0DAA0D;QAC1D,uDAAuD;QACvD,OAAO,IAAA,oBAAU,EAAC,SAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,0CAA0C;IAC1C,OAAO,IAAA,oBAAU,EAAC,SAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;AAC5D,CAAC,CAAA;AAZY,QAAA,eAAe,mBAY3B;AAED;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,UAC9B,IAAgB,EAChB,IAAgB,EAChB,QAAoB;IAEpB,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAA;IACnB,IAAA,0BAAa,EAAC,IAAI,CAAC,CAAA;IACnB,IAAA,0BAAa,EAAC,QAAQ,CAAC,CAAA;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAA,sCAA0B,EAAC,kCAAkC,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAA,sCAA0B,EAAC,kCAAkC,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,IAAA,sBAAW,EAAC,IAAA,qBAAU,EAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAE7F,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAA;AAnBY,QAAA,gBAAgB,oBAmB5B;AAED;;GAEG;AACI,MAAM,cAAc,GAAG,UAAU,UAAsB;IAC5D,OAAO,wBAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;AACrD,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B;AAED;;;;;GAKG;AACI,MAAM,aAAa,GAAG,UAAU,SAAqB,EAAE,WAAoB,KAAK;IACrF,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAA;IACxB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,gCAAgC;QAChC,iDAAiD;QACjD,IAAI,CAAC;YACH,wBAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAA,sBAAW,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;YACvE,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,wBAAS,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAvBY,QAAA,aAAa,iBAuBzB;AAED;;;;;GAKG;AACI,MAAM,YAAY,GAAG,UAAU,MAAkB,EAAE,WAAoB,KAAK;IACjF,IAAA,0BAAa,EAAC,MAAM,CAAC,CAAA;IACrB,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,wBAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACzB,MAAM,IAAA,sCAA0B,EAAC,oCAAoC,CAAC,CAAA;IACxE,CAAC;IACD,0CAA0C;IAC1C,OAAO,IAAA,oBAAU,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAVY,QAAA,YAAY,gBAUxB;AACY,QAAA,eAAe,GAAG,oBAAY,CAAA;AAE3C;;;GAGG;AACI,MAAM,eAAe,GAAG,UAAU,UAAsB;IAC7D,IAAA,0BAAa,EAAC,UAAU,CAAC,CAAA;IACzB,6CAA6C;IAC7C,OAAO,wBAAS,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAA;AAJY,QAAA,eAAe,mBAI3B;AAED;;;GAGG;AACI,MAAM,gBAAgB,GAAG,UAAU,UAAsB;IAC9D,OAAO,IAAA,uBAAe,EAAC,IAAA,uBAAe,EAAC,UAAU,CAAC,CAAC,CAAA;AACrD,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AAED;;GAEG;AACI,MAAM,YAAY,GAAG,UAAU,SAAqB;IACzD,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAA;IACxB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,SAAS,GAAG,wBAAS,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AANY,QAAA,YAAY,gBAMxB;AAED;;GAEG;AACI,MAAM,WAAW,GAAG;IACzB,OAAO,IAAA,qBAAU,EAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;AACvC,CAAC,CAAA;AAFY,QAAA,WAAW,eAEvB;AAED;;GAEG;AACI,MAAM,aAAa,GAAG,UAAU,UAAkB;IACvD,IAAI,CAAC;QACH,IAAA,2BAAc,EAAC,UAAU,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,mBAAW,GAAE,CAAA;IAC9B,OAAO,QAAQ,KAAK,UAAU,CAAA;AAChC,CAAC,CAAA;AATY,QAAA,aAAa,iBASzB;AAED,SAAgB,mBAAmB,CAAC,IAAsB;IACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAA;IACpD,OAAO;QACL,KAAK;QACL,OAAO;QACP,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,4BAAa,CAAC,CAAC,CAAC,WAAW;QACtD,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,6BAAc,CAAC,CAAC,CAAC,QAAQ;KAClD,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;AACvC,SAAgB,iBAAiB,CAAC,IAAsB;IACtD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAA;IACpD,OAAO;QACL,KAAK;QACL,OAAO;QACP,IAAA,sBAAW,EAAC,WAAW,EAAE,4BAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;QACrE,IAAA,sBAAW,EAAC,QAAQ,EAAE,6BAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;KACjE,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAsB,EAAE,WAAW,GAAG,IAAI;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAClE,OAAO,SAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { PrefixedHexString } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Handling and generating Ethereum addresses
|
|
4
|
+
*/
|
|
5
|
+
export declare class Address {
|
|
6
|
+
readonly bytes: Uint8Array;
|
|
7
|
+
constructor(bytes: Uint8Array);
|
|
8
|
+
/**
|
|
9
|
+
* Is address equal to another.
|
|
10
|
+
*/
|
|
11
|
+
equals(address: Address): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Is address zero.
|
|
14
|
+
*/
|
|
15
|
+
isZero(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* True if address is in the address range defined
|
|
18
|
+
* by EIP-1352
|
|
19
|
+
*/
|
|
20
|
+
isPrecompileOrSystemAddress(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Returns hex encoding of address.
|
|
23
|
+
*/
|
|
24
|
+
toString(): PrefixedHexString;
|
|
25
|
+
/**
|
|
26
|
+
* Returns a new Uint8Array representation of address.
|
|
27
|
+
*/
|
|
28
|
+
toBytes(): Uint8Array;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the zero address.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createZeroAddress(): Address;
|
|
34
|
+
/**
|
|
35
|
+
* Returns an Address object from a bigint address (they are stored as bigints on the stack)
|
|
36
|
+
* @param value The bigint address
|
|
37
|
+
*/
|
|
38
|
+
export declare function createAddressFromBigInt(value: bigint): Address;
|
|
39
|
+
/**
|
|
40
|
+
* Returns an Address object from a hex-encoded string.
|
|
41
|
+
* @param str - Hex-encoded address
|
|
42
|
+
*/
|
|
43
|
+
export declare function createAddressFromString(str: string): Address;
|
|
44
|
+
/**
|
|
45
|
+
* Returns an address for a given public key.
|
|
46
|
+
* @param pubKey The two points of an uncompressed key
|
|
47
|
+
*/
|
|
48
|
+
export declare function createAddressFromPublicKey(pubKey: Uint8Array): Address;
|
|
49
|
+
/**
|
|
50
|
+
* Returns an address for a given private key.
|
|
51
|
+
* @param privateKey A private key must be 256 bits wide
|
|
52
|
+
*/
|
|
53
|
+
export declare function createAddressFromPrivateKey(privateKey: Uint8Array): Address;
|
|
54
|
+
/**
|
|
55
|
+
* Generates an address for a newly created contract.
|
|
56
|
+
* @param from The address which is creating this new address
|
|
57
|
+
* @param nonce The nonce of the from account
|
|
58
|
+
*/
|
|
59
|
+
export declare function createContractAddress(from: Address, nonce: bigint): Address;
|
|
60
|
+
/**
|
|
61
|
+
* Generates an address for a contract created using CREATE2.
|
|
62
|
+
* @param from The address which is creating this new address
|
|
63
|
+
* @param salt A salt
|
|
64
|
+
* @param initCode The init code of the contract being created
|
|
65
|
+
*/
|
|
66
|
+
export declare function createContractAddress2(from: Address, salt: Uint8Array, initCode: Uint8Array): Address;
|
|
67
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/address.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD;;GAEG;AACH,qBAAa,OAAO;IAClB,SAAgB,KAAK,EAAE,UAAU,CAAA;gBAErB,KAAK,EAAE,UAAU;IAO7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIjC;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;;OAGG;IACH,2BAA2B,IAAI,OAAO;IAOtC;;OAEG;IACH,QAAQ,IAAI,iBAAiB;IAI7B;;OAEG;IACH,OAAO,IAAI,UAAU;CAGtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM9D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK5D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAMtE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAM3E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAK3E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAQT"}
|