@algorandfoundation/algokit-utils 7.0.0-beta.1 → 7.0.0-beta.3
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/README.md +1 -1
- package/account/account.d.ts +7 -7
- package/account/account.js +7 -7
- package/account/account.mjs +7 -7
- package/account/get-account.d.ts +2 -2
- package/account/get-account.js +1 -1
- package/account/get-account.mjs +1 -1
- package/account/get-dispenser-account.d.ts +1 -1
- package/account/get-dispenser-account.js +1 -1
- package/account/get-dispenser-account.mjs +1 -1
- package/account/mnemonic-account.d.ts +1 -1
- package/account/mnemonic-account.js +1 -1
- package/account/mnemonic-account.mjs +1 -1
- package/app-deploy.d.ts +18 -1
- package/app-deploy.d.ts.map +1 -1
- package/app-deploy.js +142 -333
- package/app-deploy.js.map +1 -1
- package/app-deploy.mjs +145 -336
- package/app-deploy.mjs.map +1 -1
- package/app.d.ts +38 -1
- package/app.d.ts.map +1 -1
- package/app.js +113 -370
- package/app.js.map +1 -1
- package/app.mjs +114 -371
- package/app.mjs.map +1 -1
- package/asset.d.ts +5 -5
- package/asset.js +5 -5
- package/asset.mjs +5 -5
- package/debugging/debugging.js +2 -2
- package/debugging/debugging.js.map +1 -1
- package/debugging/debugging.mjs +2 -2
- package/debugging/debugging.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +12 -12
- package/index.mjs +1 -1
- package/localnet/get-kmd-wallet-account.d.ts +1 -1
- package/localnet/get-kmd-wallet-account.js +1 -1
- package/localnet/get-kmd-wallet-account.mjs +1 -1
- package/localnet/get-localnet-dispenser-account.d.ts +1 -1
- package/localnet/get-localnet-dispenser-account.js +1 -1
- package/localnet/get-localnet-dispenser-account.mjs +1 -1
- package/localnet/get-or-create-kmd-wallet-account.d.ts +1 -1
- package/localnet/get-or-create-kmd-wallet-account.js +1 -1
- package/localnet/get-or-create-kmd-wallet-account.mjs +1 -1
- package/localnet/is-localnet.d.ts +1 -1
- package/localnet/is-localnet.js +1 -1
- package/localnet/is-localnet.mjs +1 -1
- package/network-client.d.ts +2 -2
- package/network-client.d.ts.map +1 -1
- package/network-client.js +2 -2
- package/network-client.mjs +2 -2
- package/package.json +1 -1
- package/testing/fixtures/algorand-fixture.js +12 -12
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +12 -12
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/transaction/legacy-bridge.d.ts +31 -5
- package/transaction/legacy-bridge.d.ts.map +1 -1
- package/transaction/legacy-bridge.js +99 -5
- package/transaction/legacy-bridge.js.map +1 -1
- package/transaction/legacy-bridge.mjs +98 -7
- package/transaction/legacy-bridge.mjs.map +1 -1
- package/transfer/transfer-algos.d.ts +1 -1
- package/transfer/transfer-algos.js +1 -1
- package/transfer/transfer-algos.mjs +1 -1
- package/transfer/transfer.d.ts +1 -1
- package/transfer/transfer.js +1 -1
- package/transfer/transfer.mjs +1 -1
- package/types/account-manager.d.ts +1 -1
- package/types/account-manager.d.ts.map +1 -1
- package/types/algorand-client-transaction-creator.d.ts +450 -20
- package/types/algorand-client-transaction-creator.d.ts.map +1 -1
- package/types/algorand-client-transaction-creator.js +406 -22
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +406 -22
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.d.ts +750 -24
- package/types/algorand-client-transaction-sender.d.ts.map +1 -1
- package/types/algorand-client-transaction-sender.js +426 -12
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +426 -12
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +8 -0
- package/types/algorand-client.d.ts.map +1 -1
- package/types/algorand-client.js +14 -1
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +14 -1
- package/types/algorand-client.mjs.map +1 -1
- package/types/app-client.d.ts +13 -1
- package/types/app-client.d.ts.map +1 -1
- package/types/app-client.js +8 -5
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +9 -6
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +121 -0
- package/types/app-deployer.d.ts.map +1 -0
- package/types/app-deployer.js +354 -0
- package/types/app-deployer.js.map +1 -0
- package/types/app-deployer.mjs +352 -0
- package/types/app-deployer.mjs.map +1 -0
- package/types/app-manager.d.ts +235 -0
- package/types/app-manager.d.ts.map +1 -0
- package/types/app-manager.js +336 -0
- package/types/app-manager.js.map +1 -0
- package/types/app-manager.mjs +334 -0
- package/types/app-manager.mjs.map +1 -0
- package/types/app.d.ts +42 -7
- package/types/app.d.ts.map +1 -1
- package/types/app.js +1 -1
- package/types/app.js.map +1 -1
- package/types/app.mjs +1 -1
- package/types/app.mjs.map +1 -1
- package/types/client-manager.d.ts +2 -0
- package/types/client-manager.d.ts.map +1 -1
- package/types/client-manager.js +4 -0
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +4 -0
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +150 -39
- package/types/composer.d.ts.map +1 -1
- package/types/composer.js +218 -62
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +218 -62
- package/types/composer.mjs.map +1 -1
- package/types/expand.d.ts +8 -0
- package/types/expand.d.ts.map +1 -0
- package/types/expand.js +3 -0
- package/types/expand.js.map +1 -0
- package/types/expand.mjs +2 -0
- package/types/expand.mjs.map +1 -0
- package/types/transaction.d.ts +3 -0
- package/types/transaction.d.ts.map +1 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import algosdk from 'algosdk';
|
|
2
|
+
import { Config } from '../config.mjs';
|
|
3
|
+
import { lookupAccountCreatedApplicationByAddress, searchTransactions } from '../indexer-lookup.mjs';
|
|
4
|
+
import { APP_DEPLOY_NOTE_DAPP, OnSchemaBreak, OnUpdate } from './app.mjs';
|
|
5
|
+
import AlgoKitComposer from './composer.mjs';
|
|
6
|
+
|
|
7
|
+
/** Allows management of deployment and deployment metadata of applications. */
|
|
8
|
+
class AppDeployer {
|
|
9
|
+
/**
|
|
10
|
+
* Creates an `AppManager`
|
|
11
|
+
* @param appManager An `AppManager` instance
|
|
12
|
+
* @param transactionSender An `AlgorandClientTransactionSender` instance
|
|
13
|
+
* @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata
|
|
14
|
+
*/
|
|
15
|
+
constructor(appManager, transactionSender, indexer) {
|
|
16
|
+
this._appLookups = new Map();
|
|
17
|
+
this._appManager = appManager;
|
|
18
|
+
this._transactionSender = transactionSender;
|
|
19
|
+
this._indexer = indexer;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).
|
|
23
|
+
*
|
|
24
|
+
* To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md
|
|
25
|
+
*
|
|
26
|
+
* **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.
|
|
27
|
+
*
|
|
28
|
+
* **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.
|
|
29
|
+
*
|
|
30
|
+
* **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.
|
|
31
|
+
* @param deployment The arguments to control the app deployment
|
|
32
|
+
* @returns The app reference of the new/existing app
|
|
33
|
+
*/
|
|
34
|
+
async deploy(deployment) {
|
|
35
|
+
const { metadata, deployTimeParams, onSchemaBreak, onUpdate, createParams, updateParams, deleteParams, executeParams, existingDeployments, ignoreCache, } = deployment;
|
|
36
|
+
// Set creation note
|
|
37
|
+
createParams.note = updateParams.note = AlgoKitComposer.arc2Note({
|
|
38
|
+
dAppName: APP_DEPLOY_NOTE_DAPP,
|
|
39
|
+
data: metadata,
|
|
40
|
+
format: 'j',
|
|
41
|
+
});
|
|
42
|
+
// Check for required fields
|
|
43
|
+
if (existingDeployments && existingDeployments.creator !== createParams.sender) {
|
|
44
|
+
throw new Error(`Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${createParams.sender}`);
|
|
45
|
+
}
|
|
46
|
+
if (!existingDeployments && !this._indexer) {
|
|
47
|
+
throw new Error(`Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`);
|
|
48
|
+
}
|
|
49
|
+
Config.getLogger(executeParams?.suppressLog).info(`Idempotently deploying app "${metadata.name}" from creator ${createParams.sender} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`);
|
|
50
|
+
// Compile code if required
|
|
51
|
+
const compiledApproval = typeof createParams.approvalProgram === 'string'
|
|
52
|
+
? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)
|
|
53
|
+
: undefined;
|
|
54
|
+
const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram;
|
|
55
|
+
const compiledClear = typeof createParams.clearStateProgram === 'string'
|
|
56
|
+
? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)
|
|
57
|
+
: undefined;
|
|
58
|
+
const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram;
|
|
59
|
+
// Define routines for create, update, and replace
|
|
60
|
+
const createApp = async () => {
|
|
61
|
+
const result = await ('method' in createParams
|
|
62
|
+
? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...executeParams })
|
|
63
|
+
: this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...executeParams }));
|
|
64
|
+
const appMetadata = {
|
|
65
|
+
appId: result.appId,
|
|
66
|
+
appAddress: result.appAddress,
|
|
67
|
+
...metadata,
|
|
68
|
+
createdMetadata: metadata,
|
|
69
|
+
createdRound: BigInt(result.confirmation.confirmedRound),
|
|
70
|
+
updatedRound: BigInt(result.confirmation.confirmedRound),
|
|
71
|
+
deleted: false,
|
|
72
|
+
};
|
|
73
|
+
this.updateAppLookup(createParams.sender, appMetadata);
|
|
74
|
+
return {
|
|
75
|
+
operationPerformed: 'create',
|
|
76
|
+
compiledApproval,
|
|
77
|
+
compiledClear,
|
|
78
|
+
...result,
|
|
79
|
+
...appMetadata,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const updateApp = async (existingApp) => {
|
|
83
|
+
Config.getLogger(executeParams?.suppressLog).info(`Updating existing ${metadata.name} app for ${createParams.sender} to version ${metadata.version}.`);
|
|
84
|
+
const result = await ('method' in updateParams
|
|
85
|
+
? this._transactionSender.appUpdateMethodCall({
|
|
86
|
+
appId: existingApp.appId,
|
|
87
|
+
approvalProgram,
|
|
88
|
+
clearStateProgram,
|
|
89
|
+
...updateParams,
|
|
90
|
+
...executeParams,
|
|
91
|
+
})
|
|
92
|
+
: this._transactionSender.appUpdate({
|
|
93
|
+
appId: existingApp.appId,
|
|
94
|
+
approvalProgram,
|
|
95
|
+
clearStateProgram,
|
|
96
|
+
...updateParams,
|
|
97
|
+
...executeParams,
|
|
98
|
+
}));
|
|
99
|
+
const appMetadata = {
|
|
100
|
+
appId: existingApp.appId,
|
|
101
|
+
appAddress: existingApp.appAddress,
|
|
102
|
+
createdMetadata: existingApp.createdMetadata,
|
|
103
|
+
createdRound: existingApp.createdRound,
|
|
104
|
+
updatedRound: BigInt(result.confirmation.confirmedRound),
|
|
105
|
+
...metadata,
|
|
106
|
+
deleted: false,
|
|
107
|
+
};
|
|
108
|
+
this.updateAppLookup(createParams.sender, appMetadata);
|
|
109
|
+
return {
|
|
110
|
+
operationPerformed: 'update',
|
|
111
|
+
compiledApproval,
|
|
112
|
+
compiledClear,
|
|
113
|
+
...result,
|
|
114
|
+
...appMetadata,
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const replaceApp = async (existingApp) => {
|
|
118
|
+
Config.getLogger(executeParams?.suppressLog).info(`Deploying a new ${metadata.name} app for ${createParams.sender}; deploying app with version ${metadata.version}.`);
|
|
119
|
+
Config.getLogger(executeParams?.suppressLog).warn(`Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${deleteParams.sender} account.`);
|
|
120
|
+
const composer = this._transactionSender.newGroup();
|
|
121
|
+
if ('method' in createParams) {
|
|
122
|
+
composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram });
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram });
|
|
126
|
+
}
|
|
127
|
+
const createIndex = await composer.count();
|
|
128
|
+
if ('method' in deleteParams) {
|
|
129
|
+
composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
composer.addAppDelete({ appId: existingApp.appId, ...deleteParams });
|
|
133
|
+
}
|
|
134
|
+
const result = await composer.execute({ ...executeParams, suppressLog: true });
|
|
135
|
+
const confirmation = result.confirmations.at(createIndex - 1);
|
|
136
|
+
const transaction = result.transactions.at(createIndex - 1);
|
|
137
|
+
const deleteTransaction = result.transactions.at(-1);
|
|
138
|
+
Config.getLogger(executeParams?.suppressLog).warn(`Sent transactions ${transaction.txID()} to create app with id ${confirmation.applicationIndex} and ${deleteTransaction.txID()} to delete app with id ${existingApp.appId} from ${createParams.sender} account.`);
|
|
139
|
+
const appMetadata = {
|
|
140
|
+
appId: BigInt(confirmation.applicationIndex),
|
|
141
|
+
appAddress: algosdk.getApplicationAddress(confirmation.applicationIndex),
|
|
142
|
+
...metadata,
|
|
143
|
+
createdMetadata: metadata,
|
|
144
|
+
createdRound: BigInt(confirmation.confirmedRound),
|
|
145
|
+
updatedRound: BigInt(confirmation.confirmedRound),
|
|
146
|
+
deleted: false,
|
|
147
|
+
};
|
|
148
|
+
this.updateAppLookup(createParams.sender, appMetadata);
|
|
149
|
+
return {
|
|
150
|
+
operationPerformed: 'replace',
|
|
151
|
+
...result,
|
|
152
|
+
compiledApproval,
|
|
153
|
+
compiledClear,
|
|
154
|
+
transaction,
|
|
155
|
+
confirmation,
|
|
156
|
+
return: 'method' in createParams ? result.returns?.[0] : undefined,
|
|
157
|
+
deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,
|
|
158
|
+
...appMetadata,
|
|
159
|
+
deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1) },
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
// Lookup existing app metadata
|
|
163
|
+
const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache));
|
|
164
|
+
const existingApp = apps.apps[metadata.name];
|
|
165
|
+
if (!existingApp || existingApp.deleted) {
|
|
166
|
+
Config.getLogger(executeParams?.suppressLog).info(`App ${metadata.name} not found in apps created by ${createParams.sender}; deploying app with version ${metadata.version}.`);
|
|
167
|
+
return await createApp();
|
|
168
|
+
}
|
|
169
|
+
Config.getLogger(executeParams?.suppressLog).info(`Existing app ${metadata.name} found by creator ${createParams.sender}, with app id ${existingApp.appId} and version ${existingApp.version}.`);
|
|
170
|
+
const existingAppRecord = await this._appManager.getById(existingApp.appId);
|
|
171
|
+
const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64');
|
|
172
|
+
const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64');
|
|
173
|
+
const newApproval = Buffer.from(approvalProgram).toString('base64');
|
|
174
|
+
const newClear = Buffer.from(clearStateProgram).toString('base64');
|
|
175
|
+
// Check for changes
|
|
176
|
+
const isUpdate = newApproval !== existingApproval || newClear !== existingClear;
|
|
177
|
+
const isSchemaBreak = existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||
|
|
178
|
+
existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||
|
|
179
|
+
existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||
|
|
180
|
+
existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0);
|
|
181
|
+
if (isSchemaBreak) {
|
|
182
|
+
Config.getLogger(executeParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {
|
|
183
|
+
from: {
|
|
184
|
+
globalInts: existingAppRecord.globalInts,
|
|
185
|
+
globalByteSlices: existingAppRecord.globalByteSlices,
|
|
186
|
+
localInts: existingAppRecord.localInts,
|
|
187
|
+
localByteSlices: existingAppRecord.localByteSlices,
|
|
188
|
+
},
|
|
189
|
+
to: createParams.schema,
|
|
190
|
+
});
|
|
191
|
+
if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {
|
|
192
|
+
throw new Error('Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +
|
|
193
|
+
'If you want to try deleting and recreating the app then ' +
|
|
194
|
+
're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp');
|
|
195
|
+
}
|
|
196
|
+
if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {
|
|
197
|
+
Config.getLogger(executeParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app');
|
|
198
|
+
return await createApp();
|
|
199
|
+
}
|
|
200
|
+
if (existingApp.deletable) {
|
|
201
|
+
Config.getLogger(executeParams?.suppressLog).info('App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app');
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
Config.getLogger(executeParams?.suppressLog).info('App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail');
|
|
205
|
+
}
|
|
206
|
+
return await replaceApp(existingApp);
|
|
207
|
+
}
|
|
208
|
+
if (isUpdate) {
|
|
209
|
+
Config.getLogger(executeParams?.suppressLog).info(`Detected a TEAL update in app ${existingApp.appId} for creator ${createParams.sender}`);
|
|
210
|
+
if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {
|
|
211
|
+
throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.');
|
|
212
|
+
}
|
|
213
|
+
if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {
|
|
214
|
+
Config.getLogger(executeParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app');
|
|
215
|
+
return await createApp();
|
|
216
|
+
}
|
|
217
|
+
if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {
|
|
218
|
+
if (existingApp.updatable) {
|
|
219
|
+
Config.getLogger(executeParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
Config.getLogger(executeParams?.suppressLog).warn(`App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`);
|
|
223
|
+
}
|
|
224
|
+
return await updateApp(existingApp);
|
|
225
|
+
}
|
|
226
|
+
if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {
|
|
227
|
+
if (existingApp.deletable) {
|
|
228
|
+
Config.getLogger(executeParams?.suppressLog).warn('App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...');
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
Config.getLogger(executeParams?.suppressLog).warn('App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail');
|
|
232
|
+
}
|
|
233
|
+
return await replaceApp(existingApp);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
Config.getLogger(executeParams?.suppressLog).debug('No detected changes in app, nothing to do.');
|
|
237
|
+
return { ...existingApp, operationPerformed: 'nothing' };
|
|
238
|
+
}
|
|
239
|
+
updateAppLookup(sender, appMetadata) {
|
|
240
|
+
const lookup = this._appLookups.get(sender);
|
|
241
|
+
if (!lookup) {
|
|
242
|
+
this._appLookups.set(sender, { creator: sender, apps: { [appMetadata.name]: appMetadata } });
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
lookup.apps[appMetadata.name] = appMetadata;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have
|
|
250
|
+
* an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction
|
|
251
|
+
* note of the app creation transaction.
|
|
252
|
+
*
|
|
253
|
+
* This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.
|
|
254
|
+
*
|
|
255
|
+
* If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.
|
|
256
|
+
*
|
|
257
|
+
* @param creatorAddress The address of the account that is the creator of the apps you want to search for
|
|
258
|
+
* @param ignoreCache Whether ot not to ignore the cache and force a lookup, default: use the cache
|
|
259
|
+
* @returns A name-based lookup of the app metadata
|
|
260
|
+
*/
|
|
261
|
+
async getCreatorAppsByName(creatorAddress, ignoreCache) {
|
|
262
|
+
const appLookup = {};
|
|
263
|
+
if (!ignoreCache && this._appLookups.has(creatorAddress)) {
|
|
264
|
+
return this._appLookups.get(creatorAddress);
|
|
265
|
+
}
|
|
266
|
+
if (!this._indexer) {
|
|
267
|
+
throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`);
|
|
268
|
+
}
|
|
269
|
+
// Extract all apps that account created
|
|
270
|
+
const createdApps = (await lookupAccountCreatedApplicationByAddress(this._indexer, creatorAddress))
|
|
271
|
+
.map((a) => {
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
273
|
+
return { id: BigInt(a.id), createdAtRound: a['created-at-round'], deleted: a.deleted };
|
|
274
|
+
})
|
|
275
|
+
.sort((a, b) => a.createdAtRound - b.createdAtRound);
|
|
276
|
+
// For each app that account created (in parallel)...
|
|
277
|
+
const apps = await Promise.all(createdApps.map(async (createdApp) => {
|
|
278
|
+
// Find any app transactions for that app in the round it was created (should always just be a single creation transaction)
|
|
279
|
+
const appTransactions = await searchTransactions(this._indexer, (s) => s
|
|
280
|
+
.minRound(createdApp.createdAtRound)
|
|
281
|
+
.txType(algosdk.TransactionType.appl)
|
|
282
|
+
.applicationID(Number(createdApp.id))
|
|
283
|
+
.address(creatorAddress)
|
|
284
|
+
.addressRole('sender')
|
|
285
|
+
.notePrefix(Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64')));
|
|
286
|
+
// Triple check the transaction is intact by filtering for the one we want:
|
|
287
|
+
// * application-id is 0 when the app is first created
|
|
288
|
+
// * also verify the sender to prevent a potential security risk
|
|
289
|
+
const appCreationTransaction = appTransactions.transactions.filter(
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
291
|
+
(t) => t['application-transaction']['application-id'] === 0 && t.sender === creatorAddress)[0];
|
|
292
|
+
const latestAppUpdateTransaction = appTransactions.transactions
|
|
293
|
+
.filter((t) => t.sender === creatorAddress)
|
|
294
|
+
.sort((a, b) => a['confirmed-round'] === b['confirmed-round']
|
|
295
|
+
? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
296
|
+
(b['intra-round-offset'] - a['intra-round-offset']) / 10
|
|
297
|
+
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
298
|
+
b['confirmed-round'] - a['confirmed-round'])[0];
|
|
299
|
+
if (!appCreationTransaction?.note)
|
|
300
|
+
// No note; ignoring
|
|
301
|
+
return null;
|
|
302
|
+
return { createdApp, appCreationTransaction, latestAppUpdateTransaction };
|
|
303
|
+
}));
|
|
304
|
+
apps
|
|
305
|
+
.filter((a) => a !== null)
|
|
306
|
+
.forEach((a) => {
|
|
307
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
308
|
+
const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a;
|
|
309
|
+
const parseNote = (note) => {
|
|
310
|
+
if (!note) {
|
|
311
|
+
// No note; ignoring...
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const decoder = new TextDecoder();
|
|
315
|
+
const noteAsBase64 = decoder.decode(Buffer.from(note));
|
|
316
|
+
const noteAsString = Buffer.from(noteAsBase64, 'base64').toString('utf-8');
|
|
317
|
+
if (!noteAsString.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))
|
|
318
|
+
// Clearly not APP_DEPLOY JSON; ignoring...
|
|
319
|
+
return;
|
|
320
|
+
return JSON.parse(noteAsString.substring(APP_DEPLOY_NOTE_DAPP.length + 2));
|
|
321
|
+
};
|
|
322
|
+
try {
|
|
323
|
+
const creationNote = parseNote(appCreationTransaction.note);
|
|
324
|
+
const updateNote = parseNote(latestAppUpdateTransaction.note);
|
|
325
|
+
if (creationNote?.name) {
|
|
326
|
+
appLookup[creationNote.name] = {
|
|
327
|
+
appId: createdApp.id,
|
|
328
|
+
appAddress: algosdk.getApplicationAddress(createdApp.id),
|
|
329
|
+
createdMetadata: creationNote,
|
|
330
|
+
createdRound: BigInt(appCreationTransaction['confirmed-round'] ?? 0),
|
|
331
|
+
...(updateNote ?? creationNote),
|
|
332
|
+
updatedRound: BigInt(latestAppUpdateTransaction?.['confirmed-round'] ?? 0),
|
|
333
|
+
deleted: createdApp.deleted ?? false,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
Config.logger.warn(`Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`, e);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
const lookup = {
|
|
343
|
+
creator: creatorAddress,
|
|
344
|
+
apps: appLookup,
|
|
345
|
+
};
|
|
346
|
+
this._appLookups.set(creatorAddress, lookup);
|
|
347
|
+
return lookup;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export { AppDeployer };
|
|
352
|
+
//# sourceMappingURL=app-deployer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-deployer.mjs","sources":["../../src/types/app-deployer.ts"],"sourcesContent":[null],"names":["indexer.lookupAccountCreatedApplicationByAddress","indexer.searchTransactions"],"mappings":";;;;;;AAsGA;MACa,WAAW,CAAA;AAMtB;;;;;AAKG;AACH,IAAA,WAAA,CAAY,UAAsB,EAAE,iBAAkD,EAAE,OAAyB,EAAA;AARzG,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;AAShD,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;AAC7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;KACxB;AAED;;;;;;;;;;;;AAYG;IACH,MAAM,MAAM,CAAC,UAA2B,EAAA;QACtC,MAAM,EACJ,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,GAAG,UAAU,CAAA;;QAId,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC;AAC/D,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC,CAAA;;QAIF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,KAAK,YAAY,CAAC,MAAM,EAAE;AAC9E,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,uDAAA,EAA0D,mBAAmB,CAAC,OAAO,CAAA,uCAAA,EAA0C,YAAY,CAAC,MAAM,CAAA,CAAE,CACrJ,CAAA;SACF;QACD,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,sJAAA,CAAwJ,CACzJ,CAAA;SACF;AAED,QAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAA+B,4BAAA,EAAA,QAAQ,CAAC,IAAI,CAAkB,eAAA,EAAA,YAAY,CAAC,MAAM,CAAU,OAAA,EAAA,YAAY,CAAC,eAAe,CAAC,MAAM,CAAa,UAAA,EAAA,OAAO,YAAY,CAAC,eAAe,KAAK,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAQ,KAAA,EAAA,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAa,UAAA,EAAA,OAAO,YAAY,CAAC,eAAe,KAAK,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAA,CAAE,CACtW,CAAA;;AAID,QAAA,MAAM,gBAAgB,GACpB,OAAO,YAAY,CAAC,eAAe,KAAK,QAAQ;AAC9C,cAAE,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,YAAY,CAAC,eAAe,EAAE,gBAAgB,EAAE,QAAQ,CAAC;cACpG,SAAS,CAAA;AACf,QAAA,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,qBAAqB,GAAG,YAAY,CAAC,eAAe,CAAA;AAEhH,QAAA,MAAM,aAAa,GACjB,OAAO,YAAY,CAAC,iBAAiB,KAAK,QAAQ;AAChD,cAAE,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;cAC5F,SAAS,CAAA;AACf,QAAA,MAAM,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAC,qBAAqB,GAAG,YAAY,CAAC,iBAAiB,CAAA;;AAI9G,QAAA,MAAM,SAAS,GAAG,YAAW;AAC3B,YAAA,MAAM,MAAM,GAAG,OAAO,QAAQ,IAAI,YAAY;AAC5C,kBAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAAE,GAAG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAC;kBACtH,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,GAAG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,CAAA;AACjH,YAAA,MAAM,WAAW,GAAgB;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,gBAAA,GAAG,QAAQ;AACX,gBAAA,eAAe,EAAE,QAAQ;gBACzB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAe,CAAC;gBACzD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAe,CAAC;AACzD,gBAAA,OAAO,EAAE,KAAK;aACf,CAAA;YACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YACtD,OAAO;AACL,gBAAA,kBAAkB,EAAE,QAAQ;gBAC5B,gBAAgB;gBAChB,aAAa;AACb,gBAAA,GAAG,MAAM;AACT,gBAAA,GAAG,WAAW;aAC2E,CAAA;AAC7F,SAAC,CAAA;AACD,QAAA,MAAM,SAAS,GAAG,OAAO,WAAwB,KAAI;YACnD,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAqB,kBAAA,EAAA,QAAQ,CAAC,IAAI,CAAA,SAAA,EAAY,YAAY,CAAC,MAAM,CAAA,YAAA,EAAe,QAAQ,CAAC,OAAO,CAAG,CAAA,CAAA,CACpG,CAAA;AACD,YAAA,MAAM,MAAM,GAAG,OAAO,QAAQ,IAAI,YAAY;AAC5C,kBAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;oBAC1C,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,eAAe;oBACf,iBAAiB;AACjB,oBAAA,GAAG,YAAY;AACf,oBAAA,GAAG,aAAa;iBACjB,CAAC;AACJ,kBAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;oBAChC,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,eAAe;oBACf,iBAAiB;AACjB,oBAAA,GAAG,YAAY;AACf,oBAAA,GAAG,aAAa;AACjB,iBAAA,CAAC,CAAC,CAAA;AACP,YAAA,MAAM,WAAW,GAAgB;gBAC/B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,eAAe,EAAE,WAAW,CAAC,eAAe;gBAC5C,YAAY,EAAE,WAAW,CAAC,YAAY;gBACtC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAe,CAAC;AACzD,gBAAA,GAAG,QAAQ;AACX,gBAAA,OAAO,EAAE,KAAK;aACf,CAAA;YACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YACtD,OAAO;AACL,gBAAA,kBAAkB,EAAE,QAAQ;gBAC5B,gBAAgB;gBAChB,aAAa;AACb,gBAAA,GAAG,MAAM;AACT,gBAAA,GAAG,WAAW;aAC2E,CAAA;AAC7F,SAAC,CAAA;AACD,QAAA,MAAM,UAAU,GAAG,OAAO,WAAwB,KAAI;YACpD,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAmB,gBAAA,EAAA,QAAQ,CAAC,IAAI,CAAA,SAAA,EAAY,YAAY,CAAC,MAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAC,OAAO,CAAG,CAAA,CAAA,CACnH,CAAA;YAED,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAqB,kBAAA,EAAA,QAAQ,CAAC,IAAI,CAAA,aAAA,EAAgB,WAAW,CAAC,KAAK,CAAA,MAAA,EAAS,YAAY,CAAC,MAAM,CAAW,SAAA,CAAA,CAC3G,CAAA;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAA;AACnD,YAAA,IAAI,QAAQ,IAAI,YAAY,EAAE;AAC5B,gBAAA,QAAQ,CAAC,sBAAsB,CAAC,EAAE,GAAG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAA;aACzF;iBAAM;AACL,gBAAA,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAA;aAC/E;AACD,YAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;AAC1C,YAAA,IAAI,QAAQ,IAAI,YAAY,EAAE;AAC5B,gBAAA,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC,CAAA;aAC/E;iBAAM;AACL,gBAAA,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC,CAAA;aACrE;AACD,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9E,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAE,CAAA;AAC9D,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAE,CAAA;YAC5D,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;AAErD,YAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAqB,kBAAA,EAAA,WAAW,CAAC,IAAI,EAAE,CAA0B,uBAAA,EAAA,YAAY,CAAC,gBAAgB,CAAQ,KAAA,EAAA,iBAAiB,CAAC,IAAI,EAAE,CAC5H,uBAAA,EAAA,WAAW,CAAC,KACd,SAAS,YAAY,CAAC,MAAM,CAAA,SAAA,CAAW,CACxC,CAAA;AAED,YAAA,MAAM,WAAW,GAAgB;AAC/B,gBAAA,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,gBAAiB,CAAC;gBAC7C,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAY,CAAC,gBAAiB,CAAC;AACzE,gBAAA,GAAG,QAAQ;AACX,gBAAA,eAAe,EAAE,QAAQ;AACzB,gBAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,cAAe,CAAC;AAClD,gBAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,cAAe,CAAC;AAClD,gBAAA,OAAO,EAAE,KAAK;aACf,CAAA;YACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAEtD,OAAO;AACL,gBAAA,kBAAkB,EAAE,SAAS;AAC7B,gBAAA,GAAG,MAAM;gBACT,gBAAgB;gBAChB,aAAa;gBACb,WAAW;gBACX,YAAY;AACZ,gBAAA,MAAM,EAAE,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;AAClE,gBAAA,YAAY,EAAE,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAC3E,gBAAA,GAAG,WAAW;AACd,gBAAA,YAAY,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE;aAK3F,CAAA;AACL,SAAC,CAAA;;AAID,QAAA,MAAM,IAAI,GAAG,mBAAmB,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;QAEvG,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,EAAE;YACvC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAO,IAAA,EAAA,QAAQ,CAAC,IAAI,CAAA,8BAAA,EAAiC,YAAY,CAAC,MAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAC,OAAO,CAAG,CAAA,CAAA,CAC5H,CAAA;YAED,OAAO,MAAM,SAAS,EAAE,CAAA;SACzB;AAED,QAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAgB,aAAA,EAAA,QAAQ,CAAC,IAAI,CAAqB,kBAAA,EAAA,YAAY,CAAC,MAAM,CAAiB,cAAA,EAAA,WAAW,CAAC,KAAK,CAAgB,aAAA,EAAA,WAAW,CAAC,OAAO,CAAG,CAAA,CAAA,CAC9I,CAAA;AAED,QAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AAC3E,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC1F,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAEzF,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACnE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;;QAIlE,MAAM,QAAQ,GAAG,WAAW,KAAK,gBAAgB,IAAI,QAAQ,KAAK,aAAa,CAAA;AAC/E,QAAA,MAAM,aAAa,GACjB,iBAAiB,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;YACnE,iBAAiB,CAAC,UAAU,IAAI,YAAY,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;YACrE,iBAAiB,CAAC,eAAe,IAAI,YAAY,CAAC,MAAM,EAAE,eAAe,IAAI,CAAC,CAAC;AAC/E,YAAA,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAA;QAEnF,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAgD,6CAAA,EAAA,WAAW,CAAC,KAAK,GAAG,EAAE;AACtH,gBAAA,IAAI,EAAE;oBACJ,UAAU,EAAE,iBAAiB,CAAC,UAAU;oBACxC,gBAAgB,EAAE,iBAAiB,CAAC,gBAAgB;oBACpD,SAAS,EAAE,iBAAiB,CAAC,SAAS;oBACtC,eAAe,EAAE,iBAAiB,CAAC,eAAe;AACnD,iBAAA;gBACD,EAAE,EAAE,YAAY,CAAC,MAAM;AACxB,aAAA,CAAC,CAAA;AAEF,YAAA,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,aAAa,CAAC,IAAI,EAAE;gBACnG,MAAM,IAAI,KAAK,CACb,mFAAmF;oBACjF,0DAA0D;AAC1D,oBAAA,oDAAoD,CACvD,CAAA;aACF;YAED,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS,EAAE;AAC3E,gBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;gBAC9G,OAAO,MAAM,SAAS,EAAE,CAAA;aACzB;AAED,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE;AACzB,gBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,kGAAkG,CACnG,CAAA;aACF;iBAAM;AACL,gBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,6GAA6G,CAC9G,CAAA;aACF;AAED,YAAA,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,CAAA;SACrC;QAED,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,iCAAiC,WAAW,CAAC,KAAK,CAAgB,aAAA,EAAA,YAAY,CAAC,MAAM,CAAA,CAAE,CACxF,CAAA;AAED,YAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC/E,gBAAA,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAA;aACvH;YAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE;AAC5D,gBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;gBACzG,OAAO,MAAM,SAAS,EAAE,CAAA;aACzB;YAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE;AAC5D,gBAAA,IAAI,WAAW,CAAC,SAAS,EAAE;AACzB,oBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAA0D,wDAAA,CAAA,CAAC,CAAA;iBAC9G;qBAAM;AACL,oBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAuG,qGAAA,CAAA,CACxG,CAAA;iBACF;AAED,gBAAA,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,CAAA;aACpC;YAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE;AAC9D,gBAAA,IAAI,WAAW,CAAC,SAAS,EAAE;AACzB,oBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,oFAAoF,CACrF,CAAA;iBACF;qBAAM;AACL,oBAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/C,+HAA+H,CAChI,CAAA;iBACF;AAED,gBAAA,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,CAAA;aACrC;SACF;AAED,QAAA,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAEhG,OAAO,EAAE,GAAG,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAA;KACzD;IAEO,eAAe,CAAC,MAAc,EAAE,WAAwB,EAAA;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,EAAE,EAAE,CAAC,CAAA;SAC7F;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAA;SAC5C;KACF;AAED;;;;;;;;;;;;AAYG;AACH,IAAA,MAAM,oBAAoB,CAAC,cAAsB,EAAE,WAAqB,EAAA;QACtE,MAAM,SAAS,GAAgC,EAAE,CAAA;AAEjD,QAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YACxD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAE,CAAA;SAC7C;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wGAAA,CAA0G,CAAC,CAAA;SAC5H;;AAGD,QAAA,MAAM,WAAW,GAAG,CAAC,MAAMA,wCAAgD,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;AACvG,aAAA,GAAG,CAAC,CAAC,CAAC,KAAI;;YAET,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,kBAAkB,CAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;AACzF,SAAC,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAA;;AAGtD,QAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,WAAW,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;;AAEnC,YAAA,MAAM,eAAe,GAAG,MAAMC,kBAA0B,CAAC,IAAI,CAAC,QAAS,EAAE,CAAC,CAAC,KACzE,CAAC;AACE,iBAAA,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;AACnC,iBAAA,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;AACpC,iBAAA,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;iBACpC,OAAO,CAAC,cAAc,CAAC;iBACvB,WAAW,CAAC,QAAQ,CAAC;AACrB,iBAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACpE,CAAA;;;;AAKD,YAAA,MAAM,sBAAsB,GAAG,eAAe,CAAC,YAAY,CAAC,MAAM;;YAEhE,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,CAC5F,CAAC,CAAC,CAAC,CAAA;AAEJ,YAAA,MAAM,0BAA0B,GAAG,eAAe,CAAC,YAAY;iBAC5D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC;AAC1C,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACT,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AAC3C;oBACE,CAAC,CAAC,CAAC,oBAAoB,CAAE,GAAG,CAAC,CAAC,oBAAoB,CAAE,IAAI,EAAE;AAC5D;AACE,oBAAA,CAAC,CAAC,iBAAiB,CAAE,GAAG,CAAC,CAAC,iBAAiB,CAAE,CAClD,CAAC,CAAC,CAAC,CAAA;YAEN,IAAI,CAAC,sBAAsB,EAAE,IAAI;;AAE/B,gBAAA,OAAO,IAAI,CAAA;AAEb,YAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,CAAA;SAC1E,CAAC,CACH,CAAA;QAED,IAAI;aACD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACzB,aAAA,OAAO,CAAC,CAAC,CAAC,KAAI;;YAEb,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,GAAG,CAAE,CAAA;AAE7E,YAAA,MAAM,SAAS,GAAG,CAAC,IAAa,KAAI;gBAClC,IAAI,CAAC,IAAI,EAAE;;oBAET,OAAM;iBACP;AAED,gBAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AACjC,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACtD,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAE1E,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAG,EAAA,oBAAoB,KAAK,CAAC;;oBAExD,OAAM;AAER,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAsB,CAAA;AACjG,aAAC,CAAA;AAED,YAAA,IAAI;gBACF,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;gBAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAA;AAC7D,gBAAA,IAAI,YAAY,EAAE,IAAI,EAAE;AACtB,oBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG;wBAC7B,KAAK,EAAE,UAAU,CAAC,EAAE;wBACpB,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;AACxD,wBAAA,eAAe,EAAE,YAAY;wBAC7B,YAAY,EAAE,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACpE,wBAAA,IAAI,UAAU,IAAI,YAAY;wBAC9B,YAAY,EAAE,MAAM,CAAC,0BAA0B,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC1E,wBAAA,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,KAAK;qBACrC,CAAA;iBACF;aACF;YAAC,OAAO,CAAC,EAAE;AACV,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,CAA8C,2CAAA,EAAA,UAAU,CAAC,EAAE,gBAAgB,cAAc,CAAA,kBAAA,CAAoB,EAC7G,CAAC,CACF,CAAA;gBACD,OAAM;aACP;AACH,SAAC,CAAC,CAAA;AAEJ,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,IAAI,EAAE,SAAS;SAChB,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AAE5C,QAAA,OAAO,MAAM,CAAA;KACd;AACF;;;;"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import algosdk from 'algosdk';
|
|
2
|
+
import { TransactionSignerAccount } from './account';
|
|
3
|
+
import { BoxName, type ABIReturn, type AppDeployMetadata, type AppState, type CompiledTeal, type TealTemplateParams } from './app';
|
|
4
|
+
import modelsv2 = algosdk.modelsv2;
|
|
5
|
+
/** Information about an app. */
|
|
6
|
+
export interface AppInformation {
|
|
7
|
+
/** The ID of the app. */
|
|
8
|
+
appId: bigint;
|
|
9
|
+
/** The escrow address that the app operates with. */
|
|
10
|
+
appAddress: string;
|
|
11
|
+
/**
|
|
12
|
+
* Approval program.
|
|
13
|
+
*/
|
|
14
|
+
approvalProgram: Uint8Array;
|
|
15
|
+
/**
|
|
16
|
+
* Clear state program.
|
|
17
|
+
*/
|
|
18
|
+
clearStateProgram: Uint8Array;
|
|
19
|
+
/**
|
|
20
|
+
* The address that created this application. This is the address where the
|
|
21
|
+
* parameters and global state for this application can be found.
|
|
22
|
+
*/
|
|
23
|
+
creator: string;
|
|
24
|
+
/**
|
|
25
|
+
* Current global state values.
|
|
26
|
+
*/
|
|
27
|
+
globalState: AppState;
|
|
28
|
+
/** The number of allocated ints in per-user local state. */
|
|
29
|
+
localInts: number;
|
|
30
|
+
/** The number of allocated byte slices in per-user local state. */
|
|
31
|
+
localByteSlices: number;
|
|
32
|
+
/** The number of allocated ints in global state. */
|
|
33
|
+
globalInts: number;
|
|
34
|
+
/** The number of allocated byte slices in global state. */
|
|
35
|
+
globalByteSlices: number;
|
|
36
|
+
/** Any extra pages that are needed for the smart contract. */
|
|
37
|
+
extraProgramPages?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Something that identifies an app box name - either a:
|
|
41
|
+
* * `Uint8Array` (the actual binary of the box name)
|
|
42
|
+
* * `string` (that will be encoded to a `Uint8Array`)
|
|
43
|
+
* * `TransactionSignerAccount` (that will be encoded into the
|
|
44
|
+
* public key address of the corresponding account)
|
|
45
|
+
*/
|
|
46
|
+
export type BoxIdentifier = string | Uint8Array | TransactionSignerAccount;
|
|
47
|
+
/**
|
|
48
|
+
* A grouping of the app ID and name identifier to reference an app box.
|
|
49
|
+
*/
|
|
50
|
+
export interface BoxReference {
|
|
51
|
+
/**
|
|
52
|
+
* A unique application id
|
|
53
|
+
*/
|
|
54
|
+
appId: bigint;
|
|
55
|
+
/**
|
|
56
|
+
* Identifier for a box name
|
|
57
|
+
*/
|
|
58
|
+
name: BoxIdentifier;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parameters to get and decode a box value as an ABI type.
|
|
62
|
+
*/
|
|
63
|
+
export interface BoxValueRequestParams {
|
|
64
|
+
/** The ID of the app return box names for */
|
|
65
|
+
appId: bigint;
|
|
66
|
+
/** The name of the box to return either as a string, binary array or `BoxName` */
|
|
67
|
+
boxName: BoxIdentifier;
|
|
68
|
+
/** The ABI type to decode the value using */
|
|
69
|
+
type: algosdk.ABIType;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parameters to get and decode a box value as an ABI type.
|
|
73
|
+
*/
|
|
74
|
+
export interface BoxValuesRequestParams {
|
|
75
|
+
/** The ID of the app return box names for */
|
|
76
|
+
appId: bigint;
|
|
77
|
+
/** The names of the boxes to return either as a string, binary array or BoxName` */
|
|
78
|
+
boxNames: BoxIdentifier[];
|
|
79
|
+
/** The ABI type to decode the value using */
|
|
80
|
+
type: algosdk.ABIType;
|
|
81
|
+
}
|
|
82
|
+
/** Allows management of application information. */
|
|
83
|
+
export declare class AppManager {
|
|
84
|
+
private _algod;
|
|
85
|
+
private _compilationResults;
|
|
86
|
+
/**
|
|
87
|
+
* Creates an `AppManager`
|
|
88
|
+
* @param algod An algod instance
|
|
89
|
+
*/
|
|
90
|
+
constructor(algod: algosdk.Algodv2);
|
|
91
|
+
/**
|
|
92
|
+
* Compiles the given TEAL using algod and returns the result, including source map.
|
|
93
|
+
*
|
|
94
|
+
* The result of this compilation is also cached keyed by the TEAL
|
|
95
|
+
* code so it can be retrieved via `getCompilationResult`.
|
|
96
|
+
*
|
|
97
|
+
* This function is re-entrant; it will only compile the same code once.
|
|
98
|
+
*
|
|
99
|
+
* @param tealCode The TEAL code
|
|
100
|
+
* @returns The information about the compiled file
|
|
101
|
+
*/
|
|
102
|
+
compileTeal(tealCode: string): Promise<CompiledTeal>;
|
|
103
|
+
/**
|
|
104
|
+
* Performs template substitution of a teal template and compiles it, returning the compiled result.
|
|
105
|
+
*
|
|
106
|
+
* Looks for `TMPL_{parameter}` for template replacements and replaces AlgoKit deploy-time control parameters
|
|
107
|
+
* if deployment metadata is specified.
|
|
108
|
+
*
|
|
109
|
+
* * `TMPL_UPDATABLE` for updatability / immutability control
|
|
110
|
+
* * `TMPL_DELETABLE` for deletability / permanence control
|
|
111
|
+
*
|
|
112
|
+
* @param tealTemplateCode The TEAL logic to compile
|
|
113
|
+
* @param templateParams Any parameters to replace in the .teal file before compiling
|
|
114
|
+
* @param deploymentMetadata The deployment metadata the app will be deployed with
|
|
115
|
+
* @returns The information about the compiled code
|
|
116
|
+
*/
|
|
117
|
+
compileTealTemplate(tealTemplateCode: string, templateParams?: TealTemplateParams, deploymentMetadata?: AppDeployMetadata): Promise<CompiledTeal>;
|
|
118
|
+
/**
|
|
119
|
+
* Returns a previous compilation result.
|
|
120
|
+
* @param tealCode The TEAL code
|
|
121
|
+
* @returns The information about the previously compiled file
|
|
122
|
+
* or `undefined` if that TEAL code wasn't previously compiled
|
|
123
|
+
*/
|
|
124
|
+
getCompilationResult(tealCode: string): CompiledTeal | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Returns the current app information for the app with the given ID.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const appInfo = await appManager.getById(12353n);
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @param appId The ID of the app
|
|
134
|
+
* @returns The app information
|
|
135
|
+
*/
|
|
136
|
+
getById(appId: bigint): Promise<AppInformation>;
|
|
137
|
+
/**
|
|
138
|
+
* Returns the current local state values for the given app ID and account address
|
|
139
|
+
*
|
|
140
|
+
* @param appId The ID of the app to return local state for
|
|
141
|
+
* @param address The string address of the account to get local state for the given app
|
|
142
|
+
* @returns The current local state for the given (app, account) combination
|
|
143
|
+
*/
|
|
144
|
+
getLocalState(appId: bigint, address: string): Promise<AppState>;
|
|
145
|
+
/**
|
|
146
|
+
* Returns the names of the current boxes for the given app.
|
|
147
|
+
* @param appId The ID of the app return box names for
|
|
148
|
+
* @returns The current box names
|
|
149
|
+
*/
|
|
150
|
+
getBoxNames(appId: bigint): Promise<BoxName[]>;
|
|
151
|
+
/**
|
|
152
|
+
* Returns the value of the given box name for the given app.
|
|
153
|
+
* @param appId The ID of the app return box names for
|
|
154
|
+
* @param boxName The name of the box to return either as a string, binary array or `BoxName`
|
|
155
|
+
* @returns The current box value as a byte array
|
|
156
|
+
*/
|
|
157
|
+
getBoxValue(appId: bigint, boxName: BoxIdentifier): Promise<Uint8Array>;
|
|
158
|
+
/**
|
|
159
|
+
* Returns the value of the given box names for the given app.
|
|
160
|
+
* @param appId The ID of the app return box names for
|
|
161
|
+
* @param boxNames The names of the boxes to return either as a string, binary array or `BoxName`
|
|
162
|
+
* @returns The current box values as a byte array in the same order as the passed in box names
|
|
163
|
+
*/
|
|
164
|
+
getBoxValues(appId: bigint, boxNames: BoxIdentifier[]): Promise<Uint8Array[]>;
|
|
165
|
+
/**
|
|
166
|
+
* Returns the value of the given box name for the given app decoded based on the given ABI type.
|
|
167
|
+
* @param request The parameters for the box value request
|
|
168
|
+
* @returns The current box value as an ABI value
|
|
169
|
+
*/
|
|
170
|
+
getBoxValueFromABIType(request: BoxValueRequestParams): Promise<algosdk.ABIValue>;
|
|
171
|
+
/**
|
|
172
|
+
* Returns the value of the given box names for the given app decoded based on the given ABI type.
|
|
173
|
+
* @param request The parameters for the box value request
|
|
174
|
+
* @returns The current box values as an ABI value in the same order as the passed in box names
|
|
175
|
+
*/
|
|
176
|
+
getBoxValuesFromABIType(request: BoxValuesRequestParams): Promise<algosdk.ABIValue[]>;
|
|
177
|
+
/**
|
|
178
|
+
* Returns a `algosdk.BoxReference` given a `BoxIdentifier` or `BoxReference`.
|
|
179
|
+
* @param boxId The box to return a reference for
|
|
180
|
+
* @returns The box reference ready to pass into a `algosdk.Transaction`
|
|
181
|
+
*/
|
|
182
|
+
static getBoxReference(boxId: BoxIdentifier | BoxReference): algosdk.BoxReference;
|
|
183
|
+
/**
|
|
184
|
+
* Converts an array of global/local state values from the algod api to a more friendly
|
|
185
|
+
* generic object keyed by the UTF-8 value of the key.
|
|
186
|
+
* @param state A `global-state`, `local-state`, `global-state-deltas` or `local-state-deltas`
|
|
187
|
+
* @returns An object keyeed by the UTF-8 representation of the key with various parsings of the values
|
|
188
|
+
*/
|
|
189
|
+
static decodeAppState(state: {
|
|
190
|
+
key: string;
|
|
191
|
+
value: modelsv2.TealValue | modelsv2.EvalDelta;
|
|
192
|
+
}[]): AppState;
|
|
193
|
+
/**
|
|
194
|
+
* Returns any ABI return values for the given app call arguments and transaction confirmation.
|
|
195
|
+
* @param confirmation The transaction confirmation from algod
|
|
196
|
+
* @param method The ABI method
|
|
197
|
+
* @returns The return value for the method call
|
|
198
|
+
*/
|
|
199
|
+
static getABIReturn(confirmation: modelsv2.PendingTransactionResponse | undefined, method: algosdk.ABIMethod | undefined): ABIReturn | undefined;
|
|
200
|
+
/**
|
|
201
|
+
* Replaces AlgoKit deploy-time deployment control parameters within the given TEAL template code.
|
|
202
|
+
*
|
|
203
|
+
* * `TMPL_UPDATABLE` for updatability / immutability control
|
|
204
|
+
* * `TMPL_DELETABLE` for deletability / permanence control
|
|
205
|
+
*
|
|
206
|
+
* Note: If these values are defined, but the corresponding `TMPL_*` value
|
|
207
|
+
* isn't in the teal code it will throw an exception.
|
|
208
|
+
*
|
|
209
|
+
* @param tealTemplateCode The TEAL template code to substitute
|
|
210
|
+
* @param params The deploy-time deployment control parameter value to replace
|
|
211
|
+
* @returns The replaced TEAL code
|
|
212
|
+
*/
|
|
213
|
+
static replaceTealTemplateDeployTimeControlParams(tealTemplateCode: string, params: {
|
|
214
|
+
updatable?: boolean;
|
|
215
|
+
deletable?: boolean;
|
|
216
|
+
}): string;
|
|
217
|
+
/**
|
|
218
|
+
* Performs template substitution of a teal file.
|
|
219
|
+
*
|
|
220
|
+
* Looks for `TMPL_{parameter}` for template replacements.
|
|
221
|
+
*
|
|
222
|
+
* @param tealTemplateCode The TEAL template code to make parameter replacements in
|
|
223
|
+
* @param templateParams Any parameters to replace in the teal code
|
|
224
|
+
* @returns The TEAL code with replacements
|
|
225
|
+
*/
|
|
226
|
+
static replaceTealTemplateParams(tealTemplateCode: string, templateParams?: TealTemplateParams): string;
|
|
227
|
+
/**
|
|
228
|
+
* Remove comments from TEAL code (useful to reduce code size before compilation).
|
|
229
|
+
*
|
|
230
|
+
* @param tealCode The TEAL logic to strip
|
|
231
|
+
* @returns The TEAL without comments
|
|
232
|
+
*/
|
|
233
|
+
static stripTealComments(tealCode: string): string;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=app-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-manager.d.ts","sourceRoot":"","sources":["../../src/types/app-manager.ts"],"names":[],"mappings":"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"}
|