@aeternity/aepp-sdk 12.0.0 → 12.1.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/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +7 -7
- package/es/AeSdk.mjs.map +1 -1
- package/es/AeSdkAepp.d.ts +4 -3
- package/es/AeSdkAepp.mjs +2 -1
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkBase.d.ts +22 -21
- package/es/AeSdkBase.mjs +25 -21
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkWallet.d.ts +4 -3
- package/es/AeSdkWallet.mjs +5 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/Node.d.ts +7 -10
- package/es/Node.mjs +63 -57
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +7 -4
- package/es/account/Base.mjs +3 -3
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Memory.d.ts +5 -4
- package/es/account/Memory.mjs +24 -2
- package/es/account/Memory.mjs.map +1 -1
- package/es/account/Rpc.d.ts +6 -6
- package/es/account/Rpc.mjs +3 -2
- package/es/account/Rpc.mjs.map +1 -1
- package/es/aens.d.ts +27 -14
- package/es/aens.mjs +27 -21
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
- package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
- package/es/aepp-wallet-communication/schema.d.ts +17 -2
- package/es/aepp-wallet-communication/schema.mjs +54 -17
- package/es/aepp-wallet-communication/schema.mjs.map +1 -1
- package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
- package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
- package/es/apis/node/models/index.d.ts +6 -2
- package/es/apis/node/models/index.mjs.map +1 -1
- package/es/apis/node/models/mappers.mjs +4 -2
- package/es/apis/node/models/mappers.mjs.map +1 -1
- package/es/chain.d.ts +92 -64
- package/es/chain.mjs +190 -154
- package/es/chain.mjs.map +1 -1
- package/es/channel/handlers.d.ts +3 -3
- package/es/channel/handlers.mjs +42 -44
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +43 -52
- package/es/channel/index.mjs +46 -49
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +16 -15
- package/es/channel/internal.mjs +67 -62
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +1 -0
- package/es/contract/Compiler.mjs +5 -4
- package/es/contract/Compiler.mjs.map +1 -1
- package/es/contract/aci.d.ts +17 -15
- package/es/contract/aci.mjs +58 -45
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +16 -15
- package/es/contract/ga.mjs +12 -7
- package/es/contract/ga.mjs.map +1 -1
- package/es/contract/methods.d.ts +9 -6
- package/es/contract/methods.mjs +9 -6
- package/es/contract/methods.mjs.map +1 -1
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +4 -1
- package/es/index.mjs +4 -1
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +69 -62
- package/es/oracle.mjs +121 -103
- package/es/oracle.mjs.map +1 -1
- package/es/spend.d.ts +16 -15
- package/es/spend.mjs +19 -30
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +55 -26
- package/es/tx/builder/constants.mjs +60 -38
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +27 -33
- package/es/tx/builder/helpers.mjs +41 -47
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +25 -12
- package/es/tx/builder/index.mjs +74 -83
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +995 -144
- package/es/tx/builder/schema.mjs +121 -170
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +28 -27
- package/es/tx/index.mjs +97 -117
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +4 -3
- package/es/tx/validator.mjs +79 -92
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
- package/es/typings/bip32-path/index.d.mjs.map +1 -1
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
- package/es/utils/amount-formatter.d.ts +9 -9
- package/es/utils/amount-formatter.mjs +17 -17
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.mjs +7 -7
- package/es/utils/autorest.mjs.map +1 -1
- package/es/utils/bignumber.mjs +2 -1
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/utils/bytes.mjs +1 -1
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +8 -23
- package/es/utils/crypto.mjs +15 -41
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +6 -7
- package/es/utils/encoder.mjs +42 -26
- package/es/utils/encoder.mjs.map +1 -1
- package/es/utils/errors.d.ts +1 -11
- package/es/utils/errors.mjs +4 -20
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +18 -2
- package/es/utils/hd-wallet.mjs +64 -34
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.mjs +2 -2
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.mjs +4 -2
- package/es/utils/keystore.mjs.map +1 -1
- package/es/utils/mptree.d.ts +2 -2
- package/es/utils/mptree.mjs +11 -6
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +8 -2
- package/es/utils/other.mjs +15 -3
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +2 -2
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.mjs.map +1 -1
- package/package.json +35 -33
- package/src/AeSdk.ts +30 -27
- package/src/AeSdkAepp.ts +93 -84
- package/src/AeSdkBase.ts +148 -130
- package/src/AeSdkWallet.ts +172 -156
- package/src/Node.ts +108 -102
- package/src/account/Base.ts +42 -32
- package/src/account/Memory.ts +45 -30
- package/src/account/Rpc.ts +32 -30
- package/src/aens.ts +124 -108
- package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
- package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
- package/src/aepp-wallet-communication/rpc/types.ts +32 -32
- package/src/aepp-wallet-communication/schema.ts +117 -74
- package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
- package/src/apis/node/code-model-v4.yaml +54 -20
- package/src/apis/node/models/index.ts +6 -2
- package/src/apis/node/models/mappers.ts +4 -2
- package/src/chain.ts +286 -228
- package/src/channel/handlers.ts +424 -372
- package/src/channel/index.ts +285 -251
- package/src/channel/internal.ts +248 -232
- package/src/contract/Compiler.ts +22 -21
- package/src/contract/aci.ts +267 -258
- package/src/contract/ga.ts +93 -72
- package/src/contract/methods.ts +32 -27
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +37 -32
- package/src/oracle.ts +211 -189
- package/src/spend.ts +82 -70
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +82 -52
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +112 -117
- package/src/tx/builder/index.ts +203 -197
- package/src/tx/builder/schema.ts +421 -465
- package/src/tx/index.ts +128 -135
- package/src/tx/validator.ts +165 -161
- package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
- package/src/typings/@aeternity__uuid/index.d.ts +3 -1
- package/src/typings/bip32-path/index.d.ts +6 -6
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +2 -2
- package/src/utils/amount-formatter.ts +41 -41
- package/src/utils/autorest.ts +57 -54
- package/src/utils/bignumber.ts +7 -6
- package/src/utils/bytes.ts +19 -19
- package/src/utils/crypto.ts +82 -94
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +104 -56
- package/src/utils/errors.ts +246 -264
- package/src/utils/hd-wallet.ts +114 -82
- package/src/utils/json-big.ts +16 -15
- package/src/utils/keystore.ts +65 -62
- package/src/utils/mptree.ts +59 -56
- package/src/utils/other.ts +26 -18
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +10 -10
- package/es/tx/builder/field-types.d.ts +0 -62
- package/es/tx/builder/field-types.mjs +0 -126
- package/es/tx/builder/field-types.mjs.map +0 -1
- package/es/tx/min-fee.d.ts +0 -20
- package/es/tx/min-fee.mjs.map +0 -1
- package/src/tx/builder/field-types.ts +0 -111
- package/src/tx/min-fee.ts +0 -136
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import coinAmount from './coin-amount';
|
|
2
|
+
import { IllegalArgumentError } from '../../../utils/errors';
|
|
3
|
+
import { MIN_GAS_PRICE } from '../constants';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
...coinAmount,
|
|
7
|
+
|
|
8
|
+
serializeAettos(value: string | undefined = MIN_GAS_PRICE.toString()): string {
|
|
9
|
+
if (+value < MIN_GAS_PRICE) {
|
|
10
|
+
throw new IllegalArgumentError(`Gas price ${value.toString()} must be bigger then ${MIN_GAS_PRICE}`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
serialize: coinAmount.serializeOptional,
|
|
16
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import _field from './field';
|
|
2
|
+
import _uInt from './u-int';
|
|
3
|
+
import _shortUInt from './short-u-int';
|
|
4
|
+
import _coinAmount from './coin-amount';
|
|
5
|
+
|
|
6
|
+
import _deposit from './deposit';
|
|
7
|
+
import _fee from './fee';
|
|
8
|
+
import _gasLimit from './gas-limit';
|
|
9
|
+
import _gasPrice from './gas-price';
|
|
10
|
+
import _name from './name';
|
|
11
|
+
import _nameFee from './name-fee';
|
|
12
|
+
import _nameId from './name-id';
|
|
13
|
+
|
|
14
|
+
// TODO: remove after fixing https://github.com/Gerrit0/typedoc-plugin-missing-exports/issues/15
|
|
15
|
+
const field = _field;
|
|
16
|
+
const uInt = _uInt;
|
|
17
|
+
const shortUInt = _shortUInt;
|
|
18
|
+
const coinAmount = _coinAmount;
|
|
19
|
+
|
|
20
|
+
const deposit = _deposit;
|
|
21
|
+
const fee = _fee;
|
|
22
|
+
const gasLimit = _gasLimit;
|
|
23
|
+
const gasPrice = _gasPrice;
|
|
24
|
+
const name = _name;
|
|
25
|
+
const nameFee = _nameFee;
|
|
26
|
+
const nameId = _nameId;
|
|
27
|
+
|
|
28
|
+
export type Field = typeof field | typeof uInt | typeof shortUInt | typeof coinAmount
|
|
29
|
+
| typeof deposit | typeof fee | typeof gasLimit | typeof gasPrice | typeof name | typeof nameFee
|
|
30
|
+
| typeof nameId;
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
field,
|
|
34
|
+
uInt,
|
|
35
|
+
shortUInt,
|
|
36
|
+
coinAmount,
|
|
37
|
+
|
|
38
|
+
deposit,
|
|
39
|
+
fee,
|
|
40
|
+
gasLimit,
|
|
41
|
+
gasPrice,
|
|
42
|
+
name,
|
|
43
|
+
nameFee,
|
|
44
|
+
nameId,
|
|
45
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { getMinimumNameFee } from '../helpers';
|
|
3
|
+
import { InsufficientNameFeeError } from '../../../utils/errors';
|
|
4
|
+
import { Int } from './u-int';
|
|
5
|
+
import coinAmount from './coin-amount';
|
|
6
|
+
import { AensName } from '../constants';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
...coinAmount,
|
|
10
|
+
|
|
11
|
+
serializeAettos(
|
|
12
|
+
_value: string | undefined,
|
|
13
|
+
txFields: { name: AensName },
|
|
14
|
+
): string {
|
|
15
|
+
const minNameFee = getMinimumNameFee(txFields.name);
|
|
16
|
+
const value = new BigNumber(_value ?? minNameFee);
|
|
17
|
+
if (minNameFee.gt(value)) throw new InsufficientNameFeeError(value, minNameFee);
|
|
18
|
+
return value.toFixed();
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param value - AENS name fee Buffer
|
|
23
|
+
* @param txFields - Transaction fields
|
|
24
|
+
* @param txFields.name - AENS Name in transaction
|
|
25
|
+
*/
|
|
26
|
+
serialize(
|
|
27
|
+
value: Int | undefined,
|
|
28
|
+
txFields: { name: AensName } & Parameters<typeof coinAmount['serialize']>[1],
|
|
29
|
+
): Buffer {
|
|
30
|
+
return coinAmount.serializeOptional.call(this, value, txFields);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AensName } from '../constants';
|
|
2
|
+
import { produceNameId, isNameValid } from '../helpers';
|
|
3
|
+
import { writeId, readId } from '../address';
|
|
4
|
+
import { Encoded } from '../../../utils/encoder';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
/**
|
|
8
|
+
* @param value - AENS name ID
|
|
9
|
+
*/
|
|
10
|
+
serialize(value: AensName | Encoded.Name): Buffer {
|
|
11
|
+
return writeId(isNameValid(value) ? produceNameId(value) : value);
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param value - AENS name ID Buffer
|
|
16
|
+
*/
|
|
17
|
+
deserialize(value: Buffer): Encoded.Name {
|
|
18
|
+
return readId(value) as Encoded.Name;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import field from './field';
|
|
2
|
+
import { AensName } from '../constants';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
/**
|
|
6
|
+
* @param value - AENS name
|
|
7
|
+
*/
|
|
8
|
+
serialize(value: AensName): Buffer {
|
|
9
|
+
return field.serialize(value);
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param value - AENS name
|
|
14
|
+
*/
|
|
15
|
+
deserialize(value: Buffer): AensName {
|
|
16
|
+
return field.deserialize(value) as AensName;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { readInt, writeInt } from '../helpers';
|
|
3
|
+
import { ArgumentError } from '../../../utils/errors';
|
|
4
|
+
|
|
5
|
+
export type Int = number | string | BigNumber;
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
serialize(value: Int): Buffer {
|
|
9
|
+
if (value < 0) throw new ArgumentError('value', 'greater or equal to 0', value);
|
|
10
|
+
return writeInt(value);
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
deserialize(value: Buffer): string {
|
|
14
|
+
return readInt(value);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
@@ -1,253 +1,248 @@
|
|
|
1
|
-
import BigNumber from 'bignumber.js'
|
|
2
|
-
import {
|
|
3
|
-
import { encode, decode, EncodedData, EncodingType } from '../../utils/encoder'
|
|
4
|
-
import { toBytes } from '../../utils/bytes'
|
|
5
|
-
import { concatBuffers } from '../../utils/other'
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { genSalt, hash } from '../../utils/crypto';
|
|
6
3
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
decode, encode, Encoded, Encoding,
|
|
5
|
+
} from '../../utils/encoder';
|
|
6
|
+
import { toBytes } from '../../utils/bytes';
|
|
7
|
+
import { concatBuffers } from '../../utils/other';
|
|
8
|
+
import {
|
|
9
|
+
AensName,
|
|
9
10
|
NAME_BID_RANGES,
|
|
10
|
-
NAME_FEE_BID_INCREMENT,
|
|
11
11
|
NAME_BID_TIMEOUT_BLOCKS,
|
|
12
|
+
NAME_FEE_BID_INCREMENT,
|
|
12
13
|
NAME_MAX_LENGTH_FEE,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from '
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
TagNotFoundError,
|
|
19
|
-
PrefixNotFoundError,
|
|
20
|
-
IllegalBidFeeError,
|
|
21
|
-
ArgumentError
|
|
22
|
-
} from '../../utils/errors'
|
|
14
|
+
} from './constants';
|
|
15
|
+
import { ceil } from '../../utils/bignumber';
|
|
16
|
+
import { ArgumentError, IllegalBidFeeError } from '../../utils/errors';
|
|
17
|
+
import { NamePointer } from '../../apis/node';
|
|
18
|
+
import { readId, writeId } from './address';
|
|
23
19
|
|
|
24
20
|
/**
|
|
25
21
|
* JavaScript-based Transaction builder helper function's
|
|
26
22
|
*/
|
|
27
23
|
|
|
28
|
-
export const createSalt = salt
|
|
29
|
-
|
|
30
|
-
export { encode, decode }
|
|
31
|
-
|
|
32
|
-
export interface Pointer {
|
|
33
|
-
key: string
|
|
34
|
-
id: string
|
|
35
|
-
}
|
|
36
|
-
|
|
37
24
|
/**
|
|
38
25
|
* Build a contract public key
|
|
26
|
+
* @category contract
|
|
39
27
|
* @param ownerId - The public key of the owner account
|
|
40
28
|
* @param nonce - the nonce of the transaction
|
|
41
29
|
* @returns Contract public key
|
|
42
30
|
*/
|
|
43
|
-
export function buildContractId
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
export function buildContractId(
|
|
32
|
+
ownerId: Encoded.AccountAddress,
|
|
33
|
+
nonce: number | BigNumber,
|
|
34
|
+
): Encoded.ContractAddress {
|
|
35
|
+
const ownerIdAndNonce = Buffer.from([...decode(ownerId), ...toBytes(nonce)]);
|
|
36
|
+
const b2bHash = hash(ownerIdAndNonce);
|
|
37
|
+
return encode(b2bHash, Encoding.ContractAddress);
|
|
47
38
|
}
|
|
48
39
|
|
|
49
40
|
/**
|
|
50
41
|
* Build a oracle query id
|
|
42
|
+
* @category oracle
|
|
51
43
|
* @param senderId - The public key of the sender account
|
|
52
44
|
* @param nonce - the nonce of the transaction
|
|
53
45
|
* @param oracleId - The oracle public key
|
|
54
46
|
* @returns Contract public key
|
|
55
47
|
*/
|
|
56
|
-
export function oracleQueryId
|
|
57
|
-
senderId:
|
|
48
|
+
export function oracleQueryId(
|
|
49
|
+
senderId: Encoded.AccountAddress,
|
|
58
50
|
nonce: number | BigNumber | string,
|
|
59
|
-
oracleId:
|
|
60
|
-
):
|
|
61
|
-
function _int32
|
|
62
|
-
const nonceBE = toBytes(val, true)
|
|
63
|
-
return concatBuffers([Buffer.alloc(32 - nonceBE.length), nonceBE])
|
|
51
|
+
oracleId: Encoded.OracleAddress,
|
|
52
|
+
): Encoded.OracleQueryId {
|
|
53
|
+
function _int32(val: number | string | BigNumber): Buffer {
|
|
54
|
+
const nonceBE = toBytes(val, true);
|
|
55
|
+
return concatBuffers([Buffer.alloc(32 - nonceBE.length), nonceBE]);
|
|
64
56
|
}
|
|
65
57
|
|
|
66
58
|
const b2bHash = hash(
|
|
67
|
-
Buffer.from([...decode(senderId), ..._int32(nonce), ...decode(oracleId)])
|
|
68
|
-
|
|
59
|
+
Buffer.from([...decode(senderId), ..._int32(nonce), ...decode(oracleId)]),
|
|
60
|
+
);
|
|
61
|
+
return encode(b2bHash, Encoding.OracleQueryId);
|
|
69
62
|
}
|
|
70
63
|
|
|
71
64
|
/**
|
|
72
65
|
* Format the salt into a 64-byte hex string
|
|
66
|
+
* @category transaction builder
|
|
73
67
|
* @param salt - Random number
|
|
74
68
|
* @returns Zero-padded hex string of salt
|
|
75
69
|
*/
|
|
76
|
-
export function formatSalt
|
|
77
|
-
return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex')
|
|
70
|
+
export function formatSalt(salt: number): Buffer {
|
|
71
|
+
return Buffer.from(salt.toString(16).padStart(64, '0'), 'hex');
|
|
78
72
|
}
|
|
79
73
|
|
|
80
74
|
/**
|
|
81
75
|
* Encode an AENS name
|
|
82
|
-
*
|
|
76
|
+
* @category AENS
|
|
83
77
|
* @param name - Name to encode
|
|
84
78
|
* @returns `nm_` prefixed encoded AENS name
|
|
85
79
|
*/
|
|
86
|
-
export function produceNameId
|
|
87
|
-
return encode(hash(name.toLowerCase()),
|
|
80
|
+
export function produceNameId(name: AensName): Encoded.Name {
|
|
81
|
+
return encode(hash(name.toLowerCase()), Encoding.Name);
|
|
88
82
|
}
|
|
89
83
|
|
|
90
84
|
/**
|
|
91
85
|
* Generate the commitment hash by hashing the formatted salt and
|
|
92
86
|
* name, base 58 encoding the result and prepending 'cm_'
|
|
93
|
-
*
|
|
87
|
+
* @category transaction builder
|
|
94
88
|
* @param name - Name to be registered
|
|
95
89
|
* @param salt - Random salt
|
|
96
90
|
* @returns Commitment hash
|
|
97
91
|
*/
|
|
98
|
-
export function commitmentHash
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*/
|
|
107
|
-
export function writeId (hashId: string): Buffer {
|
|
108
|
-
if (typeof hashId !== 'string') throw new ArgumentError('hashId', 'a string', hashId)
|
|
109
|
-
const prefix = hashId.slice(0, 2) as keyof typeof PREFIX_ID_TAG
|
|
110
|
-
const idTag = PREFIX_ID_TAG[prefix]
|
|
111
|
-
if (idTag == null) throw new TagNotFoundError(prefix)
|
|
112
|
-
return Buffer.from([...toBytes(idTag), ...decode(hashId as EncodedData<EncodingType>)])
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Utility function to read and _id type
|
|
117
|
-
* @param buf - Data
|
|
118
|
-
* @returns Encoided hash string with prefix
|
|
119
|
-
*/
|
|
120
|
-
export function readId (buf: Buffer): string {
|
|
121
|
-
const tag = Buffer.from(buf).readUIntBE(0, 1)
|
|
122
|
-
const prefix = ID_TAG_PREFIX[tag]
|
|
123
|
-
if (prefix == null) throw new PrefixNotFoundError(tag)
|
|
124
|
-
return encode(buf.slice(1, buf.length), prefix)
|
|
92
|
+
export function commitmentHash(
|
|
93
|
+
name: AensName,
|
|
94
|
+
salt: number = genSalt(),
|
|
95
|
+
): Encoded.Commitment {
|
|
96
|
+
return encode(
|
|
97
|
+
hash(concatBuffers([Buffer.from(name.toLowerCase()), formatSalt(salt)])),
|
|
98
|
+
Encoding.Commitment,
|
|
99
|
+
);
|
|
125
100
|
}
|
|
126
101
|
|
|
127
102
|
/**
|
|
128
103
|
* Utility function to convert int to bytes
|
|
104
|
+
* @category transaction builder
|
|
129
105
|
* @param val - Value
|
|
130
106
|
* @returns Buffer Buffer from number(BigEndian)
|
|
131
107
|
*/
|
|
132
|
-
export function writeInt
|
|
133
|
-
return toBytes(val, true)
|
|
108
|
+
export function writeInt(val: number | string | BigNumber): Buffer {
|
|
109
|
+
return toBytes(val, true);
|
|
134
110
|
}
|
|
135
111
|
|
|
136
112
|
/**
|
|
137
113
|
* Utility function to convert bytes to int
|
|
114
|
+
* @category transaction builder
|
|
138
115
|
* @param buf - Value
|
|
139
116
|
* @returns Buffer Buffer from number(BigEndian)
|
|
140
117
|
*/
|
|
141
|
-
export function readInt
|
|
142
|
-
return new BigNumber(Buffer.from(buf).toString('hex'), 16).toString(10)
|
|
118
|
+
export function readInt(buf: Buffer = Buffer.from([])): string {
|
|
119
|
+
return new BigNumber(Buffer.from(buf).toString('hex'), 16).toString(10);
|
|
143
120
|
}
|
|
144
121
|
|
|
145
122
|
/**
|
|
146
123
|
* Helper function to build pointers for name update TX
|
|
124
|
+
* @category transaction builder
|
|
147
125
|
* @param pointers - Array of pointers
|
|
148
126
|
* `([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])`
|
|
149
127
|
* @returns Serialized pointers array
|
|
150
128
|
*/
|
|
151
|
-
export function buildPointers
|
|
129
|
+
export function buildPointers(pointers: NamePointer[]): Buffer[][] {
|
|
152
130
|
return pointers.map(
|
|
153
|
-
p => [
|
|
131
|
+
(p) => [
|
|
154
132
|
toBytes(p.key),
|
|
155
|
-
writeId(p.id)
|
|
156
|
-
]
|
|
157
|
-
)
|
|
133
|
+
writeId(p.id as Parameters<typeof writeId>[0]),
|
|
134
|
+
],
|
|
135
|
+
);
|
|
158
136
|
}
|
|
159
137
|
|
|
160
138
|
/**
|
|
161
139
|
* Helper function to read pointers from name update TX
|
|
140
|
+
* @category transaction builder
|
|
162
141
|
* @param pointers - Array of pointers
|
|
163
142
|
* @returns Deserialize pointer array
|
|
164
143
|
*/
|
|
165
|
-
export function readPointers
|
|
144
|
+
export function readPointers(pointers: Array<[key: string, id: Buffer]>): NamePointer[] {
|
|
166
145
|
return pointers.map(
|
|
167
|
-
([key, id]) =>
|
|
146
|
+
([key, id]) => ({
|
|
168
147
|
key: key.toString(),
|
|
169
|
-
id: readId(id)
|
|
170
|
-
})
|
|
171
|
-
)
|
|
148
|
+
id: readId(id),
|
|
149
|
+
}),
|
|
150
|
+
);
|
|
172
151
|
}
|
|
173
152
|
|
|
174
|
-
const AENS_SUFFIX = '.chain'
|
|
153
|
+
const AENS_SUFFIX = '.chain';
|
|
175
154
|
|
|
176
155
|
/**
|
|
177
156
|
* Is AENS name valid
|
|
157
|
+
* @category AENS
|
|
178
158
|
* @param name - AENS name
|
|
179
159
|
*/
|
|
180
|
-
export function isNameValid
|
|
160
|
+
export function isNameValid(name: string): name is AensName {
|
|
181
161
|
// TODO: probably there are stronger requirements
|
|
182
|
-
return name.endsWith(AENS_SUFFIX)
|
|
162
|
+
return name.endsWith(AENS_SUFFIX);
|
|
183
163
|
}
|
|
184
164
|
|
|
165
|
+
const encodingToPointerKey = [
|
|
166
|
+
[Encoding.AccountAddress, 'account_pubkey'],
|
|
167
|
+
[Encoding.OracleAddress, 'oracle_pubkey'],
|
|
168
|
+
[Encoding.ContractAddress, 'contract_pubkey'],
|
|
169
|
+
[Encoding.Channel, 'channel'],
|
|
170
|
+
] as const;
|
|
171
|
+
|
|
185
172
|
/**
|
|
173
|
+
* @category AENS
|
|
186
174
|
* @param identifier - account/oracle/contract address, or channel
|
|
187
175
|
* @returns default AENS pointer key
|
|
188
176
|
*/
|
|
189
|
-
export function getDefaultPointerKey
|
|
190
|
-
identifier:
|
|
191
|
-
):
|
|
192
|
-
decode(identifier)
|
|
193
|
-
const
|
|
194
|
-
|
|
177
|
+
export function getDefaultPointerKey(
|
|
178
|
+
identifier: Encoded.Generic<typeof encodingToPointerKey[number][0]>,
|
|
179
|
+
): typeof encodingToPointerKey[number][1] {
|
|
180
|
+
decode(identifier);
|
|
181
|
+
const encoding = identifier.substring(0, 2);
|
|
182
|
+
const result = encodingToPointerKey.find(([e]) => e === encoding)?.[1];
|
|
183
|
+
if (result != null) return result;
|
|
184
|
+
throw new ArgumentError(
|
|
185
|
+
'identifier',
|
|
186
|
+
`prefixed with one of ${encodingToPointerKey.map(([e]) => `${e}_`).join(', ')}`,
|
|
187
|
+
identifier,
|
|
188
|
+
);
|
|
195
189
|
}
|
|
196
190
|
|
|
197
191
|
/**
|
|
198
192
|
* Get the minimum AENS name fee
|
|
199
|
-
*
|
|
193
|
+
* @category AENS
|
|
200
194
|
* @param name - the AENS name to get the fee for
|
|
201
195
|
* @returns the minimum fee for the AENS name auction
|
|
202
196
|
*/
|
|
203
|
-
export function getMinimumNameFee
|
|
204
|
-
const nameLength = name.length - AENS_SUFFIX.length
|
|
205
|
-
return NAME_BID_RANGES[Math.min(nameLength, NAME_MAX_LENGTH_FEE)]
|
|
197
|
+
export function getMinimumNameFee(name: AensName): BigNumber {
|
|
198
|
+
const nameLength = name.length - AENS_SUFFIX.length;
|
|
199
|
+
return NAME_BID_RANGES[Math.min(nameLength, NAME_MAX_LENGTH_FEE)];
|
|
206
200
|
}
|
|
207
201
|
|
|
208
202
|
/**
|
|
209
203
|
* Compute bid fee for AENS auction
|
|
210
|
-
*
|
|
204
|
+
* @category AENS
|
|
211
205
|
* @param name - the AENS name to get the fee for
|
|
212
206
|
* @param options - Options
|
|
213
207
|
* @param options.startFee - Auction start fee
|
|
214
208
|
* @param options.increment - Bid multiplier(In percentage, must be between 0 and 1)
|
|
215
209
|
* @returns Bid fee
|
|
216
210
|
*/
|
|
217
|
-
export function computeBidFee
|
|
211
|
+
export function computeBidFee(
|
|
218
212
|
name: AensName,
|
|
219
213
|
{ startFee, increment = NAME_FEE_BID_INCREMENT }:
|
|
220
|
-
{ startFee?: number | string | BigNumber
|
|
214
|
+
{ startFee?: number | string | BigNumber; increment?: number } = {},
|
|
221
215
|
): BigNumber {
|
|
222
|
-
if (!(Number(increment) === increment && increment % 1 !== 0)) throw new IllegalBidFeeError(`Increment must be float. Current increment ${increment}`)
|
|
223
|
-
if (increment < NAME_FEE_BID_INCREMENT) throw new IllegalBidFeeError(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`)
|
|
216
|
+
if (!(Number(increment) === increment && increment % 1 !== 0)) throw new IllegalBidFeeError(`Increment must be float. Current increment ${increment}`);
|
|
217
|
+
if (increment < NAME_FEE_BID_INCREMENT) throw new IllegalBidFeeError(`minimum increment percentage is ${NAME_FEE_BID_INCREMENT}`);
|
|
224
218
|
// FIXME: increment should be used somehow here
|
|
225
219
|
return ceil(
|
|
226
220
|
new BigNumber(startFee ?? getMinimumNameFee(name))
|
|
227
|
-
.times(new BigNumber(NAME_FEE_BID_INCREMENT).plus(1))
|
|
228
|
-
)
|
|
221
|
+
.times(new BigNumber(NAME_FEE_BID_INCREMENT).plus(1)),
|
|
222
|
+
);
|
|
229
223
|
}
|
|
230
224
|
|
|
231
225
|
/**
|
|
232
226
|
* Compute auction end height
|
|
233
|
-
*
|
|
227
|
+
* @category AENS
|
|
234
228
|
* @param name - Name to compute auction end for
|
|
235
229
|
* @param claimHeight - Auction starting height
|
|
236
230
|
* @see {@link https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L273}
|
|
237
231
|
* @returns Auction end height
|
|
238
232
|
*/
|
|
239
|
-
export function computeAuctionEndBlock
|
|
240
|
-
const length = name.length - AENS_SUFFIX.length
|
|
241
|
-
const h = (length <= 4 && 62 * NAME_BID_TIMEOUT_BLOCKS)
|
|
242
|
-
(length <= 8 && 31 * NAME_BID_TIMEOUT_BLOCKS)
|
|
243
|
-
(length <= 12 && NAME_BID_TIMEOUT_BLOCKS)
|
|
244
|
-
0
|
|
245
|
-
return h + claimHeight
|
|
233
|
+
export function computeAuctionEndBlock(name: AensName, claimHeight: number): number {
|
|
234
|
+
const length = name.length - AENS_SUFFIX.length;
|
|
235
|
+
const h = (length <= 4 && 62 * NAME_BID_TIMEOUT_BLOCKS)
|
|
236
|
+
|| (length <= 8 && 31 * NAME_BID_TIMEOUT_BLOCKS)
|
|
237
|
+
|| (length <= 12 && NAME_BID_TIMEOUT_BLOCKS)
|
|
238
|
+
|| 0;
|
|
239
|
+
return h + claimHeight;
|
|
246
240
|
}
|
|
247
241
|
|
|
248
242
|
/**
|
|
249
243
|
* Is name accept going to auction
|
|
244
|
+
* @category AENS
|
|
250
245
|
*/
|
|
251
|
-
export function isAuctionName
|
|
252
|
-
return name.length < 13 + AENS_SUFFIX.length
|
|
246
|
+
export function isAuctionName(name: AensName): boolean {
|
|
247
|
+
return name.length < 13 + AENS_SUFFIX.length;
|
|
253
248
|
}
|