@aeternity/aepp-sdk 13.3.1 → 13.3.2
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/bin/aesophia_cli_8 +0 -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 +36 -43
- package/dist/aepp-sdk.js.map +1 -1
- package/es/chain.d.ts +5 -5
- package/es/chain.mjs +18 -20
- package/es/chain.mjs.map +1 -1
- package/es/contract/Contract.mjs +3 -0
- package/es/contract/Contract.mjs.map +1 -1
- package/es/oracle.d.ts +2 -2
- package/es/oracle.mjs +6 -10
- package/es/oracle.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-price.mjs +1 -4
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -1
- package/es/tx/builder/field-types/ttl.d.ts +3 -2
- package/es/tx/builder/field-types/ttl.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +69 -46
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +8 -9
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/package.json +2 -2
- package/src/chain.ts +28 -18
- package/src/contract/Contract.ts +3 -0
- package/src/oracle.ts +7 -7
- package/src/tx/builder/field-types/gas-price.ts +67 -70
- package/src/tx/builder/field-types/ttl.ts +1 -1
- package/src/utils/semver-satisfies.ts +14 -13
- package/types-legacy/ts4.2/chain.d.ts +5 -5
- package/types-legacy/ts4.2/oracle.d.ts +2 -2
- package/types-legacy/ts4.2/tx/builder/field-types/ttl.d.ts +3 -2
- package/types-legacy/ts4.2/tx/builder/schema.d.ts +69 -46
- package/types-legacy/ts4.2/utils/semver-satisfies.d.ts +1 -1
- package/types-legacy/ts4.5/chain.d.ts +5 -5
- package/types-legacy/ts4.5/oracle.d.ts +2 -2
- package/types-legacy/ts4.5/tx/builder/field-types/ttl.d.ts +3 -2
- package/types-legacy/ts4.5/tx/builder/schema.d.ts +69 -46
- package/types-legacy/ts4.5/utils/semver-satisfies.d.ts +1 -1
package/es/chain.d.ts
CHANGED
|
@@ -8,11 +8,11 @@ import { Encoded, Encoding } from './utils/encoder';
|
|
|
8
8
|
* @param type - Type
|
|
9
9
|
* @param options - Options
|
|
10
10
|
*/
|
|
11
|
-
export declare function _getPollInterval(type: 'block' | '
|
|
12
|
-
{ _expectedMineRate, _microBlockCycle }: {
|
|
11
|
+
export declare function _getPollInterval(type: 'key-block' | 'micro-block', { _expectedMineRate, _microBlockCycle, onNode }: {
|
|
13
12
|
_expectedMineRate?: number;
|
|
14
13
|
_microBlockCycle?: number;
|
|
15
|
-
|
|
14
|
+
onNode: Node;
|
|
15
|
+
}): Promise<number>;
|
|
16
16
|
/**
|
|
17
17
|
* Obtain current height of the chain
|
|
18
18
|
* @category chain
|
|
@@ -38,7 +38,7 @@ export declare function getHeight({ cached, ...options }: {
|
|
|
38
38
|
* @param options.onNode - Node to use
|
|
39
39
|
* @returns The transaction as it was mined
|
|
40
40
|
*/
|
|
41
|
-
export declare function poll(th: Encoded.TxHash, { blocks, interval,
|
|
41
|
+
export declare function poll(th: Encoded.TxHash, { blocks, interval, ...options }: {
|
|
42
42
|
blocks?: number;
|
|
43
43
|
interval?: number;
|
|
44
44
|
onNode: Node;
|
|
@@ -52,7 +52,7 @@ export declare function poll(th: Encoded.TxHash, { blocks, interval, onNode, ...
|
|
|
52
52
|
* @param options.onNode - Node to use
|
|
53
53
|
* @returns Current chain height
|
|
54
54
|
*/
|
|
55
|
-
export declare function awaitHeight(height: number, { interval,
|
|
55
|
+
export declare function awaitHeight(height: number, { interval, ...options }: {
|
|
56
56
|
interval?: number;
|
|
57
57
|
onNode: Node;
|
|
58
58
|
} & Parameters<typeof _getPollInterval>[1]): Promise<number>;
|
package/es/chain.mjs
CHANGED
|
@@ -10,16 +10,20 @@ import { decode, encode, Encoding } from "./utils/encoder.mjs";
|
|
|
10
10
|
* @param type - Type
|
|
11
11
|
* @param options - Options
|
|
12
12
|
*/
|
|
13
|
-
export function _getPollInterval(type,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
_microBlockCycle = 3000
|
|
13
|
+
export async function _getPollInterval(type, {
|
|
14
|
+
_expectedMineRate,
|
|
15
|
+
_microBlockCycle,
|
|
16
|
+
onNode
|
|
18
17
|
}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
var _ref, _await$getVal;
|
|
19
|
+
const getVal = async (t, val, devModeDef, def) => {
|
|
20
|
+
if (t !== type) return null;
|
|
21
|
+
if (val != null) return val;
|
|
22
|
+
return (await (onNode === null || onNode === void 0 ? void 0 : onNode.getNetworkId())) === 'ae_dev' ? devModeDef : def;
|
|
23
|
+
};
|
|
24
|
+
const base = (_ref = (_await$getVal = await getVal('key-block', _expectedMineRate, 0, 180000)) !== null && _await$getVal !== void 0 ? _await$getVal : await getVal('micro-block', _microBlockCycle, 0, 3000)) !== null && _ref !== void 0 ? _ref : (() => {
|
|
25
|
+
throw new InternalError(`Unknown type: ${type}`);
|
|
26
|
+
})();
|
|
23
27
|
return Math.floor(base / 3);
|
|
24
28
|
}
|
|
25
29
|
const heightCache = new WeakMap();
|
|
@@ -40,7 +44,7 @@ export async function getHeight({
|
|
|
40
44
|
const onNode = unwrapProxy(options.onNode);
|
|
41
45
|
if (cached) {
|
|
42
46
|
const cache = heightCache.get(onNode);
|
|
43
|
-
if (cache != null && cache.time > Date.now() - _getPollInterval('block', options)) {
|
|
47
|
+
if (cache != null && cache.time > Date.now() - (await _getPollInterval('key-block', options))) {
|
|
44
48
|
return cache.height;
|
|
45
49
|
}
|
|
46
50
|
}
|
|
@@ -69,26 +73,23 @@ export async function getHeight({
|
|
|
69
73
|
export async function poll(th, {
|
|
70
74
|
blocks = 5,
|
|
71
75
|
interval,
|
|
72
|
-
onNode,
|
|
73
76
|
...options
|
|
74
77
|
}) {
|
|
75
78
|
var _interval;
|
|
76
|
-
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = _getPollInterval('
|
|
79
|
+
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = await _getPollInterval('micro-block', options);
|
|
77
80
|
let max;
|
|
78
81
|
do {
|
|
79
|
-
const tx = await onNode.getTransactionByHash(th);
|
|
82
|
+
const tx = await options.onNode.getTransactionByHash(th);
|
|
80
83
|
if (tx.blockHeight !== -1) return tx;
|
|
81
84
|
if (max == null) {
|
|
82
85
|
max = tx.tx.ttl !== 0 ? -1 : (await getHeight({
|
|
83
86
|
...options,
|
|
84
|
-
onNode,
|
|
85
87
|
cached: true
|
|
86
88
|
})) + blocks;
|
|
87
89
|
}
|
|
88
90
|
await pause(interval);
|
|
89
91
|
} while (max === -1 ? true : (await getHeight({
|
|
90
92
|
...options,
|
|
91
|
-
onNode,
|
|
92
93
|
cached: true
|
|
93
94
|
})) < max);
|
|
94
95
|
throw new TxTimedOutError(blocks, th);
|
|
@@ -105,17 +106,14 @@ export async function poll(th, {
|
|
|
105
106
|
*/
|
|
106
107
|
export async function awaitHeight(height, {
|
|
107
108
|
interval,
|
|
108
|
-
onNode,
|
|
109
109
|
...options
|
|
110
110
|
}) {
|
|
111
111
|
var _interval2;
|
|
112
|
-
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = Math.min(_getPollInterval('block', options), 5000);
|
|
112
|
+
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = Math.min(await _getPollInterval('key-block', options), 5000);
|
|
113
113
|
let currentHeight;
|
|
114
114
|
do {
|
|
115
115
|
if (currentHeight != null) await pause(interval);
|
|
116
|
-
currentHeight = await getHeight(
|
|
117
|
-
onNode
|
|
118
|
-
});
|
|
116
|
+
currentHeight = await getHeight(options);
|
|
119
117
|
} while (currentHeight < height);
|
|
120
118
|
return currentHeight;
|
|
121
119
|
}
|
package/es/chain.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.mjs","names":["AE_AMOUNT_FORMATS","formatAmount","isAccountNotFoundError","pause","unwrapProxy","isNameValid","produceNameId","DRY_RUN_ACCOUNT","AensPointerContextError","DryRunError","InvalidAensNameError","TxTimedOutError","TxNotInChainError","InternalError","decode","encode","Encoding","_getPollInterval","type","_expectedMineRate","_microBlockCycle","base","block","microblock","Math","floor","heightCache","WeakMap","getHeight","cached","options","onNode","cache","get","time","Date","now","height","getCurrentKeyBlockHeight","set","poll","th","blocks","interval","_interval","max","tx","getTransactionByHash","blockHeight","ttl","awaitHeight","_interval2","min","currentHeight","waitForTxConfirm","txHash","confirm","newBlockHeight","getAccount","address","hash","getAccountByPubkeyAndHeight","getAccountByPubkeyAndHash","getAccountByPubkey","getBalance","format","AETTOS","addr","startsWith","AccountAddress","balance","catch","error","targetDenomination","getCurrentGeneration","getGeneration","hashOrHeight","getGenerationByHeight","getGenerationByHash","getMicroBlockTransactions","getMicroBlockTransactionsByHash","transactions","getKeyBlock","getKeyBlockByHeight","getKeyBlockByHash","getMicroBlockHeader","getMicroBlockHeaderByHash","txDryRunRequests","Map","txDryRunHandler","key","rs","delete","dryRunRes","top","protectedDryRunTxs","txEvents","txs","map","req","accounts","Array","from","Set","accountAddress","pubKey","amount","forEach","reject","results","result","reason","resultPayload","idx","resolve","Object","assign","txDryRun","combine","_txDryRunRequests$get","join","requests","Promise","_requests$timeout","push","timeout","setTimeout","getContractByteCode","contractId","getContractCode","getContract","getName","name","getNameEntryByName","resolveName","nameOrId","verify","resolveByNode","pointer","pointers","find","p","id"],"sources":["../src/chain.ts"],"sourcesContent":["import { AE_AMOUNT_FORMATS, formatAmount } from './utils/amount-formatter';\nimport { isAccountNotFoundError, pause } from './utils/other';\nimport { unwrapProxy } from './utils/wrap-proxy';\nimport { isNameValid, produceNameId } from './tx/builder/helpers';\nimport { AensName, DRY_RUN_ACCOUNT } from './tx/builder/constants';\nimport {\n AensPointerContextError, DryRunError, InvalidAensNameError,\n TxTimedOutError, TxNotInChainError, InternalError,\n} from './utils/errors';\nimport Node, { TransformNodeType } from './Node';\nimport {\n Account as AccountNode, ByteCode, ContractObject, DryRunResult, DryRunResults,\n Generation, KeyBlock, MicroBlockHeader, NameEntry, SignedTx,\n} from './apis/node';\nimport {\n decode, encode, Encoded, Encoding,\n} from './utils/encoder';\n\n/**\n * @category chain\n * @param type - Type\n * @param options - Options\n */\nexport function _getPollInterval(\n type: 'block' | 'microblock', // TODO: rename to 'key-block' | 'micro-block'\n { _expectedMineRate = 180000, _microBlockCycle = 3000 }:\n { _expectedMineRate?: number; _microBlockCycle?: number },\n): number {\n const base = {\n block: _expectedMineRate,\n microblock: _microBlockCycle,\n }[type];\n return Math.floor(base / 3);\n}\n\nconst heightCache: WeakMap<Node, { time: number; height: number }> = new WeakMap();\n\n/**\n * Obtain current height of the chain\n * @category chain\n * @param options - Options\n * @param options.cached - Get height from the cache. The lag behind the actual height shouldn't\n * be more than 1 block. Use if needed to reduce requests count, and approximate value can be used.\n * For example, for timeout check in transaction status polling.\n * @returns Current chain height\n */\nexport async function getHeight(\n { cached = false, ...options }: {\n onNode: Node;\n cached?: boolean;\n } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n const onNode = unwrapProxy(options.onNode);\n if (cached) {\n const cache = heightCache.get(onNode);\n if (cache != null && cache.time > Date.now() - _getPollInterval('block', options)) {\n return cache.height;\n }\n }\n const { height } = await onNode.getCurrentKeyBlockHeight();\n heightCache.set(onNode, { height, time: Date.now() });\n return height;\n}\n\n/**\n * Return transaction details if it is mined, fail otherwise.\n * If the transaction has ttl specified then would wait till it leaves the mempool.\n * Otherwise would fail if a specified amount of blocks were mined.\n * @category chain\n * @param th - The hash of transaction to poll\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.blocks - Number of blocks mined after which to fail if transaction ttl is not set\n * @param options.onNode - Node to use\n * @returns The transaction as it was mined\n */\nexport async function poll(\n th: Encoded.TxHash,\n {\n blocks = 5, interval, onNode, ...options\n }:\n { blocks?: number; interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<TransformNodeType<SignedTx>> {\n interval ??= _getPollInterval('microblock', options);\n let max;\n do {\n const tx = await onNode.getTransactionByHash(th);\n if (tx.blockHeight !== -1) return tx;\n if (max == null) {\n max = tx.tx.ttl !== 0 ? -1\n : await getHeight({ ...options, onNode, cached: true }) + blocks;\n }\n await pause(interval);\n } while (max === -1 ? true : await getHeight({ ...options, onNode, cached: true }) < max);\n throw new TxTimedOutError(blocks, th);\n}\n\n/**\n * Wait for the chain to reach a specific height\n * @category chain\n * @param height - Height to wait for\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.onNode - Node to use\n * @returns Current chain height\n */\nexport async function awaitHeight(\n height: number,\n { interval, onNode, ...options }:\n { interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n interval ??= Math.min(_getPollInterval('block', options), 5000);\n let currentHeight;\n do {\n if (currentHeight != null) await pause(interval);\n currentHeight = await getHeight({ onNode });\n } while (currentHeight < height);\n return currentHeight;\n}\n\n/**\n * Wait for transaction confirmation\n * @category chain\n * @param txHash - Transaction hash\n * @param options - Options\n * @param options.confirm - Number of micro blocks to wait for transaction confirmation\n * @param options.onNode - Node to use\n * @returns Current Height\n */\nexport async function waitForTxConfirm(\n txHash: Encoded.TxHash,\n { confirm = 3, onNode, ...options }:\n { confirm?: number; onNode: Node } & Parameters<typeof awaitHeight>[1],\n): Promise<number> {\n const { blockHeight } = await onNode.getTransactionByHash(txHash);\n const height = await awaitHeight(blockHeight + confirm, { onNode, ...options });\n const { blockHeight: newBlockHeight } = await onNode.getTransactionByHash(txHash);\n switch (newBlockHeight) {\n case -1:\n throw new TxNotInChainError(txHash);\n case blockHeight:\n return height;\n default:\n return waitForTxConfirm(txHash, { onNode, confirm, ...options });\n }\n}\n\n/**\n * Get account by account public key\n * @category chain\n * @param address - Account address (public key)\n * @param options - Options\n * @param options.height - Get account on specific block by block height\n * @param options.hash - Get account on specific block by micro block hash or key block hash\n * @param options.onNode - Node to use\n */\nexport async function getAccount(\n address: Encoded.AccountAddress | Encoded.ContractAddress,\n { height, hash, onNode }:\n { height?: number; hash?: Encoded.KeyBlockHash | Encoded.MicroBlockHash; onNode: Node },\n): Promise<TransformNodeType<AccountNode>> {\n if (height != null) return onNode.getAccountByPubkeyAndHeight(address, height);\n if (hash != null) return onNode.getAccountByPubkeyAndHash(address, hash);\n return onNode.getAccountByPubkey(address);\n}\n\n/**\n * Request the balance of specified account\n * @category chain\n * @param address - The public account address to obtain the balance for\n * @param options - Options\n * @param options.format\n * @param options.height - The chain height at which to obtain the balance for\n * (default: top of chain)\n * @param options.hash - The block hash on which to obtain the balance for (default: top of chain)\n */\nexport async function getBalance(\n address: Encoded.AccountAddress | Encoded.ContractAddress | Encoded.OracleAddress,\n { format = AE_AMOUNT_FORMATS.AETTOS, ...options }:\n { format?: AE_AMOUNT_FORMATS } & Parameters<typeof getAccount>[1],\n): Promise<string> {\n const addr = address.startsWith('ok_')\n ? encode(decode(address), Encoding.AccountAddress)\n : address as Encoded.AccountAddress | Encoded.ContractAddress;\n\n const { balance } = await getAccount(addr, options).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { balance: 0n };\n });\n\n return formatAmount(balance, { targetDenomination: format });\n}\n\n/**\n * Obtain current generation\n * @category chain\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Current Generation\n */\nexport async function getCurrentGeneration(\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n return onNode.getCurrentGeneration();\n}\n\n/**\n * Get generation by hash or height\n * @category chain\n * @param hashOrHeight - Generation hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Generation\n */\nexport async function getGeneration(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n if (typeof hashOrHeight === 'number') return onNode.getGenerationByHeight(hashOrHeight);\n return onNode.getGenerationByHash(hashOrHeight);\n}\n\n/**\n * Get micro block transactions\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transactions\n */\nexport async function getMicroBlockTransactions(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<SignedTx[]>> {\n return (await onNode.getMicroBlockTransactionsByHash(hash)).transactions;\n}\n\n/**\n * Get key block\n * @category chain\n * @param hashOrHeight - Key block hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Key Block\n */\nexport async function getKeyBlock(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<KeyBlock>> {\n if (typeof hashOrHeight === 'number') return onNode.getKeyBlockByHeight(hashOrHeight);\n return onNode.getKeyBlockByHash(hashOrHeight);\n}\n\n/**\n * Get micro block header\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Micro block header\n */\nexport async function getMicroBlockHeader(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<MicroBlockHeader>> {\n return onNode.getMicroBlockHeaderByHash(hash);\n}\n\ninterface TxDryRunArguments {\n tx: Encoded.Transaction;\n accountAddress: Encoded.AccountAddress;\n top?: number | Encoded.KeyBlockHash | Encoded.MicroBlockHash;\n txEvents?: any;\n resolve: Function;\n reject: Function;\n}\nconst txDryRunRequests: Map<string, TxDryRunArguments[] & { timeout?: NodeJS.Timeout }> = new Map();\n\nasync function txDryRunHandler(key: string, onNode: Node): Promise<void> {\n const rs = txDryRunRequests.get(key);\n txDryRunRequests.delete(key);\n if (rs == null) throw new InternalError('Can\\'t get dry-run request');\n\n let dryRunRes;\n try {\n const top = typeof rs[0].top === 'number'\n ? (await getKeyBlock(rs[0].top, { onNode })).hash : rs[0].top;\n dryRunRes = await onNode.protectedDryRunTxs({\n top,\n txEvents: rs[0].txEvents,\n txs: rs.map((req) => ({ tx: req.tx })),\n accounts: Array.from(new Set(rs.map((req) => req.accountAddress)))\n .map((pubKey) => ({ pubKey, amount: DRY_RUN_ACCOUNT.amount })),\n });\n } catch (error) {\n rs.forEach(({ reject }) => reject(error));\n return;\n }\n\n const { results, txEvents } = dryRunRes;\n results.forEach(({ result, reason, ...resultPayload }, idx) => {\n const {\n resolve, reject, tx, accountAddress,\n } = rs[idx];\n if (result === 'ok') resolve({ ...resultPayload, txEvents });\n else reject(Object.assign(new DryRunError(reason as string), { tx, accountAddress }));\n });\n}\n\n/**\n * Transaction dry-run\n * @category chain\n * @param tx - transaction to execute\n * @param accountAddress - address that will be used to execute transaction\n * @param options - Options\n * @param options.top - hash of block on which to make dry-run\n * @param options.txEvents - collect and return on-chain tx events that would result from the call\n * @param options.combine - Enables combining of similar requests to a single dry-run call\n * @param options.onNode - Node to use\n */\nexport async function txDryRun(\n tx: Encoded.Transaction,\n accountAddress: Encoded.AccountAddress,\n {\n top, txEvents, combine, onNode,\n }:\n { top?: TxDryRunArguments['top']; txEvents?: boolean; combine?: boolean; onNode: Node },\n): Promise<{\n txEvents?: TransformNodeType<DryRunResults['txEvents']>;\n } & TransformNodeType<DryRunResult>> {\n const key = combine === true ? [top, txEvents].join() : 'immediate';\n const requests = txDryRunRequests.get(key) ?? [];\n txDryRunRequests.set(key, requests);\n return new Promise((resolve, reject) => {\n requests.push({\n tx, accountAddress, top, txEvents, resolve, reject,\n });\n if (combine !== true) {\n void txDryRunHandler(key, onNode);\n return;\n }\n requests.timeout ??= setTimeout(() => { void txDryRunHandler(key, onNode); });\n });\n}\n\n/**\n * Get contract byte code\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContractByteCode(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ByteCode>> {\n return onNode.getContractCode(contractId);\n}\n\n/**\n * Get contract entry\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContract(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ContractObject>> {\n return onNode.getContract(contractId);\n}\n\n/**\n * Get name entry\n * @category AENS\n * @param name - AENS name\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getName(\n name: AensName,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<NameEntry>> {\n return onNode.getNameEntryByName(name);\n}\n\n/**\n * Resolve AENS name and return name hash\n * @category AENS\n * @param nameOrId - AENS name or address\n * @param key - in AENS pointers record\n * @param options - Options\n * @param options.verify - To ensure that name exist and have a corresponding pointer\n * // TODO: avoid that to don't trust to current api gateway\n * @param options.resolveByNode - Enables pointer resolving using node\n * @param options.onNode - Node to use\n * @returns Address or AENS name hash\n */\nexport async function resolveName <\n Type extends Encoding.AccountAddress | Encoding.ContractAddress,\n>(\n nameOrId: AensName | Encoded.Generic<Type>,\n key: string,\n { verify = true, resolveByNode = false, onNode }:\n { verify?: boolean; resolveByNode?: boolean; onNode: Node },\n): Promise<Encoded.Generic<Type | Encoding.Name>> {\n if (isNameValid(nameOrId)) {\n if (verify || resolveByNode) {\n const name = await onNode.getNameEntryByName(nameOrId);\n const pointer = name.pointers.find((p) => p.key === key);\n if (pointer == null) throw new AensPointerContextError(nameOrId, key);\n if (resolveByNode) return pointer.id as Encoded.Generic<Type>;\n }\n return produceNameId(nameOrId);\n }\n try {\n decode(nameOrId);\n return nameOrId;\n } catch (error) {\n throw new InvalidAensNameError(`Invalid name or address: ${nameOrId}`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chain.mjs","names":["AE_AMOUNT_FORMATS","formatAmount","isAccountNotFoundError","pause","unwrapProxy","isNameValid","produceNameId","DRY_RUN_ACCOUNT","AensPointerContextError","DryRunError","InvalidAensNameError","TxTimedOutError","TxNotInChainError","InternalError","decode","encode","Encoding","_getPollInterval","type","_expectedMineRate","_microBlockCycle","onNode","_ref","_await$getVal","getVal","t","val","devModeDef","def","getNetworkId","base","Math","floor","heightCache","WeakMap","getHeight","cached","options","cache","get","time","Date","now","height","getCurrentKeyBlockHeight","set","poll","th","blocks","interval","_interval","max","tx","getTransactionByHash","blockHeight","ttl","awaitHeight","_interval2","min","currentHeight","waitForTxConfirm","txHash","confirm","newBlockHeight","getAccount","address","hash","getAccountByPubkeyAndHeight","getAccountByPubkeyAndHash","getAccountByPubkey","getBalance","format","AETTOS","addr","startsWith","AccountAddress","balance","catch","error","targetDenomination","getCurrentGeneration","getGeneration","hashOrHeight","getGenerationByHeight","getGenerationByHash","getMicroBlockTransactions","getMicroBlockTransactionsByHash","transactions","getKeyBlock","getKeyBlockByHeight","getKeyBlockByHash","getMicroBlockHeader","getMicroBlockHeaderByHash","txDryRunRequests","Map","txDryRunHandler","key","rs","delete","dryRunRes","top","protectedDryRunTxs","txEvents","txs","map","req","accounts","Array","from","Set","accountAddress","pubKey","amount","forEach","reject","results","result","reason","resultPayload","idx","resolve","Object","assign","txDryRun","combine","_txDryRunRequests$get","join","requests","Promise","_requests$timeout","push","timeout","setTimeout","getContractByteCode","contractId","getContractCode","getContract","getName","name","getNameEntryByName","resolveName","nameOrId","verify","resolveByNode","pointer","pointers","find","p","id"],"sources":["../src/chain.ts"],"sourcesContent":["import { AE_AMOUNT_FORMATS, formatAmount } from './utils/amount-formatter';\nimport { isAccountNotFoundError, pause } from './utils/other';\nimport { unwrapProxy } from './utils/wrap-proxy';\nimport { isNameValid, produceNameId } from './tx/builder/helpers';\nimport { AensName, DRY_RUN_ACCOUNT } from './tx/builder/constants';\nimport {\n AensPointerContextError, DryRunError, InvalidAensNameError,\n TxTimedOutError, TxNotInChainError, InternalError,\n} from './utils/errors';\nimport Node, { TransformNodeType } from './Node';\nimport {\n Account as AccountNode, ByteCode, ContractObject, DryRunResult, DryRunResults,\n Generation, KeyBlock, MicroBlockHeader, NameEntry, SignedTx,\n} from './apis/node';\nimport {\n decode, encode, Encoded, Encoding,\n} from './utils/encoder';\n\n/**\n * @category chain\n * @param type - Type\n * @param options - Options\n */\nexport async function _getPollInterval(\n type: 'key-block' | 'micro-block',\n { _expectedMineRate, _microBlockCycle, onNode }:\n { _expectedMineRate?: number; _microBlockCycle?: number; onNode: Node },\n): Promise<number> {\n const getVal = async (\n t: string,\n val: number | undefined,\n devModeDef: number,\n def: number,\n ): Promise<number | null> => {\n if (t !== type) return null;\n if (val != null) return val;\n return await onNode?.getNetworkId() === 'ae_dev' ? devModeDef : def;\n };\n\n const base = await getVal('key-block', _expectedMineRate, 0, 180000)\n ?? await getVal('micro-block', _microBlockCycle, 0, 3000)\n ?? (() => { throw new InternalError(`Unknown type: ${type}`); })();\n return Math.floor(base / 3);\n}\n\nconst heightCache: WeakMap<Node, { time: number; height: number }> = new WeakMap();\n\n/**\n * Obtain current height of the chain\n * @category chain\n * @param options - Options\n * @param options.cached - Get height from the cache. The lag behind the actual height shouldn't\n * be more than 1 block. Use if needed to reduce requests count, and approximate value can be used.\n * For example, for timeout check in transaction status polling.\n * @returns Current chain height\n */\nexport async function getHeight(\n { cached = false, ...options }: {\n onNode: Node;\n cached?: boolean;\n } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n const onNode = unwrapProxy(options.onNode);\n if (cached) {\n const cache = heightCache.get(onNode);\n if (cache != null && cache.time > Date.now() - await _getPollInterval('key-block', options)) {\n return cache.height;\n }\n }\n const { height } = await onNode.getCurrentKeyBlockHeight();\n heightCache.set(onNode, { height, time: Date.now() });\n return height;\n}\n\n/**\n * Return transaction details if it is mined, fail otherwise.\n * If the transaction has ttl specified then would wait till it leaves the mempool.\n * Otherwise would fail if a specified amount of blocks were mined.\n * @category chain\n * @param th - The hash of transaction to poll\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.blocks - Number of blocks mined after which to fail if transaction ttl is not set\n * @param options.onNode - Node to use\n * @returns The transaction as it was mined\n */\nexport async function poll(\n th: Encoded.TxHash,\n {\n blocks = 5, interval, ...options\n }:\n { blocks?: number; interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<TransformNodeType<SignedTx>> {\n interval ??= await _getPollInterval('micro-block', options);\n let max;\n do {\n const tx = await options.onNode.getTransactionByHash(th);\n if (tx.blockHeight !== -1) return tx;\n if (max == null) {\n max = tx.tx.ttl !== 0 ? -1\n : await getHeight({ ...options, cached: true }) + blocks;\n }\n await pause(interval);\n } while (max === -1 ? true : await getHeight({ ...options, cached: true }) < max);\n throw new TxTimedOutError(blocks, th);\n}\n\n/**\n * Wait for the chain to reach a specific height\n * @category chain\n * @param height - Height to wait for\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.onNode - Node to use\n * @returns Current chain height\n */\nexport async function awaitHeight(\n height: number,\n { interval, ...options }:\n { interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n interval ??= Math.min(await _getPollInterval('key-block', options), 5000);\n let currentHeight;\n do {\n if (currentHeight != null) await pause(interval);\n currentHeight = await getHeight(options);\n } while (currentHeight < height);\n return currentHeight;\n}\n\n/**\n * Wait for transaction confirmation\n * @category chain\n * @param txHash - Transaction hash\n * @param options - Options\n * @param options.confirm - Number of micro blocks to wait for transaction confirmation\n * @param options.onNode - Node to use\n * @returns Current Height\n */\nexport async function waitForTxConfirm(\n txHash: Encoded.TxHash,\n { confirm = 3, onNode, ...options }:\n { confirm?: number; onNode: Node } & Parameters<typeof awaitHeight>[1],\n): Promise<number> {\n const { blockHeight } = await onNode.getTransactionByHash(txHash);\n const height = await awaitHeight(blockHeight + confirm, { onNode, ...options });\n const { blockHeight: newBlockHeight } = await onNode.getTransactionByHash(txHash);\n switch (newBlockHeight) {\n case -1:\n throw new TxNotInChainError(txHash);\n case blockHeight:\n return height;\n default:\n return waitForTxConfirm(txHash, { onNode, confirm, ...options });\n }\n}\n\n/**\n * Get account by account public key\n * @category chain\n * @param address - Account address (public key)\n * @param options - Options\n * @param options.height - Get account on specific block by block height\n * @param options.hash - Get account on specific block by micro block hash or key block hash\n * @param options.onNode - Node to use\n */\nexport async function getAccount(\n address: Encoded.AccountAddress | Encoded.ContractAddress,\n { height, hash, onNode }:\n { height?: number; hash?: Encoded.KeyBlockHash | Encoded.MicroBlockHash; onNode: Node },\n): Promise<TransformNodeType<AccountNode>> {\n if (height != null) return onNode.getAccountByPubkeyAndHeight(address, height);\n if (hash != null) return onNode.getAccountByPubkeyAndHash(address, hash);\n return onNode.getAccountByPubkey(address);\n}\n\n/**\n * Request the balance of specified account\n * @category chain\n * @param address - The public account address to obtain the balance for\n * @param options - Options\n * @param options.format\n * @param options.height - The chain height at which to obtain the balance for\n * (default: top of chain)\n * @param options.hash - The block hash on which to obtain the balance for (default: top of chain)\n */\nexport async function getBalance(\n address: Encoded.AccountAddress | Encoded.ContractAddress | Encoded.OracleAddress,\n { format = AE_AMOUNT_FORMATS.AETTOS, ...options }:\n { format?: AE_AMOUNT_FORMATS } & Parameters<typeof getAccount>[1],\n): Promise<string> {\n const addr = address.startsWith('ok_')\n ? encode(decode(address), Encoding.AccountAddress)\n : address as Encoded.AccountAddress | Encoded.ContractAddress;\n\n const { balance } = await getAccount(addr, options).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { balance: 0n };\n });\n\n return formatAmount(balance, { targetDenomination: format });\n}\n\n/**\n * Obtain current generation\n * @category chain\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Current Generation\n */\nexport async function getCurrentGeneration(\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n return onNode.getCurrentGeneration();\n}\n\n/**\n * Get generation by hash or height\n * @category chain\n * @param hashOrHeight - Generation hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Generation\n */\nexport async function getGeneration(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n if (typeof hashOrHeight === 'number') return onNode.getGenerationByHeight(hashOrHeight);\n return onNode.getGenerationByHash(hashOrHeight);\n}\n\n/**\n * Get micro block transactions\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transactions\n */\nexport async function getMicroBlockTransactions(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<SignedTx[]>> {\n return (await onNode.getMicroBlockTransactionsByHash(hash)).transactions;\n}\n\n/**\n * Get key block\n * @category chain\n * @param hashOrHeight - Key block hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Key Block\n */\nexport async function getKeyBlock(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<KeyBlock>> {\n if (typeof hashOrHeight === 'number') return onNode.getKeyBlockByHeight(hashOrHeight);\n return onNode.getKeyBlockByHash(hashOrHeight);\n}\n\n/**\n * Get micro block header\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Micro block header\n */\nexport async function getMicroBlockHeader(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<MicroBlockHeader>> {\n return onNode.getMicroBlockHeaderByHash(hash);\n}\n\ninterface TxDryRunArguments {\n tx: Encoded.Transaction;\n accountAddress: Encoded.AccountAddress;\n top?: number | Encoded.KeyBlockHash | Encoded.MicroBlockHash;\n txEvents?: any;\n resolve: Function;\n reject: Function;\n}\nconst txDryRunRequests: Map<string, TxDryRunArguments[] & { timeout?: NodeJS.Timeout }> = new Map();\n\nasync function txDryRunHandler(key: string, onNode: Node): Promise<void> {\n const rs = txDryRunRequests.get(key);\n txDryRunRequests.delete(key);\n if (rs == null) throw new InternalError('Can\\'t get dry-run request');\n\n let dryRunRes;\n try {\n const top = typeof rs[0].top === 'number'\n ? (await getKeyBlock(rs[0].top, { onNode })).hash : rs[0].top;\n dryRunRes = await onNode.protectedDryRunTxs({\n top,\n txEvents: rs[0].txEvents,\n txs: rs.map((req) => ({ tx: req.tx })),\n accounts: Array.from(new Set(rs.map((req) => req.accountAddress)))\n .map((pubKey) => ({ pubKey, amount: DRY_RUN_ACCOUNT.amount })),\n });\n } catch (error) {\n rs.forEach(({ reject }) => reject(error));\n return;\n }\n\n const { results, txEvents } = dryRunRes;\n results.forEach(({ result, reason, ...resultPayload }, idx) => {\n const {\n resolve, reject, tx, accountAddress,\n } = rs[idx];\n if (result === 'ok') resolve({ ...resultPayload, txEvents });\n else reject(Object.assign(new DryRunError(reason as string), { tx, accountAddress }));\n });\n}\n\n/**\n * Transaction dry-run\n * @category chain\n * @param tx - transaction to execute\n * @param accountAddress - address that will be used to execute transaction\n * @param options - Options\n * @param options.top - hash of block on which to make dry-run\n * @param options.txEvents - collect and return on-chain tx events that would result from the call\n * @param options.combine - Enables combining of similar requests to a single dry-run call\n * @param options.onNode - Node to use\n */\nexport async function txDryRun(\n tx: Encoded.Transaction,\n accountAddress: Encoded.AccountAddress,\n {\n top, txEvents, combine, onNode,\n }:\n { top?: TxDryRunArguments['top']; txEvents?: boolean; combine?: boolean; onNode: Node },\n): Promise<{\n txEvents?: TransformNodeType<DryRunResults['txEvents']>;\n } & TransformNodeType<DryRunResult>> {\n const key = combine === true ? [top, txEvents].join() : 'immediate';\n const requests = txDryRunRequests.get(key) ?? [];\n txDryRunRequests.set(key, requests);\n return new Promise((resolve, reject) => {\n requests.push({\n tx, accountAddress, top, txEvents, resolve, reject,\n });\n if (combine !== true) {\n void txDryRunHandler(key, onNode);\n return;\n }\n requests.timeout ??= setTimeout(() => { void txDryRunHandler(key, onNode); });\n });\n}\n\n/**\n * Get contract byte code\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContractByteCode(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ByteCode>> {\n return onNode.getContractCode(contractId);\n}\n\n/**\n * Get contract entry\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContract(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ContractObject>> {\n return onNode.getContract(contractId);\n}\n\n/**\n * Get name entry\n * @category AENS\n * @param name - AENS name\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getName(\n name: AensName,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<NameEntry>> {\n return onNode.getNameEntryByName(name);\n}\n\n/**\n * Resolve AENS name and return name hash\n * @category AENS\n * @param nameOrId - AENS name or address\n * @param key - in AENS pointers record\n * @param options - Options\n * @param options.verify - To ensure that name exist and have a corresponding pointer\n * // TODO: avoid that to don't trust to current api gateway\n * @param options.resolveByNode - Enables pointer resolving using node\n * @param options.onNode - Node to use\n * @returns Address or AENS name hash\n */\nexport async function resolveName <\n Type extends Encoding.AccountAddress | Encoding.ContractAddress,\n>(\n nameOrId: AensName | Encoded.Generic<Type>,\n key: string,\n { verify = true, resolveByNode = false, onNode }:\n { verify?: boolean; resolveByNode?: boolean; onNode: Node },\n): Promise<Encoded.Generic<Type | Encoding.Name>> {\n if (isNameValid(nameOrId)) {\n if (verify || resolveByNode) {\n const name = await onNode.getNameEntryByName(nameOrId);\n const pointer = name.pointers.find((p) => p.key === key);\n if (pointer == null) throw new AensPointerContextError(nameOrId, key);\n if (resolveByNode) return pointer.id as Encoded.Generic<Type>;\n }\n return produceNameId(nameOrId);\n }\n try {\n decode(nameOrId);\n return nameOrId;\n } catch (error) {\n throw new InvalidAensNameError(`Invalid name or address: ${nameOrId}`);\n }\n}\n"],"mappings":"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"}
|
package/es/contract/Contract.mjs
CHANGED
|
@@ -472,6 +472,9 @@ function _getCallResult2({
|
|
|
472
472
|
break;
|
|
473
473
|
case 'error':
|
|
474
474
|
message = decode(returnValue).toString();
|
|
475
|
+
if (/Expected \d+ arguments, got \d+/.test(message)) {
|
|
476
|
+
throw new ContractError(`ACI doesn't match called contract. Error provided by node: ${message}`);
|
|
477
|
+
}
|
|
475
478
|
break;
|
|
476
479
|
default:
|
|
477
480
|
throw new InternalError(`Unknown return type: ${returnType}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Contract.mjs","names":["_aeternityAeppCalldata","Encoder","Calldata","Tag","ConsensusProtocolVersion","DRY_RUN_ACCOUNT","buildContractIdByContractTx","unpackTx","buildTxAsync","buildTxHash","decode","MissingContractDefError","MissingContractAddressError","InactiveContractError","BytecodeMismatchError","DuplicateContractError","MissingFunctionNameError","InvalidMethodInvocationError","NotPayableFunctionError","TypeError","NodeInvocationError","IllegalArgumentError","NoSuchContractFunctionError","MissingEventDefinitionError","AmbiguousEventDefinitionError","UnexpectedTsError","InternalError","NoWalletConnectedError","ContractError","hash","calcHash","getAccount","getContract","getContractByteCode","resolveName","txDryRun","sendTransaction","isAccountNotFoundError","isNameValid","produceNameId","_getCallResult","WeakSet","_sendAndProcess","_getFunctionAci","_getContractNameByEvent","_aciContract","WeakMap","Contract","$compile","$options","bytecode","onCompiler","sourceCode","compileBySourceCode","fileSystem","sourceCodePath","compile","$getCallResultByTxHash","fnName","options","callInfo","onNode","getTransactionInfoByHash","callInfoTyped","_classPrivateMethodGet","_getCallResult2","call","undefined","result","_estimateGas","name","params","$call","callStatic","gasUsed","Math","floor","$deploy","_opt$gasLimit","_other$result","opt","address","onAccount","ownerId","tx","_isInternalBuild","tag","ContractCreateTx","gasLimit","callData","_calldata","encode","_name","code","other","_sendAndProcess2","rawTx","log","decodedEvents","$decodeEvents","owner","transaction","fn","_opt$gasLimit2","top","fnAci","_getFunctionAci2","contractId","amount","Number","payable","callerId","error","useFallbackAccount","message","pub","nonce","topOption","account","catch","kind","txOpt","ContractCallTx","callObj","dryRunOther","txData","events","omitUnknown","map","event","topics","t","BigInt","contractName","_getContractNameByEvent2","decoded","decodeEvent","data","args","Object","entries","contract","filter","e","initialize","aci","validateBytecode","otherOptions","res","_bytecode","resolveByNode","isIris","getNodeInfo","consensusProtocolVersion","Iris","active","onChanBytecode","isValid","validateBySourceCode","validate","ContractWithMethods","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","writable","value","_aci","aciLast","length","keys","_classPrivateFieldSet","_classPrivateFieldGet","assign","fromEntries","functions","arguments","aciArgs","stateful","pop","_Contract","returnType","returnValue","decodedResult","decodeFateString","toString","blockHeight","find","f","returns","ctAddress","nameHash","contractAddressToName","addressToName","isEqual","a","b","JSON","stringify","contracts","matchedEvents","variant","values","flat","eventName","type","idx","arr","slice","some","el"],"sources":["../../src/contract/Contract.ts"],"sourcesContent":["/**\n * Contract module - routines to interact with the æternity contract\n *\n * High level documentation of the contracts are available at\n * https://github.com/aeternity/protocol/tree/master/contracts and\n */\n\nimport { Encoder as Calldata } from '@aeternity/aepp-calldata';\nimport {\n Tag, AensName, ConsensusProtocolVersion, DRY_RUN_ACCOUNT,\n} from '../tx/builder/constants';\nimport {\n buildContractIdByContractTx, unpackTx, buildTxAsync, BuildTxOptions, buildTxHash,\n} from '../tx/builder';\nimport { decode, Encoded } from '../utils/encoder';\nimport {\n MissingContractDefError,\n MissingContractAddressError,\n InactiveContractError,\n BytecodeMismatchError,\n DuplicateContractError,\n MissingFunctionNameError,\n InvalidMethodInvocationError,\n NotPayableFunctionError,\n TypeError,\n NodeInvocationError,\n IllegalArgumentError,\n NoSuchContractFunctionError,\n MissingEventDefinitionError,\n AmbiguousEventDefinitionError,\n UnexpectedTsError,\n InternalError,\n NoWalletConnectedError,\n ContractError,\n} from '../utils/errors';\nimport { hash as calcHash } from '../utils/crypto';\nimport {\n ContractCallObject as NodeContractCallObject, Event as NodeEvent,\n} from '../apis/node';\nimport CompilerBase, { Aci } from './compiler/Base';\nimport Node, { TransformNodeType } from '../Node';\nimport {\n getAccount, getContract, getContractByteCode, resolveName, txDryRun,\n} from '../chain';\nimport { sendTransaction, SendTransactionOptions } from '../send-transaction';\nimport AccountBase from '../account/Base';\nimport { TxUnpacked } from '../tx/builder/schema.generated';\nimport { isAccountNotFoundError } from '../utils/other';\nimport { isNameValid, produceNameId } from '../tx/builder/helpers';\n\ntype ContractAci = NonNullable<Aci[0]['contract']>;\ntype FunctionAci = ContractAci['functions'][0];\n\ninterface Event extends NodeEvent {\n address: Encoded.ContractAddress;\n data: Encoded.ContractBytearray;\n}\n\nexport interface ContractCallObject extends TransformNodeType<NodeContractCallObject> {\n returnValue: Encoded.ContractBytearray;\n log: Event[];\n}\n\ninterface DecodedEvent {\n name: string;\n args: unknown[];\n contract: {\n name: string;\n address: Encoded.ContractAddress;\n };\n}\n\ntype TxData = Awaited<ReturnType<typeof sendTransaction>>;\n\ninterface SendAndProcessReturnType {\n result?: ContractCallObject;\n hash: TxData['hash'];\n tx: TxUnpacked & { tag: Tag.SignedTx | Tag.ContractCallTx | Tag.ContractCreateTx };\n txData: TxData;\n rawTx: Encoded.Transaction;\n}\n\nexport interface ContractMethodsBase { [key: string]: (...args: any[]) => any }\n\ntype MethodsToContractApi<M extends ContractMethodsBase> = {\n [Name in keyof M]:\n M[Name] extends (...args: infer Args) => any\n ? (...args: [\n ...Args,\n ...[] | [Name extends 'init'\n ? Parameters<Contract<M>['$deploy']>[1] : Parameters<Contract<M>['$call']>[2]],\n ]) => ReturnType<Contract<M>['$call']>\n : never\n};\n\ntype ContractWithMethods<M extends ContractMethodsBase> = Contract<M> & MethodsToContractApi<M>;\n\ntype MethodNames<M extends ContractMethodsBase> = keyof M & string | 'init';\n\ntype MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>> =\n Fn extends 'init'\n ? M extends { init: any } ? Parameters<M['init']> : []\n : Parameters<M[Fn]>;\n\ninterface GetContractNameByEventOptions {\n contractAddressToName?: { [key: Encoded.ContractAddress]: string };\n}\n\ninterface GetCallResultByHashReturnType<M extends ContractMethodsBase, Fn extends MethodNames<M>> {\n decodedResult: ReturnType<M[Fn]>;\n decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;\n}\n\n/**\n * Generate contract ACI object with predefined js methods for contract usage - can be used for\n * creating a reference to already deployed contracts\n * @category contract\n * @param options - Options object\n * @returns JS Contract API\n * @example\n * ```js\n * const contractIns = await aeSdk.initializeContract({ sourceCode })\n * await contractIns.$deploy([321]) or await contractIns.init(321)\n * const callResult = await contractIns.$call('setState', [123])\n * const staticCallResult = await contractIns.$call('setState', [123], { callStatic: true })\n * ```\n * Also you can call contract like: `await contractIns.setState(123, options)`\n * Then sdk decide to make on-chain or static call (dry-run API) transaction based on function is\n * stateful or not\n */\nclass Contract<M extends ContractMethodsBase> {\n /**\n * Compile contract\n * @returns bytecode\n */\n async $compile(): Promise<Encoded.ContractBytearray> {\n if (this.$options.bytecode != null) return this.$options.bytecode;\n if (this.$options.onCompiler == null) throw new IllegalArgumentError('Can\\'t compile without compiler');\n if (this.$options.sourceCode != null) {\n const { bytecode } = await this.$options.onCompiler\n .compileBySourceCode(this.$options.sourceCode, this.$options.fileSystem);\n this.$options.bytecode = bytecode;\n }\n if (this.$options.sourceCodePath != null) {\n const { bytecode } = await this.$options.onCompiler.compile(this.$options.sourceCodePath);\n this.$options.bytecode = bytecode;\n }\n if (this.$options.bytecode == null) {\n throw new IllegalArgumentError('Can\\'t compile without sourceCode and sourceCodePath');\n }\n return this.$options.bytecode;\n }\n\n #getCallResult<Fn extends MethodNames<M>>(\n { returnType, returnValue, log }: ContractCallObject,\n fnName: Fn,\n transaction: Encoded.Transaction | undefined,\n options: Parameters<Contract<M>['$decodeEvents']>[1],\n ): GetCallResultByHashReturnType<M, Fn> {\n let message: string;\n switch (returnType) {\n case 'ok': {\n const fnAci = this.#getFunctionAci(fnName);\n return {\n decodedResult: this._calldata.decode(this._name, fnAci.name, returnValue),\n decodedEvents: this.$decodeEvents(log, options),\n };\n }\n case 'revert':\n message = this._calldata.decodeFateString(returnValue);\n break;\n case 'error':\n message = decode(returnValue).toString();\n break;\n default:\n throw new InternalError(`Unknown return type: ${returnType}`);\n }\n throw new NodeInvocationError(message, transaction);\n }\n\n async #sendAndProcess<Fn extends MethodNames<M>>(\n tx: Encoded.Transaction,\n fnName: Fn,\n options: SendTransactionOptions & Parameters<Contract<M>['$getCallResultByTxHash']>[2],\n ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {\n const txData = await sendTransaction(tx, { ...this.$options, ...options });\n return {\n hash: txData.hash,\n tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),\n txData,\n rawTx: txData.rawTx,\n ...txData.blockHeight != null && (\n await this.$getCallResultByTxHash(txData.hash, fnName, options)\n ),\n };\n }\n\n async $getCallResultByTxHash<Fn extends MethodNames<M>>(\n hash: Encoded.TxHash,\n fnName: Fn,\n options?: Parameters<Contract<M>['$decodeEvents']>[1],\n ): Promise<GetCallResultByHashReturnType<M, Fn> & { result: ContractCallObject }> {\n const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(hash);\n if (callInfo == null) {\n throw new ContractError(`callInfo is not available for transaction ${hash}`);\n }\n const callInfoTyped = callInfo as ContractCallObject;\n return {\n ...this.#getCallResult(callInfoTyped, fnName, undefined, options),\n result: callInfoTyped,\n };\n }\n\n async _estimateGas<Fn extends MethodNames<M>>(\n name: Fn,\n params: MethodParameters<M, Fn>,\n options: Omit<Parameters<Contract<M>['$call']>[2], 'callStatic'> = {},\n ): Promise<number> {\n const { result } = await this.$call(name, params, { ...options, callStatic: true });\n if (result == null) throw new UnexpectedTsError();\n const { gasUsed } = result;\n // taken from https://github.com/aeternity/aepp-sdk-js/issues/1286#issuecomment-977814771\n return Math.floor(gasUsed * 1.25);\n }\n\n /**\n * Deploy contract\n * @param params - Contract init function arguments array\n * @param options - Options\n * @returns deploy info\n */\n async $deploy(\n params: MethodParameters<M, 'init'>,\n options?: Parameters<Contract<M>['$call']>[2]\n & Partial<BuildTxOptions<Tag.ContractCreateTx, 'ownerId' | 'code' | 'callData'>>,\n ): Promise<Omit<SendAndProcessReturnType, 'hash'> & {\n transaction?: Encoded.TxHash;\n owner?: Encoded.AccountAddress;\n address?: Encoded.ContractAddress;\n decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;\n }> {\n const { callStatic, ...opt } = { ...this.$options, ...options };\n if (this.$options.bytecode == null) await this.$compile();\n if (callStatic === true) return this.$call('init', params, { ...opt, callStatic });\n if (this.$options.address != null) throw new DuplicateContractError();\n\n if (opt.onAccount == null) throw new IllegalArgumentError('Can\\'t deploy without account');\n const ownerId = opt.onAccount.address;\n if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\\'t deploy without bytecode');\n const tx = await buildTxAsync({\n _isInternalBuild: true,\n ...opt,\n tag: Tag.ContractCreateTx,\n gasLimit: opt.gasLimit ?? await this._estimateGas('init', params, opt),\n callData: this._calldata.encode(this._name, 'init', params),\n code: this.$options.bytecode,\n ownerId,\n });\n const { hash, ...other } = await this.#sendAndProcess(\n tx,\n 'init',\n { ...opt, onAccount: opt.onAccount },\n );\n this.$options.address = buildContractIdByContractTx(other.rawTx);\n return {\n ...other,\n ...other.result?.log != null && {\n decodedEvents: this.$decodeEvents(other.result.log, opt),\n },\n owner: ownerId,\n transaction: hash,\n address: this.$options.address,\n };\n }\n\n /**\n * Get function schema from contract ACI object\n * @param name - Function name\n * @returns function ACI\n */\n #getFunctionAci(name: string): FunctionAci {\n const fn = this.#aciContract.functions.find(\n (f: { name: string }) => f.name === name,\n );\n if (fn != null) {\n return fn;\n }\n if (name === 'init') {\n return {\n arguments: [], name: 'init', payable: false, returns: 'unit', stateful: true,\n };\n }\n throw new NoSuchContractFunctionError(name);\n }\n\n /**\n * Call contract function\n * @param fn - Function name\n * @param params - Array of function arguments\n * @param options - Array of function arguments\n * @returns CallResult\n */\n async $call<Fn extends MethodNames<M>>(\n fn: Fn,\n params: MethodParameters<M, Fn>,\n options: Partial<BuildTxOptions<Tag.ContractCallTx, 'callerId' | 'contractId' | 'callData'>>\n & Parameters<Contract<M>['$decodeEvents']>[1]\n & Omit<SendTransactionOptions, 'onAccount' | 'onNode'>\n & Omit<Parameters<typeof txDryRun>[2], 'onNode'>\n & { onAccount?: AccountBase; onNode?: Node; callStatic?: boolean } = {},\n ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {\n const { callStatic, top, ...opt } = { ...this.$options, ...options };\n const fnAci = this.#getFunctionAci(fn);\n const { address, name } = this.$options;\n // TODO: call `produceNameId` on buildTx side\n const contractId = name != null ? produceNameId(name) : address;\n const { onNode } = opt;\n\n if (fn == null) throw new MissingFunctionNameError();\n if (fn === 'init' && callStatic !== true) throw new InvalidMethodInvocationError('\"init\" can be called only via dryRun');\n if (fn !== 'init' && opt.amount != null && Number(opt.amount) > 0 && !fnAci.payable) {\n throw new NotPayableFunctionError(opt.amount, fn);\n }\n\n let callerId;\n try {\n if (opt.onAccount == null) throw new InternalError('Use fallback account');\n callerId = opt.onAccount.address;\n } catch (error) {\n const useFallbackAccount = callStatic === true && (\n (error instanceof TypeError && error.message === 'Account should be an address (ak-prefixed string), or instance of AccountBase, got undefined instead')\n || (error instanceof NoWalletConnectedError)\n || (error instanceof InternalError && error.message === 'Use fallback account')\n );\n if (!useFallbackAccount) throw error;\n callerId = DRY_RUN_ACCOUNT.pub;\n }\n const callData = this._calldata.encode(this._name, fn, params);\n\n if (callStatic === true) {\n if (opt.nonce == null) {\n const topOption = top != null && { [typeof top === 'number' ? 'height' : 'hash']: top };\n const account = await getAccount(callerId, { ...topOption, onNode }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { kind: 'basic', nonce: 0 };\n });\n opt.nonce = account.kind === 'generalized' ? 0 : account.nonce + 1;\n }\n\n const txOpt = { ...opt, onNode, callData };\n let tx;\n if (fn === 'init') {\n if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\\'t dry-run \"init\" without bytecode');\n tx = await buildTxAsync({\n ...txOpt, tag: Tag.ContractCreateTx, code: this.$options.bytecode, ownerId: callerId,\n });\n } else {\n if (contractId == null) throw new MissingContractAddressError('Can\\'t dry-run contract without address');\n tx = await buildTxAsync({\n ...txOpt, tag: Tag.ContractCallTx, callerId, contractId,\n });\n }\n\n const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { ...opt, top });\n if (callObj == null) {\n throw new InternalError(`callObj is not available for transaction ${tx}`);\n }\n const callInfoTyped = callObj as ContractCallObject;\n return {\n ...dryRunOther,\n ...this.#getCallResult(callInfoTyped, fn, tx, opt),\n tx: unpackTx(tx),\n result: callInfoTyped,\n rawTx: tx,\n hash: buildTxHash(tx),\n txData: undefined as any,\n };\n }\n\n if (top != null) throw new IllegalArgumentError('Can\\'t handle `top` option in on-chain contract call');\n if (contractId == null) throw new MissingContractAddressError('Can\\'t call contract without address');\n const tx = await buildTxAsync({\n _isInternalBuild: true,\n ...opt,\n tag: Tag.ContractCallTx,\n gasLimit: opt.gasLimit ?? await this._estimateGas(fn, params, opt),\n callerId,\n contractId,\n callData,\n });\n if (opt.onAccount == null) throw new IllegalArgumentError('Can\\'t call contract on chain without account');\n return this.#sendAndProcess(tx, fn, { ...opt, onAccount: opt.onAccount });\n }\n\n /**\n * @param ctAddress - Contract address that emitted event\n * @param nameHash - Hash of emitted event name\n * @param options - Options\n * @returns Contract name\n * @throws {@link MissingEventDefinitionError}\n * @throws {@link AmbiguousEventDefinitionError}\n */\n #getContractNameByEvent(\n ctAddress: Encoded.ContractAddress,\n nameHash: BigInt,\n { contractAddressToName }: GetContractNameByEventOptions,\n ): string {\n const addressToName = { ...this.$options.contractAddressToName, ...contractAddressToName };\n if (addressToName[ctAddress] != null) return addressToName[ctAddress];\n\n // TODO: consider using a third-party library\n const isEqual = (a: any, b: any): boolean => JSON.stringify(a) === JSON.stringify(b);\n\n const contracts = this._aci\n .map(({ contract }) => contract)\n .filter((contract) => contract?.event) as ContractAci[];\n const matchedEvents = contracts\n .map((contract) => [contract.name, contract.event.variant])\n .map(([name, events]) => events.map((event: {}) => (\n [name, Object.keys(event)[0], Object.values(event)[0]]\n )))\n .flat()\n .filter(([, eventName]) => BigInt(`0x${calcHash(eventName).toString('hex')}`) === nameHash)\n .filter(([, , type], idx, arr) => !arr.slice(0, idx).some((el) => isEqual(el[2], type)));\n switch (matchedEvents.length) {\n case 0: throw new MissingEventDefinitionError(nameHash.toString(), ctAddress);\n case 1: return matchedEvents[0][0];\n default: throw new AmbiguousEventDefinitionError(ctAddress, matchedEvents);\n }\n }\n\n /**\n * Decode Events\n * @param events - Array of encoded events (callRes.result.log)\n * @param options - Options\n * @returns DecodedEvents\n */\n $decodeEvents(\n events: Event[],\n { omitUnknown, ...opt }: { omitUnknown?: boolean } & GetContractNameByEventOptions = {},\n ): DecodedEvent[] {\n return events\n .map((event) => {\n const topics = event.topics.map((t: string | number) => BigInt(t));\n let contractName;\n try {\n contractName = this.#getContractNameByEvent(event.address, topics[0], opt);\n } catch (error) {\n if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;\n throw error;\n }\n const decoded = this._calldata.decodeEvent(contractName, event.data, topics);\n const [name, args] = Object.entries(decoded)[0];\n return {\n name,\n args,\n contract: {\n name: contractName,\n address: event.address,\n },\n };\n }).filter((e: DecodedEvent | null): e is DecodedEvent => e != null);\n }\n\n static async initialize<M extends ContractMethodsBase>(\n {\n onCompiler,\n onNode,\n bytecode,\n aci,\n address,\n sourceCodePath,\n sourceCode,\n fileSystem,\n validateBytecode,\n ...otherOptions\n }: Omit<ConstructorParameters<typeof Contract>[0], 'aci' | 'address'> & {\n validateBytecode?: boolean;\n aci?: Aci;\n address?: Encoded.ContractAddress | AensName;\n },\n ): Promise<ContractWithMethods<M>> {\n if (aci == null && onCompiler != null) {\n let res;\n if (sourceCodePath != null) res = await onCompiler.compile(sourceCodePath);\n if (sourceCode != null) res = await onCompiler.compileBySourceCode(sourceCode, fileSystem);\n if (res != null) {\n aci = res.aci;\n bytecode ??= res.bytecode;\n }\n }\n if (aci == null) throw new MissingContractDefError();\n\n let name;\n if (address != null) {\n address = await resolveName(\n address,\n 'contract_pubkey',\n { resolveByNode: true, onNode },\n ) as Encoded.ContractAddress;\n const isIris = (await onNode.getNodeInfo())\n .consensusProtocolVersion === ConsensusProtocolVersion.Iris;\n if (!isIris && isNameValid(address)) name = address;\n }\n\n if (address == null && sourceCode == null && sourceCodePath == null && bytecode == null) {\n throw new MissingContractAddressError('Can\\'t create instance by ACI without address');\n }\n\n if (address != null) {\n const contract = await getContract(address, { onNode });\n if (contract.active == null) throw new InactiveContractError(address);\n }\n\n if (validateBytecode === true) {\n if (address == null) throw new MissingContractAddressError('Can\\'t validate bytecode without contract address');\n const onChanBytecode = (await getContractByteCode(address, { onNode })).bytecode;\n let isValid = false;\n if (bytecode != null) isValid = bytecode === onChanBytecode;\n else if (sourceCode != null) {\n if (onCompiler == null) throw new IllegalArgumentError('Can\\'t validate bytecode without compiler');\n isValid = await onCompiler.validateBySourceCode(onChanBytecode, sourceCode, fileSystem);\n } else if (sourceCodePath != null) {\n if (onCompiler == null) throw new IllegalArgumentError('Can\\'t validate bytecode without compiler');\n isValid = await onCompiler.validate(onChanBytecode, sourceCodePath);\n }\n if (!isValid) {\n throw new BytecodeMismatchError((sourceCode ?? sourceCodePath) != null ? 'source code' : 'bytecode');\n }\n }\n\n return new ContractWithMethods<M>({\n onCompiler,\n onNode,\n sourceCode,\n sourceCodePath,\n bytecode,\n aci,\n address,\n name,\n fileSystem,\n ...otherOptions,\n });\n }\n\n _aci: Aci;\n\n readonly #aciContract: ContractAci;\n\n _name: string;\n\n _calldata: Calldata;\n\n $options: Omit<ConstructorParameters<typeof Contract>[0], 'aci'>;\n\n /**\n * @param options - Options\n */\n constructor({ aci, ...otherOptions }: {\n onCompiler?: CompilerBase;\n onNode: Node;\n bytecode?: Encoded.ContractBytearray;\n aci: Aci;\n address?: Encoded.ContractAddress;\n /**\n * Supported only in Ceres\n */\n name?: AensName;\n sourceCodePath?: Parameters<CompilerBase['compile']>[0];\n sourceCode?: Parameters<CompilerBase['compileBySourceCode']>[0];\n fileSystem?: Parameters<CompilerBase['compileBySourceCode']>[1];\n } & Parameters<Contract<M>['$deploy']>[1]) {\n this._aci = aci;\n const aciLast = aci[aci.length - 1];\n if (aciLast.contract == null) {\n throw new IllegalArgumentError(`The last 'aci' item should have 'contract' key, got ${Object.keys(aciLast)} keys instead`);\n }\n this.#aciContract = aciLast.contract;\n this._name = this.#aciContract.name;\n this._calldata = new Calldata(aci);\n this.$options = otherOptions;\n\n /**\n * Generate proto function based on contract function using Contract ACI schema\n * All function can be called like:\n * ```js\n * await contract.testFunction()\n * ```\n * then sdk will decide to use dry-run or send tx\n * on-chain base on if function stateful or not.\n * Also, you can manually do that:\n * ```js\n * await contract.testFunction({ callStatic: true }) // use call-static (dry-run)\n * await contract.testFunction({ callStatic: false }) // send tx on-chain\n * ```\n */\n Object.assign(\n this,\n Object.fromEntries(this.#aciContract.functions\n .map(({ name, arguments: aciArgs, stateful }: FunctionAci) => {\n const callStatic = name !== 'init' && !stateful;\n return [\n name,\n async (...args: any) => {\n const options = args.length === aciArgs.length + 1 ? args.pop() : {};\n if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options}`);\n if (name === 'init') return this.$deploy(args, { callStatic, ...options });\n return this.$call(name, args, { callStatic, ...options });\n },\n ];\n })),\n );\n }\n}\n\ninterface ContractWithMethodsClass {\n new <M extends ContractMethodsBase>(\n options: ConstructorParameters<typeof Contract>[0],\n ): ContractWithMethods<M>;\n initialize: typeof Contract['initialize'];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst ContractWithMethods: ContractWithMethodsClass = Contract as any;\n\nexport default ContractWithMethods;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Contract.mjs","names":["_aeternityAeppCalldata","Encoder","Calldata","Tag","ConsensusProtocolVersion","DRY_RUN_ACCOUNT","buildContractIdByContractTx","unpackTx","buildTxAsync","buildTxHash","decode","MissingContractDefError","MissingContractAddressError","InactiveContractError","BytecodeMismatchError","DuplicateContractError","MissingFunctionNameError","InvalidMethodInvocationError","NotPayableFunctionError","TypeError","NodeInvocationError","IllegalArgumentError","NoSuchContractFunctionError","MissingEventDefinitionError","AmbiguousEventDefinitionError","UnexpectedTsError","InternalError","NoWalletConnectedError","ContractError","hash","calcHash","getAccount","getContract","getContractByteCode","resolveName","txDryRun","sendTransaction","isAccountNotFoundError","isNameValid","produceNameId","_getCallResult","WeakSet","_sendAndProcess","_getFunctionAci","_getContractNameByEvent","_aciContract","WeakMap","Contract","$compile","$options","bytecode","onCompiler","sourceCode","compileBySourceCode","fileSystem","sourceCodePath","compile","$getCallResultByTxHash","fnName","options","callInfo","onNode","getTransactionInfoByHash","callInfoTyped","_classPrivateMethodGet","_getCallResult2","call","undefined","result","_estimateGas","name","params","$call","callStatic","gasUsed","Math","floor","$deploy","_opt$gasLimit","_other$result","opt","address","onAccount","ownerId","tx","_isInternalBuild","tag","ContractCreateTx","gasLimit","callData","_calldata","encode","_name","code","other","_sendAndProcess2","rawTx","log","decodedEvents","$decodeEvents","owner","transaction","fn","_opt$gasLimit2","top","fnAci","_getFunctionAci2","contractId","amount","Number","payable","callerId","error","useFallbackAccount","message","pub","nonce","topOption","account","catch","kind","txOpt","ContractCallTx","callObj","dryRunOther","txData","events","omitUnknown","map","event","topics","t","BigInt","contractName","_getContractNameByEvent2","decoded","decodeEvent","data","args","Object","entries","contract","filter","e","initialize","aci","validateBytecode","otherOptions","res","_bytecode","resolveByNode","isIris","getNodeInfo","consensusProtocolVersion","Iris","active","onChanBytecode","isValid","validateBySourceCode","validate","ContractWithMethods","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","writable","value","_aci","aciLast","length","keys","_classPrivateFieldSet","_classPrivateFieldGet","assign","fromEntries","functions","arguments","aciArgs","stateful","pop","_Contract","returnType","returnValue","decodedResult","decodeFateString","toString","test","blockHeight","find","f","returns","ctAddress","nameHash","contractAddressToName","addressToName","isEqual","a","b","JSON","stringify","contracts","matchedEvents","variant","values","flat","eventName","type","idx","arr","slice","some","el"],"sources":["../../src/contract/Contract.ts"],"sourcesContent":["/**\n * Contract module - routines to interact with the æternity contract\n *\n * High level documentation of the contracts are available at\n * https://github.com/aeternity/protocol/tree/master/contracts and\n */\n\nimport { Encoder as Calldata } from '@aeternity/aepp-calldata';\nimport {\n Tag, AensName, ConsensusProtocolVersion, DRY_RUN_ACCOUNT,\n} from '../tx/builder/constants';\nimport {\n buildContractIdByContractTx, unpackTx, buildTxAsync, BuildTxOptions, buildTxHash,\n} from '../tx/builder';\nimport { decode, Encoded } from '../utils/encoder';\nimport {\n MissingContractDefError,\n MissingContractAddressError,\n InactiveContractError,\n BytecodeMismatchError,\n DuplicateContractError,\n MissingFunctionNameError,\n InvalidMethodInvocationError,\n NotPayableFunctionError,\n TypeError,\n NodeInvocationError,\n IllegalArgumentError,\n NoSuchContractFunctionError,\n MissingEventDefinitionError,\n AmbiguousEventDefinitionError,\n UnexpectedTsError,\n InternalError,\n NoWalletConnectedError,\n ContractError,\n} from '../utils/errors';\nimport { hash as calcHash } from '../utils/crypto';\nimport {\n ContractCallObject as NodeContractCallObject, Event as NodeEvent,\n} from '../apis/node';\nimport CompilerBase, { Aci } from './compiler/Base';\nimport Node, { TransformNodeType } from '../Node';\nimport {\n getAccount, getContract, getContractByteCode, resolveName, txDryRun,\n} from '../chain';\nimport { sendTransaction, SendTransactionOptions } from '../send-transaction';\nimport AccountBase from '../account/Base';\nimport { TxUnpacked } from '../tx/builder/schema.generated';\nimport { isAccountNotFoundError } from '../utils/other';\nimport { isNameValid, produceNameId } from '../tx/builder/helpers';\n\ntype ContractAci = NonNullable<Aci[0]['contract']>;\ntype FunctionAci = ContractAci['functions'][0];\n\ninterface Event extends NodeEvent {\n address: Encoded.ContractAddress;\n data: Encoded.ContractBytearray;\n}\n\nexport interface ContractCallObject extends TransformNodeType<NodeContractCallObject> {\n returnValue: Encoded.ContractBytearray;\n log: Event[];\n}\n\ninterface DecodedEvent {\n name: string;\n args: unknown[];\n contract: {\n name: string;\n address: Encoded.ContractAddress;\n };\n}\n\ntype TxData = Awaited<ReturnType<typeof sendTransaction>>;\n\ninterface SendAndProcessReturnType {\n result?: ContractCallObject;\n hash: TxData['hash'];\n tx: TxUnpacked & { tag: Tag.SignedTx | Tag.ContractCallTx | Tag.ContractCreateTx };\n txData: TxData;\n rawTx: Encoded.Transaction;\n}\n\nexport interface ContractMethodsBase { [key: string]: (...args: any[]) => any }\n\ntype MethodsToContractApi<M extends ContractMethodsBase> = {\n [Name in keyof M]:\n M[Name] extends (...args: infer Args) => any\n ? (...args: [\n ...Args,\n ...[] | [Name extends 'init'\n ? Parameters<Contract<M>['$deploy']>[1] : Parameters<Contract<M>['$call']>[2]],\n ]) => ReturnType<Contract<M>['$call']>\n : never\n};\n\ntype ContractWithMethods<M extends ContractMethodsBase> = Contract<M> & MethodsToContractApi<M>;\n\ntype MethodNames<M extends ContractMethodsBase> = keyof M & string | 'init';\n\ntype MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>> =\n Fn extends 'init'\n ? M extends { init: any } ? Parameters<M['init']> : []\n : Parameters<M[Fn]>;\n\ninterface GetContractNameByEventOptions {\n contractAddressToName?: { [key: Encoded.ContractAddress]: string };\n}\n\ninterface GetCallResultByHashReturnType<M extends ContractMethodsBase, Fn extends MethodNames<M>> {\n decodedResult: ReturnType<M[Fn]>;\n decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;\n}\n\n/**\n * Generate contract ACI object with predefined js methods for contract usage - can be used for\n * creating a reference to already deployed contracts\n * @category contract\n * @param options - Options object\n * @returns JS Contract API\n * @example\n * ```js\n * const contractIns = await aeSdk.initializeContract({ sourceCode })\n * await contractIns.$deploy([321]) or await contractIns.init(321)\n * const callResult = await contractIns.$call('setState', [123])\n * const staticCallResult = await contractIns.$call('setState', [123], { callStatic: true })\n * ```\n * Also you can call contract like: `await contractIns.setState(123, options)`\n * Then sdk decide to make on-chain or static call (dry-run API) transaction based on function is\n * stateful or not\n */\nclass Contract<M extends ContractMethodsBase> {\n /**\n * Compile contract\n * @returns bytecode\n */\n async $compile(): Promise<Encoded.ContractBytearray> {\n if (this.$options.bytecode != null) return this.$options.bytecode;\n if (this.$options.onCompiler == null) throw new IllegalArgumentError('Can\\'t compile without compiler');\n if (this.$options.sourceCode != null) {\n const { bytecode } = await this.$options.onCompiler\n .compileBySourceCode(this.$options.sourceCode, this.$options.fileSystem);\n this.$options.bytecode = bytecode;\n }\n if (this.$options.sourceCodePath != null) {\n const { bytecode } = await this.$options.onCompiler.compile(this.$options.sourceCodePath);\n this.$options.bytecode = bytecode;\n }\n if (this.$options.bytecode == null) {\n throw new IllegalArgumentError('Can\\'t compile without sourceCode and sourceCodePath');\n }\n return this.$options.bytecode;\n }\n\n #getCallResult<Fn extends MethodNames<M>>(\n { returnType, returnValue, log }: ContractCallObject,\n fnName: Fn,\n transaction: Encoded.Transaction | undefined,\n options: Parameters<Contract<M>['$decodeEvents']>[1],\n ): GetCallResultByHashReturnType<M, Fn> {\n let message: string;\n switch (returnType) {\n case 'ok': {\n const fnAci = this.#getFunctionAci(fnName);\n return {\n decodedResult: this._calldata.decode(this._name, fnAci.name, returnValue),\n decodedEvents: this.$decodeEvents(log, options),\n };\n }\n case 'revert':\n message = this._calldata.decodeFateString(returnValue);\n break;\n case 'error':\n message = decode(returnValue).toString();\n if (/Expected \\d+ arguments, got \\d+/.test(message)) {\n throw new ContractError(`ACI doesn't match called contract. Error provided by node: ${message}`);\n }\n break;\n default:\n throw new InternalError(`Unknown return type: ${returnType}`);\n }\n throw new NodeInvocationError(message, transaction);\n }\n\n async #sendAndProcess<Fn extends MethodNames<M>>(\n tx: Encoded.Transaction,\n fnName: Fn,\n options: SendTransactionOptions & Parameters<Contract<M>['$getCallResultByTxHash']>[2],\n ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {\n const txData = await sendTransaction(tx, { ...this.$options, ...options });\n return {\n hash: txData.hash,\n tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),\n txData,\n rawTx: txData.rawTx,\n ...txData.blockHeight != null && (\n await this.$getCallResultByTxHash(txData.hash, fnName, options)\n ),\n };\n }\n\n async $getCallResultByTxHash<Fn extends MethodNames<M>>(\n hash: Encoded.TxHash,\n fnName: Fn,\n options?: Parameters<Contract<M>['$decodeEvents']>[1],\n ): Promise<GetCallResultByHashReturnType<M, Fn> & { result: ContractCallObject }> {\n const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(hash);\n if (callInfo == null) {\n throw new ContractError(`callInfo is not available for transaction ${hash}`);\n }\n const callInfoTyped = callInfo as ContractCallObject;\n return {\n ...this.#getCallResult(callInfoTyped, fnName, undefined, options),\n result: callInfoTyped,\n };\n }\n\n async _estimateGas<Fn extends MethodNames<M>>(\n name: Fn,\n params: MethodParameters<M, Fn>,\n options: Omit<Parameters<Contract<M>['$call']>[2], 'callStatic'> = {},\n ): Promise<number> {\n const { result } = await this.$call(name, params, { ...options, callStatic: true });\n if (result == null) throw new UnexpectedTsError();\n const { gasUsed } = result;\n // taken from https://github.com/aeternity/aepp-sdk-js/issues/1286#issuecomment-977814771\n return Math.floor(gasUsed * 1.25);\n }\n\n /**\n * Deploy contract\n * @param params - Contract init function arguments array\n * @param options - Options\n * @returns deploy info\n */\n async $deploy(\n params: MethodParameters<M, 'init'>,\n options?: Parameters<Contract<M>['$call']>[2]\n & Partial<BuildTxOptions<Tag.ContractCreateTx, 'ownerId' | 'code' | 'callData'>>,\n ): Promise<Omit<SendAndProcessReturnType, 'hash'> & {\n transaction?: Encoded.TxHash;\n owner?: Encoded.AccountAddress;\n address?: Encoded.ContractAddress;\n decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;\n }> {\n const { callStatic, ...opt } = { ...this.$options, ...options };\n if (this.$options.bytecode == null) await this.$compile();\n if (callStatic === true) return this.$call('init', params, { ...opt, callStatic });\n if (this.$options.address != null) throw new DuplicateContractError();\n\n if (opt.onAccount == null) throw new IllegalArgumentError('Can\\'t deploy without account');\n const ownerId = opt.onAccount.address;\n if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\\'t deploy without bytecode');\n const tx = await buildTxAsync({\n _isInternalBuild: true,\n ...opt,\n tag: Tag.ContractCreateTx,\n gasLimit: opt.gasLimit ?? await this._estimateGas('init', params, opt),\n callData: this._calldata.encode(this._name, 'init', params),\n code: this.$options.bytecode,\n ownerId,\n });\n const { hash, ...other } = await this.#sendAndProcess(\n tx,\n 'init',\n { ...opt, onAccount: opt.onAccount },\n );\n this.$options.address = buildContractIdByContractTx(other.rawTx);\n return {\n ...other,\n ...other.result?.log != null && {\n decodedEvents: this.$decodeEvents(other.result.log, opt),\n },\n owner: ownerId,\n transaction: hash,\n address: this.$options.address,\n };\n }\n\n /**\n * Get function schema from contract ACI object\n * @param name - Function name\n * @returns function ACI\n */\n #getFunctionAci(name: string): FunctionAci {\n const fn = this.#aciContract.functions.find(\n (f: { name: string }) => f.name === name,\n );\n if (fn != null) {\n return fn;\n }\n if (name === 'init') {\n return {\n arguments: [], name: 'init', payable: false, returns: 'unit', stateful: true,\n };\n }\n throw new NoSuchContractFunctionError(name);\n }\n\n /**\n * Call contract function\n * @param fn - Function name\n * @param params - Array of function arguments\n * @param options - Array of function arguments\n * @returns CallResult\n */\n async $call<Fn extends MethodNames<M>>(\n fn: Fn,\n params: MethodParameters<M, Fn>,\n options: Partial<BuildTxOptions<Tag.ContractCallTx, 'callerId' | 'contractId' | 'callData'>>\n & Parameters<Contract<M>['$decodeEvents']>[1]\n & Omit<SendTransactionOptions, 'onAccount' | 'onNode'>\n & Omit<Parameters<typeof txDryRun>[2], 'onNode'>\n & { onAccount?: AccountBase; onNode?: Node; callStatic?: boolean } = {},\n ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {\n const { callStatic, top, ...opt } = { ...this.$options, ...options };\n const fnAci = this.#getFunctionAci(fn);\n const { address, name } = this.$options;\n // TODO: call `produceNameId` on buildTx side\n const contractId = name != null ? produceNameId(name) : address;\n const { onNode } = opt;\n\n if (fn == null) throw new MissingFunctionNameError();\n if (fn === 'init' && callStatic !== true) throw new InvalidMethodInvocationError('\"init\" can be called only via dryRun');\n if (fn !== 'init' && opt.amount != null && Number(opt.amount) > 0 && !fnAci.payable) {\n throw new NotPayableFunctionError(opt.amount, fn);\n }\n\n let callerId;\n try {\n if (opt.onAccount == null) throw new InternalError('Use fallback account');\n callerId = opt.onAccount.address;\n } catch (error) {\n const useFallbackAccount = callStatic === true && (\n (error instanceof TypeError && error.message === 'Account should be an address (ak-prefixed string), or instance of AccountBase, got undefined instead')\n || (error instanceof NoWalletConnectedError)\n || (error instanceof InternalError && error.message === 'Use fallback account')\n );\n if (!useFallbackAccount) throw error;\n callerId = DRY_RUN_ACCOUNT.pub;\n }\n const callData = this._calldata.encode(this._name, fn, params);\n\n if (callStatic === true) {\n if (opt.nonce == null) {\n const topOption = top != null && { [typeof top === 'number' ? 'height' : 'hash']: top };\n const account = await getAccount(callerId, { ...topOption, onNode }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { kind: 'basic', nonce: 0 };\n });\n opt.nonce = account.kind === 'generalized' ? 0 : account.nonce + 1;\n }\n\n const txOpt = { ...opt, onNode, callData };\n let tx;\n if (fn === 'init') {\n if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\\'t dry-run \"init\" without bytecode');\n tx = await buildTxAsync({\n ...txOpt, tag: Tag.ContractCreateTx, code: this.$options.bytecode, ownerId: callerId,\n });\n } else {\n if (contractId == null) throw new MissingContractAddressError('Can\\'t dry-run contract without address');\n tx = await buildTxAsync({\n ...txOpt, tag: Tag.ContractCallTx, callerId, contractId,\n });\n }\n\n const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { ...opt, top });\n if (callObj == null) {\n throw new InternalError(`callObj is not available for transaction ${tx}`);\n }\n const callInfoTyped = callObj as ContractCallObject;\n return {\n ...dryRunOther,\n ...this.#getCallResult(callInfoTyped, fn, tx, opt),\n tx: unpackTx(tx),\n result: callInfoTyped,\n rawTx: tx,\n hash: buildTxHash(tx),\n txData: undefined as any,\n };\n }\n\n if (top != null) throw new IllegalArgumentError('Can\\'t handle `top` option in on-chain contract call');\n if (contractId == null) throw new MissingContractAddressError('Can\\'t call contract without address');\n const tx = await buildTxAsync({\n _isInternalBuild: true,\n ...opt,\n tag: Tag.ContractCallTx,\n gasLimit: opt.gasLimit ?? await this._estimateGas(fn, params, opt),\n callerId,\n contractId,\n callData,\n });\n if (opt.onAccount == null) throw new IllegalArgumentError('Can\\'t call contract on chain without account');\n return this.#sendAndProcess(tx, fn, { ...opt, onAccount: opt.onAccount });\n }\n\n /**\n * @param ctAddress - Contract address that emitted event\n * @param nameHash - Hash of emitted event name\n * @param options - Options\n * @returns Contract name\n * @throws {@link MissingEventDefinitionError}\n * @throws {@link AmbiguousEventDefinitionError}\n */\n #getContractNameByEvent(\n ctAddress: Encoded.ContractAddress,\n nameHash: BigInt,\n { contractAddressToName }: GetContractNameByEventOptions,\n ): string {\n const addressToName = { ...this.$options.contractAddressToName, ...contractAddressToName };\n if (addressToName[ctAddress] != null) return addressToName[ctAddress];\n\n // TODO: consider using a third-party library\n const isEqual = (a: any, b: any): boolean => JSON.stringify(a) === JSON.stringify(b);\n\n const contracts = this._aci\n .map(({ contract }) => contract)\n .filter((contract) => contract?.event) as ContractAci[];\n const matchedEvents = contracts\n .map((contract) => [contract.name, contract.event.variant])\n .map(([name, events]) => events.map((event: {}) => (\n [name, Object.keys(event)[0], Object.values(event)[0]]\n )))\n .flat()\n .filter(([, eventName]) => BigInt(`0x${calcHash(eventName).toString('hex')}`) === nameHash)\n .filter(([, , type], idx, arr) => !arr.slice(0, idx).some((el) => isEqual(el[2], type)));\n switch (matchedEvents.length) {\n case 0: throw new MissingEventDefinitionError(nameHash.toString(), ctAddress);\n case 1: return matchedEvents[0][0];\n default: throw new AmbiguousEventDefinitionError(ctAddress, matchedEvents);\n }\n }\n\n /**\n * Decode Events\n * @param events - Array of encoded events (callRes.result.log)\n * @param options - Options\n * @returns DecodedEvents\n */\n $decodeEvents(\n events: Event[],\n { omitUnknown, ...opt }: { omitUnknown?: boolean } & GetContractNameByEventOptions = {},\n ): DecodedEvent[] {\n return events\n .map((event) => {\n const topics = event.topics.map((t: string | number) => BigInt(t));\n let contractName;\n try {\n contractName = this.#getContractNameByEvent(event.address, topics[0], opt);\n } catch (error) {\n if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;\n throw error;\n }\n const decoded = this._calldata.decodeEvent(contractName, event.data, topics);\n const [name, args] = Object.entries(decoded)[0];\n return {\n name,\n args,\n contract: {\n name: contractName,\n address: event.address,\n },\n };\n }).filter((e: DecodedEvent | null): e is DecodedEvent => e != null);\n }\n\n static async initialize<M extends ContractMethodsBase>(\n {\n onCompiler,\n onNode,\n bytecode,\n aci,\n address,\n sourceCodePath,\n sourceCode,\n fileSystem,\n validateBytecode,\n ...otherOptions\n }: Omit<ConstructorParameters<typeof Contract>[0], 'aci' | 'address'> & {\n validateBytecode?: boolean;\n aci?: Aci;\n address?: Encoded.ContractAddress | AensName;\n },\n ): Promise<ContractWithMethods<M>> {\n if (aci == null && onCompiler != null) {\n let res;\n if (sourceCodePath != null) res = await onCompiler.compile(sourceCodePath);\n if (sourceCode != null) res = await onCompiler.compileBySourceCode(sourceCode, fileSystem);\n if (res != null) {\n aci = res.aci;\n bytecode ??= res.bytecode;\n }\n }\n if (aci == null) throw new MissingContractDefError();\n\n let name;\n if (address != null) {\n address = await resolveName(\n address,\n 'contract_pubkey',\n { resolveByNode: true, onNode },\n ) as Encoded.ContractAddress;\n const isIris = (await onNode.getNodeInfo())\n .consensusProtocolVersion === ConsensusProtocolVersion.Iris;\n if (!isIris && isNameValid(address)) name = address;\n }\n\n if (address == null && sourceCode == null && sourceCodePath == null && bytecode == null) {\n throw new MissingContractAddressError('Can\\'t create instance by ACI without address');\n }\n\n if (address != null) {\n const contract = await getContract(address, { onNode });\n if (contract.active == null) throw new InactiveContractError(address);\n }\n\n if (validateBytecode === true) {\n if (address == null) throw new MissingContractAddressError('Can\\'t validate bytecode without contract address');\n const onChanBytecode = (await getContractByteCode(address, { onNode })).bytecode;\n let isValid = false;\n if (bytecode != null) isValid = bytecode === onChanBytecode;\n else if (sourceCode != null) {\n if (onCompiler == null) throw new IllegalArgumentError('Can\\'t validate bytecode without compiler');\n isValid = await onCompiler.validateBySourceCode(onChanBytecode, sourceCode, fileSystem);\n } else if (sourceCodePath != null) {\n if (onCompiler == null) throw new IllegalArgumentError('Can\\'t validate bytecode without compiler');\n isValid = await onCompiler.validate(onChanBytecode, sourceCodePath);\n }\n if (!isValid) {\n throw new BytecodeMismatchError((sourceCode ?? sourceCodePath) != null ? 'source code' : 'bytecode');\n }\n }\n\n return new ContractWithMethods<M>({\n onCompiler,\n onNode,\n sourceCode,\n sourceCodePath,\n bytecode,\n aci,\n address,\n name,\n fileSystem,\n ...otherOptions,\n });\n }\n\n _aci: Aci;\n\n readonly #aciContract: ContractAci;\n\n _name: string;\n\n _calldata: Calldata;\n\n $options: Omit<ConstructorParameters<typeof Contract>[0], 'aci'>;\n\n /**\n * @param options - Options\n */\n constructor({ aci, ...otherOptions }: {\n onCompiler?: CompilerBase;\n onNode: Node;\n bytecode?: Encoded.ContractBytearray;\n aci: Aci;\n address?: Encoded.ContractAddress;\n /**\n * Supported only in Ceres\n */\n name?: AensName;\n sourceCodePath?: Parameters<CompilerBase['compile']>[0];\n sourceCode?: Parameters<CompilerBase['compileBySourceCode']>[0];\n fileSystem?: Parameters<CompilerBase['compileBySourceCode']>[1];\n } & Parameters<Contract<M>['$deploy']>[1]) {\n this._aci = aci;\n const aciLast = aci[aci.length - 1];\n if (aciLast.contract == null) {\n throw new IllegalArgumentError(`The last 'aci' item should have 'contract' key, got ${Object.keys(aciLast)} keys instead`);\n }\n this.#aciContract = aciLast.contract;\n this._name = this.#aciContract.name;\n this._calldata = new Calldata(aci);\n this.$options = otherOptions;\n\n /**\n * Generate proto function based on contract function using Contract ACI schema\n * All function can be called like:\n * ```js\n * await contract.testFunction()\n * ```\n * then sdk will decide to use dry-run or send tx\n * on-chain base on if function stateful or not.\n * Also, you can manually do that:\n * ```js\n * await contract.testFunction({ callStatic: true }) // use call-static (dry-run)\n * await contract.testFunction({ callStatic: false }) // send tx on-chain\n * ```\n */\n Object.assign(\n this,\n Object.fromEntries(this.#aciContract.functions\n .map(({ name, arguments: aciArgs, stateful }: FunctionAci) => {\n const callStatic = name !== 'init' && !stateful;\n return [\n name,\n async (...args: any) => {\n const options = args.length === aciArgs.length + 1 ? args.pop() : {};\n if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options}`);\n if (name === 'init') return this.$deploy(args, { callStatic, ...options });\n return this.$call(name, args, { callStatic, ...options });\n },\n ];\n })),\n );\n }\n}\n\ninterface ContractWithMethodsClass {\n new <M extends ContractMethodsBase>(\n options: ConstructorParameters<typeof Contract>[0],\n ): ContractWithMethods<M>;\n initialize: typeof Contract['initialize'];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst ContractWithMethods: ContractWithMethodsClass = Contract as any;\n\nexport default ContractWithMethods;\n"],"mappings":"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"}
|
package/es/oracle.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ type OracleQueries = Awaited<ReturnType<Node['getOracleQueriesByPubkey']>>['orac
|
|
|
23
23
|
* @param options.onNode - Node to use
|
|
24
24
|
* @returns Callback to stop polling function
|
|
25
25
|
*/
|
|
26
|
-
export declare function pollForQueries(oracleId: Encoded.OracleAddress, onQuery: (query: OracleQueries[number]) => void, { interval,
|
|
26
|
+
export declare function pollForQueries(oracleId: Encoded.OracleAddress, onQuery: (query: OracleQueries[number]) => void, { interval, ...options }: {
|
|
27
27
|
interval?: number;
|
|
28
28
|
onNode: Node;
|
|
29
29
|
} & Parameters<typeof _getPollInterval>[1]): () => void;
|
|
@@ -37,7 +37,7 @@ export declare function pollForQueries(oracleId: Encoded.OracleAddress, onQuery:
|
|
|
37
37
|
* @param options.onNode - Node to use
|
|
38
38
|
* @returns OracleQuery object
|
|
39
39
|
*/
|
|
40
|
-
export declare function pollForQueryResponse(oracleId: Encoded.OracleAddress, queryId: Encoded.OracleQueryId, { interval,
|
|
40
|
+
export declare function pollForQueryResponse(oracleId: Encoded.OracleAddress, queryId: Encoded.OracleQueryId, { interval, ...options }: {
|
|
41
41
|
interval?: number;
|
|
42
42
|
onNode: Node;
|
|
43
43
|
} & Parameters<typeof _getPollInterval>[1]): Promise<string>;
|
package/es/oracle.mjs
CHANGED
|
@@ -25,15 +25,12 @@ import { sendTransaction } from "./send-transaction.mjs";
|
|
|
25
25
|
*/
|
|
26
26
|
export function pollForQueries(oracleId, onQuery, {
|
|
27
27
|
interval,
|
|
28
|
-
onNode,
|
|
29
28
|
...options
|
|
30
29
|
}) {
|
|
31
|
-
var _interval;
|
|
32
|
-
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = _getPollInterval('microblock', options);
|
|
33
30
|
const knownQueryIds = new Set();
|
|
34
31
|
const checkNewQueries = async () => {
|
|
35
|
-
var _await$onNode
|
|
36
|
-
const queries = ((_await$onNode
|
|
32
|
+
var _await$options$onNode;
|
|
33
|
+
const queries = ((_await$options$onNode = (await options.onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries) !== null && _await$options$onNode !== void 0 ? _await$options$onNode : []).filter(({
|
|
37
34
|
id
|
|
38
35
|
}) => !knownQueryIds.has(id));
|
|
39
36
|
queries.forEach(query => {
|
|
@@ -44,7 +41,8 @@ export function pollForQueries(oracleId, onQuery, {
|
|
|
44
41
|
let stopped = false;
|
|
45
42
|
|
|
46
43
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
47
|
-
(async
|
|
44
|
+
(async _interval => {
|
|
45
|
+
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = await _getPollInterval('micro-block', options);
|
|
48
46
|
while (!stopped) {
|
|
49
47
|
// eslint-disable-line no-unmodified-loop-condition
|
|
50
48
|
// TODO: allow to handle this error somehow
|
|
@@ -69,11 +67,10 @@ export function pollForQueries(oracleId, onQuery, {
|
|
|
69
67
|
*/
|
|
70
68
|
export async function pollForQueryResponse(oracleId, queryId, {
|
|
71
69
|
interval,
|
|
72
|
-
onNode,
|
|
73
70
|
...options
|
|
74
71
|
}) {
|
|
75
72
|
var _interval2;
|
|
76
|
-
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = _getPollInterval('
|
|
73
|
+
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = await _getPollInterval('micro-block', options);
|
|
77
74
|
let height;
|
|
78
75
|
let ttl;
|
|
79
76
|
let response;
|
|
@@ -81,13 +78,12 @@ export async function pollForQueryResponse(oracleId, queryId, {
|
|
|
81
78
|
({
|
|
82
79
|
response,
|
|
83
80
|
ttl
|
|
84
|
-
} = await onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId));
|
|
81
|
+
} = await options.onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId));
|
|
85
82
|
const responseBuffer = decode(response);
|
|
86
83
|
if (responseBuffer.length > 0) return responseBuffer.toString();
|
|
87
84
|
await pause(interval);
|
|
88
85
|
height = await getHeight({
|
|
89
86
|
...options,
|
|
90
|
-
onNode,
|
|
91
87
|
cached: true
|
|
92
88
|
});
|
|
93
89
|
} while (ttl >= height);
|