@aeternity/aepp-sdk 9.0.1 → 10.0.0-beta.1
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/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -9
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/account/base.js +30 -122
- package/es/account/base.js.map +1 -1
- package/es/account/memory.js +17 -19
- package/es/account/memory.js.map +1 -1
- package/es/account/multiple.js +73 -164
- package/es/account/multiple.js.map +1 -1
- package/es/ae/aens.js +164 -599
- package/es/ae/aens.js.map +1 -1
- package/es/ae/contract.js +82 -759
- package/es/ae/contract.js.map +1 -1
- package/es/ae/index.js +78 -315
- package/es/ae/index.js.map +1 -1
- package/es/ae/oracle.js +130 -498
- package/es/ae/oracle.js.map +1 -1
- package/es/chain/index.js +1 -1
- package/es/chain/index.js.map +1 -1
- package/es/chain/node.js +288 -1008
- package/es/chain/node.js.map +1 -1
- package/es/channel/handlers.js +597 -1086
- package/es/channel/handlers.js.map +1 -1
- package/es/channel/index.js +203 -451
- package/es/channel/index.js.map +1 -1
- package/es/channel/internal.js +129 -301
- package/es/channel/internal.js.map +1 -1
- package/es/contract/aci/index.js +319 -480
- package/es/contract/aci/index.js.map +1 -1
- package/es/contract/aci/transformation.js +35 -711
- package/es/contract/aci/transformation.js.map +1 -1
- package/es/contract/compiler.js +129 -203
- package/es/contract/compiler.js.map +1 -1
- package/es/contract/ga/helpers.js +16 -114
- package/es/contract/ga/helpers.js.map +1 -1
- package/es/contract/ga/index.js +101 -242
- package/es/contract/ga/index.js.map +1 -1
- package/es/contract/index.js +1 -1
- package/es/contract/index.js.map +1 -1
- package/es/index.js +1 -2
- package/es/index.js.map +1 -1
- package/es/node-pool/index.js +54 -73
- package/es/node-pool/index.js.map +1 -1
- package/es/node.js +56 -157
- package/es/node.js.map +1 -1
- package/es/other.d.ts +1 -1
- package/es/tx/builder/helpers.js +38 -75
- package/es/tx/builder/helpers.js.map +1 -1
- package/es/tx/builder/index.js +196 -294
- package/es/tx/builder/index.js.map +1 -1
- package/es/tx/builder/schema.js +577 -459
- package/es/tx/builder/schema.js.map +1 -1
- package/es/tx/index.js +1 -1
- package/es/tx/index.js.map +1 -1
- package/es/tx/tx-object.js +105 -132
- package/es/tx/tx-object.js.map +1 -1
- package/es/tx/tx.js +808 -1628
- package/es/tx/tx.js.map +1 -1
- package/es/tx/validator.js +132 -268
- package/es/tx/validator.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +17 -21
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +38 -74
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +14 -15
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
- package/es/utils/aepp-wallet-communication/helpers.js +60 -105
- package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +179 -510
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +70 -89
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +353 -600
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/schema.js +43 -39
- package/es/utils/aepp-wallet-communication/schema.js.map +1 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +32 -58
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
- package/es/utils/amount-formatter.js +41 -61
- package/es/utils/amount-formatter.js.map +1 -1
- package/es/utils/async-init.js +28 -64
- package/es/utils/async-init.js.map +1 -1
- package/es/utils/bignumber.js +3 -11
- package/es/utils/bignumber.js.map +1 -1
- package/es/utils/bytes.js +5 -9
- package/es/utils/bytes.js.map +1 -1
- package/es/utils/crypto.js +47 -62
- package/es/utils/crypto.js.map +1 -1
- package/es/utils/hd-wallet.js +45 -81
- package/es/utils/hd-wallet.js.map +1 -1
- package/es/utils/json-big.js +16 -49
- package/es/utils/json-big.js.map +1 -1
- package/es/utils/keystore.js +81 -246
- package/es/utils/keystore.js.map +1 -1
- package/es/utils/mptree.js +88 -134
- package/es/utils/mptree.js.map +1 -1
- package/es/utils/other.js +10 -60
- package/es/utils/other.js.map +1 -1
- package/es/utils/semver-satisfies.js +9 -28
- package/es/utils/semver-satisfies.js.map +1 -1
- package/es/utils/string.js +4 -13
- package/es/utils/string.js.map +1 -1
- package/es/utils/swagger.js +85 -224
- package/es/utils/swagger.js.map +1 -1
- package/package.json +44 -40
- package/src/account/multiple.js +18 -19
- package/src/ae/aens.js +25 -21
- package/src/ae/contract.js +32 -163
- package/src/ae/index.js +3 -3
- package/src/ae/oracle.js +18 -14
- package/src/chain/node.js +2 -4
- package/src/channel/handlers.js +0 -1
- package/src/channel/index.js +4 -5
- package/src/contract/aci/index.js +221 -102
- package/src/contract/aci/transformation.js +30 -422
- package/src/contract/compiler.js +45 -4
- package/src/contract/ga/helpers.js +1 -8
- package/src/contract/ga/index.js +13 -11
- package/src/index.js +0 -2
- package/src/node-pool/index.js +21 -12
- package/src/node.js +22 -26
- package/src/tx/builder/index.js +2 -1
- package/src/tx/builder/schema.js +2 -1
- package/src/tx/tx.js +147 -143
- package/src/tx/validator.js +9 -7
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +1 -3
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +3 -3
- package/src/utils/aepp-wallet-communication/schema.js +1 -3
- package/src/utils/bignumber.ts +2 -1
- package/src/utils/other.ts +1 -1
- package/src/utils/semver-satisfies.ts +1 -1
- package/src/utils/swagger.js +14 -7
- package/src/contract/aci/helpers.js +0 -140
package/es/tx/builder/helpers.js
CHANGED
|
@@ -3,16 +3,6 @@ import _lte from "ramda/src/lte";
|
|
|
3
3
|
import _always from "ramda/src/always";
|
|
4
4
|
import _lt from "ramda/src/lt";
|
|
5
5
|
import _cond from "ramda/src/cond";
|
|
6
|
-
import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
|
|
7
|
-
import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
|
|
8
|
-
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
9
|
-
import _padStartInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/pad-start";
|
|
10
|
-
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
|
11
|
-
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
|
12
|
-
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
13
|
-
import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
|
|
14
|
-
import _endsWithInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/ends-with";
|
|
15
|
-
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
|
16
6
|
import BigNumber from 'bignumber.js';
|
|
17
7
|
import { decodeBase58Check, decodeBase64Check, encodeBase58Check, encodeBase64Check, hash, salt } from '../../utils/crypto';
|
|
18
8
|
import { toBytes } from '../../utils/bytes';
|
|
@@ -25,8 +15,8 @@ import { ceil } from '../../utils/bignumber';
|
|
|
25
15
|
* @example import { TxBuilderHelper } from '@aeternity/aepp-sdk'
|
|
26
16
|
*/
|
|
27
17
|
|
|
28
|
-
export
|
|
29
|
-
|
|
18
|
+
export const createSalt = salt;
|
|
19
|
+
const base64Types = ['tx', 'st', 'ss', 'pi', 'ov', 'or', 'cb', 'cs', 'ba'];
|
|
30
20
|
/**
|
|
31
21
|
* Build a contract public key
|
|
32
22
|
* @function
|
|
@@ -37,10 +27,8 @@ var base64Types = ['tx', 'st', 'ss', 'pi', 'ov', 'or', 'cb', 'cs', 'ba'];
|
|
|
37
27
|
*/
|
|
38
28
|
|
|
39
29
|
export function buildContractId(ownerId, nonce) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
var ownerIdAndNonce = Buffer.from(_concatInstanceProperty(_context = []).call(_context, _toConsumableArray(decode(ownerId, 'ak')), _toConsumableArray(toBytes(nonce))));
|
|
43
|
-
var b2bHash = hash(ownerIdAndNonce);
|
|
30
|
+
const ownerIdAndNonce = Buffer.from([...decode(ownerId, 'ak'), ...toBytes(nonce)]);
|
|
31
|
+
const b2bHash = hash(ownerIdAndNonce);
|
|
44
32
|
return encode(b2bHash, 'ct');
|
|
45
33
|
}
|
|
46
34
|
/**
|
|
@@ -54,14 +42,12 @@ export function buildContractId(ownerId, nonce) {
|
|
|
54
42
|
*/
|
|
55
43
|
|
|
56
44
|
export function oracleQueryId(senderId, nonce, oracleId) {
|
|
57
|
-
var _context2;
|
|
58
|
-
|
|
59
45
|
function _int32(val) {
|
|
60
|
-
|
|
61
|
-
return
|
|
46
|
+
const nonceBE = toBytes(val, true);
|
|
47
|
+
return Buffer.concat([Buffer.alloc(32 - nonceBE.length), nonceBE]);
|
|
62
48
|
}
|
|
63
49
|
|
|
64
|
-
|
|
50
|
+
const b2bHash = hash(Buffer.from([...decode(senderId, 'ak'), ..._int32(nonce), ...decode(oracleId, 'ok')]));
|
|
65
51
|
return encode(b2bHash, 'oq');
|
|
66
52
|
}
|
|
67
53
|
/**
|
|
@@ -73,9 +59,7 @@ export function oracleQueryId(senderId, nonce, oracleId) {
|
|
|
73
59
|
*/
|
|
74
60
|
|
|
75
61
|
export function formatSalt(salt) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return Buffer.from(_padStartInstanceProperty(_context3 = salt.toString(16)).call(_context3, 64, '0'), 'hex');
|
|
62
|
+
return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex');
|
|
79
63
|
}
|
|
80
64
|
/**
|
|
81
65
|
* Encode a domain name
|
|
@@ -103,9 +87,9 @@ export function produceNameId(name) {
|
|
|
103
87
|
*/
|
|
104
88
|
|
|
105
89
|
export function commitmentHash(name) {
|
|
106
|
-
|
|
90
|
+
let salt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSalt();
|
|
107
91
|
ensureNameValid(name);
|
|
108
|
-
return
|
|
92
|
+
return `cm_${encodeBase58Check(hash(Buffer.concat([Buffer.from(name.toLowerCase()), formatSalt(salt)])))}`;
|
|
109
93
|
}
|
|
110
94
|
/**
|
|
111
95
|
* Decode data using the default encoding/decoding algorithm
|
|
@@ -117,21 +101,14 @@ export function commitmentHash(name) {
|
|
|
117
101
|
*/
|
|
118
102
|
|
|
119
103
|
export function decode(data, requiredPrefix) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
prefix = _data$split2[0],
|
|
123
|
-
payload = _data$split2[1],
|
|
124
|
-
extra = _data$split2[2];
|
|
125
|
-
|
|
126
|
-
if (extra) throw new Error("Encoded string have extra parts: ".concat(data));
|
|
104
|
+
const [prefix, payload, extra] = data.split('_');
|
|
105
|
+
if (extra) throw new Error(`Encoded string have extra parts: ${data}`);
|
|
127
106
|
|
|
128
107
|
if (requiredPrefix && requiredPrefix !== prefix) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
throw new Error(_concatInstanceProperty(_context4 = "Encoded string have a wrong type: ".concat(prefix, " (expected: ")).call(_context4, requiredPrefix, ")"));
|
|
108
|
+
throw new Error(`Encoded string have a wrong type: ${prefix} (expected: ${requiredPrefix})`);
|
|
132
109
|
}
|
|
133
110
|
|
|
134
|
-
return (
|
|
111
|
+
return (base64Types.includes(prefix) ? decodeBase64Check : decodeBase58Check)(payload);
|
|
135
112
|
}
|
|
136
113
|
/**
|
|
137
114
|
* Encode data using the default encoding/decoding algorithm
|
|
@@ -143,9 +120,7 @@ export function decode(data, requiredPrefix) {
|
|
|
143
120
|
*/
|
|
144
121
|
|
|
145
122
|
export function encode(data, type) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return _concatInstanceProperty(_context5 = "".concat(type, "_")).call(_context5, _includesInstanceProperty(base64Types).call(base64Types, type) ? encodeBase64Check(data) : encodeBase58Check(data));
|
|
123
|
+
return `${type}_${base64Types.includes(type) ? encodeBase64Check(data) : encodeBase58Check(data)}`;
|
|
149
124
|
}
|
|
150
125
|
/**
|
|
151
126
|
* Utility function to create and _id type
|
|
@@ -156,13 +131,10 @@ export function encode(data, type) {
|
|
|
156
131
|
*/
|
|
157
132
|
|
|
158
133
|
export function writeId(hashId) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
var idTag = PREFIX_ID_TAG[prefix];
|
|
164
|
-
if (!idTag) throw new Error("Id tag for prefix ".concat(prefix, " not found."));
|
|
165
|
-
return Buffer.from(_concatInstanceProperty(_context6 = []).call(_context6, _toConsumableArray(toBytes(idTag)), _toConsumableArray(decode(hashId, prefix))));
|
|
134
|
+
const prefix = hashId.slice(0, 2);
|
|
135
|
+
const idTag = PREFIX_ID_TAG[prefix];
|
|
136
|
+
if (!idTag) throw new Error(`Id tag for prefix ${prefix} not found.`);
|
|
137
|
+
return Buffer.from([...toBytes(idTag), ...decode(hashId, prefix)]);
|
|
166
138
|
}
|
|
167
139
|
/**
|
|
168
140
|
* Utility function to read and _id type
|
|
@@ -173,10 +145,10 @@ export function writeId(hashId) {
|
|
|
173
145
|
*/
|
|
174
146
|
|
|
175
147
|
export function readId(buf) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (!prefix) throw new Error(
|
|
179
|
-
return encode(
|
|
148
|
+
const tag = buf.readUIntBE(0, 1);
|
|
149
|
+
const prefix = ID_TAG_PREFIX[tag];
|
|
150
|
+
if (!prefix) throw new Error(`Prefix for id-tag ${tag} not found.`);
|
|
151
|
+
return encode(buf.slice(1, buf.length), prefix);
|
|
180
152
|
}
|
|
181
153
|
/**
|
|
182
154
|
* Utility function to convert int to bytes
|
|
@@ -198,7 +170,7 @@ export function writeInt(val) {
|
|
|
198
170
|
*/
|
|
199
171
|
|
|
200
172
|
export function readInt() {
|
|
201
|
-
|
|
173
|
+
let buf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Buffer.from([]);
|
|
202
174
|
return BigNumber(buf.toString('hex'), 16).toString(10);
|
|
203
175
|
}
|
|
204
176
|
/**
|
|
@@ -210,9 +182,7 @@ export function readInt() {
|
|
|
210
182
|
*/
|
|
211
183
|
|
|
212
184
|
export function buildPointers(pointers) {
|
|
213
|
-
return
|
|
214
|
-
return [toBytes(p.key), writeId(p.id)];
|
|
215
|
-
});
|
|
185
|
+
return pointers.map(p => [toBytes(p.key), writeId(p.id)]);
|
|
216
186
|
}
|
|
217
187
|
/**
|
|
218
188
|
* Helper function to read pointers from name update TX
|
|
@@ -223,12 +193,9 @@ export function buildPointers(pointers) {
|
|
|
223
193
|
*/
|
|
224
194
|
|
|
225
195
|
export function readPointers(pointers) {
|
|
226
|
-
return
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
id = _ref2[1];
|
|
230
|
-
|
|
231
|
-
return _Object$assign({
|
|
196
|
+
return pointers.map(_ref => {
|
|
197
|
+
let [key, id] = _ref;
|
|
198
|
+
return Object.assign({
|
|
232
199
|
key: key.toString(),
|
|
233
200
|
id: readId(id)
|
|
234
201
|
});
|
|
@@ -245,7 +212,7 @@ export function readPointers(pointers) {
|
|
|
245
212
|
|
|
246
213
|
export function ensureNameValid(name) {
|
|
247
214
|
if (!name || typeof name !== 'string') throw new Error('Name must be a string');
|
|
248
|
-
if (!
|
|
215
|
+
if (!name.endsWith('.chain')) throw new Error(`Name should end with .chain: ${name}`);
|
|
249
216
|
}
|
|
250
217
|
/**
|
|
251
218
|
* Is name valid
|
|
@@ -276,12 +243,12 @@ export function classify(s) {
|
|
|
276
243
|
throw new Error('Not a valid hash');
|
|
277
244
|
}
|
|
278
245
|
|
|
279
|
-
|
|
246
|
+
const klass = s.substr(0, 2);
|
|
280
247
|
|
|
281
248
|
if (klass in NAME_ID_KEY) {
|
|
282
249
|
return NAME_ID_KEY[klass];
|
|
283
250
|
} else {
|
|
284
|
-
throw new Error(
|
|
251
|
+
throw new Error(`Unknown class ${klass}`);
|
|
285
252
|
}
|
|
286
253
|
}
|
|
287
254
|
/**
|
|
@@ -293,12 +260,8 @@ export function classify(s) {
|
|
|
293
260
|
*/
|
|
294
261
|
|
|
295
262
|
export function validatePointers() {
|
|
296
|
-
|
|
297
|
-
return !
|
|
298
|
-
var _context7;
|
|
299
|
-
|
|
300
|
-
return !p || typeof p !== 'string' || !_includesInstanceProperty(_context7 = ['ak', 'ok', 'ct', 'ch']).call(_context7, p.split('_')[0]);
|
|
301
|
-
});
|
|
263
|
+
let pointers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
264
|
+
return !pointers.find(p => !p || typeof p !== 'string' || !['ak', 'ok', 'ct', 'ch'].includes(p.split('_')[0]));
|
|
302
265
|
}
|
|
303
266
|
/**
|
|
304
267
|
* Get the minimum name fee for a domain
|
|
@@ -309,7 +272,7 @@ export function validatePointers() {
|
|
|
309
272
|
*/
|
|
310
273
|
|
|
311
274
|
export function getMinimumNameFee(domain) {
|
|
312
|
-
|
|
275
|
+
const nameLength = domain.replace('.chain', '').length;
|
|
313
276
|
return NAME_BID_RANGES[nameLength >= NAME_MAX_LENGTH_FEE ? NAME_MAX_LENGTH_FEE : nameLength];
|
|
314
277
|
}
|
|
315
278
|
/**
|
|
@@ -323,10 +286,10 @@ export function getMinimumNameFee(domain) {
|
|
|
323
286
|
*/
|
|
324
287
|
|
|
325
288
|
export function computeBidFee(domain) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
if (!(Number(increment) === increment && increment % 1 !== 0)) throw new Error(
|
|
329
|
-
if (increment < NAME_FEE_BID_INCREMENT) throw new Error(
|
|
289
|
+
let startFee = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NAME_FEE;
|
|
290
|
+
let increment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NAME_FEE_BID_INCREMENT;
|
|
291
|
+
if (!(Number(increment) === increment && increment % 1 !== 0)) throw new Error(`Increment must be float. Current increment ${increment}`);
|
|
292
|
+
if (increment < NAME_FEE_BID_INCREMENT) throw new Error(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`);
|
|
330
293
|
return ceil(BigNumber(BigNumber(startFee).eq(NAME_FEE) ? getMinimumNameFee(domain) : startFee).times(BigNumber(NAME_FEE_BID_INCREMENT).plus(1)));
|
|
331
294
|
}
|
|
332
295
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tx/builder/helpers.js"],"names":["BigNumber","decodeBase58Check","decodeBase64Check","encodeBase58Check","encodeBase64Check","hash","salt","toBytes","ID_TAG_PREFIX","PREFIX_ID_TAG","NAME_BID_RANGES","NAME_BID_MAX_LENGTH","NAME_FEE","NAME_FEE_BID_INCREMENT","NAME_BID_TIMEOUTS","NAME_MAX_LENGTH_FEE","NAME_ID_KEY","ceil","createSalt","base64Types","buildContractId","ownerId","nonce","ownerIdAndNonce","Buffer","from","decode","b2bHash","encode","oracleQueryId","senderId","oracleId","_int32","val","nonceBE","alloc","length","formatSalt","toString","produceNameId","name","ensureNameValid","toLowerCase","commitmentHash","data","requiredPrefix","split","prefix","payload","extra","Error","type","writeId","hashId","idTag","readId","buf","tag","readUIntBE","writeInt","readInt","buildPointers","pointers","p","key","id","readPointers","isNameValid","error","classify","s","match","klass","substr","validatePointers","getMinimumNameFee","domain","nameLength","replace","computeBidFee","startFee","increment","Number","eq","times","plus","computeAuctionEndBlock","claimHeight","isAuctionName"],"mappings":"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","sourcesContent":["import * as R from 'ramda'\nimport BigNumber from 'bignumber.js'\n\nimport {\n decodeBase58Check,\n decodeBase64Check,\n encodeBase58Check, encodeBase64Check,\n hash,\n salt\n} from '../../utils/crypto'\nimport { toBytes } from '../../utils/bytes'\nimport {\n ID_TAG_PREFIX,\n PREFIX_ID_TAG,\n NAME_BID_RANGES,\n NAME_BID_MAX_LENGTH,\n NAME_FEE,\n NAME_FEE_BID_INCREMENT,\n NAME_BID_TIMEOUTS,\n NAME_MAX_LENGTH_FEE,\n NAME_ID_KEY\n} from './schema'\nimport { ceil } from '../../utils/bignumber'\n\n/**\n * JavaScript-based Transaction builder helper function's\n * @module @aeternity/aepp-sdk/es/tx/builder/helpers\n * @export TxBuilderHelper\n * @example import { TxBuilderHelper } from '@aeternity/aepp-sdk'\n */\n\nexport const createSalt = salt\n\nconst base64Types = ['tx', 'st', 'ss', 'pi', 'ov', 'or', 'cb', 'cs', 'ba']\n\n/**\n * Build a contract public key\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} ownerId The public key of the owner account\n * @param {number} nonce the nonce of the transaction\n * @return {string} Contract public key\n */\nexport function buildContractId (ownerId, nonce) {\n const ownerIdAndNonce = Buffer.from([...decode(ownerId, 'ak'), ...toBytes(nonce)])\n const b2bHash = hash(ownerIdAndNonce)\n return encode(b2bHash, 'ct')\n}\n\n/**\n * Build a oracle query id\n * @function\n * @function* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} senderId The public key of the sender account\n * @param {Number} nonce the nonce of the transaction\n * @param {Number} oracleId The oracle public key\n * @return {string} Contract public key\n */\nexport function oracleQueryId (senderId, nonce, oracleId) {\n function _int32 (val) {\n const nonceBE = toBytes(val, true)\n return Buffer.concat([Buffer.alloc(32 - nonceBE.length), nonceBE])\n }\n\n const b2bHash = hash(Buffer.from([...decode(senderId, 'ak'), ..._int32(nonce), ...decode(oracleId, 'ok')]))\n return encode(b2bHash, 'oq')\n}\n\n/**\n * Format the salt into a 64-byte hex string\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {number} salt\n * @return {string} Zero-padded hex string of salt\n */\nexport function formatSalt (salt) {\n return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex')\n}\n\n/**\n * Encode a domain name\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} name Name to encode\n * @return {String} `nm_` prefixed encoded domain name\n */\nexport function produceNameId (name) {\n ensureNameValid(name)\n return encode(hash(name.toLowerCase()), 'nm')\n}\n\n/**\n * Generate the commitment hash by hashing the formatted salt and\n * name, base 58 encoding the result and prepending 'cm_'\n *\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @function commitmentHash\n * @category async\n * @rtype (name: String, salt?: String) => hash: Promise[String]\n * @param {String} name - Name to be registered\n * @param {Number} salt Random salt\n * @return {String} Commitment hash\n */\nexport function commitmentHash (name, salt = createSalt()) {\n ensureNameValid(name)\n return `cm_${encodeBase58Check(hash(Buffer.concat([Buffer.from(name.toLowerCase()), formatSalt(salt)])))}`\n}\n\n/**\n * Decode data using the default encoding/decoding algorithm\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} data An Base58check or Base64check encoded and prefixed string (ex tx_..., sg_..., ak_....)\n * @param {string} [requiredPrefix] Ensure that data have this prefix\n * @return {Buffer} Decoded data\n */\nexport function decode (data, requiredPrefix) {\n const [prefix, payload, extra] = data.split('_')\n if (extra) throw new Error(`Encoded string have extra parts: ${data}`)\n if (requiredPrefix && requiredPrefix !== prefix) {\n throw new Error(`Encoded string have a wrong type: ${prefix} (expected: ${requiredPrefix})`)\n }\n return (base64Types.includes(prefix) ? decodeBase64Check : decodeBase58Check)(payload)\n}\n\n/**\n * Encode data using the default encoding/decoding algorithm\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer|String} data An decoded data\n * @param {string} type Prefix of Transaction\n * @return {String} Encoded string Base58check or Base64check data\n */\nexport function encode (data, type) {\n return `${type}_${base64Types.includes(type)\n ? encodeBase64Check(data)\n : encodeBase58Check(data)}`\n}\n\n/**\n * Utility function to create and _id type\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} hashId Encoded hash\n * @return {Buffer} Buffer Buffer with ID tag and decoded HASh\n */\nexport function writeId (hashId) {\n const prefix = hashId.slice(0, 2)\n const idTag = PREFIX_ID_TAG[prefix]\n if (!idTag) throw new Error(`Id tag for prefix ${prefix} not found.`)\n return Buffer.from([...toBytes(idTag), ...decode(hashId, prefix)])\n}\n\n/**\n * Utility function to read and _id type\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer} buf Data\n * @return {String} Encoided hash string with prefix\n */\nexport function readId (buf) {\n const tag = buf.readUIntBE(0, 1)\n const prefix = ID_TAG_PREFIX[tag]\n if (!prefix) throw new Error(`Prefix for id-tag ${tag} not found.`)\n return encode(buf.slice(1, buf.length), prefix)\n}\n\n/**\n * Utility function to convert int to bytes\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Number|String|BigNumber} val Value\n * @return {Buffer} Buffer Buffer from number(BigEndian)\n */\nexport function writeInt (val) {\n return toBytes(val, true)\n}\n\n/**\n * Utility function to convert bytes to int\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer} buf Value\n * @return {String} Buffer Buffer from number(BigEndian)\n */\nexport function readInt (buf = Buffer.from([])) {\n return BigNumber(buf.toString('hex'), 16).toString(10)\n}\n\n/**\n * Helper function to build pointers for name update TX\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Array} pointers - Array of pointers ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])\n * @return {Array} Serialized pointers array\n */\nexport function buildPointers (pointers) {\n return pointers.map(\n p => [\n toBytes(p.key),\n writeId(p.id)\n ]\n )\n}\n\n/**\n * Helper function to read pointers from name update TX\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Array} pointers - Array of pointers ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])\n * @return {Array} Deserialize pointer array\n */\nexport function readPointers (pointers) {\n return pointers.map(\n ([key, id]) => Object.assign({\n key: key.toString(),\n id: readId(id)\n })\n )\n}\n\n/**\n * Ensure that name is valid\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} name\n * @return void\n * @throws Error\n */\nexport function ensureNameValid (name) {\n if (!name || typeof name !== 'string') throw new Error('Name must be a string')\n if (!name.endsWith('.chain')) throw new Error(`Name should end with .chain: ${name}`)\n}\n\n/**\n * Is name valid\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} name\n * @return Boolean\n */\nexport function isNameValid (name) {\n try {\n ensureNameValid(name)\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * What kind of a hash is this? If it begins with 'ak_' it is an\n * account key, if with 'ok_' it's an oracle key.\n *\n * @param s - the hash.\n * returns the type, or throws an exception if type not found.\n */\nexport function classify (s) {\n if (!s.match(/^[a-z]{2}_.+/)) {\n throw new Error('Not a valid hash')\n }\n\n const klass = s.substr(0, 2)\n if (klass in NAME_ID_KEY) {\n return NAME_ID_KEY[klass]\n } else {\n throw new Error(`Unknown class ${klass}`)\n }\n}\n\n/**\n * Validate name pointers array\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String[]} pointers Pointers array. Allowed values is: account(ak_), oracle(ok_), contract(ct_), channel(ch_)\n * @return {Boolean}\n */\nexport function validatePointers (pointers = []) {\n return !pointers\n .find(p => !p || typeof p !== 'string' || !['ak', 'ok', 'ct', 'ch'].includes(p.split('_')[0]))\n}\n\n/**\n * Get the minimum name fee for a domain\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @return {String} the minimum fee for the domain auction\n */\nexport function getMinimumNameFee (domain) {\n const nameLength = domain.replace('.chain', '').length\n return NAME_BID_RANGES[nameLength >= NAME_MAX_LENGTH_FEE ? NAME_MAX_LENGTH_FEE : nameLength]\n}\n\n/**\n * Compute bid fee for AENS auction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @param {Number|String} startFee Auction start fee\n * @param {Number} [increment=0.5] Bid multiplier(In percentage, must be between 0 and 1)\n * @return {String} Bid fee\n */\nexport function computeBidFee (domain, startFee = NAME_FEE, increment = NAME_FEE_BID_INCREMENT) {\n if (!(Number(increment) === increment && increment % 1 !== 0)) throw new Error(`Increment must be float. Current increment ${increment}`)\n if (increment < NAME_FEE_BID_INCREMENT) throw new Error(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`)\n return ceil(\n BigNumber(BigNumber(startFee).eq(NAME_FEE) ? getMinimumNameFee(domain) : startFee).times(BigNumber(NAME_FEE_BID_INCREMENT).plus(1))\n )\n}\n\n/**\n * Compute auction end height\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @param {Number|String} claimHeight Auction starting height\n * @return {String} Auction end height\n */\nexport function computeAuctionEndBlock (domain, claimHeight) {\n return R.cond([\n [R.lt(5), R.always(NAME_BID_TIMEOUTS[4].plus(claimHeight))],\n [R.lt(9), R.always(NAME_BID_TIMEOUTS[8].plus(claimHeight))],\n [R.lte(NAME_BID_MAX_LENGTH), R.always(NAME_BID_TIMEOUTS[12].plus(claimHeight))],\n [R.T, R.always(BigNumber(claimHeight))]\n ])(domain.replace('.chain', '').length).toString(10)\n}\n\n/**\n * Is name accept going to auction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} name Transaction abiVersion\n * @return {Boolean}\n */\nexport function isAuctionName (name) {\n return name.replace('.chain', '').length < 13\n}\n"],"file":"helpers.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tx/builder/helpers.js"],"names":["BigNumber","decodeBase58Check","decodeBase64Check","encodeBase58Check","encodeBase64Check","hash","salt","toBytes","ID_TAG_PREFIX","PREFIX_ID_TAG","NAME_BID_RANGES","NAME_BID_MAX_LENGTH","NAME_FEE","NAME_FEE_BID_INCREMENT","NAME_BID_TIMEOUTS","NAME_MAX_LENGTH_FEE","NAME_ID_KEY","ceil","createSalt","base64Types","buildContractId","ownerId","nonce","ownerIdAndNonce","Buffer","from","decode","b2bHash","encode","oracleQueryId","senderId","oracleId","_int32","val","nonceBE","concat","alloc","length","formatSalt","toString","padStart","produceNameId","name","ensureNameValid","toLowerCase","commitmentHash","data","requiredPrefix","prefix","payload","extra","split","Error","includes","type","writeId","hashId","slice","idTag","readId","buf","tag","readUIntBE","writeInt","readInt","buildPointers","pointers","map","p","key","id","readPointers","Object","assign","endsWith","isNameValid","error","classify","s","match","klass","substr","validatePointers","find","getMinimumNameFee","domain","nameLength","replace","computeBidFee","startFee","increment","Number","eq","times","plus","computeAuctionEndBlock","claimHeight","isAuctionName"],"mappings":"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","sourcesContent":["import * as R from 'ramda'\nimport BigNumber from 'bignumber.js'\n\nimport {\n decodeBase58Check,\n decodeBase64Check,\n encodeBase58Check, encodeBase64Check,\n hash,\n salt\n} from '../../utils/crypto'\nimport { toBytes } from '../../utils/bytes'\nimport {\n ID_TAG_PREFIX,\n PREFIX_ID_TAG,\n NAME_BID_RANGES,\n NAME_BID_MAX_LENGTH,\n NAME_FEE,\n NAME_FEE_BID_INCREMENT,\n NAME_BID_TIMEOUTS,\n NAME_MAX_LENGTH_FEE,\n NAME_ID_KEY\n} from './schema'\nimport { ceil } from '../../utils/bignumber'\n\n/**\n * JavaScript-based Transaction builder helper function's\n * @module @aeternity/aepp-sdk/es/tx/builder/helpers\n * @export TxBuilderHelper\n * @example import { TxBuilderHelper } from '@aeternity/aepp-sdk'\n */\n\nexport const createSalt = salt\n\nconst base64Types = ['tx', 'st', 'ss', 'pi', 'ov', 'or', 'cb', 'cs', 'ba']\n\n/**\n * Build a contract public key\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} ownerId The public key of the owner account\n * @param {number} nonce the nonce of the transaction\n * @return {string} Contract public key\n */\nexport function buildContractId (ownerId, nonce) {\n const ownerIdAndNonce = Buffer.from([...decode(ownerId, 'ak'), ...toBytes(nonce)])\n const b2bHash = hash(ownerIdAndNonce)\n return encode(b2bHash, 'ct')\n}\n\n/**\n * Build a oracle query id\n * @function\n * @function* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} senderId The public key of the sender account\n * @param {Number} nonce the nonce of the transaction\n * @param {Number} oracleId The oracle public key\n * @return {string} Contract public key\n */\nexport function oracleQueryId (senderId, nonce, oracleId) {\n function _int32 (val) {\n const nonceBE = toBytes(val, true)\n return Buffer.concat([Buffer.alloc(32 - nonceBE.length), nonceBE])\n }\n\n const b2bHash = hash(Buffer.from([...decode(senderId, 'ak'), ..._int32(nonce), ...decode(oracleId, 'ok')]))\n return encode(b2bHash, 'oq')\n}\n\n/**\n * Format the salt into a 64-byte hex string\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {number} salt\n * @return {string} Zero-padded hex string of salt\n */\nexport function formatSalt (salt) {\n return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex')\n}\n\n/**\n * Encode a domain name\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} name Name to encode\n * @return {String} `nm_` prefixed encoded domain name\n */\nexport function produceNameId (name) {\n ensureNameValid(name)\n return encode(hash(name.toLowerCase()), 'nm')\n}\n\n/**\n * Generate the commitment hash by hashing the formatted salt and\n * name, base 58 encoding the result and prepending 'cm_'\n *\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @function commitmentHash\n * @category async\n * @rtype (name: String, salt?: String) => hash: Promise[String]\n * @param {String} name - Name to be registered\n * @param {Number} salt Random salt\n * @return {String} Commitment hash\n */\nexport function commitmentHash (name, salt = createSalt()) {\n ensureNameValid(name)\n return `cm_${encodeBase58Check(hash(Buffer.concat([Buffer.from(name.toLowerCase()), formatSalt(salt)])))}`\n}\n\n/**\n * Decode data using the default encoding/decoding algorithm\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} data An Base58check or Base64check encoded and prefixed string (ex tx_..., sg_..., ak_....)\n * @param {string} [requiredPrefix] Ensure that data have this prefix\n * @return {Buffer} Decoded data\n */\nexport function decode (data, requiredPrefix) {\n const [prefix, payload, extra] = data.split('_')\n if (extra) throw new Error(`Encoded string have extra parts: ${data}`)\n if (requiredPrefix && requiredPrefix !== prefix) {\n throw new Error(`Encoded string have a wrong type: ${prefix} (expected: ${requiredPrefix})`)\n }\n return (base64Types.includes(prefix) ? decodeBase64Check : decodeBase58Check)(payload)\n}\n\n/**\n * Encode data using the default encoding/decoding algorithm\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer|String} data An decoded data\n * @param {string} type Prefix of Transaction\n * @return {String} Encoded string Base58check or Base64check data\n */\nexport function encode (data, type) {\n return `${type}_${base64Types.includes(type)\n ? encodeBase64Check(data)\n : encodeBase58Check(data)}`\n}\n\n/**\n * Utility function to create and _id type\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} hashId Encoded hash\n * @return {Buffer} Buffer Buffer with ID tag and decoded HASh\n */\nexport function writeId (hashId) {\n const prefix = hashId.slice(0, 2)\n const idTag = PREFIX_ID_TAG[prefix]\n if (!idTag) throw new Error(`Id tag for prefix ${prefix} not found.`)\n return Buffer.from([...toBytes(idTag), ...decode(hashId, prefix)])\n}\n\n/**\n * Utility function to read and _id type\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer} buf Data\n * @return {String} Encoided hash string with prefix\n */\nexport function readId (buf) {\n const tag = buf.readUIntBE(0, 1)\n const prefix = ID_TAG_PREFIX[tag]\n if (!prefix) throw new Error(`Prefix for id-tag ${tag} not found.`)\n return encode(buf.slice(1, buf.length), prefix)\n}\n\n/**\n * Utility function to convert int to bytes\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Number|String|BigNumber} val Value\n * @return {Buffer} Buffer Buffer from number(BigEndian)\n */\nexport function writeInt (val) {\n return toBytes(val, true)\n}\n\n/**\n * Utility function to convert bytes to int\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Buffer} buf Value\n * @return {String} Buffer Buffer from number(BigEndian)\n */\nexport function readInt (buf = Buffer.from([])) {\n return BigNumber(buf.toString('hex'), 16).toString(10)\n}\n\n/**\n * Helper function to build pointers for name update TX\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Array} pointers - Array of pointers ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])\n * @return {Array} Serialized pointers array\n */\nexport function buildPointers (pointers) {\n return pointers.map(\n p => [\n toBytes(p.key),\n writeId(p.id)\n ]\n )\n}\n\n/**\n * Helper function to read pointers from name update TX\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {Array} pointers - Array of pointers ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])\n * @return {Array} Deserialize pointer array\n */\nexport function readPointers (pointers) {\n return pointers.map(\n ([key, id]) => Object.assign({\n key: key.toString(),\n id: readId(id)\n })\n )\n}\n\n/**\n * Ensure that name is valid\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} name\n * @return void\n * @throws Error\n */\nexport function ensureNameValid (name) {\n if (!name || typeof name !== 'string') throw new Error('Name must be a string')\n if (!name.endsWith('.chain')) throw new Error(`Name should end with .chain: ${name}`)\n}\n\n/**\n * Is name valid\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {string} name\n * @return Boolean\n */\nexport function isNameValid (name) {\n try {\n ensureNameValid(name)\n return true\n } catch (error) {\n return false\n }\n}\n\n/**\n * What kind of a hash is this? If it begins with 'ak_' it is an\n * account key, if with 'ok_' it's an oracle key.\n *\n * @param s - the hash.\n * returns the type, or throws an exception if type not found.\n */\nexport function classify (s) {\n if (!s.match(/^[a-z]{2}_.+/)) {\n throw new Error('Not a valid hash')\n }\n\n const klass = s.substr(0, 2)\n if (klass in NAME_ID_KEY) {\n return NAME_ID_KEY[klass]\n } else {\n throw new Error(`Unknown class ${klass}`)\n }\n}\n\n/**\n * Validate name pointers array\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String[]} pointers Pointers array. Allowed values is: account(ak_), oracle(ok_), contract(ct_), channel(ch_)\n * @return {Boolean}\n */\nexport function validatePointers (pointers = []) {\n return !pointers\n .find(p => !p || typeof p !== 'string' || !['ak', 'ok', 'ct', 'ch'].includes(p.split('_')[0]))\n}\n\n/**\n * Get the minimum name fee for a domain\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @return {String} the minimum fee for the domain auction\n */\nexport function getMinimumNameFee (domain) {\n const nameLength = domain.replace('.chain', '').length\n return NAME_BID_RANGES[nameLength >= NAME_MAX_LENGTH_FEE ? NAME_MAX_LENGTH_FEE : nameLength]\n}\n\n/**\n * Compute bid fee for AENS auction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @param {Number|String} startFee Auction start fee\n * @param {Number} [increment=0.5] Bid multiplier(In percentage, must be between 0 and 1)\n * @return {String} Bid fee\n */\nexport function computeBidFee (domain, startFee = NAME_FEE, increment = NAME_FEE_BID_INCREMENT) {\n if (!(Number(increment) === increment && increment % 1 !== 0)) throw new Error(`Increment must be float. Current increment ${increment}`)\n if (increment < NAME_FEE_BID_INCREMENT) throw new Error(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`)\n return ceil(\n BigNumber(BigNumber(startFee).eq(NAME_FEE) ? getMinimumNameFee(domain) : startFee).times(BigNumber(NAME_FEE_BID_INCREMENT).plus(1))\n )\n}\n\n/**\n * Compute auction end height\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} domain the domain name to get the fee for\n * @param {Number|String} claimHeight Auction starting height\n * @return {String} Auction end height\n */\nexport function computeAuctionEndBlock (domain, claimHeight) {\n return R.cond([\n [R.lt(5), R.always(NAME_BID_TIMEOUTS[4].plus(claimHeight))],\n [R.lt(9), R.always(NAME_BID_TIMEOUTS[8].plus(claimHeight))],\n [R.lte(NAME_BID_MAX_LENGTH), R.always(NAME_BID_TIMEOUTS[12].plus(claimHeight))],\n [R.T, R.always(BigNumber(claimHeight))]\n ])(domain.replace('.chain', '').length).toString(10)\n}\n\n/**\n * Is name accept going to auction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers\n * @param {String} name Transaction abiVersion\n * @return {Boolean}\n */\nexport function isAuctionName (name) {\n return name.replace('.chain', '').length < 13\n}\n"],"file":"helpers.js"}
|