@aeternity/aepp-sdk 10.0.0-beta.1 → 10.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/CHANGELOG.md +1603 -0
- package/dist/aepp-sdk.browser-script.js +1 -1
- 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 +3 -1
- package/es/account/base.js.map +1 -1
- package/es/account/multiple.js +4 -2
- package/es/account/multiple.js.map +1 -1
- package/es/ae/aens.js +52 -38
- package/es/ae/aens.js.map +1 -1
- package/es/ae/contract.js +9 -5
- package/es/ae/contract.js.map +1 -1
- package/es/ae/index.js +4 -3
- package/es/ae/index.js.map +1 -1
- package/es/ae/oracle.js +4 -4
- package/es/ae/oracle.js.map +1 -1
- package/es/ae/universal.js.map +1 -1
- package/es/chain/index.js +8 -4
- package/es/chain/index.js.map +1 -1
- package/es/chain/node.js +15 -20
- package/es/chain/node.js.map +1 -1
- package/es/channel/handlers.js.map +1 -1
- package/es/channel/index.js +35 -14
- package/es/channel/index.js.map +1 -1
- package/es/contract/aci/index.js +12 -7
- package/es/contract/aci/index.js.map +1 -1
- package/es/contract/compiler.js +3 -1
- package/es/contract/compiler.js.map +1 -1
- package/es/contract/ga/helpers.js +6 -6
- package/es/contract/ga/helpers.js.map +1 -1
- package/es/contract/ga/index.js +6 -2
- package/es/contract/ga/index.js.map +1 -1
- package/es/contract/index.js +6 -2
- package/es/contract/index.js.map +1 -1
- package/es/index.js +1 -0
- package/es/index.js.map +1 -1
- package/es/node-pool/index.js +4 -2
- package/es/node-pool/index.js.map +1 -1
- package/es/node.js +9 -4
- package/es/node.js.map +1 -1
- package/es/tx/builder/helpers.js +20 -33
- package/es/tx/builder/helpers.js.map +1 -1
- package/es/tx/builder/index.js +13 -6
- package/es/tx/builder/index.js.map +1 -1
- package/es/tx/builder/schema.js +5 -4
- package/es/tx/builder/schema.js.map +1 -1
- package/es/tx/index.js +101 -12
- package/es/tx/index.js.map +1 -1
- package/es/tx/tx-object.js +9 -3
- package/es/tx/tx-object.js.map +1 -1
- package/es/tx/tx.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +3 -2
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +15 -6
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/es/utils/aepp-wallet-communication/connection/index.js.map +1 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +10 -4
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
- package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +13 -5
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +9 -5
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +57 -40
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
- package/es/utils/crypto.js +1 -40
- package/es/utils/crypto.js.map +1 -1
- package/es/utils/keystore.js.map +1 -1
- package/es/utils/swagger.js +3 -1
- package/es/utils/swagger.js.map +1 -1
- package/package.json +11 -13
- package/src/account/base.js +3 -1
- package/src/account/multiple.js +4 -2
- package/src/ae/aens.js +41 -42
- package/src/ae/contract.js +9 -5
- package/src/ae/index.js +4 -3
- package/src/ae/oracle.js +9 -5
- package/src/ae/universal.js +3 -1
- package/src/chain/index.js +8 -4
- package/src/chain/node.js +17 -14
- package/src/channel/handlers.js +10 -3
- package/src/channel/index.js +40 -15
- package/src/contract/aci/index.js +15 -8
- package/src/contract/compiler.js +6 -2
- package/src/contract/ga/helpers.js +5 -3
- package/src/contract/ga/index.js +6 -2
- package/src/contract/index.js +6 -2
- package/src/index.js +2 -0
- package/src/node-pool/index.js +4 -2
- package/src/node.js +7 -4
- package/src/tx/builder/helpers.js +20 -33
- package/src/tx/builder/index.js +49 -13
- package/src/tx/builder/schema.js +37 -14
- package/src/tx/index.js +101 -12
- package/src/tx/tx-object.js +25 -6
- package/src/tx/tx.js +94 -28
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +3 -2
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +25 -7
- package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +10 -4
- package/src/utils/aepp-wallet-communication/helpers.js +4 -2
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +32 -9
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +9 -5
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +53 -22
- package/src/utils/aepp-wallet-communication/wallet-detector.js +4 -1
- package/src/utils/crypto.js +1 -52
- package/src/utils/keystore.js +10 -2
- package/src/utils/swagger.js +1 -1
package/es/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/node.js"],"names":["AsyncInit","genSwaggerClient","semverSatisfies","getNetworkId","networkId","force","selectedNode","Error","Node","compose","init","url","internalUrl","ignoreVersion","replace","client","responseInterceptor","response","ok","Object","assign","statusText","URL","pathname","slice","body","reason","version","spec","info","NODE_GE_VERSION","NODE_LT_VERSION","api","nodeRevision","revision","genesisKeyBlockHash","genesisHash","protocols","topBlockHeight","getStatus","consensusProtocolVersion","filter","effectiveAtHeight","reduce","acc","p","nodeNetworkId","methods","getNodeInfo","props"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAOA,SAAP,MAAsB,oBAAtB;AACA,OAAOC,gBAAP,MAA6B,iBAA7B;AACA,OAAOC,eAAP,MAA4B,0BAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,GAA0D;AAAA,MAAnC;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,KAAK,GAAG;AAArB,GAAmC,uEAAJ,EAAI;AAC/D,
|
|
1
|
+
{"version":3,"sources":["../src/node.js"],"names":["AsyncInit","genSwaggerClient","semverSatisfies","getNetworkId","networkId","force","res","selectedNode","Error","Node","compose","init","url","internalUrl","ignoreVersion","replace","client","responseInterceptor","response","ok","Object","assign","statusText","URL","pathname","slice","body","reason","version","spec","info","NODE_GE_VERSION","NODE_LT_VERSION","api","nodeRevision","revision","genesisKeyBlockHash","genesisHash","protocols","topBlockHeight","getStatus","consensusProtocolVersion","filter","effectiveAtHeight","reduce","acc","p","nodeNetworkId","methods","getNodeInfo","props"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2021 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Node module\n * @module @aeternity/aepp-sdk/es/node\n * @export Node\n * @example import { Node } from '@aeternity/aepp-sdk'\n */\n\nimport AsyncInit from './utils/async-init'\nimport genSwaggerClient from './utils/swagger'\nimport semverSatisfies from './utils/semver-satisfies'\n\n/**\n * Obtain networkId from account or node\n * @instance\n * @category async\n * @rtype () => networkId: String\n * @return {String} NetworkId\n */\nexport function getNetworkId ({ networkId, force = false } = {}) {\n const res = networkId || this.networkId || this.selectedNode?.networkId\n if (!force && !res) throw new Error('networkId is not provided')\n if (force && !res) return null\n return res\n}\n\n/**\n * {@link genSwaggerClient} based Node remote API Stamp\n * @function\n * @alias module:@aeternity/aepp-sdk/es/node\n * @rtype Stamp\n * @param {Object} [options={}] - Options\n * @param {String} options.url - Base URL for Node\n * @param {String} options.internalUrl - Base URL for internal requests\n * @param {Object} options.axiosConfig - Object with axios configuration\n * @param {Object} options.axiosConfig.config\n * @param {Function} options.axiosConfig.errorHandler - (err) => throw err\n * @return {Object} Node client\n * @example Node({url: 'https://testnet.aeternity.io'})\n */\nconst Node = AsyncInit.compose({\n async init ({ url, internalUrl, ignoreVersion }) {\n if (!url) throw new Error('\"url\" required')\n this.url = url.replace(/\\/$/, '')\n this.internalUrl = internalUrl ? internalUrl.replace(/\\/$/, '') : this.url\n const client = await genSwaggerClient(`${this.url}/api?oas3`, {\n internalUrl: this.internalUrl,\n responseInterceptor: response => {\n if (response.ok) return\n return Object.assign(response, {\n statusText: `${new URL(response.url).pathname.slice(1)} error: ` + response.body.reason\n })\n }\n })\n this.version = client.spec.info.version\n if (\n !semverSatisfies(this.version, NODE_GE_VERSION, NODE_LT_VERSION) &&\n !ignoreVersion\n ) {\n throw new Error(\n `Unsupported node version ${this.version}. ` +\n `Supported: >= ${NODE_GE_VERSION} < ${NODE_LT_VERSION}`\n )\n }\n this.api = client.api\n\n const {\n nodeRevision: revision, genesisKeyBlockHash: genesisHash, networkId,\n protocols, topBlockHeight\n } = await this.api.getStatus()\n this.consensusProtocolVersion = protocols\n .filter(({ effectiveAtHeight }) => topBlockHeight >= effectiveAtHeight)\n .reduce(\n (acc, p) => p.effectiveAtHeight > acc.effectiveAtHeight ? p : acc,\n { effectiveAtHeight: -1, version: 0 }\n )\n .version\n this.nodeNetworkId = networkId\n return Object.assign(this, { revision, genesisHash })\n },\n methods: {\n getNodeInfo () {\n return {\n url: this.url,\n internalUrl: this.internalUrl,\n nodeNetworkId: this.nodeNetworkId,\n version: this.version,\n consensusProtocolVersion: this.consensusProtocolVersion\n }\n }\n },\n props: {\n version: null,\n consensusProtocolVersion: null,\n nodeNetworkId: null\n }\n})\n\nconst NODE_GE_VERSION = '6.2.0'\nconst NODE_LT_VERSION = '7.0.0'\n\nexport default Node\n"],"file":"node.js"}
|
package/es/tx/builder/helpers.js
CHANGED
|
@@ -6,7 +6,7 @@ import _cond from "ramda/src/cond";
|
|
|
6
6
|
import BigNumber from 'bignumber.js';
|
|
7
7
|
import { decodeBase58Check, decodeBase64Check, encodeBase58Check, encodeBase64Check, hash, salt } from '../../utils/crypto';
|
|
8
8
|
import { toBytes } from '../../utils/bytes';
|
|
9
|
-
import { 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,
|
|
9
|
+
import { 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, POINTER_KEY_BY_PREFIX } from './schema';
|
|
10
10
|
import { ceil } from '../../utils/bignumber';
|
|
11
11
|
/**
|
|
12
12
|
* JavaScript-based Transaction builder helper function's
|
|
@@ -95,13 +95,14 @@ export function commitmentHash(name) {
|
|
|
95
95
|
* Decode data using the default encoding/decoding algorithm
|
|
96
96
|
* @function
|
|
97
97
|
* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers
|
|
98
|
-
* @param {string} data An
|
|
98
|
+
* @param {string} data An Base58/64check encoded and prefixed string (ex tx_..., sg_..., ak_....)
|
|
99
99
|
* @param {string} [requiredPrefix] Ensure that data have this prefix
|
|
100
100
|
* @return {Buffer} Decoded data
|
|
101
101
|
*/
|
|
102
102
|
|
|
103
103
|
export function decode(data, requiredPrefix) {
|
|
104
104
|
const [prefix, payload, extra] = data.split('_');
|
|
105
|
+
if (!payload) throw new Error(`Encoded string missing payload: ${data}`);
|
|
105
106
|
if (extra) throw new Error(`Encoded string have extra parts: ${data}`);
|
|
106
107
|
|
|
107
108
|
if (requiredPrefix && requiredPrefix !== prefix) {
|
|
@@ -131,6 +132,10 @@ export function encode(data, type) {
|
|
|
131
132
|
*/
|
|
132
133
|
|
|
133
134
|
export function writeId(hashId) {
|
|
135
|
+
if (typeof hashId !== 'string') {
|
|
136
|
+
throw new Error(`Address should be a string, got ${hashId} instead`);
|
|
137
|
+
}
|
|
138
|
+
|
|
134
139
|
const prefix = hashId.slice(0, 2);
|
|
135
140
|
const idTag = PREFIX_ID_TAG[prefix];
|
|
136
141
|
if (!idTag) throw new Error(`Id tag for prefix ${prefix} not found.`);
|
|
@@ -177,7 +182,8 @@ export function readInt() {
|
|
|
177
182
|
* Helper function to build pointers for name update TX
|
|
178
183
|
* @function
|
|
179
184
|
* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers
|
|
180
|
-
* @param {Array} pointers - Array of pointers
|
|
185
|
+
* @param {Array} pointers - Array of pointers
|
|
186
|
+
* ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])
|
|
181
187
|
* @return {Array} Serialized pointers array
|
|
182
188
|
*/
|
|
183
189
|
|
|
@@ -188,7 +194,8 @@ export function buildPointers(pointers) {
|
|
|
188
194
|
* Helper function to read pointers from name update TX
|
|
189
195
|
* @function
|
|
190
196
|
* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers
|
|
191
|
-
* @param {Array} pointers - Array of pointers
|
|
197
|
+
* @param {Array} pointers - Array of pointers
|
|
198
|
+
* ([ { key: 'account_pubkey', id: 'ak_32klj5j23k23j5423l434l2j3423'} ])
|
|
192
199
|
* @return {Array} Deserialize pointer array
|
|
193
200
|
*/
|
|
194
201
|
|
|
@@ -231,37 +238,17 @@ export function isNameValid(name) {
|
|
|
231
238
|
}
|
|
232
239
|
}
|
|
233
240
|
/**
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* @param s - the hash.
|
|
238
|
-
* returns the type, or throws an exception if type not found.
|
|
239
|
-
*/
|
|
240
|
-
|
|
241
|
-
export function classify(s) {
|
|
242
|
-
if (!s.match(/^[a-z]{2}_.+/)) {
|
|
243
|
-
throw new Error('Not a valid hash');
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const klass = s.substr(0, 2);
|
|
247
|
-
|
|
248
|
-
if (klass in NAME_ID_KEY) {
|
|
249
|
-
return NAME_ID_KEY[klass];
|
|
250
|
-
} else {
|
|
251
|
-
throw new Error(`Unknown class ${klass}`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Validate name pointers array
|
|
256
|
-
* @function
|
|
257
|
-
* @alias module:@aeternity/aepp-sdk/es/tx/builder/helpers
|
|
258
|
-
* @param {String[]} pointers Pointers array. Allowed values is: account(ak_), oracle(ok_), contract(ct_), channel(ch_)
|
|
259
|
-
* @return {Boolean}
|
|
241
|
+
* @param identifier - account/oracle/contract address, or channel
|
|
242
|
+
* @returns {String} default AENS pointer key
|
|
243
|
+
* @throws exception when default key not defined
|
|
260
244
|
*/
|
|
261
245
|
|
|
262
|
-
export function
|
|
263
|
-
|
|
264
|
-
|
|
246
|
+
export function getDefaultPointerKey(identifier) {
|
|
247
|
+
decode(identifier);
|
|
248
|
+
const prefix = identifier.substr(0, 2);
|
|
249
|
+
return POINTER_KEY_BY_PREFIX[prefix] || (() => {
|
|
250
|
+
throw new Error(`Default AENS pointer key is not defined for ${prefix} prefix`);
|
|
251
|
+
})();
|
|
265
252
|
}
|
|
266
253
|
/**
|
|
267
254
|
* Get the minimum name fee for a domain
|
|
@@ -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","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":";;;;;AACA,OAAOA,SAAP,MAAsB,cAAtB;AAEA,SACEC,iBADF,EAEEC,iBAFF,EAGEC,iBAHF,EAGqBC,iBAHrB,EAIEC,IAJF,EAKEC,IALF,QAMO,oBANP;AAOA,SAASC,OAAT,QAAwB,mBAAxB;AACA,SACEC,aADF,EAEEC,aAFF,EAGEC,eAHF,EAIEC,mBAJF,EAKEC,QALF,EAMEC,sBANF,EAOEC,iBAPF,EAQEC,mBARF,EASEC,WATF,QAUO,UAVP;AAWA,SAASC,IAAT,QAAqB,uBAArB;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMC,UAAU,GAAGZ,IAAnB;AAEP,MAAMa,WAAW,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,CAApB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,eAAT,CAA0BC,OAA1B,EAAmCC,KAAnC,EAA0C;AAC/C,QAAMC,eAAe,GAAGC,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGC,MAAM,CAACL,OAAD,EAAU,IAAV,CAAV,EAA2B,GAAGd,OAAO,CAACe,KAAD,CAArC,CAAZ,CAAxB;AACA,QAAMK,OAAO,GAAGtB,IAAI,CAACkB,eAAD,CAApB;AACA,SAAOK,MAAM,CAACD,OAAD,EAAU,IAAV,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,aAAT,CAAwBC,QAAxB,EAAkCR,KAAlC,EAAyCS,QAAzC,EAAmD;AACxD,WAASC,MAAT,CAAiBC,GAAjB,EAAsB;AACpB,UAAMC,OAAO,GAAG3B,OAAO,CAAC0B,GAAD,EAAM,IAAN,CAAvB;AACA,WAAOT,MAAM,CAACW,MAAP,CAAc,CAACX,MAAM,CAACY,KAAP,CAAa,KAAKF,OAAO,CAACG,MAA1B,CAAD,EAAoCH,OAApC,CAAd,CAAP;AACD;;AAED,QAAMP,OAAO,GAAGtB,IAAI,CAACmB,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGC,MAAM,CAACI,QAAD,EAAW,IAAX,CAAV,EAA4B,GAAGE,MAAM,CAACV,KAAD,CAArC,EAA8C,GAAGI,MAAM,CAACK,QAAD,EAAW,IAAX,CAAvD,CAAZ,CAAD,CAApB;AACA,SAAOH,MAAM,CAACD,OAAD,EAAU,IAAV,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,UAAT,CAAqBhC,IAArB,EAA2B;AAChC,SAAOkB,MAAM,CAACC,IAAP,CAAYnB,IAAI,CAACiC,QAAL,CAAc,EAAd,EAAkBC,QAAlB,CAA2B,EAA3B,EAA+B,GAA/B,CAAZ,EAAiD,KAAjD,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,aAAT,CAAwBC,IAAxB,EAA8B;AACnCC,EAAAA,eAAe,CAACD,IAAD,CAAf;AACA,SAAOd,MAAM,CAACvB,IAAI,CAACqC,IAAI,CAACE,WAAL,EAAD,CAAL,EAA2B,IAA3B,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,cAAT,CAAyBH,IAAzB,EAAoD;AAAA,MAArBpC,IAAqB,uEAAdY,UAAU,EAAI;AACzDyB,EAAAA,eAAe,CAACD,IAAD,CAAf;AACA,SAAQ,MAAKvC,iBAAiB,CAACE,IAAI,CAACmB,MAAM,CAACW,MAAP,CAAc,CAACX,MAAM,CAACC,IAAP,CAAYiB,IAAI,CAACE,WAAL,EAAZ,CAAD,EAAkCN,UAAU,CAAChC,IAAD,CAA5C,CAAd,CAAD,CAAL,CAA2E,EAAzG;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASoB,MAAT,CAAiBoB,IAAjB,EAAuBC,cAAvB,EAAuC;AAC5C,QAAM,CAACC,MAAD,EAASC,OAAT,EAAkBC,KAAlB,IAA2BJ,IAAI,CAACK,KAAL,CAAW,GAAX,CAAjC;AACA,MAAID,KAAJ,EAAW,MAAM,IAAIE,KAAJ,CAAW,oCAAmCN,IAAK,EAAnD,CAAN;;AACX,MAAIC,cAAc,IAAIA,cAAc,KAAKC,MAAzC,EAAiD;AAC/C,UAAM,IAAII,KAAJ,CAAW,qCAAoCJ,MAAO,eAAcD,cAAe,GAAnF,CAAN;AACD;;AACD,SAAO,CAAC5B,WAAW,CAACkC,QAAZ,CAAqBL,MAArB,IAA+B9C,iBAA/B,GAAmDD,iBAApD,EAAuEgD,OAAvE,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASrB,MAAT,CAAiBkB,IAAjB,EAAuBQ,IAAvB,EAA6B;AAClC,SAAQ,GAAEA,IAAK,IAAGnC,WAAW,CAACkC,QAAZ,CAAqBC,IAArB,IACdlD,iBAAiB,CAAC0C,IAAD,CADH,GAEd3C,iBAAiB,CAAC2C,IAAD,CAAO,EAF5B;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASS,OAAT,CAAkBC,MAAlB,EAA0B;AAC/B,QAAMR,MAAM,GAAGQ,MAAM,CAACC,KAAP,CAAa,CAAb,EAAgB,CAAhB,CAAf;AACA,QAAMC,KAAK,GAAGjD,aAAa,CAACuC,MAAD,CAA3B;AACA,MAAI,CAACU,KAAL,EAAY,MAAM,IAAIN,KAAJ,CAAW,qBAAoBJ,MAAO,aAAtC,CAAN;AACZ,SAAOxB,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGlB,OAAO,CAACmD,KAAD,CAAX,EAAoB,GAAGhC,MAAM,CAAC8B,MAAD,EAASR,MAAT,CAA7B,CAAZ,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,MAAT,CAAiBC,GAAjB,EAAsB;AAC3B,QAAMC,GAAG,GAAGD,GAAG,CAACE,UAAJ,CAAe,CAAf,EAAkB,CAAlB,CAAZ;AACA,QAAMd,MAAM,GAAGxC,aAAa,CAACqD,GAAD,CAA5B;AACA,MAAI,CAACb,MAAL,EAAa,MAAM,IAAII,KAAJ,CAAW,qBAAoBS,GAAI,aAAnC,CAAN;AACb,SAAOjC,MAAM,CAACgC,GAAG,CAACH,KAAJ,CAAU,CAAV,EAAaG,GAAG,CAACvB,MAAjB,CAAD,EAA2BW,MAA3B,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASe,QAAT,CAAmB9B,GAAnB,EAAwB;AAC7B,SAAO1B,OAAO,CAAC0B,GAAD,EAAM,IAAN,CAAd;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS+B,OAAT,GAAyC;AAAA,MAAvBJ,GAAuB,uEAAjBpC,MAAM,CAACC,IAAP,CAAY,EAAZ,CAAiB;AAC9C,SAAOzB,SAAS,CAAC4D,GAAG,CAACrB,QAAJ,CAAa,KAAb,CAAD,EAAsB,EAAtB,CAAT,CAAmCA,QAAnC,CAA4C,EAA5C,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS0B,aAAT,CAAwBC,QAAxB,EAAkC;AACvC,SAAOA,QAAQ,CAACC,GAAT,CACLC,CAAC,IAAI,CACH7D,OAAO,CAAC6D,CAAC,CAACC,GAAH,CADJ,EAEHd,OAAO,CAACa,CAAC,CAACE,EAAH,CAFJ,CADA,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,CAAuBL,QAAvB,EAAiC;AACtC,SAAOA,QAAQ,CAACC,GAAT,CACL;AAAA,QAAC,CAACE,GAAD,EAAMC,EAAN,CAAD;AAAA,WAAeE,MAAM,CAACC,MAAP,CAAc;AAC3BJ,MAAAA,GAAG,EAAEA,GAAG,CAAC9B,QAAJ,EADsB;AAE3B+B,MAAAA,EAAE,EAAEX,MAAM,CAACW,EAAD;AAFiB,KAAd,CAAf;AAAA,GADK,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS3B,eAAT,CAA0BD,IAA1B,EAAgC;AACrC,MAAI,CAACA,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAA7B,EAAuC,MAAM,IAAIU,KAAJ,CAAU,uBAAV,CAAN;AACvC,MAAI,CAACV,IAAI,CAACgC,QAAL,CAAc,QAAd,CAAL,EAA8B,MAAM,IAAItB,KAAJ,CAAW,gCAA+BV,IAAK,EAA/C,CAAN;AAC/B;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASiC,WAAT,CAAsBjC,IAAtB,EAA4B;AACjC,MAAI;AACFC,IAAAA,eAAe,CAACD,IAAD,CAAf;AACA,WAAO,IAAP;AACD,GAHD,CAGE,OAAOkC,KAAP,EAAc;AACd,WAAO,KAAP;AACD;AACF;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,QAAT,CAAmBC,CAAnB,EAAsB;AAC3B,MAAI,CAACA,CAAC,CAACC,KAAF,CAAQ,cAAR,CAAL,EAA8B;AAC5B,UAAM,IAAI3B,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,QAAM4B,KAAK,GAAGF,CAAC,CAACG,MAAF,CAAS,CAAT,EAAY,CAAZ,CAAd;;AACA,MAAID,KAAK,IAAIhE,WAAb,EAA0B;AACxB,WAAOA,WAAW,CAACgE,KAAD,CAAlB;AACD,GAFD,MAEO;AACL,UAAM,IAAI5B,KAAJ,CAAW,iBAAgB4B,KAAM,EAAjC,CAAN;AACD;AACF;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,gBAAT,GAA0C;AAAA,MAAfhB,QAAe,uEAAJ,EAAI;AAC/C,SAAO,CAACA,QAAQ,CACbiB,IADK,CACAf,CAAC,IAAI,CAACA,CAAD,IAAM,OAAOA,CAAP,KAAa,QAAnB,IAA+B,CAAC,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyBf,QAAzB,CAAkCe,CAAC,CAACjB,KAAF,CAAQ,GAAR,EAAa,CAAb,CAAlC,CADrC,CAAR;AAED;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASiC,iBAAT,CAA4BC,MAA5B,EAAoC;AACzC,QAAMC,UAAU,GAAGD,MAAM,CAACE,OAAP,CAAe,QAAf,EAAyB,EAAzB,EAA6BlD,MAAhD;AACA,SAAO3B,eAAe,CAAC4E,UAAU,IAAIvE,mBAAd,GAAoCA,mBAApC,GAA0DuE,UAA3D,CAAtB;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,aAAT,CAAwBH,MAAxB,EAAyF;AAAA,MAAzDI,QAAyD,uEAA9C7E,QAA8C;AAAA,MAApC8E,SAAoC,uEAAxB7E,sBAAwB;AAC9F,MAAI,EAAE8E,MAAM,CAACD,SAAD,CAAN,KAAsBA,SAAtB,IAAmCA,SAAS,GAAG,CAAZ,KAAkB,CAAvD,CAAJ,EAA+D,MAAM,IAAItC,KAAJ,CAAW,8CAA6CsC,SAAU,EAAlE,CAAN;AAC/D,MAAIA,SAAS,GAAG7E,sBAAhB,EAAwC,MAAM,IAAIuC,KAAJ,CAAW,mCAAkCvC,sBAAuB,EAApE,CAAN;AACxC,SAAOI,IAAI,CACTjB,SAAS,CAACA,SAAS,CAACyF,QAAD,CAAT,CAAoBG,EAApB,CAAuBhF,QAAvB,IAAmCwE,iBAAiB,CAACC,MAAD,CAApD,GAA+DI,QAAhE,CAAT,CAAmFI,KAAnF,CAAyF7F,SAAS,CAACa,sBAAD,CAAT,CAAkCiF,IAAlC,CAAuC,CAAvC,CAAzF,CADS,CAAX;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CAAiCV,MAAjC,EAAyCW,WAAzC,EAAsD;AAC3D,SAAO,MAAO,CACZ,CAAC,IAAK,CAAL,CAAD,EAAU,QAASlF,iBAAiB,CAAC,CAAD,CAAjB,CAAqBgF,IAArB,CAA0BE,WAA1B,CAAT,CAAV,CADY,EAEZ,CAAC,IAAK,CAAL,CAAD,EAAU,QAASlF,iBAAiB,CAAC,CAAD,CAAjB,CAAqBgF,IAArB,CAA0BE,WAA1B,CAAT,CAAV,CAFY,EAGZ,CAAC,KAAMrF,mBAAN,CAAD,EAA6B,QAASG,iBAAiB,CAAC,EAAD,CAAjB,CAAsBgF,IAAtB,CAA2BE,WAA3B,CAAT,CAA7B,CAHY,EAIZ,KAAM,QAAShG,SAAS,CAACgG,WAAD,CAAlB,CAAN,CAJY,CAAP,EAKJX,MAAM,CAACE,OAAP,CAAe,QAAf,EAAyB,EAAzB,EAA6BlD,MALzB,EAKiCE,QALjC,CAK0C,EAL1C,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS0D,aAAT,CAAwBvD,IAAxB,EAA8B;AACnC,SAAOA,IAAI,CAAC6C,OAAL,CAAa,QAAb,EAAuB,EAAvB,EAA2BlD,MAA3B,GAAoC,EAA3C;AACD","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","POINTER_KEY_BY_PREFIX","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","getDefaultPointerKey","identifier","substr","getMinimumNameFee","domain","nameLength","replace","computeBidFee","startFee","increment","Number","eq","times","plus","computeAuctionEndBlock","claimHeight","isAuctionName"],"mappings":";;;;;AACA,OAAOA,SAAP,MAAsB,cAAtB;AAEA,SACEC,iBADF,EAEEC,iBAFF,EAGEC,iBAHF,EAGqBC,iBAHrB,EAIEC,IAJF,EAKEC,IALF,QAMO,oBANP;AAOA,SAASC,OAAT,QAAwB,mBAAxB;AACA,SACEC,aADF,EAEEC,aAFF,EAGEC,eAHF,EAIEC,mBAJF,EAKEC,QALF,EAMEC,sBANF,EAOEC,iBAPF,EAQEC,mBARF,EASEC,qBATF,QAUO,UAVP;AAWA,SAASC,IAAT,QAAqB,uBAArB;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMC,UAAU,GAAGZ,IAAnB;AAEP,MAAMa,WAAW,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,CAApB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,eAAT,CAA0BC,OAA1B,EAAmCC,KAAnC,EAA0C;AAC/C,QAAMC,eAAe,GAAGC,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGC,MAAM,CAACL,OAAD,EAAU,IAAV,CAAV,EAA2B,GAAGd,OAAO,CAACe,KAAD,CAArC,CAAZ,CAAxB;AACA,QAAMK,OAAO,GAAGtB,IAAI,CAACkB,eAAD,CAApB;AACA,SAAOK,MAAM,CAACD,OAAD,EAAU,IAAV,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,aAAT,CAAwBC,QAAxB,EAAkCR,KAAlC,EAAyCS,QAAzC,EAAmD;AACxD,WAASC,MAAT,CAAiBC,GAAjB,EAAsB;AACpB,UAAMC,OAAO,GAAG3B,OAAO,CAAC0B,GAAD,EAAM,IAAN,CAAvB;AACA,WAAOT,MAAM,CAACW,MAAP,CAAc,CAACX,MAAM,CAACY,KAAP,CAAa,KAAKF,OAAO,CAACG,MAA1B,CAAD,EAAoCH,OAApC,CAAd,CAAP;AACD;;AAED,QAAMP,OAAO,GAAGtB,IAAI,CAACmB,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGC,MAAM,CAACI,QAAD,EAAW,IAAX,CAAV,EAA4B,GAAGE,MAAM,CAACV,KAAD,CAArC,EAA8C,GAAGI,MAAM,CAACK,QAAD,EAAW,IAAX,CAAvD,CAAZ,CAAD,CAApB;AACA,SAAOH,MAAM,CAACD,OAAD,EAAU,IAAV,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,UAAT,CAAqBhC,IAArB,EAA2B;AAChC,SAAOkB,MAAM,CAACC,IAAP,CAAYnB,IAAI,CAACiC,QAAL,CAAc,EAAd,EAAkBC,QAAlB,CAA2B,EAA3B,EAA+B,GAA/B,CAAZ,EAAiD,KAAjD,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,aAAT,CAAwBC,IAAxB,EAA8B;AACnCC,EAAAA,eAAe,CAACD,IAAD,CAAf;AACA,SAAOd,MAAM,CAACvB,IAAI,CAACqC,IAAI,CAACE,WAAL,EAAD,CAAL,EAA2B,IAA3B,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,cAAT,CAAyBH,IAAzB,EAAoD;AAAA,MAArBpC,IAAqB,uEAAdY,UAAU,EAAI;AACzDyB,EAAAA,eAAe,CAACD,IAAD,CAAf;AACA,SAAQ,MAAKvC,iBAAiB,CAACE,IAAI,CAACmB,MAAM,CAACW,MAAP,CAAc,CAACX,MAAM,CAACC,IAAP,CAAYiB,IAAI,CAACE,WAAL,EAAZ,CAAD,EAAkCN,UAAU,CAAChC,IAAD,CAA5C,CAAd,CAAD,CAAL,CAA2E,EAAzG;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASoB,MAAT,CAAiBoB,IAAjB,EAAuBC,cAAvB,EAAuC;AAC5C,QAAM,CAACC,MAAD,EAASC,OAAT,EAAkBC,KAAlB,IAA2BJ,IAAI,CAACK,KAAL,CAAW,GAAX,CAAjC;AACA,MAAI,CAACF,OAAL,EAAc,MAAM,IAAIG,KAAJ,CAAW,mCAAkCN,IAAK,EAAlD,CAAN;AACd,MAAII,KAAJ,EAAW,MAAM,IAAIE,KAAJ,CAAW,oCAAmCN,IAAK,EAAnD,CAAN;;AACX,MAAIC,cAAc,IAAIA,cAAc,KAAKC,MAAzC,EAAiD;AAC/C,UAAM,IAAII,KAAJ,CAAW,qCAAoCJ,MAAO,eAAcD,cAAe,GAAnF,CAAN;AACD;;AACD,SAAO,CAAC5B,WAAW,CAACkC,QAAZ,CAAqBL,MAArB,IAA+B9C,iBAA/B,GAAmDD,iBAApD,EAAuEgD,OAAvE,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASrB,MAAT,CAAiBkB,IAAjB,EAAuBQ,IAAvB,EAA6B;AAClC,SAAQ,GAAEA,IAAK,IAAGnC,WAAW,CAACkC,QAAZ,CAAqBC,IAArB,IACdlD,iBAAiB,CAAC0C,IAAD,CADH,GAEd3C,iBAAiB,CAAC2C,IAAD,CAAO,EAF5B;AAGD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASS,OAAT,CAAkBC,MAAlB,EAA0B;AAC/B,MAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,UAAM,IAAIJ,KAAJ,CAAW,mCAAkCI,MAAO,UAApD,CAAN;AACD;;AACD,QAAMR,MAAM,GAAGQ,MAAM,CAACC,KAAP,CAAa,CAAb,EAAgB,CAAhB,CAAf;AACA,QAAMC,KAAK,GAAGjD,aAAa,CAACuC,MAAD,CAA3B;AACA,MAAI,CAACU,KAAL,EAAY,MAAM,IAAIN,KAAJ,CAAW,qBAAoBJ,MAAO,aAAtC,CAAN;AACZ,SAAOxB,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGlB,OAAO,CAACmD,KAAD,CAAX,EAAoB,GAAGhC,MAAM,CAAC8B,MAAD,EAASR,MAAT,CAA7B,CAAZ,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,MAAT,CAAiBC,GAAjB,EAAsB;AAC3B,QAAMC,GAAG,GAAGD,GAAG,CAACE,UAAJ,CAAe,CAAf,EAAkB,CAAlB,CAAZ;AACA,QAAMd,MAAM,GAAGxC,aAAa,CAACqD,GAAD,CAA5B;AACA,MAAI,CAACb,MAAL,EAAa,MAAM,IAAII,KAAJ,CAAW,qBAAoBS,GAAI,aAAnC,CAAN;AACb,SAAOjC,MAAM,CAACgC,GAAG,CAACH,KAAJ,CAAU,CAAV,EAAaG,GAAG,CAACvB,MAAjB,CAAD,EAA2BW,MAA3B,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASe,QAAT,CAAmB9B,GAAnB,EAAwB;AAC7B,SAAO1B,OAAO,CAAC0B,GAAD,EAAM,IAAN,CAAd;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS+B,OAAT,GAAyC;AAAA,MAAvBJ,GAAuB,uEAAjBpC,MAAM,CAACC,IAAP,CAAY,EAAZ,CAAiB;AAC9C,SAAOzB,SAAS,CAAC4D,GAAG,CAACrB,QAAJ,CAAa,KAAb,CAAD,EAAsB,EAAtB,CAAT,CAAmCA,QAAnC,CAA4C,EAA5C,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS0B,aAAT,CAAwBC,QAAxB,EAAkC;AACvC,SAAOA,QAAQ,CAACC,GAAT,CACLC,CAAC,IAAI,CACH7D,OAAO,CAAC6D,CAAC,CAACC,GAAH,CADJ,EAEHd,OAAO,CAACa,CAAC,CAACE,EAAH,CAFJ,CADA,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,YAAT,CAAuBL,QAAvB,EAAiC;AACtC,SAAOA,QAAQ,CAACC,GAAT,CACL;AAAA,QAAC,CAACE,GAAD,EAAMC,EAAN,CAAD;AAAA,WAAeE,MAAM,CAACC,MAAP,CAAc;AAC3BJ,MAAAA,GAAG,EAAEA,GAAG,CAAC9B,QAAJ,EADsB;AAE3B+B,MAAAA,EAAE,EAAEX,MAAM,CAACW,EAAD;AAFiB,KAAd,CAAf;AAAA,GADK,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS3B,eAAT,CAA0BD,IAA1B,EAAgC;AACrC,MAAI,CAACA,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAA7B,EAAuC,MAAM,IAAIU,KAAJ,CAAU,uBAAV,CAAN;AACvC,MAAI,CAACV,IAAI,CAACgC,QAAL,CAAc,QAAd,CAAL,EAA8B,MAAM,IAAItB,KAAJ,CAAW,gCAA+BV,IAAK,EAA/C,CAAN;AAC/B;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASiC,WAAT,CAAsBjC,IAAtB,EAA4B;AACjC,MAAI;AACFC,IAAAA,eAAe,CAACD,IAAD,CAAf;AACA,WAAO,IAAP;AACD,GAHD,CAGE,OAAOkC,KAAP,EAAc;AACd,WAAO,KAAP;AACD;AACF;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,oBAAT,CAA+BC,UAA/B,EAA2C;AAChDpD,EAAAA,MAAM,CAACoD,UAAD,CAAN;AACA,QAAM9B,MAAM,GAAG8B,UAAU,CAACC,MAAX,CAAkB,CAAlB,EAAqB,CAArB,CAAf;AACA,SAAO/D,qBAAqB,CAACgC,MAAD,CAArB,IACL,CAAC,MAAM;AAAE,UAAM,IAAII,KAAJ,CAAW,+CAA8CJ,MAAO,SAAhE,CAAN;AAAiF,GAA1F,GADF;AAED;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASgC,iBAAT,CAA4BC,MAA5B,EAAoC;AACzC,QAAMC,UAAU,GAAGD,MAAM,CAACE,OAAP,CAAe,QAAf,EAAyB,EAAzB,EAA6B9C,MAAhD;AACA,SAAO3B,eAAe,CAACwE,UAAU,IAAInE,mBAAd,GAAoCA,mBAApC,GAA0DmE,UAA3D,CAAtB;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASE,aAAT,CAAwBH,MAAxB,EAAyF;AAAA,MAAzDI,QAAyD,uEAA9CzE,QAA8C;AAAA,MAApC0E,SAAoC,uEAAxBzE,sBAAwB;AAC9F,MAAI,EAAE0E,MAAM,CAACD,SAAD,CAAN,KAAsBA,SAAtB,IAAmCA,SAAS,GAAG,CAAZ,KAAkB,CAAvD,CAAJ,EAA+D,MAAM,IAAIlC,KAAJ,CAAW,8CAA6CkC,SAAU,EAAlE,CAAN;AAC/D,MAAIA,SAAS,GAAGzE,sBAAhB,EAAwC,MAAM,IAAIuC,KAAJ,CAAW,mCAAkCvC,sBAAuB,EAApE,CAAN;AACxC,SAAOI,IAAI,CACTjB,SAAS,CAACA,SAAS,CAACqF,QAAD,CAAT,CAAoBG,EAApB,CAAuB5E,QAAvB,IAAmCoE,iBAAiB,CAACC,MAAD,CAApD,GAA+DI,QAAhE,CAAT,CACGI,KADH,CACSzF,SAAS,CAACa,sBAAD,CAAT,CAAkC6E,IAAlC,CAAuC,CAAvC,CADT,CADS,CAAX;AAID;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CAAiCV,MAAjC,EAAyCW,WAAzC,EAAsD;AAC3D,SAAO,MAAO,CACZ,CAAC,IAAK,CAAL,CAAD,EAAU,QAAS9E,iBAAiB,CAAC,CAAD,CAAjB,CAAqB4E,IAArB,CAA0BE,WAA1B,CAAT,CAAV,CADY,EAEZ,CAAC,IAAK,CAAL,CAAD,EAAU,QAAS9E,iBAAiB,CAAC,CAAD,CAAjB,CAAqB4E,IAArB,CAA0BE,WAA1B,CAAT,CAAV,CAFY,EAGZ,CAAC,KAAMjF,mBAAN,CAAD,EAA6B,QAASG,iBAAiB,CAAC,EAAD,CAAjB,CAAsB4E,IAAtB,CAA2BE,WAA3B,CAAT,CAA7B,CAHY,EAIZ,KAAM,QAAS5F,SAAS,CAAC4F,WAAD,CAAlB,CAAN,CAJY,CAAP,EAKJX,MAAM,CAACE,OAAP,CAAe,QAAf,EAAyB,EAAzB,EAA6B9C,MALzB,EAKiCE,QALjC,CAK0C,EAL1C,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASsD,aAAT,CAAwBnD,IAAxB,EAA8B;AACnC,SAAOA,IAAI,CAACyC,OAAL,CAAa,QAAb,EAAuB,EAAvB,EAA2B9C,MAA3B,GAAoC,EAA3C;AACD","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 POINTER_KEY_BY_PREFIX\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 Base58/64check 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 (!payload) throw new Error(`Encoded string missing payload: ${data}`)\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 if (typeof hashId !== 'string') {\n throw new Error(`Address should be a string, got ${hashId} instead`)\n }\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\n * ([ { 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\n * ([ { 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 * @param identifier - account/oracle/contract address, or channel\n * @returns {String} default AENS pointer key\n * @throws exception when default key not defined\n */\nexport function getDefaultPointerKey (identifier) {\n decode(identifier)\n const prefix = identifier.substr(0, 2)\n return POINTER_KEY_BY_PREFIX[prefix] ||\n (() => { throw new Error(`Default AENS pointer key is not defined for ${prefix} prefix`) })()\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)\n .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"}
|
package/es/tx/builder/index.js
CHANGED
|
@@ -416,8 +416,8 @@ export function validateParams(params, schema, _ref8) {
|
|
|
416
416
|
* @param {Object} params Object with tx params
|
|
417
417
|
* @param {Array} schema Transaction schema
|
|
418
418
|
* @param {Object} [options={}] options
|
|
419
|
-
* @param {
|
|
420
|
-
* @param {String} [options.denomination='aettos']
|
|
419
|
+
* @param {String[]} [options.excludeKeys=[]] Array of keys to exclude for validation and build
|
|
420
|
+
* @param {String} [options.denomination='aettos'] Denomination of amounts
|
|
421
421
|
* @throws {Error} Validation error
|
|
422
422
|
* @return {Array} Array with binary fields of transaction
|
|
423
423
|
*/
|
|
@@ -501,10 +501,13 @@ const getSchema = _ref14 => {
|
|
|
501
501
|
* @param {Object} params Object with tx params
|
|
502
502
|
* @param {String} type Transaction type
|
|
503
503
|
* @param {Object} [options={}] options
|
|
504
|
-
* @param {
|
|
504
|
+
* @param {String[]} [options.excludeKeys] Array of keys to exclude for validation and build
|
|
505
505
|
* @param {String} [options.prefix] Prefix of transaction
|
|
506
506
|
* @throws {Error} Validation error
|
|
507
|
-
* @
|
|
507
|
+
* @returns {Object} object
|
|
508
|
+
* @returns {String} object.tx Base64Check transaction hash with 'tx_' prefix
|
|
509
|
+
* @returns {Buffer} object.rlpEncoded rlp encoded transaction
|
|
510
|
+
* @returns {Array<Buffer>} object.binary binary transaction
|
|
508
511
|
*/
|
|
509
512
|
|
|
510
513
|
|
|
@@ -539,10 +542,14 @@ export function buildTx(params, type) {
|
|
|
539
542
|
* Unpack transaction hash
|
|
540
543
|
* @function
|
|
541
544
|
* @alias module:@aeternity/aepp-sdk/es/tx/builder
|
|
542
|
-
* @param {String|Buffer} encodedTx String or RLP encoded transaction array
|
|
545
|
+
* @param {String|Buffer} encodedTx String or RLP encoded transaction array
|
|
546
|
+
* (if fromRlpBinary flag is true)
|
|
543
547
|
* @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)
|
|
544
548
|
* @param {String} prefix - Prefix of data
|
|
545
|
-
* @
|
|
549
|
+
* @returns {Object} object
|
|
550
|
+
* @returns {Object} object.tx Object with transaction param's
|
|
551
|
+
* @returns {Buffer} object.rlpEncoded rlp encoded transaction
|
|
552
|
+
* @returns {Array<Buffer>} object.binary binary transaction
|
|
546
553
|
*/
|
|
547
554
|
|
|
548
555
|
export function unpackTx(encodedTx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tx/builder/index.js"],"names":["BigNumber","decode","rlpDecode","encode","rlpEncode","AE_AMOUNT_FORMATS","formatAmount","hash","DEFAULT_FEE","FIELD_TYPES","OBJECT_ID_TX_TYPE","PREFIX_ID_TAG","TX_DESERIALIZATION_SCHEMA","TX_FEE_BASE_GAS","TX_FEE_OTHER_GAS","TX_SERIALIZATION_SCHEMA","TX_TYPE","VALIDATION_MESSAGE","VSN","readInt","readId","readPointers","writeId","writeInt","buildPointers","toBytes","MPTree","ORACLE_TTL_TYPES","delta","block","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","Buffer","from","abiVersion","amount","int","id","ids","map","bool","binary","stateTree","string","toString","payload","pointers","rlpBinary","unpackTx","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","serializeField","signatures","split","rlpEncoded","serialize","validateField","key","assert","valid","params","undefined","isMinusValue","isNaN","isBigNumber","lt","gte","prefixes","Array","isArray","p","find","Object","prototype","hasOwnProperty","call","e","transformParams","schema","denomination","filter","_","schemaKeys","k","entries","includes","getOracleRelativeTtl","txType","ttlKey","oracleRegister","oracleExtend","oracleQuery","oracleResponse","calculateMinFee","gas","vsn","multiplier","times","actualFee","buildFee","fee","expected","eq","txWithOutFee","buildTx","txSize","length","plus","relativeTtl","innerTxSize","gaMeta","payingFor","tx","encodedTx","calculateFee","showWarning","console","warn","validateParams","excludeKeys","assign","buildRawTx","AETTOS","filteredSchema","keys","Error","JSON","stringify","fieldType","unpackRawTx","index","getSchema","objId","isDeserialize","firstKey","tag","txObject","fromRlpBinary","buildTxHash","rawTx","data","startsWith"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,cAAtB;AACA,SAASC,MAAM,IAAIC,SAAnB,EAA8BC,MAAM,IAAIC,SAAxC,QAAyD,KAAzD;AACA,SAASC,iBAAT,EAA4BC,YAA5B,QAAgD,8BAAhD;AACA,SAASC,IAAT,QAAqB,oBAArB;AAEA,SACEC,WADF,EAEEC,WAFF,EAGEC,iBAHF,EAIEC,aAJF,EAKEC,yBALF,EAMEC,eANF,EAOEC,gBAPF,EAQEC,uBARF,EASEC,OATF,EAUEC,kBAVF,EAWEC,GAXF,QAYO,UAZP;AAaA,SACEC,OADF,EAEEC,MAFF,EAGEC,YAHF,EAIEC,OAJF,EAKEC,QALF,EAMEC,aANF,EAOErB,MAPF,EAQEF,MARF,QASO,WATP;AAUA,SAASwB,OAAT,QAAwB,mBAAxB;AACA,OAAOC,MAAP,MAAmB,oBAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,gBAAgB,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,KAAK,EAAE;AAFgB,CAAzB,C,CAKA;;AACA,SAASC,gBAAT,CAA2BC,KAA3B,EAAkCC,IAAlC,EAAwCC,MAAxC,EAAgD;AAC9C,MAAI,CAACF,KAAL,EAAY,OAAO,EAAP;;AACZ,UAAQC,IAAR;AACE,SAAKvB,WAAW,CAACyB,SAAjB;AAA4B;AAC1B,cAAM,CAACC,EAAD,GAAOC,GAAP,IAAcL,KAApB;AACA,eAAO;AAAEM,UAAAA,SAAS,EAAElB,OAAO,CAACmB,MAAM,CAACC,IAAP,CAAY,CAACJ,EAAD,CAAZ,CAAD,CAApB;AAAyCK,UAAAA,UAAU,EAAErB,OAAO,CAACmB,MAAM,CAACC,IAAP,CAAY,CAACH,GAAD,CAAZ,CAAD;AAA5D,SAAP;AACD;;AACD,SAAK3B,WAAW,CAACgC,MAAjB;AACE,aAAOtB,OAAO,CAACY,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACiC,GAAjB;AACE,aAAOvB,OAAO,CAACY,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACkC,EAAjB;AACE,aAAOvB,MAAM,CAACW,KAAD,CAAb;;AACF,SAAKtB,WAAW,CAACmC,GAAjB;AACE,aAAOb,KAAK,CAACc,GAAN,CAAUzB,MAAV,CAAP;;AACF,SAAKX,WAAW,CAACqC,IAAjB;AACE,aAAOf,KAAK,CAAC,CAAD,CAAL,KAAa,CAApB;;AACF,SAAKtB,WAAW,CAACsC,MAAjB;AACE,aAAO5C,MAAM,CAAC4B,KAAD,EAAQE,MAAR,CAAb;;AACF,SAAKxB,WAAW,CAACuC,SAAjB;AACE,aAAO7C,MAAM,CAAC4B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAOlB,KAAK,CAACmB,QAAN,EAAP;;AACF,SAAKzC,WAAW,CAAC0C,OAAjB;AACE,aAAOhD,MAAM,CAAC4B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO/B,YAAY,CAACU,KAAD,CAAnB;;AACF,SAAKtB,WAAW,CAAC4C,SAAjB;AACE,aAAOC,QAAQ,CAACvB,KAAD,EAAQ,IAAR,CAAf;;AACF,SAAKtB,WAAW,CAAC8C,WAAjB;AACE,aAAOxB,KAAK,CAACc,GAAN,CAAUW,CAAC,IAAIF,QAAQ,CAACE,CAAD,EAAI,IAAJ,CAAvB,CAAP;;AACF,SAAK/C,WAAW,CAACgD,SAAjB;AACE,aAAO1B,KAAP;;AACF,SAAKtB,WAAW,CAACiD,GAAjB;AACE,aAAO3B,KAAK,CAACmB,QAAN,CAAe,KAAf,CAAP;;AACF,SAAKzC,WAAW,CAACkD,eAAjB;AACE,aAAO5B,KAAK,CAACc,GAAN,CAAUW,CAAC,IAAIF,QAAQ,CAACE,CAAD,EAAI,IAAJ,CAAvB,CAAP;;AACF,SAAK/C,WAAW,CAACmD,SAAjB;AACE;AACA,aAAO,CAACzC,OAAO,CAACY,KAAD,CAAR,CAAP;;AACF,SAAKtB,WAAW,CAACoD,OAAjB;AACE,aAAO9B,KAAK,CAACc,GAAN,CAAUiB,CAAC,IAAI,IAAIpC,MAAJ,CAAWoC,CAAX,CAAf,CAAP;;AACF,SAAKrD,WAAW,CAACsD,cAAjB;AACE,cAAQ5C,OAAO,CAACY,KAAD,CAAf;AACE,aAAK,GAAL;AAAU,iBAAO,IAAP;;AACV,aAAK,GAAL;AAAU,iBAAO,OAAP;;AACV,aAAK,GAAL;AAAU,iBAAO,QAAP;;AACV;AAAS,iBAAOA,KAAP;AAJX;;AAMF,SAAKtB,WAAW,CAACuD,kBAAjB;AACE,aAAOjC,KAAK,CACTkC,MADI,CAEH,CAACC,GAAD;AAAA,YAAM,CAACC,OAAD,EAAUC,MAAV,EAAkBC,OAAlB,EAA2BC,OAA3B,CAAN;AAAA,eACG,EAAE,GAAGJ,GAAL;AAAU,WAACE,MAAM,CAAClB,QAAP,EAAD,GAAqB;AAAEiB,YAAAA,OAAF;AAAWE,YAAAA,OAAX;AAAoBC,YAAAA;AAApB;AAA/B,SADH;AAAA,OAFG,EAIH,EAJG,CAAP;;AAMF;AACE,aAAOvC,KAAP;AAvDJ;AAyDD;;AAED,SAASwC,cAAT,CAAyBxC,KAAzB,EAAgCC,IAAhC,EAAsCC,MAAtC,EAA8C;AAC5C,UAAQD,IAAR;AACE,SAAKvB,WAAW,CAACgC,MAAjB;AACA,SAAKhC,WAAW,CAACiC,GAAjB;AACE,aAAOnB,QAAQ,CAACQ,KAAD,CAAf;;AACF,SAAKtB,WAAW,CAACkC,EAAjB;AACE,aAAOrB,OAAO,CAACS,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACmC,GAAjB;AACE,aAAOb,KAAK,CAACc,GAAN,CAAUvB,OAAV,CAAP;;AACF,SAAKb,WAAW,CAACqC,IAAjB;AACE,aAAOR,MAAM,CAACC,IAAP,CAAY,CAACR,KAAK,GAAG,CAAH,GAAO,CAAb,CAAZ,CAAP;;AACF,SAAKtB,WAAW,CAACsC,MAAjB;AACE,aAAO9C,MAAM,CAAC8B,KAAD,EAAQE,MAAR,CAAb;;AACF,SAAKxB,WAAW,CAACuC,SAAjB;AACE,aAAO/C,MAAM,CAAC8B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAACiD,GAAjB;AACE,aAAOpB,MAAM,CAACC,IAAP,CAAYR,KAAZ,EAAmB,KAAnB,CAAP;;AACF,SAAKtB,WAAW,CAAC+D,UAAjB;AACE,aAAOzC,KAAK,CAACc,GAAN,CAAUP,MAAM,CAACC,IAAjB,CAAP;;AACF,SAAK9B,WAAW,CAAC0C,OAAjB;AACE,aAAO,OAAOpB,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,MAAwB,IAArD,GACHxE,MAAM,CAAC8B,KAAD,EAAQ,IAAR,CADH,GAEHN,OAAO,CAACM,KAAD,CAFX;;AAGF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAOxB,OAAO,CAACM,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO5B,aAAa,CAACO,KAAD,CAApB;;AACF,SAAKtB,WAAW,CAAC4C,SAAjB;AACE,aAAOtB,KAAK,CAAC2C,UAAN,IAAoB3C,KAA3B;;AACF,SAAKtB,WAAW,CAACoD,OAAjB;AACE,aAAO9B,KAAK,CAACc,GAAN,CAAUiB,CAAC,IAAIA,CAAC,CAACa,SAAF,EAAf,CAAP;;AACF,SAAKlE,WAAW,CAACyB,SAAjB;AACE,aAAOI,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGd,OAAO,CAACM,KAAK,CAACM,SAAP,CAAX,EAA8B,CAA9B,EAAiC,GAAGZ,OAAO,CAACM,KAAK,CAACS,UAAP,CAA3C,CAAZ,CAAP;;AACF,SAAK/B,WAAW,CAACsD,cAAjB;AACE,cAAQhC,KAAR;AACE,aAAK,IAAL;AAAW,iBAAOR,QAAQ,CAAC,CAAD,CAAf;;AACX,aAAK,OAAL;AAAc,iBAAOA,QAAQ,CAAC,CAAD,CAAf;;AACd,aAAK,QAAL;AAAe,iBAAOA,QAAQ,CAAC,CAAD,CAAf;;AACf;AAAS,iBAAOQ,KAAP;AAJX;;AAMF;AACE,aAAOA,KAAP;AAxCJ;AA0CD;;AAED,SAAS6C,aAAT,CAAwB7C,KAAxB,EAA+B8C,GAA/B,EAAoC7C,IAApC,EAA0CC,MAA1C,EAAkD;AAChD,QAAM6C,MAAM,GAAG,CAACC,KAAD,EAAQC,MAAR,KAAmBD,KAAK,GAAG,EAAH,GAAQ;AAAE,KAACF,GAAD,GAAO5D,kBAAkB,CAACe,IAAD,CAAlB,CAAyBgD,MAAzB;AAAT,GAA/C,CADgD,CAEhD;;;AACA,MAAIjD,KAAK,KAAKkD,SAAV,IAAuBlD,KAAK,KAAK,IAArC,EAA2C,OAAO;AAAE,KAAC8C,GAAD,GAAO;AAAT,GAAP,CAHK,CAKhD;;AACA,UAAQ7C,IAAR;AACE,SAAKvB,WAAW,CAACgC,MAAjB;AACA,SAAKhC,WAAW,CAACiC,GAAjB;AAAsB;AACpB,cAAMwC,YAAY,GAAG,CAAC,CAACC,KAAK,CAACpD,KAAD,CAAN,IAAiB/B,SAAS,CAACoF,WAAV,CAAsBrD,KAAtB,CAAlB,KAAmD/B,SAAS,CAAC+B,KAAD,CAAT,CAAiBsD,EAAjB,CAAoB,CAApB,CAAxE;AACA,eAAOP,MAAM,CAAC,CAAC,CAACK,KAAK,CAACpD,KAAD,CAAN,IAAiB/B,SAAS,CAACoF,WAAV,CAAsBrD,KAAtB,CAAlB,KAAmD/B,SAAS,CAAC+B,KAAD,CAAT,CAAiBuD,GAAjB,CAAqB,CAArB,CAApD,EAA6E;AAAEvD,UAAAA,KAAF;AAASmD,UAAAA;AAAT,SAA7E,CAAb;AACD;;AACD,SAAKzE,WAAW,CAACkC,EAAjB;AAAqB;AACnB,cAAM4C,QAAQ,GAAGC,KAAK,CAACC,OAAN,CAAcxD,MAAd,IAAwBA,MAAxB,GAAiC,CAACA,MAAD,CAAlD;AACA,cAAMyD,CAAC,GAAGH,QAAQ,CAACI,IAAT,CAAcD,CAAC,IAAIA,CAAC,KAAK3D,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAzB,CAAV;AACA,eAAOK,MAAM,CAACY,CAAC,IAAI/E,aAAa,CAACoB,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAD,CAAnB,EAA0C;AAAE1C,UAAAA,KAAF;AAASE,UAAAA;AAAT,SAA1C,CAAb;AACD;;AACD,SAAKxB,WAAW,CAACsC,MAAjB;AACE,aAAO+B,MAAM,CAAC/C,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,MAAwBxC,MAAzB,EAAiC;AAAEA,QAAAA,MAAF;AAAUF,QAAAA;AAAV,OAAjC,CAAb;;AACF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAO6B,MAAM,CAAC,IAAD,CAAb;;AACF,SAAKrE,WAAW,CAACyB,SAAjB;AACE,aAAO4C,MAAM,CAAC,OAAO/C,KAAP,KAAiB,QAAjB,IAA6B6D,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqChE,KAArC,EAA4C,YAA5C,CAA7B,IAA0F6D,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqChE,KAArC,EAA4C,WAA5C,CAA3F,CAAb;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO0B,MAAM,CAACU,KAAK,CAACC,OAAN,CAAc1D,KAAd,KAAwB,CAACA,KAAK,CAAC4D,IAAN,CAAWK,CAAC,IAAIA,CAAC,KAAKJ,MAAM,CAACI,CAAD,CAA5B,CAA1B,EAA4D;AAAEjE,QAAAA;AAAF,OAA5D,CAAb;;AACF;AACE,aAAO,EAAP;AApBJ;AAsBD;;AAED,SAASkE,eAAT,CAA0BjB,MAA1B,EAAkCkB,MAAlC,EAAiE;AAAA,MAAvB;AAAEC,IAAAA;AAAF,GAAuB,uEAAJ,EAAI;AAC/DnB,EAAAA,MAAM,GAAGkB,MAAM,CACZE,MADM,CACC;AAAA,QAAC,CAACC,CAAD,EAAIvC,CAAJ,CAAD;AAAA,WAAYA,CAAC,KAAKrD,WAAW,CAACgC,MAA9B;AAAA,GADD,EAENwB,MAFM,CAEC,CAACC,GAAD;AAAA,QAAM,CAACW,GAAD,CAAN;AAAA,WAAiB,EAAE,GAAGG,MAAL;AAAa,OAACH,GAAD,GAAOvE,YAAY,CAAC0E,MAAM,CAACH,GAAD,CAAP,EAAc;AAAEsB,QAAAA;AAAF,OAAd;AAAhC,KAAjB;AAAA,GAFD,EAEsFnB,MAFtF,CAAT;AAGA,QAAMsB,UAAU,GAAGJ,MAAM,CAACrD,GAAP,CAAW;AAAA,QAAC,CAAC0D,CAAD,CAAD;AAAA,WAASA,CAAT;AAAA,GAAX,CAAnB;AACA,SAAOX,MAAM,CACVY,OADI,CACIxB,MADJ,EAEJf,MAFI,CAGH,CAACC,GAAD,YAAuB;AAAA,QAAjB,CAACW,GAAD,EAAM9C,KAAN,CAAiB;AACrB,QAAIuE,UAAU,CAACG,QAAX,CAAoB5B,GAApB,CAAJ,EAA8BX,GAAG,CAACW,GAAD,CAAH,GAAW9C,KAAX;;AAC9B,QAAI,CAAC,WAAD,EAAc,UAAd,EAA0B,aAA1B,EAAyC0E,QAAzC,CAAkD5B,GAAlD,CAAJ,EAA4D;AAC1DX,MAAAA,GAAG,CAAE,GAAEW,GAAI,MAAR,CAAH,GAAoB9C,KAAK,CAACC,IAAN,KAAeL,gBAAgB,CAACC,KAAhC,GAAwC,CAAxC,GAA4C,CAAhE;AACAsC,MAAAA,GAAG,CAAE,GAAEW,GAAI,OAAR,CAAH,GAAqB9C,KAAK,CAACA,KAA3B;AACD;;AACD,WAAOmC,GAAP;AACD,GAVE,EAWH,EAXG,CAAP;AAaD,C,CAED;;;AAEA,SAASwC,oBAAT,CAA+B1B,MAA/B,EAAuC2B,MAAvC,EAA+C;AAC7C,QAAMC,MAAM,GAAG;AACb,KAAC5F,OAAO,CAAC6F,cAAT,GAA0B,WADb;AAEb,KAAC7F,OAAO,CAAC8F,YAAT,GAAwB,WAFX;AAGb,KAAC9F,OAAO,CAAC+F,WAAT,GAAuB,UAHV;AAIb,KAAC/F,OAAO,CAACgG,cAAT,GAA0B;AAJb,IAKbL,MALa,CAAf;;AAOA,MAAI3B,MAAM,CAAC4B,MAAD,CAAN,IAAkB5B,MAAM,CAAE,GAAE4B,MAAO,OAAX,CAA5B,EAAgD;AAC9C,WAAO5B,MAAM,CAAE,GAAE4B,MAAO,OAAX,CAAN,IAA4B5B,MAAM,CAAC4B,MAAD,CAAN,CAAe7E,KAAlD;AACD;;AACD,SAAO,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASkF,eAAT,CAA0BN,MAA1B,SAA4D;AAAA,MAA1B;AAAEO,IAAAA,GAAG,GAAG,CAAR;AAAWlC,IAAAA,MAAX;AAAmBmC,IAAAA;AAAnB,GAA0B;AACjE,QAAMC,UAAU,GAAGpH,SAAS,CAAC,GAAD,CAA5B,CADiE,CAC/B;;AAClC,MAAI,CAACgF,MAAL,EAAa,OAAOhF,SAAS,CAACQ,WAAD,CAAT,CAAuB6G,KAAvB,CAA6BD,UAA7B,EAAyClE,QAAzC,CAAkD,EAAlD,CAAP;AAEb,MAAIoE,SAAS,GAAGC,QAAQ,CAACZ,MAAD,EAAS;AAAE3B,IAAAA,MAAM,EAAE,EAAE,GAAGA,MAAL;AAAawC,MAAAA,GAAG,EAAE;AAAlB,KAAV;AAAiCJ,IAAAA,UAAjC;AAA6CF,IAAAA,GAA7C;AAAkDC,IAAAA;AAAlD,GAAT,CAAxB;AACA,MAAIM,QAAQ,GAAGzH,SAAS,CAAC,CAAD,CAAxB;;AAEA,SAAO,CAACsH,SAAS,CAACI,EAAV,CAAaD,QAAb,CAAR,EAAgC;AAC9BH,IAAAA,SAAS,GAAGC,QAAQ,CAACZ,MAAD,EAAS;AAAE3B,MAAAA,MAAM,EAAE,EAAE,GAAGA,MAAL;AAAawC,QAAAA,GAAG,EAAEF;AAAlB,OAAV;AAAyCF,MAAAA,UAAzC;AAAqDF,MAAAA,GAArD;AAA0DC,MAAAA;AAA1D,KAAT,CAApB;AACAM,IAAAA,QAAQ,GAAGH,SAAX;AACD;;AACD,SAAOG,QAAQ,CAACvE,QAAT,CAAkB,EAAlB,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASqE,QAAT,CAAmBZ,MAAnB,SAAiE;AAAA,MAAtC;AAAE3B,IAAAA,MAAF;AAAUkC,IAAAA,GAAG,GAAG,CAAhB;AAAmBE,IAAAA,UAAnB;AAA+BD,IAAAA;AAA/B,GAAsC;AAC/D,QAAM;AAAEzC,IAAAA,UAAU,EAAEiD;AAAd,MAA+BC,OAAO,CAAC,EAAE,GAAG5C;AAAL,GAAD,EAAgB2B,MAAhB,EAAwB;AAAEQ,IAAAA;AAAF,GAAxB,CAA5C;AACA,QAAMU,MAAM,GAAGF,YAAY,CAACG,MAA5B;AACA,SAAOjH,eAAe,CAAC8F,MAAD,CAAf,CACJoB,IADI,CACCjH,gBAAgB,CAAC6F,MAAD,EAASkB,MAAT,EAAiB;AACrCG,IAAAA,WAAW,EAAEtB,oBAAoB,CAAC1B,MAAD,EAAS2B,MAAT,CADI;AAErCsB,IAAAA,WAAW,EAAE,CAACjH,OAAO,CAACkH,MAAT,EAAiBlH,OAAO,CAACmH,SAAzB,EAAoC1B,QAApC,CAA6CE,MAA7C,IACT3B,MAAM,CAACoD,EAAP,CAAUA,EAAV,CAAaC,SAAb,CAAuB3D,UAAvB,CAAkCoD,MADzB,GAET;AAJiC,GAAjB,CADjB,EAOJT,KAPI,CAOED,UAPF,CAAP;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASkB,YAAT,GAA2F;AAAA,MAApEd,GAAoE,uEAA9D,CAA8D;AAAA,MAA3Db,MAA2D;AAAA,MAAnD;AAAEO,IAAAA,GAAG,GAAG,CAAR;AAAWlC,IAAAA,MAAX;AAAmBuD,IAAAA,WAAW,GAAG,IAAjC;AAAuCpB,IAAAA;AAAvC,GAAmD,uEAAJ,EAAI;AAChG,MAAI,CAACnC,MAAD,IAAWuD,WAAf,EAA4BC,OAAO,CAACC,IAAR,CAAc,wDAAuDjI,WAAY,GAAjF;AAE5B,SAAOgH,GAAG,IAAIP,eAAe,CAACN,MAAD,EAAS;AAAE3B,IAAAA,MAAF;AAAUkC,IAAAA,GAAV;AAAeC,IAAAA;AAAf,GAAT,CAA7B;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASuB,cAAT,CAAyB1D,MAAzB,EAAiCkB,MAAjC,SAA+D;AAAA,MAAtB;AAAEyC,IAAAA,WAAW,GAAG;AAAhB,GAAsB;AACpE,SAAOzC,MAAM,CACVE,MADI,CACG;AAAA,QAAC,CAACvB,GAAD,CAAD;AAAA,WAAW,CAAC8D,WAAW,CAAClC,QAAZ,CAAqB5B,GAArB,CAAD,IAA8BA,GAAG,KAAK,SAAjD;AAAA,GADH,EAEJZ,MAFI,CAGH,CAACC,GAAD;AAAA,QAAM,CAACW,GAAD,EAAM7C,IAAN,EAAYC,MAAZ,CAAN;AAAA,WAA8B2D,MAAM,CAACgD,MAAP,CAAc1E,GAAd,EAAmBU,aAAa,CAACI,MAAM,CAACH,GAAD,CAAP,EAAcA,GAAd,EAAmB7C,IAAnB,EAAyBC,MAAzB,CAAhC,CAA9B;AAAA,GAHG,EAIH,EAJG,CAAP;AAMD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS4G,UAAT,CAAqB7D,MAArB,EAA6BkB,MAA7B,EAAyG;AAAA,MAApE;AAAEyC,IAAAA,WAAW,GAAG,EAAhB;AAAoBxC,IAAAA,YAAY,GAAG9F,iBAAiB,CAACyI;AAArD,GAAoE,uEAAJ,EAAI;AAC9G,QAAMC,cAAc,GAAG7C,MAAM,CAACE,MAAP,CAAc;AAAA,QAAC,CAACvB,GAAD,CAAD;AAAA,WAAW,CAAC8D,WAAW,CAAClC,QAAZ,CAAqB5B,GAArB,CAAZ;AAAA,GAAd,CAAvB,CAD8G,CAG9G;;AACAG,EAAAA,MAAM,GAAGiB,eAAe,CAACjB,MAAD,EAAS+D,cAAT,EAAyB;AAAE5C,IAAAA;AAAF,GAAzB,CAAxB,CAJ8G,CAK9G;;AACA,QAAMpB,KAAK,GAAG2D,cAAc,CAAC1D,MAAD,EAASkB,MAAT,EAAiB;AAAEyC,IAAAA;AAAF,GAAjB,CAA5B;;AACA,MAAI/C,MAAM,CAACoD,IAAP,CAAYjE,KAAZ,EAAmB+C,MAAvB,EAA+B;AAC7B,UAAM,IAAImB,KAAJ,CAAU,8BAA8BC,IAAI,CAACC,SAAL,CAAepE,KAAf,CAAxC,CAAN;AACD;;AAED,SAAOgE,cAAc,CAClBlG,GADI,CACA;AAAA,QAAC,CAACgC,GAAD,EAAMuE,SAAN,EAAiBnH,MAAjB,CAAD;AAAA,WAA8BsC,cAAc,CAACS,MAAM,CAACH,GAAD,CAAP,EAAcuE,SAAd,EAAyBnH,MAAzB,CAA5C;AAAA,GADA,CAAP;AAED;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASoH,WAAT,CAAsBtG,MAAtB,EAA8BmD,MAA9B,EAAsC;AAC3C,SAAOA,MAAM,CACVjC,MADI,CAEH,CACEC,GADF,UAGEoF,KAHF;AAAA,QAEE,CAACzE,GAAD,EAAMuE,SAAN,EAAiBnH,MAAjB,CAFF;AAAA,WAIK2D,MAAM,CAACgD,MAAP,CAAc1E,GAAd,EAAmB;AAAE,OAACW,GAAD,GAAO/C,gBAAgB,CAACiB,MAAM,CAACuG,KAAD,CAAP,EAAgBF,SAAhB,EAA2BnH,MAA3B;AAAzB,KAAnB,CAJL;AAAA,GAFG,EAOH,EAPG,CAAP;AASD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMsH,SAAS,GAAG,UAA0B;AAAA,MAAzB;AAAEpC,IAAAA,GAAF;AAAOqC,IAAAA,KAAP;AAAcxH,IAAAA;AAAd,GAAyB;AAC1C,QAAMyH,aAAa,GAAG,CAAC,CAACD,KAAxB;AACA,QAAME,QAAQ,GAAGD,aAAa,GAAGD,KAAH,GAAWxH,IAAzC;AACA,QAAMkE,MAAM,GAAGuD,aAAa,GAAG7I,yBAAH,GAA+BG,uBAA3D;;AAEA,MAAI,CAACmF,MAAM,CAACwD,QAAD,CAAX,EAAuB;AACrB,UAAM,IAAIT,KAAJ,CAAW,eAAcQ,aAAa,GAAG,iBAAH,GAAuB,eAAgB,wBAAuBA,aAAa,GAAG,SAASD,KAAZ,GAAoBxH,IAAK,EAA1I,CAAN;AACD;;AACD,MAAI,CAACkE,MAAM,CAACwD,QAAD,CAAN,CAAiBvC,GAAjB,CAAL,EAA4B;AAC1B,UAAM,IAAI8B,KAAJ,CAAW,eAAcQ,aAAa,GAAG,iBAAH,GAAuB,eAAgB,wBAAuBA,aAAa,GAAG,SAASD,KAAZ,GAAoBxH,IAAK,YAAWmF,GAAI,EAAzJ,CAAN;AACD;;AACD,SAAOjB,MAAM,CAACwD,QAAD,CAAN,CAAiBvC,GAAjB,CAAP;AACD,CAZD;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASS,OAAT,CAAkB5C,MAAlB,EAA0BhD,IAA1B,EAA8H;AAAA,MAA9F;AAAE2G,IAAAA,WAAW,GAAG,EAAhB;AAAoB1G,IAAAA,MAAM,GAAG,IAA7B;AAAmCkF,IAAAA,GAAG,GAAGjG,GAAzC;AAA8CiF,IAAAA,YAAY,GAAG9F,iBAAiB,CAACyI;AAA/E,GAA8F,uEAAJ,EAAI;AACnI,QAAM,CAAC5C,MAAD,EAASyD,GAAT,IAAgBJ,SAAS,CAAC;AAAEvH,IAAAA,IAAF;AAAQmF,IAAAA;AAAR,GAAD,CAA/B;AACA,QAAMpE,MAAM,GAAG8F,UAAU,CAAC,EAAE,GAAG7D,MAAL;AAAa9D,IAAAA,GAAG,EAAEiG,GAAlB;AAAuBwC,IAAAA;AAAvB,GAAD,EAA+BzD,MAA/B,EAAuC;AAAEyC,IAAAA,WAAF;AAAexC,IAAAA,YAAY,EAAEnB,MAAM,CAACmB,YAAP,IAAuBA;AAApD,GAAvC,CAAV,CAAqHC,MAArH,CAA4HJ,CAAC,IAAIA,CAAC,KAAKf,SAAvI,CAAf;AAEA,QAAMP,UAAU,GAAGtE,SAAS,CAAC2C,MAAD,CAA5B;AACA,QAAMqF,EAAE,GAAGjI,MAAM,CAACuE,UAAD,EAAazC,MAAb,CAAjB;AAEA,SAAO;AAAEmG,IAAAA,EAAF;AAAM1D,IAAAA,UAAN;AAAkB3B,IAAAA,MAAlB;AAA0B6G,IAAAA,QAAQ,EAAEP,WAAW,CAACtG,MAAD,EAASmD,MAAT;AAA/C,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS5C,QAAT,CAAmB+E,SAAnB,EAAoE;AAAA,MAAtCwB,aAAsC,uEAAtB,KAAsB;AAAA,MAAf5H,MAAe,uEAAN,IAAM;AACzE,QAAMyC,UAAU,GAAGmF,aAAa,GAAGxB,SAAH,GAAepI,MAAM,CAACoI,SAAD,EAAYpG,MAAZ,CAArD;AACA,QAAMc,MAAM,GAAG7C,SAAS,CAACwE,UAAD,CAAxB;AAEA,QAAM8E,KAAK,GAAGrI,OAAO,CAAC4B,MAAM,CAAC,CAAD,CAAP,CAArB;AACA,QAAMoE,GAAG,GAAGhG,OAAO,CAAC4B,MAAM,CAAC,CAAD,CAAP,CAAnB;AACA,QAAM,CAACmD,MAAD,IAAWqD,SAAS,CAAC;AAAEC,IAAAA,KAAF;AAASrC,IAAAA;AAAT,GAAD,CAA1B;AAEA,SAAO;AAAER,IAAAA,MAAM,EAAEjG,iBAAiB,CAAC8I,KAAD,CAA3B;AAAoCpB,IAAAA,EAAE,EAAEiB,WAAW,CAACtG,MAAD,EAASmD,MAAT,CAAnD;AAAqExB,IAAAA,UAArE;AAAiF3B,IAAAA;AAAjF,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS+G,WAAT,CAAsBC,KAAtB,EAA6B;AAClC,QAAMC,IAAI,GAAG,OAAOD,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACE,UAAN,CAAiB,KAAjB,CAA7B,GAAuDhK,MAAM,CAAC8J,KAAD,EAAQ,IAAR,CAA7D,GAA6EA,KAA1F;AACA,SAAO5J,MAAM,CAACI,IAAI,CAACyJ,IAAD,CAAL,EAAa,IAAb,CAAb;AACD;AAED,eAAe;AAAE/C,EAAAA,eAAF;AAAmBqB,EAAAA,YAAnB;AAAiChF,EAAAA,QAAjC;AAA2C+F,EAAAA,WAA3C;AAAwDzB,EAAAA,OAAxD;AAAiEiB,EAAAA,UAAjE;AAA6EH,EAAAA,cAA7E;AAA6FoB,EAAAA;AAA7F,CAAf","sourcesContent":["import BigNumber from 'bignumber.js'\nimport { decode as rlpDecode, encode as rlpEncode } from 'rlp'\nimport { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'\nimport { hash } from '../../utils/crypto'\n\nimport {\n DEFAULT_FEE,\n FIELD_TYPES,\n OBJECT_ID_TX_TYPE,\n PREFIX_ID_TAG,\n TX_DESERIALIZATION_SCHEMA,\n TX_FEE_BASE_GAS,\n TX_FEE_OTHER_GAS,\n TX_SERIALIZATION_SCHEMA,\n TX_TYPE,\n VALIDATION_MESSAGE,\n VSN\n} from './schema'\nimport {\n readInt,\n readId,\n readPointers,\n writeId,\n writeInt,\n buildPointers,\n encode,\n decode\n} from './helpers'\nimport { toBytes } from '../../utils/bytes'\nimport MPTree from '../../utils/mptree'\n\n/**\n * JavaScript-based Transaction builder\n * @module @aeternity/aepp-sdk/es/tx/builder\n * @export TxBuilder\n * @example import { TxBuilder } from '@aeternity/aepp-sdk'\n */\n\nconst ORACLE_TTL_TYPES = {\n delta: 'delta',\n block: 'block'\n}\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField (value, type, prefix) {\n if (!value) return ''\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value\n return { vmVersion: readInt(Buffer.from([vm])), abiVersion: readInt(Buffer.from([abi])) }\n }\n case FIELD_TYPES.amount:\n return readInt(value)\n case FIELD_TYPES.int:\n return readInt(value)\n case FIELD_TYPES.id:\n return readId(value)\n case FIELD_TYPES.ids:\n return value.map(readId)\n case FIELD_TYPES.bool:\n return value[0] === 1\n case FIELD_TYPES.binary:\n return encode(value, prefix)\n case FIELD_TYPES.stateTree:\n return encode(value, 'ss')\n case FIELD_TYPES.string:\n return value.toString()\n case FIELD_TYPES.payload:\n return encode(value, 'ba')\n case FIELD_TYPES.pointers:\n return readPointers(value)\n case FIELD_TYPES.rlpBinary:\n return unpackTx(value, true)\n case FIELD_TYPES.rlpBinaries:\n return value.map(v => unpackTx(v, true))\n case FIELD_TYPES.rawBinary:\n return value\n case FIELD_TYPES.hex:\n return value.toString('hex')\n case FIELD_TYPES.offChainUpdates:\n return value.map(v => unpackTx(v, true))\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)]\n case FIELD_TYPES.mptrees:\n return value.map(t => new MPTree(t))\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0': return 'ok'\n case '1': return 'error'\n case '2': return 'revert'\n default: return value\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value\n .reduce(\n (acc, [funHash, fnName, argType, outType]) =>\n ({ ...acc, [fnName.toString()]: { funHash, argType, outType } }),\n {}\n )\n default:\n return value\n }\n}\n\nfunction serializeField (value, type, prefix) {\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n return writeInt(value)\n case FIELD_TYPES.id:\n return writeId(value)\n case FIELD_TYPES.ids:\n return value.map(writeId)\n case FIELD_TYPES.bool:\n return Buffer.from([value ? 1 : 0])\n case FIELD_TYPES.binary:\n return decode(value, prefix)\n case FIELD_TYPES.stateTree:\n return decode(value, 'ss')\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex')\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from)\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value, 'ba')\n : toBytes(value)\n case FIELD_TYPES.string:\n return toBytes(value)\n case FIELD_TYPES.pointers:\n return buildPointers(value)\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value\n case FIELD_TYPES.mptrees:\n return value.map(t => t.serialize())\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0)\n case 'error': return writeInt(1)\n case 'revert': return writeInt(2)\n default: return value\n }\n default:\n return value\n }\n}\n\nfunction validateField (value, key, type, prefix) {\n const assert = (valid, params) => valid ? {} : { [key]: VALIDATION_MESSAGE[type](params) }\n // All fields are required\n if (value === undefined || value === null) return { [key]: 'Field is required' }\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int: {\n const isMinusValue = (!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).lt(0)\n return assert((!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).gte(0), { value, isMinusValue })\n }\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n const p = prefixes.find(p => p === value.split('_')[0])\n return assert(p && PREFIX_ID_TAG[value.split('_')[0]], { value, prefix })\n }\n case FIELD_TYPES.binary:\n return assert(value.split('_')[0] === prefix, { prefix, value })\n case FIELD_TYPES.string:\n return assert(true)\n case FIELD_TYPES.ctVersion:\n return assert(typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'abiVersion') && Object.prototype.hasOwnProperty.call(value, 'vmVersion'))\n case FIELD_TYPES.pointers:\n return assert(Array.isArray(value) && !value.find(e => e !== Object(e)), { value })\n default:\n return {}\n }\n}\n\nfunction transformParams (params, schema, { denomination } = {}) {\n params = schema\n .filter(([_, t]) => t === FIELD_TYPES.amount)\n .reduce((acc, [key]) => ({ ...params, [key]: formatAmount(params[key], { denomination }) }), params)\n const schemaKeys = schema.map(([k]) => k)\n return Object\n .entries(params)\n .reduce(\n (acc, [key, value]) => {\n if (schemaKeys.includes(key)) acc[key] = value\n if (['oracleTtl', 'queryTtl', 'responseTtl'].includes(key)) {\n acc[`${key}Type`] = value.type === ORACLE_TTL_TYPES.delta ? 0 : 1\n acc[`${key}Value`] = value.value\n }\n return acc\n },\n {}\n )\n}\n\n// INTERFACE\n\nfunction getOracleRelativeTtl (params, txType) {\n const ttlKey = {\n [TX_TYPE.oracleRegister]: 'oracleTtl',\n [TX_TYPE.oracleExtend]: 'oracleTtl',\n [TX_TYPE.oracleQuery]: 'queryTtl',\n [TX_TYPE.oracleResponse]: 'responseTtl'\n }[txType]\n\n if (params[ttlKey] || params[`${ttlKey}Value`]) {\n return params[`${ttlKey}Value`] || params[ttlKey].value\n }\n return 1\n}\n\n/**\n * Calculate min fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/index\n * @rtype (txType, { gas = 0, params }) => String\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateMinFee('spendTx', { gas, params })\n */\nexport function calculateMinFee (txType, { gas = 0, params, vsn }) {\n const multiplier = BigNumber(1e9) // 10^9 GAS_PRICE\n if (!params) return BigNumber(DEFAULT_FEE).times(multiplier).toString(10)\n\n let actualFee = buildFee(txType, { params: { ...params, fee: 0 }, multiplier, gas, vsn })\n let expected = BigNumber(0)\n\n while (!actualFee.eq(expected)) {\n actualFee = buildFee(txType, { params: { ...params, fee: actualFee }, multiplier, gas, vsn })\n expected = actualFee\n }\n return expected.toString(10)\n}\n\n/**\n * Calculate fee based on tx type and params\n * @param txType\n * @param params\n * @param gas\n * @param multiplier\n * @param vsn\n * @return {BigNumber}\n */\nfunction buildFee (txType, { params, gas = 0, multiplier, vsn }) {\n const { rlpEncoded: txWithOutFee } = buildTx({ ...params }, txType, { vsn })\n const txSize = txWithOutFee.length\n return TX_FEE_BASE_GAS(txType)\n .plus(TX_FEE_OTHER_GAS(txType, txSize, {\n relativeTtl: getOracleRelativeTtl(params, txType),\n innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)\n ? params.tx.tx.encodedTx.rlpEncoded.length\n : 0\n }))\n .times(multiplier)\n}\n\n/**\n * Calculate fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @rtype (fee, txType, gas = 0) => String\n * @param {String|Number} fee - fee\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateFee(null, 'spendTx', { gas, params })\n */\nexport function calculateFee (fee = 0, txType, { gas = 0, params, showWarning = true, vsn } = {}) {\n if (!params && showWarning) console.warn(`Can't build transaction fee, we will use DEFAULT_FEE(${DEFAULT_FEE})`)\n\n return fee || calculateMinFee(txType, { params, gas, vsn })\n}\n\n/**\n * Validate transaction params\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Array} excludeKeys Array of keys to exclude for validation\n * @return {Object} Object with validation errors\n */\nexport function validateParams (params, schema, { excludeKeys = [] }) {\n return schema\n .filter(([key]) => !excludeKeys.includes(key) && key !== 'payload')\n .reduce(\n (acc, [key, type, prefix]) => Object.assign(acc, validateField(params[key], key, type, prefix)),\n {}\n )\n}\n\n/**\n * Build binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Object} [options={}] options\n * @param {Array} [options.excludeKeys=[]] excludeKeys Array of keys to exclude for validation and build\n * @param {String} [options.denomination='aettos'] denomination Denomination of amounts (default: aettos)\n * @throws {Error} Validation error\n * @return {Array} Array with binary fields of transaction\n */\nexport function buildRawTx (params, schema, { excludeKeys = [], denomination = AE_AMOUNT_FORMATS.AETTOS } = {}) {\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))\n\n // Transform `amount` type fields to `aettos`\n params = transformParams(params, filteredSchema, { denomination })\n // Validation\n const valid = validateParams(params, schema, { excludeKeys })\n if (Object.keys(valid).length) {\n throw new Error('Transaction build error. ' + JSON.stringify(valid))\n }\n\n return filteredSchema\n .map(([key, fieldType, prefix]) => serializeField(params[key], fieldType, prefix))\n}\n\n/**\n * Unpack binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Array} binary Array with binary transaction field's\n * @param {Array} schema Transaction schema\n * @return {Object} Object with transaction field's\n */\nexport function unpackRawTx (binary, schema) {\n return schema\n .reduce(\n (\n acc,\n [key, fieldType, prefix],\n index\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {}\n )\n}\n\n/**\n * Get transaction serialization/deserialization schema\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {{ vsn: String, objId: Number, type: String }}\n * @throws {Error} Schema not found error\n * @return {Object} Schema\n */\nconst getSchema = ({ vsn, objId, type }) => {\n const isDeserialize = !!objId\n const firstKey = isDeserialize ? objId : type\n const schema = isDeserialize ? TX_DESERIALIZATION_SCHEMA : TX_SERIALIZATION_SCHEMA\n\n if (!schema[firstKey]) {\n throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`)\n }\n if (!schema[firstKey][vsn]) {\n throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`)\n }\n return schema[firstKey][vsn]\n}\n\n/**\n * Build transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {String} type Transaction type\n * @param {Object} [options={}] options\n * @param {Object} [options.excludeKeys] excludeKeys Array of keys to exclude for validation and build\n * @param {String} [options.prefix] Prefix of transaction\n * @throws {Error} Validation error\n * @return {Object} { tx, rlpEncoded, binary } Object with tx -> Base64Check transaction hash with 'tx_' prefix, rlp encoded transaction and binary transaction\n */\nexport function buildTx (params, type, { excludeKeys = [], prefix = 'tx', vsn = VSN, denomination = AE_AMOUNT_FORMATS.AETTOS } = {}) {\n const [schema, tag] = getSchema({ type, vsn })\n const binary = buildRawTx({ ...params, VSN: vsn, tag }, schema, { excludeKeys, denomination: params.denomination || denomination }).filter(e => e !== undefined)\n\n const rlpEncoded = rlpEncode(binary)\n const tx = encode(rlpEncoded, prefix)\n\n return { tx, rlpEncoded, binary, txObject: unpackRawTx(binary, schema) }\n}\n\n/**\n * Unpack transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String|Buffer} encodedTx String or RLP encoded transaction array (if fromRlpBinary flag is true)\n * @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)\n * @param {String} prefix - Prefix of data\n * @return {Object} { tx, rlpEncoded, binary } Object with tx -> Object with transaction param's, rlp encoded transaction and binary transaction\n */\nexport function unpackTx (encodedTx, fromRlpBinary = false, prefix = 'tx') {\n const rlpEncoded = fromRlpBinary ? encodedTx : decode(encodedTx, prefix)\n const binary = rlpDecode(rlpEncoded)\n\n const objId = readInt(binary[0])\n const vsn = readInt(binary[1])\n const [schema] = getSchema({ objId, vsn })\n\n return { txType: OBJECT_ID_TX_TYPE[objId], tx: unpackRawTx(binary, schema), rlpEncoded, binary }\n}\n\n/**\n * Build a transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String | Buffer} rawTx base64 or rlp encoded transaction\n * @return {String} Transaction hash\n */\nexport function buildTxHash (rawTx) {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx, 'tx') : rawTx\n return encode(hash(data), 'th')\n}\n\nexport default { calculateMinFee, calculateFee, unpackTx, unpackRawTx, buildTx, buildRawTx, validateParams, buildTxHash }\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tx/builder/index.js"],"names":["BigNumber","decode","rlpDecode","encode","rlpEncode","AE_AMOUNT_FORMATS","formatAmount","hash","DEFAULT_FEE","FIELD_TYPES","OBJECT_ID_TX_TYPE","PREFIX_ID_TAG","TX_DESERIALIZATION_SCHEMA","TX_FEE_BASE_GAS","TX_FEE_OTHER_GAS","TX_SERIALIZATION_SCHEMA","TX_TYPE","VALIDATION_MESSAGE","VSN","readInt","readId","readPointers","writeId","writeInt","buildPointers","toBytes","MPTree","ORACLE_TTL_TYPES","delta","block","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","Buffer","from","abiVersion","amount","int","id","ids","map","bool","binary","stateTree","string","toString","payload","pointers","rlpBinary","unpackTx","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","serializeField","signatures","split","rlpEncoded","serialize","validateField","key","assert","valid","params","undefined","isMinusValue","isNaN","isBigNumber","lt","gte","prefixes","Array","isArray","p","find","Object","prototype","hasOwnProperty","call","e","transformParams","schema","denomination","filter","_","schemaKeys","k","entries","includes","getOracleRelativeTtl","txType","ttlKey","oracleRegister","oracleExtend","oracleQuery","oracleResponse","calculateMinFee","gas","vsn","multiplier","times","actualFee","buildFee","fee","expected","eq","txWithOutFee","buildTx","txSize","length","plus","relativeTtl","innerTxSize","gaMeta","payingFor","tx","encodedTx","calculateFee","showWarning","console","warn","validateParams","excludeKeys","assign","buildRawTx","AETTOS","filteredSchema","keys","Error","JSON","stringify","fieldType","unpackRawTx","index","getSchema","objId","isDeserialize","firstKey","tag","txObject","fromRlpBinary","buildTxHash","rawTx","data","startsWith"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,cAAtB;AACA,SAASC,MAAM,IAAIC,SAAnB,EAA8BC,MAAM,IAAIC,SAAxC,QAAyD,KAAzD;AACA,SAASC,iBAAT,EAA4BC,YAA5B,QAAgD,8BAAhD;AACA,SAASC,IAAT,QAAqB,oBAArB;AAEA,SACEC,WADF,EAEEC,WAFF,EAGEC,iBAHF,EAIEC,aAJF,EAKEC,yBALF,EAMEC,eANF,EAOEC,gBAPF,EAQEC,uBARF,EASEC,OATF,EAUEC,kBAVF,EAWEC,GAXF,QAYO,UAZP;AAaA,SACEC,OADF,EAEEC,MAFF,EAGEC,YAHF,EAIEC,OAJF,EAKEC,QALF,EAMEC,aANF,EAOErB,MAPF,EAQEF,MARF,QASO,WATP;AAUA,SAASwB,OAAT,QAAwB,mBAAxB;AACA,OAAOC,MAAP,MAAmB,oBAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,gBAAgB,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,KAAK,EAAE;AAFgB,CAAzB,C,CAKA;;AACA,SAASC,gBAAT,CAA2BC,KAA3B,EAAkCC,IAAlC,EAAwCC,MAAxC,EAAgD;AAC9C,MAAI,CAACF,KAAL,EAAY,OAAO,EAAP;;AACZ,UAAQC,IAAR;AACE,SAAKvB,WAAW,CAACyB,SAAjB;AAA4B;AAC1B,cAAM,CAACC,EAAD,GAAOC,GAAP,IAAcL,KAApB;AACA,eAAO;AAAEM,UAAAA,SAAS,EAAElB,OAAO,CAACmB,MAAM,CAACC,IAAP,CAAY,CAACJ,EAAD,CAAZ,CAAD,CAApB;AAAyCK,UAAAA,UAAU,EAAErB,OAAO,CAACmB,MAAM,CAACC,IAAP,CAAY,CAACH,GAAD,CAAZ,CAAD;AAA5D,SAAP;AACD;;AACD,SAAK3B,WAAW,CAACgC,MAAjB;AACE,aAAOtB,OAAO,CAACY,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACiC,GAAjB;AACE,aAAOvB,OAAO,CAACY,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACkC,EAAjB;AACE,aAAOvB,MAAM,CAACW,KAAD,CAAb;;AACF,SAAKtB,WAAW,CAACmC,GAAjB;AACE,aAAOb,KAAK,CAACc,GAAN,CAAUzB,MAAV,CAAP;;AACF,SAAKX,WAAW,CAACqC,IAAjB;AACE,aAAOf,KAAK,CAAC,CAAD,CAAL,KAAa,CAApB;;AACF,SAAKtB,WAAW,CAACsC,MAAjB;AACE,aAAO5C,MAAM,CAAC4B,KAAD,EAAQE,MAAR,CAAb;;AACF,SAAKxB,WAAW,CAACuC,SAAjB;AACE,aAAO7C,MAAM,CAAC4B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAOlB,KAAK,CAACmB,QAAN,EAAP;;AACF,SAAKzC,WAAW,CAAC0C,OAAjB;AACE,aAAOhD,MAAM,CAAC4B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO/B,YAAY,CAACU,KAAD,CAAnB;;AACF,SAAKtB,WAAW,CAAC4C,SAAjB;AACE,aAAOC,QAAQ,CAACvB,KAAD,EAAQ,IAAR,CAAf;;AACF,SAAKtB,WAAW,CAAC8C,WAAjB;AACE,aAAOxB,KAAK,CAACc,GAAN,CAAUW,CAAC,IAAIF,QAAQ,CAACE,CAAD,EAAI,IAAJ,CAAvB,CAAP;;AACF,SAAK/C,WAAW,CAACgD,SAAjB;AACE,aAAO1B,KAAP;;AACF,SAAKtB,WAAW,CAACiD,GAAjB;AACE,aAAO3B,KAAK,CAACmB,QAAN,CAAe,KAAf,CAAP;;AACF,SAAKzC,WAAW,CAACkD,eAAjB;AACE,aAAO5B,KAAK,CAACc,GAAN,CAAUW,CAAC,IAAIF,QAAQ,CAACE,CAAD,EAAI,IAAJ,CAAvB,CAAP;;AACF,SAAK/C,WAAW,CAACmD,SAAjB;AACE;AACA,aAAO,CAACzC,OAAO,CAACY,KAAD,CAAR,CAAP;;AACF,SAAKtB,WAAW,CAACoD,OAAjB;AACE,aAAO9B,KAAK,CAACc,GAAN,CAAUiB,CAAC,IAAI,IAAIpC,MAAJ,CAAWoC,CAAX,CAAf,CAAP;;AACF,SAAKrD,WAAW,CAACsD,cAAjB;AACE,cAAQ5C,OAAO,CAACY,KAAD,CAAf;AACE,aAAK,GAAL;AAAU,iBAAO,IAAP;;AACV,aAAK,GAAL;AAAU,iBAAO,OAAP;;AACV,aAAK,GAAL;AAAU,iBAAO,QAAP;;AACV;AAAS,iBAAOA,KAAP;AAJX;;AAMF,SAAKtB,WAAW,CAACuD,kBAAjB;AACE,aAAOjC,KAAK,CACTkC,MADI,CAEH,CAACC,GAAD;AAAA,YAAM,CAACC,OAAD,EAAUC,MAAV,EAAkBC,OAAlB,EAA2BC,OAA3B,CAAN;AAAA,eACG,EAAE,GAAGJ,GAAL;AAAU,WAACE,MAAM,CAAClB,QAAP,EAAD,GAAqB;AAAEiB,YAAAA,OAAF;AAAWE,YAAAA,OAAX;AAAoBC,YAAAA;AAApB;AAA/B,SADH;AAAA,OAFG,EAIH,EAJG,CAAP;;AAMF;AACE,aAAOvC,KAAP;AAvDJ;AAyDD;;AAED,SAASwC,cAAT,CAAyBxC,KAAzB,EAAgCC,IAAhC,EAAsCC,MAAtC,EAA8C;AAC5C,UAAQD,IAAR;AACE,SAAKvB,WAAW,CAACgC,MAAjB;AACA,SAAKhC,WAAW,CAACiC,GAAjB;AACE,aAAOnB,QAAQ,CAACQ,KAAD,CAAf;;AACF,SAAKtB,WAAW,CAACkC,EAAjB;AACE,aAAOrB,OAAO,CAACS,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAACmC,GAAjB;AACE,aAAOb,KAAK,CAACc,GAAN,CAAUvB,OAAV,CAAP;;AACF,SAAKb,WAAW,CAACqC,IAAjB;AACE,aAAOR,MAAM,CAACC,IAAP,CAAY,CAACR,KAAK,GAAG,CAAH,GAAO,CAAb,CAAZ,CAAP;;AACF,SAAKtB,WAAW,CAACsC,MAAjB;AACE,aAAO9C,MAAM,CAAC8B,KAAD,EAAQE,MAAR,CAAb;;AACF,SAAKxB,WAAW,CAACuC,SAAjB;AACE,aAAO/C,MAAM,CAAC8B,KAAD,EAAQ,IAAR,CAAb;;AACF,SAAKtB,WAAW,CAACiD,GAAjB;AACE,aAAOpB,MAAM,CAACC,IAAP,CAAYR,KAAZ,EAAmB,KAAnB,CAAP;;AACF,SAAKtB,WAAW,CAAC+D,UAAjB;AACE,aAAOzC,KAAK,CAACc,GAAN,CAAUP,MAAM,CAACC,IAAjB,CAAP;;AACF,SAAK9B,WAAW,CAAC0C,OAAjB;AACE,aAAO,OAAOpB,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,MAAwB,IAArD,GACHxE,MAAM,CAAC8B,KAAD,EAAQ,IAAR,CADH,GAEHN,OAAO,CAACM,KAAD,CAFX;;AAGF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAOxB,OAAO,CAACM,KAAD,CAAd;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO5B,aAAa,CAACO,KAAD,CAApB;;AACF,SAAKtB,WAAW,CAAC4C,SAAjB;AACE,aAAOtB,KAAK,CAAC2C,UAAN,IAAoB3C,KAA3B;;AACF,SAAKtB,WAAW,CAACoD,OAAjB;AACE,aAAO9B,KAAK,CAACc,GAAN,CAAUiB,CAAC,IAAIA,CAAC,CAACa,SAAF,EAAf,CAAP;;AACF,SAAKlE,WAAW,CAACyB,SAAjB;AACE,aAAOI,MAAM,CAACC,IAAP,CAAY,CAAC,GAAGd,OAAO,CAACM,KAAK,CAACM,SAAP,CAAX,EAA8B,CAA9B,EAAiC,GAAGZ,OAAO,CAACM,KAAK,CAACS,UAAP,CAA3C,CAAZ,CAAP;;AACF,SAAK/B,WAAW,CAACsD,cAAjB;AACE,cAAQhC,KAAR;AACE,aAAK,IAAL;AAAW,iBAAOR,QAAQ,CAAC,CAAD,CAAf;;AACX,aAAK,OAAL;AAAc,iBAAOA,QAAQ,CAAC,CAAD,CAAf;;AACd,aAAK,QAAL;AAAe,iBAAOA,QAAQ,CAAC,CAAD,CAAf;;AACf;AAAS,iBAAOQ,KAAP;AAJX;;AAMF;AACE,aAAOA,KAAP;AAxCJ;AA0CD;;AAED,SAAS6C,aAAT,CAAwB7C,KAAxB,EAA+B8C,GAA/B,EAAoC7C,IAApC,EAA0CC,MAA1C,EAAkD;AAChD,QAAM6C,MAAM,GAAG,CAACC,KAAD,EAAQC,MAAR,KAAmBD,KAAK,GAAG,EAAH,GAAQ;AAAE,KAACF,GAAD,GAAO5D,kBAAkB,CAACe,IAAD,CAAlB,CAAyBgD,MAAzB;AAAT,GAA/C,CADgD,CAEhD;;;AACA,MAAIjD,KAAK,KAAKkD,SAAV,IAAuBlD,KAAK,KAAK,IAArC,EAA2C,OAAO;AAAE,KAAC8C,GAAD,GAAO;AAAT,GAAP,CAHK,CAKhD;;AACA,UAAQ7C,IAAR;AACE,SAAKvB,WAAW,CAACgC,MAAjB;AACA,SAAKhC,WAAW,CAACiC,GAAjB;AAAsB;AACpB,cAAMwC,YAAY,GAAG,CAAC,CAACC,KAAK,CAACpD,KAAD,CAAN,IAAiB/B,SAAS,CAACoF,WAAV,CAAsBrD,KAAtB,CAAlB,KAAmD/B,SAAS,CAAC+B,KAAD,CAAT,CAAiBsD,EAAjB,CAAoB,CAApB,CAAxE;AACA,eAAOP,MAAM,CACX,CAAC,CAACK,KAAK,CAACpD,KAAD,CAAN,IAAiB/B,SAAS,CAACoF,WAAV,CAAsBrD,KAAtB,CAAlB,KAAmD/B,SAAS,CAAC+B,KAAD,CAAT,CAAiBuD,GAAjB,CAAqB,CAArB,CADxC,EAEX;AAAEvD,UAAAA,KAAF;AAASmD,UAAAA;AAAT,SAFW,CAAb;AAID;;AACD,SAAKzE,WAAW,CAACkC,EAAjB;AAAqB;AACnB,cAAM4C,QAAQ,GAAGC,KAAK,CAACC,OAAN,CAAcxD,MAAd,IAAwBA,MAAxB,GAAiC,CAACA,MAAD,CAAlD;AACA,cAAMyD,CAAC,GAAGH,QAAQ,CAACI,IAAT,CAAcD,CAAC,IAAIA,CAAC,KAAK3D,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAzB,CAAV;AACA,eAAOK,MAAM,CAACY,CAAC,IAAI/E,aAAa,CAACoB,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAD,CAAnB,EAA0C;AAAE1C,UAAAA,KAAF;AAASE,UAAAA;AAAT,SAA1C,CAAb;AACD;;AACD,SAAKxB,WAAW,CAACsC,MAAjB;AACE,aAAO+B,MAAM,CAAC/C,KAAK,CAAC0C,KAAN,CAAY,GAAZ,EAAiB,CAAjB,MAAwBxC,MAAzB,EAAiC;AAAEA,QAAAA,MAAF;AAAUF,QAAAA;AAAV,OAAjC,CAAb;;AACF,SAAKtB,WAAW,CAACwC,MAAjB;AACE,aAAO6B,MAAM,CAAC,IAAD,CAAb;;AACF,SAAKrE,WAAW,CAACyB,SAAjB;AACE,aAAO4C,MAAM,CAAC,OAAO/C,KAAP,KAAiB,QAAjB,IAA6B6D,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqChE,KAArC,EAA4C,YAA5C,CAA7B,IAA0F6D,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqChE,KAArC,EAA4C,WAA5C,CAA3F,CAAb;;AACF,SAAKtB,WAAW,CAAC2C,QAAjB;AACE,aAAO0B,MAAM,CAACU,KAAK,CAACC,OAAN,CAAc1D,KAAd,KAAwB,CAACA,KAAK,CAAC4D,IAAN,CAAWK,CAAC,IAAIA,CAAC,KAAKJ,MAAM,CAACI,CAAD,CAA5B,CAA1B,EAA4D;AAAEjE,QAAAA;AAAF,OAA5D,CAAb;;AACF;AACE,aAAO,EAAP;AAvBJ;AAyBD;;AAED,SAASkE,eAAT,CAA0BjB,MAA1B,EAAkCkB,MAAlC,EAAiE;AAAA,MAAvB;AAAEC,IAAAA;AAAF,GAAuB,uEAAJ,EAAI;AAC/DnB,EAAAA,MAAM,GAAGkB,MAAM,CACZE,MADM,CACC;AAAA,QAAC,CAACC,CAAD,EAAIvC,CAAJ,CAAD;AAAA,WAAYA,CAAC,KAAKrD,WAAW,CAACgC,MAA9B;AAAA,GADD,EAENwB,MAFM,CAGL,CAACC,GAAD;AAAA,QAAM,CAACW,GAAD,CAAN;AAAA,WAAiB,EAAE,GAAGG,MAAL;AAAa,OAACH,GAAD,GAAOvE,YAAY,CAAC0E,MAAM,CAACH,GAAD,CAAP,EAAc;AAAEsB,QAAAA;AAAF,OAAd;AAAhC,KAAjB;AAAA,GAHK,EAILnB,MAJK,CAAT;AAMA,QAAMsB,UAAU,GAAGJ,MAAM,CAACrD,GAAP,CAAW;AAAA,QAAC,CAAC0D,CAAD,CAAD;AAAA,WAASA,CAAT;AAAA,GAAX,CAAnB;AACA,SAAOX,MAAM,CACVY,OADI,CACIxB,MADJ,EAEJf,MAFI,CAGH,CAACC,GAAD,YAAuB;AAAA,QAAjB,CAACW,GAAD,EAAM9C,KAAN,CAAiB;AACrB,QAAIuE,UAAU,CAACG,QAAX,CAAoB5B,GAApB,CAAJ,EAA8BX,GAAG,CAACW,GAAD,CAAH,GAAW9C,KAAX;;AAC9B,QAAI,CAAC,WAAD,EAAc,UAAd,EAA0B,aAA1B,EAAyC0E,QAAzC,CAAkD5B,GAAlD,CAAJ,EAA4D;AAC1DX,MAAAA,GAAG,CAAE,GAAEW,GAAI,MAAR,CAAH,GAAoB9C,KAAK,CAACC,IAAN,KAAeL,gBAAgB,CAACC,KAAhC,GAAwC,CAAxC,GAA4C,CAAhE;AACAsC,MAAAA,GAAG,CAAE,GAAEW,GAAI,OAAR,CAAH,GAAqB9C,KAAK,CAACA,KAA3B;AACD;;AACD,WAAOmC,GAAP;AACD,GAVE,EAWH,EAXG,CAAP;AAaD,C,CAED;;;AAEA,SAASwC,oBAAT,CAA+B1B,MAA/B,EAAuC2B,MAAvC,EAA+C;AAC7C,QAAMC,MAAM,GAAG;AACb,KAAC5F,OAAO,CAAC6F,cAAT,GAA0B,WADb;AAEb,KAAC7F,OAAO,CAAC8F,YAAT,GAAwB,WAFX;AAGb,KAAC9F,OAAO,CAAC+F,WAAT,GAAuB,UAHV;AAIb,KAAC/F,OAAO,CAACgG,cAAT,GAA0B;AAJb,IAKbL,MALa,CAAf;;AAOA,MAAI3B,MAAM,CAAC4B,MAAD,CAAN,IAAkB5B,MAAM,CAAE,GAAE4B,MAAO,OAAX,CAA5B,EAAgD;AAC9C,WAAO5B,MAAM,CAAE,GAAE4B,MAAO,OAAX,CAAN,IAA4B5B,MAAM,CAAC4B,MAAD,CAAN,CAAe7E,KAAlD;AACD;;AACD,SAAO,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASkF,eAAT,CAA0BN,MAA1B,SAA4D;AAAA,MAA1B;AAAEO,IAAAA,GAAG,GAAG,CAAR;AAAWlC,IAAAA,MAAX;AAAmBmC,IAAAA;AAAnB,GAA0B;AACjE,QAAMC,UAAU,GAAGpH,SAAS,CAAC,GAAD,CAA5B,CADiE,CAC/B;;AAClC,MAAI,CAACgF,MAAL,EAAa,OAAOhF,SAAS,CAACQ,WAAD,CAAT,CAAuB6G,KAAvB,CAA6BD,UAA7B,EAAyClE,QAAzC,CAAkD,EAAlD,CAAP;AAEb,MAAIoE,SAAS,GAAGC,QAAQ,CAACZ,MAAD,EAAS;AAAE3B,IAAAA,MAAM,EAAE,EAAE,GAAGA,MAAL;AAAawC,MAAAA,GAAG,EAAE;AAAlB,KAAV;AAAiCJ,IAAAA,UAAjC;AAA6CF,IAAAA,GAA7C;AAAkDC,IAAAA;AAAlD,GAAT,CAAxB;AACA,MAAIM,QAAQ,GAAGzH,SAAS,CAAC,CAAD,CAAxB;;AAEA,SAAO,CAACsH,SAAS,CAACI,EAAV,CAAaD,QAAb,CAAR,EAAgC;AAC9BH,IAAAA,SAAS,GAAGC,QAAQ,CAACZ,MAAD,EAAS;AAAE3B,MAAAA,MAAM,EAAE,EAAE,GAAGA,MAAL;AAAawC,QAAAA,GAAG,EAAEF;AAAlB,OAAV;AAAyCF,MAAAA,UAAzC;AAAqDF,MAAAA,GAArD;AAA0DC,MAAAA;AAA1D,KAAT,CAApB;AACAM,IAAAA,QAAQ,GAAGH,SAAX;AACD;;AACD,SAAOG,QAAQ,CAACvE,QAAT,CAAkB,EAAlB,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASqE,QAAT,CAAmBZ,MAAnB,SAAiE;AAAA,MAAtC;AAAE3B,IAAAA,MAAF;AAAUkC,IAAAA,GAAG,GAAG,CAAhB;AAAmBE,IAAAA,UAAnB;AAA+BD,IAAAA;AAA/B,GAAsC;AAC/D,QAAM;AAAEzC,IAAAA,UAAU,EAAEiD;AAAd,MAA+BC,OAAO,CAAC,EAAE,GAAG5C;AAAL,GAAD,EAAgB2B,MAAhB,EAAwB;AAAEQ,IAAAA;AAAF,GAAxB,CAA5C;AACA,QAAMU,MAAM,GAAGF,YAAY,CAACG,MAA5B;AACA,SAAOjH,eAAe,CAAC8F,MAAD,CAAf,CACJoB,IADI,CACCjH,gBAAgB,CAAC6F,MAAD,EAASkB,MAAT,EAAiB;AACrCG,IAAAA,WAAW,EAAEtB,oBAAoB,CAAC1B,MAAD,EAAS2B,MAAT,CADI;AAErCsB,IAAAA,WAAW,EAAE,CAACjH,OAAO,CAACkH,MAAT,EAAiBlH,OAAO,CAACmH,SAAzB,EAAoC1B,QAApC,CAA6CE,MAA7C,IACT3B,MAAM,CAACoD,EAAP,CAAUA,EAAV,CAAaC,SAAb,CAAuB3D,UAAvB,CAAkCoD,MADzB,GAET;AAJiC,GAAjB,CADjB,EAOJT,KAPI,CAOED,UAPF,CAAP;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASkB,YAAT,GAA2F;AAAA,MAApEd,GAAoE,uEAA9D,CAA8D;AAAA,MAA3Db,MAA2D;AAAA,MAAnD;AAAEO,IAAAA,GAAG,GAAG,CAAR;AAAWlC,IAAAA,MAAX;AAAmBuD,IAAAA,WAAW,GAAG,IAAjC;AAAuCpB,IAAAA;AAAvC,GAAmD,uEAAJ,EAAI;AAChG,MAAI,CAACnC,MAAD,IAAWuD,WAAf,EAA4BC,OAAO,CAACC,IAAR,CAAc,wDAAuDjI,WAAY,GAAjF;AAE5B,SAAOgH,GAAG,IAAIP,eAAe,CAACN,MAAD,EAAS;AAAE3B,IAAAA,MAAF;AAAUkC,IAAAA,GAAV;AAAeC,IAAAA;AAAf,GAAT,CAA7B;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASuB,cAAT,CAAyB1D,MAAzB,EAAiCkB,MAAjC,SAA+D;AAAA,MAAtB;AAAEyC,IAAAA,WAAW,GAAG;AAAhB,GAAsB;AACpE,SAAOzC,MAAM,CACVE,MADI,CACG;AAAA,QAAC,CAACvB,GAAD,CAAD;AAAA,WAAW,CAAC8D,WAAW,CAAClC,QAAZ,CAAqB5B,GAArB,CAAD,IAA8BA,GAAG,KAAK,SAAjD;AAAA,GADH,EAEJZ,MAFI,CAGH,CAACC,GAAD;AAAA,QAAM,CAACW,GAAD,EAAM7C,IAAN,EAAYC,MAAZ,CAAN;AAAA,WAA8B2D,MAAM,CAACgD,MAAP,CAC5B1E,GAD4B,EACvBU,aAAa,CAACI,MAAM,CAACH,GAAD,CAAP,EAAcA,GAAd,EAAmB7C,IAAnB,EAAyBC,MAAzB,CADU,CAA9B;AAAA,GAHG,EAMH,EANG,CAAP;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS4G,UAAT,CACL7D,MADK,EAELkB,MAFK,EAIL;AAAA,MADA;AAAEyC,IAAAA,WAAW,GAAG,EAAhB;AAAoBxC,IAAAA,YAAY,GAAG9F,iBAAiB,CAACyI;AAArD,GACA,uEADgE,EAChE;AACA,QAAMC,cAAc,GAAG7C,MAAM,CAACE,MAAP,CAAc;AAAA,QAAC,CAACvB,GAAD,CAAD;AAAA,WAAW,CAAC8D,WAAW,CAAClC,QAAZ,CAAqB5B,GAArB,CAAZ;AAAA,GAAd,CAAvB,CADA,CAGA;;AACAG,EAAAA,MAAM,GAAGiB,eAAe,CAACjB,MAAD,EAAS+D,cAAT,EAAyB;AAAE5C,IAAAA;AAAF,GAAzB,CAAxB,CAJA,CAKA;;AACA,QAAMpB,KAAK,GAAG2D,cAAc,CAAC1D,MAAD,EAASkB,MAAT,EAAiB;AAAEyC,IAAAA;AAAF,GAAjB,CAA5B;;AACA,MAAI/C,MAAM,CAACoD,IAAP,CAAYjE,KAAZ,EAAmB+C,MAAvB,EAA+B;AAC7B,UAAM,IAAImB,KAAJ,CAAU,8BAA8BC,IAAI,CAACC,SAAL,CAAepE,KAAf,CAAxC,CAAN;AACD;;AAED,SAAOgE,cAAc,CAClBlG,GADI,CACA;AAAA,QAAC,CAACgC,GAAD,EAAMuE,SAAN,EAAiBnH,MAAjB,CAAD;AAAA,WAA8BsC,cAAc,CAACS,MAAM,CAACH,GAAD,CAAP,EAAcuE,SAAd,EAAyBnH,MAAzB,CAA5C;AAAA,GADA,CAAP;AAED;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASoH,WAAT,CAAsBtG,MAAtB,EAA8BmD,MAA9B,EAAsC;AAC3C,SAAOA,MAAM,CACVjC,MADI,CAEH,CACEC,GADF,UAGEoF,KAHF;AAAA,QAEE,CAACzE,GAAD,EAAMuE,SAAN,EAAiBnH,MAAjB,CAFF;AAAA,WAIK2D,MAAM,CAACgD,MAAP,CAAc1E,GAAd,EAAmB;AAAE,OAACW,GAAD,GAAO/C,gBAAgB,CAACiB,MAAM,CAACuG,KAAD,CAAP,EAAgBF,SAAhB,EAA2BnH,MAA3B;AAAzB,KAAnB,CAJL;AAAA,GAFG,EAOH,EAPG,CAAP;AASD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMsH,SAAS,GAAG,UAA0B;AAAA,MAAzB;AAAEpC,IAAAA,GAAF;AAAOqC,IAAAA,KAAP;AAAcxH,IAAAA;AAAd,GAAyB;AAC1C,QAAMyH,aAAa,GAAG,CAAC,CAACD,KAAxB;AACA,QAAME,QAAQ,GAAGD,aAAa,GAAGD,KAAH,GAAWxH,IAAzC;AACA,QAAMkE,MAAM,GAAGuD,aAAa,GAAG7I,yBAAH,GAA+BG,uBAA3D;;AAEA,MAAI,CAACmF,MAAM,CAACwD,QAAD,CAAX,EAAuB;AACrB,UAAM,IAAIT,KAAJ,CAAW,eAAcQ,aAAa,GAAG,iBAAH,GAAuB,eAAgB,wBAAuBA,aAAa,GAAG,SAASD,KAAZ,GAAoBxH,IAAK,EAA1I,CAAN;AACD;;AACD,MAAI,CAACkE,MAAM,CAACwD,QAAD,CAAN,CAAiBvC,GAAjB,CAAL,EAA4B;AAC1B,UAAM,IAAI8B,KAAJ,CAAW,eAAcQ,aAAa,GAAG,iBAAH,GAAuB,eAAgB,wBAAuBA,aAAa,GAAG,SAASD,KAAZ,GAAoBxH,IAAK,YAAWmF,GAAI,EAAzJ,CAAN;AACD;;AACD,SAAOjB,MAAM,CAACwD,QAAD,CAAN,CAAiBvC,GAAjB,CAAP;AACD,CAZD;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASS,OAAT,CACL5C,MADK,EAELhD,IAFK,EAIL;AAAA,MADA;AAAE2G,IAAAA,WAAW,GAAG,EAAhB;AAAoB1G,IAAAA,MAAM,GAAG,IAA7B;AAAmCkF,IAAAA,GAAG,GAAGjG,GAAzC;AAA8CiF,IAAAA,YAAY,GAAG9F,iBAAiB,CAACyI;AAA/E,GACA,uEAD0F,EAC1F;AACA,QAAM,CAAC5C,MAAD,EAASyD,GAAT,IAAgBJ,SAAS,CAAC;AAAEvH,IAAAA,IAAF;AAAQmF,IAAAA;AAAR,GAAD,CAA/B;AACA,QAAMpE,MAAM,GAAG8F,UAAU,CACvB,EAAE,GAAG7D,MAAL;AAAa9D,IAAAA,GAAG,EAAEiG,GAAlB;AAAuBwC,IAAAA;AAAvB,GADuB,EAEvBzD,MAFuB,EAGvB;AAAEyC,IAAAA,WAAF;AAAexC,IAAAA,YAAY,EAAEnB,MAAM,CAACmB,YAAP,IAAuBA;AAApD,GAHuB,CAAV,CAIbC,MAJa,CAINJ,CAAC,IAAIA,CAAC,KAAKf,SAJL,CAAf;AAMA,QAAMP,UAAU,GAAGtE,SAAS,CAAC2C,MAAD,CAA5B;AACA,QAAMqF,EAAE,GAAGjI,MAAM,CAACuE,UAAD,EAAazC,MAAb,CAAjB;AAEA,SAAO;AAAEmG,IAAAA,EAAF;AAAM1D,IAAAA,UAAN;AAAkB3B,IAAAA,MAAlB;AAA0B6G,IAAAA,QAAQ,EAAEP,WAAW,CAACtG,MAAD,EAASmD,MAAT;AAA/C,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS5C,QAAT,CAAmB+E,SAAnB,EAAoE;AAAA,MAAtCwB,aAAsC,uEAAtB,KAAsB;AAAA,MAAf5H,MAAe,uEAAN,IAAM;AACzE,QAAMyC,UAAU,GAAGmF,aAAa,GAAGxB,SAAH,GAAepI,MAAM,CAACoI,SAAD,EAAYpG,MAAZ,CAArD;AACA,QAAMc,MAAM,GAAG7C,SAAS,CAACwE,UAAD,CAAxB;AAEA,QAAM8E,KAAK,GAAGrI,OAAO,CAAC4B,MAAM,CAAC,CAAD,CAAP,CAArB;AACA,QAAMoE,GAAG,GAAGhG,OAAO,CAAC4B,MAAM,CAAC,CAAD,CAAP,CAAnB;AACA,QAAM,CAACmD,MAAD,IAAWqD,SAAS,CAAC;AAAEC,IAAAA,KAAF;AAASrC,IAAAA;AAAT,GAAD,CAA1B;AAEA,SAAO;AAAER,IAAAA,MAAM,EAAEjG,iBAAiB,CAAC8I,KAAD,CAA3B;AAAoCpB,IAAAA,EAAE,EAAEiB,WAAW,CAACtG,MAAD,EAASmD,MAAT,CAAnD;AAAqExB,IAAAA,UAArE;AAAiF3B,IAAAA;AAAjF,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS+G,WAAT,CAAsBC,KAAtB,EAA6B;AAClC,QAAMC,IAAI,GAAG,OAAOD,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACE,UAAN,CAAiB,KAAjB,CAA7B,GAAuDhK,MAAM,CAAC8J,KAAD,EAAQ,IAAR,CAA7D,GAA6EA,KAA1F;AACA,SAAO5J,MAAM,CAACI,IAAI,CAACyJ,IAAD,CAAL,EAAa,IAAb,CAAb;AACD;AAED,eAAe;AACb/C,EAAAA,eADa;AAEbqB,EAAAA,YAFa;AAGbhF,EAAAA,QAHa;AAIb+F,EAAAA,WAJa;AAKbzB,EAAAA,OALa;AAMbiB,EAAAA,UANa;AAObH,EAAAA,cAPa;AAQboB,EAAAA;AARa,CAAf","sourcesContent":["import BigNumber from 'bignumber.js'\nimport { decode as rlpDecode, encode as rlpEncode } from 'rlp'\nimport { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'\nimport { hash } from '../../utils/crypto'\n\nimport {\n DEFAULT_FEE,\n FIELD_TYPES,\n OBJECT_ID_TX_TYPE,\n PREFIX_ID_TAG,\n TX_DESERIALIZATION_SCHEMA,\n TX_FEE_BASE_GAS,\n TX_FEE_OTHER_GAS,\n TX_SERIALIZATION_SCHEMA,\n TX_TYPE,\n VALIDATION_MESSAGE,\n VSN\n} from './schema'\nimport {\n readInt,\n readId,\n readPointers,\n writeId,\n writeInt,\n buildPointers,\n encode,\n decode\n} from './helpers'\nimport { toBytes } from '../../utils/bytes'\nimport MPTree from '../../utils/mptree'\n\n/**\n * JavaScript-based Transaction builder\n * @module @aeternity/aepp-sdk/es/tx/builder\n * @export TxBuilder\n * @example import { TxBuilder } from '@aeternity/aepp-sdk'\n */\n\nconst ORACLE_TTL_TYPES = {\n delta: 'delta',\n block: 'block'\n}\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField (value, type, prefix) {\n if (!value) return ''\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value\n return { vmVersion: readInt(Buffer.from([vm])), abiVersion: readInt(Buffer.from([abi])) }\n }\n case FIELD_TYPES.amount:\n return readInt(value)\n case FIELD_TYPES.int:\n return readInt(value)\n case FIELD_TYPES.id:\n return readId(value)\n case FIELD_TYPES.ids:\n return value.map(readId)\n case FIELD_TYPES.bool:\n return value[0] === 1\n case FIELD_TYPES.binary:\n return encode(value, prefix)\n case FIELD_TYPES.stateTree:\n return encode(value, 'ss')\n case FIELD_TYPES.string:\n return value.toString()\n case FIELD_TYPES.payload:\n return encode(value, 'ba')\n case FIELD_TYPES.pointers:\n return readPointers(value)\n case FIELD_TYPES.rlpBinary:\n return unpackTx(value, true)\n case FIELD_TYPES.rlpBinaries:\n return value.map(v => unpackTx(v, true))\n case FIELD_TYPES.rawBinary:\n return value\n case FIELD_TYPES.hex:\n return value.toString('hex')\n case FIELD_TYPES.offChainUpdates:\n return value.map(v => unpackTx(v, true))\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)]\n case FIELD_TYPES.mptrees:\n return value.map(t => new MPTree(t))\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0': return 'ok'\n case '1': return 'error'\n case '2': return 'revert'\n default: return value\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value\n .reduce(\n (acc, [funHash, fnName, argType, outType]) =>\n ({ ...acc, [fnName.toString()]: { funHash, argType, outType } }),\n {}\n )\n default:\n return value\n }\n}\n\nfunction serializeField (value, type, prefix) {\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n return writeInt(value)\n case FIELD_TYPES.id:\n return writeId(value)\n case FIELD_TYPES.ids:\n return value.map(writeId)\n case FIELD_TYPES.bool:\n return Buffer.from([value ? 1 : 0])\n case FIELD_TYPES.binary:\n return decode(value, prefix)\n case FIELD_TYPES.stateTree:\n return decode(value, 'ss')\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex')\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from)\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value, 'ba')\n : toBytes(value)\n case FIELD_TYPES.string:\n return toBytes(value)\n case FIELD_TYPES.pointers:\n return buildPointers(value)\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value\n case FIELD_TYPES.mptrees:\n return value.map(t => t.serialize())\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0)\n case 'error': return writeInt(1)\n case 'revert': return writeInt(2)\n default: return value\n }\n default:\n return value\n }\n}\n\nfunction validateField (value, key, type, prefix) {\n const assert = (valid, params) => valid ? {} : { [key]: VALIDATION_MESSAGE[type](params) }\n // All fields are required\n if (value === undefined || value === null) return { [key]: 'Field is required' }\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int: {\n const isMinusValue = (!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).lt(0)\n return assert(\n (!isNaN(value) || BigNumber.isBigNumber(value)) && BigNumber(value).gte(0),\n { value, isMinusValue }\n )\n }\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n const p = prefixes.find(p => p === value.split('_')[0])\n return assert(p && PREFIX_ID_TAG[value.split('_')[0]], { value, prefix })\n }\n case FIELD_TYPES.binary:\n return assert(value.split('_')[0] === prefix, { prefix, value })\n case FIELD_TYPES.string:\n return assert(true)\n case FIELD_TYPES.ctVersion:\n return assert(typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, 'abiVersion') && Object.prototype.hasOwnProperty.call(value, 'vmVersion'))\n case FIELD_TYPES.pointers:\n return assert(Array.isArray(value) && !value.find(e => e !== Object(e)), { value })\n default:\n return {}\n }\n}\n\nfunction transformParams (params, schema, { denomination } = {}) {\n params = schema\n .filter(([_, t]) => t === FIELD_TYPES.amount)\n .reduce(\n (acc, [key]) => ({ ...params, [key]: formatAmount(params[key], { denomination }) }),\n params\n )\n const schemaKeys = schema.map(([k]) => k)\n return Object\n .entries(params)\n .reduce(\n (acc, [key, value]) => {\n if (schemaKeys.includes(key)) acc[key] = value\n if (['oracleTtl', 'queryTtl', 'responseTtl'].includes(key)) {\n acc[`${key}Type`] = value.type === ORACLE_TTL_TYPES.delta ? 0 : 1\n acc[`${key}Value`] = value.value\n }\n return acc\n },\n {}\n )\n}\n\n// INTERFACE\n\nfunction getOracleRelativeTtl (params, txType) {\n const ttlKey = {\n [TX_TYPE.oracleRegister]: 'oracleTtl',\n [TX_TYPE.oracleExtend]: 'oracleTtl',\n [TX_TYPE.oracleQuery]: 'queryTtl',\n [TX_TYPE.oracleResponse]: 'responseTtl'\n }[txType]\n\n if (params[ttlKey] || params[`${ttlKey}Value`]) {\n return params[`${ttlKey}Value`] || params[ttlKey].value\n }\n return 1\n}\n\n/**\n * Calculate min fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder/index\n * @rtype (txType, { gas = 0, params }) => String\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateMinFee('spendTx', { gas, params })\n */\nexport function calculateMinFee (txType, { gas = 0, params, vsn }) {\n const multiplier = BigNumber(1e9) // 10^9 GAS_PRICE\n if (!params) return BigNumber(DEFAULT_FEE).times(multiplier).toString(10)\n\n let actualFee = buildFee(txType, { params: { ...params, fee: 0 }, multiplier, gas, vsn })\n let expected = BigNumber(0)\n\n while (!actualFee.eq(expected)) {\n actualFee = buildFee(txType, { params: { ...params, fee: actualFee }, multiplier, gas, vsn })\n expected = actualFee\n }\n return expected.toString(10)\n}\n\n/**\n * Calculate fee based on tx type and params\n * @param txType\n * @param params\n * @param gas\n * @param multiplier\n * @param vsn\n * @return {BigNumber}\n */\nfunction buildFee (txType, { params, gas = 0, multiplier, vsn }) {\n const { rlpEncoded: txWithOutFee } = buildTx({ ...params }, txType, { vsn })\n const txSize = txWithOutFee.length\n return TX_FEE_BASE_GAS(txType)\n .plus(TX_FEE_OTHER_GAS(txType, txSize, {\n relativeTtl: getOracleRelativeTtl(params, txType),\n innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)\n ? params.tx.tx.encodedTx.rlpEncoded.length\n : 0\n }))\n .times(multiplier)\n}\n\n/**\n * Calculate fee\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @rtype (fee, txType, gas = 0) => String\n * @param {String|Number} fee - fee\n * @param {String} txType - Transaction type\n * @param {Options} options - Options object\n * @param {String|Number} options.gas - Gas amount\n * @param {Object} options.params - Tx params\n * @return {String|Number}\n * @example calculateFee(null, 'spendTx', { gas, params })\n */\nexport function calculateFee (fee = 0, txType, { gas = 0, params, showWarning = true, vsn } = {}) {\n if (!params && showWarning) console.warn(`Can't build transaction fee, we will use DEFAULT_FEE(${DEFAULT_FEE})`)\n\n return fee || calculateMinFee(txType, { params, gas, vsn })\n}\n\n/**\n * Validate transaction params\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Array} excludeKeys Array of keys to exclude for validation\n * @return {Object} Object with validation errors\n */\nexport function validateParams (params, schema, { excludeKeys = [] }) {\n return schema\n .filter(([key]) => !excludeKeys.includes(key) && key !== 'payload')\n .reduce(\n (acc, [key, type, prefix]) => Object.assign(\n acc, validateField(params[key], key, type, prefix)\n ),\n {}\n )\n}\n\n/**\n * Build binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {Array} schema Transaction schema\n * @param {Object} [options={}] options\n * @param {String[]} [options.excludeKeys=[]] Array of keys to exclude for validation and build\n * @param {String} [options.denomination='aettos'] Denomination of amounts\n * @throws {Error} Validation error\n * @return {Array} Array with binary fields of transaction\n */\nexport function buildRawTx (\n params,\n schema,\n { excludeKeys = [], denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n) {\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))\n\n // Transform `amount` type fields to `aettos`\n params = transformParams(params, filteredSchema, { denomination })\n // Validation\n const valid = validateParams(params, schema, { excludeKeys })\n if (Object.keys(valid).length) {\n throw new Error('Transaction build error. ' + JSON.stringify(valid))\n }\n\n return filteredSchema\n .map(([key, fieldType, prefix]) => serializeField(params[key], fieldType, prefix))\n}\n\n/**\n * Unpack binary transaction\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Array} binary Array with binary transaction field's\n * @param {Array} schema Transaction schema\n * @return {Object} Object with transaction field's\n */\nexport function unpackRawTx (binary, schema) {\n return schema\n .reduce(\n (\n acc,\n [key, fieldType, prefix],\n index\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {}\n )\n}\n\n/**\n * Get transaction serialization/deserialization schema\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {{ vsn: String, objId: Number, type: String }}\n * @throws {Error} Schema not found error\n * @return {Object} Schema\n */\nconst getSchema = ({ vsn, objId, type }) => {\n const isDeserialize = !!objId\n const firstKey = isDeserialize ? objId : type\n const schema = isDeserialize ? TX_DESERIALIZATION_SCHEMA : TX_SERIALIZATION_SCHEMA\n\n if (!schema[firstKey]) {\n throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`)\n }\n if (!schema[firstKey][vsn]) {\n throw new Error(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`)\n }\n return schema[firstKey][vsn]\n}\n\n/**\n * Build transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {Object} params Object with tx params\n * @param {String} type Transaction type\n * @param {Object} [options={}] options\n * @param {String[]} [options.excludeKeys] Array of keys to exclude for validation and build\n * @param {String} [options.prefix] Prefix of transaction\n * @throws {Error} Validation error\n * @returns {Object} object\n * @returns {String} object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns {Buffer} object.rlpEncoded rlp encoded transaction\n * @returns {Array<Buffer>} object.binary binary transaction\n */\nexport function buildTx (\n params,\n type,\n { excludeKeys = [], prefix = 'tx', vsn = VSN, denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n) {\n const [schema, tag] = getSchema({ type, vsn })\n const binary = buildRawTx(\n { ...params, VSN: vsn, tag },\n schema,\n { excludeKeys, denomination: params.denomination || denomination }\n ).filter(e => e !== undefined)\n\n const rlpEncoded = rlpEncode(binary)\n const tx = encode(rlpEncoded, prefix)\n\n return { tx, rlpEncoded, binary, txObject: unpackRawTx(binary, schema) }\n}\n\n/**\n * Unpack transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String|Buffer} encodedTx String or RLP encoded transaction array\n * (if fromRlpBinary flag is true)\n * @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)\n * @param {String} prefix - Prefix of data\n * @returns {Object} object\n * @returns {Object} object.tx Object with transaction param's\n * @returns {Buffer} object.rlpEncoded rlp encoded transaction\n * @returns {Array<Buffer>} object.binary binary transaction\n */\nexport function unpackTx (encodedTx, fromRlpBinary = false, prefix = 'tx') {\n const rlpEncoded = fromRlpBinary ? encodedTx : decode(encodedTx, prefix)\n const binary = rlpDecode(rlpEncoded)\n\n const objId = readInt(binary[0])\n const vsn = readInt(binary[1])\n const [schema] = getSchema({ objId, vsn })\n\n return { txType: OBJECT_ID_TX_TYPE[objId], tx: unpackRawTx(binary, schema), rlpEncoded, binary }\n}\n\n/**\n * Build a transaction hash\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/builder\n * @param {String | Buffer} rawTx base64 or rlp encoded transaction\n * @return {String} Transaction hash\n */\nexport function buildTxHash (rawTx) {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx, 'tx') : rawTx\n return encode(hash(data), 'th')\n}\n\nexport default {\n calculateMinFee,\n calculateFee,\n unpackTx,\n unpackRawTx,\n buildTx,\n buildRawTx,\n validateParams,\n buildTxHash\n}\n"],"file":"index.js"}
|
package/es/tx/builder/schema.js
CHANGED
|
@@ -51,12 +51,12 @@ export const NAME_FEE_BID_INCREMENT = 0.05; // # the increment is in percentage
|
|
|
51
51
|
// # see https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L272
|
|
52
52
|
|
|
53
53
|
export const NAME_BID_TIMEOUT_BLOCKS = 480; // # ~1 day
|
|
54
|
+
// # this is the max length for a domain that requires a base fee to be paid
|
|
54
55
|
|
|
55
|
-
export const NAME_MAX_LENGTH_FEE = 31;
|
|
56
|
-
|
|
56
|
+
export const NAME_MAX_LENGTH_FEE = 31;
|
|
57
57
|
export const NAME_BID_MAX_LENGTH = 12; // # this is the max length for a domain to be part of a bid
|
|
58
58
|
|
|
59
|
-
export const
|
|
59
|
+
export const POINTER_KEY_BY_PREFIX = {
|
|
60
60
|
ak: 'account_pubkey',
|
|
61
61
|
ok: 'oracle_pubkey',
|
|
62
62
|
ct: 'contract_pubkey',
|
|
@@ -494,7 +494,8 @@ const GA_META_TX_2 = [...BASE_TX, TX_FIELD('gaId', FIELD_TYPES.id, 'ak'), TX_FIE
|
|
|
494
494
|
const PAYING_FOR_TX = [...BASE_TX, TX_FIELD('payerId', FIELD_TYPES.id, 'ak'), TX_FIELD('nonce', FIELD_TYPES.int), TX_FIELD('fee', FIELD_TYPES.int), TX_FIELD('tx', FIELD_TYPES.rlpBinary)];
|
|
495
495
|
const CONTRACT_CREATE_TX = [...BASE_TX, TX_FIELD('ownerId', FIELD_TYPES.id, 'ak'), TX_FIELD('nonce', FIELD_TYPES.int), TX_FIELD('code', FIELD_TYPES.binary, 'cb'), TX_FIELD('ctVersion', FIELD_TYPES.ctVersion), TX_FIELD('fee', FIELD_TYPES.int), TX_FIELD('ttl', FIELD_TYPES.int), TX_FIELD('deposit', FIELD_TYPES.amount), TX_FIELD('amount', FIELD_TYPES.amount), TX_FIELD('gas', FIELD_TYPES.int), TX_FIELD('gasPrice', FIELD_TYPES.int), TX_FIELD('callData', FIELD_TYPES.binary, 'cb')];
|
|
496
496
|
const CONTRACT_CALL_TX = [...BASE_TX, TX_FIELD('callerId', FIELD_TYPES.id, 'ak'), TX_FIELD('nonce', FIELD_TYPES.int), TX_FIELD('contractId', FIELD_TYPES.id, ['ct', 'nm']), TX_FIELD('abiVersion', FIELD_TYPES.int), TX_FIELD('fee', FIELD_TYPES.int), TX_FIELD('ttl', FIELD_TYPES.int), TX_FIELD('amount', FIELD_TYPES.amount), TX_FIELD('gas', FIELD_TYPES.int), TX_FIELD('gasPrice', FIELD_TYPES.int), TX_FIELD('callData', FIELD_TYPES.binary, 'cb')];
|
|
497
|
-
const CONTRACT_CALL_RESULT_TX = [...BASE_TX, TX_FIELD('callerId', FIELD_TYPES.id, 'ak'), TX_FIELD('callerNonce', FIELD_TYPES.int), TX_FIELD('height', FIELD_TYPES.int), TX_FIELD('contractId', FIELD_TYPES.id, 'ct'), TX_FIELD('gasPrice', FIELD_TYPES.int), TX_FIELD('gasUsed', FIELD_TYPES.int), TX_FIELD('returnValue', FIELD_TYPES.binary, 'cb'), TX_FIELD('returnType', FIELD_TYPES.callReturnType), // TODO: add serialization for
|
|
497
|
+
const CONTRACT_CALL_RESULT_TX = [...BASE_TX, TX_FIELD('callerId', FIELD_TYPES.id, 'ak'), TX_FIELD('callerNonce', FIELD_TYPES.int), TX_FIELD('height', FIELD_TYPES.int), TX_FIELD('contractId', FIELD_TYPES.id, 'ct'), TX_FIELD('gasPrice', FIELD_TYPES.int), TX_FIELD('gasUsed', FIELD_TYPES.int), TX_FIELD('returnValue', FIELD_TYPES.binary, 'cb'), TX_FIELD('returnType', FIELD_TYPES.callReturnType), // TODO: add serialization for
|
|
498
|
+
// <log> :: [ { <address> :: id, [ <topics> :: binary() ], <data> :: binary() } ]
|
|
498
499
|
TX_FIELD('log', FIELD_TYPES.rawBinary)];
|
|
499
500
|
const ORACLE_REGISTER_TX = [...BASE_TX, TX_FIELD('accountId', FIELD_TYPES.id, 'ak'), TX_FIELD('nonce', FIELD_TYPES.int), TX_FIELD('queryFormat', FIELD_TYPES.string), TX_FIELD('responseFormat', FIELD_TYPES.string), TX_FIELD('queryFee', FIELD_TYPES.amount), TX_FIELD('oracleTtlType', FIELD_TYPES.int), TX_FIELD('oracleTtlValue', FIELD_TYPES.int), TX_FIELD('fee', FIELD_TYPES.int), TX_FIELD('ttl', FIELD_TYPES.int), TX_FIELD('abiVersion', FIELD_TYPES.int)];
|
|
500
501
|
const ORACLE_EXTEND_TX = [...BASE_TX, TX_FIELD('oracleId', FIELD_TYPES.id, ['ok', 'nm']), TX_FIELD('nonce', FIELD_TYPES.int), TX_FIELD('oracleTtlType', FIELD_TYPES.int), TX_FIELD('oracleTtlValue', FIELD_TYPES.int), TX_FIELD('fee', FIELD_TYPES.int), TX_FIELD('ttl', FIELD_TYPES.int)];
|