@aztec/bot 0.48.0 → 0.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bot.d.ts +2 -1
- package/dest/bot.d.ts.map +1 -1
- package/dest/bot.js +8 -4
- package/dest/config.d.ts +11 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +26 -5
- package/dest/factory.d.ts +3 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +33 -4
- package/dest/runner.d.ts +4 -2
- package/dest/runner.d.ts.map +1 -1
- package/dest/runner.js +18 -7
- package/package.json +10 -10
- package/src/bot.ts +12 -5
- package/src/config.ts +35 -6
- package/src/factory.ts +36 -5
- package/src/runner.ts +18 -5
package/dest/bot.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AztecAddress, type Wallet } from '@aztec/aztec.js';
|
|
2
|
-
import { type PXE } from '@aztec/circuit-types';
|
|
2
|
+
import { type AztecNode, type PXE } from '@aztec/circuit-types';
|
|
3
3
|
import { type TokenContract } from '@aztec/noir-contracts.js';
|
|
4
4
|
import { type BotConfig } from './config.js';
|
|
5
5
|
export declare class Bot {
|
|
@@ -11,6 +11,7 @@ export declare class Bot {
|
|
|
11
11
|
protected constructor(wallet: Wallet, token: TokenContract, recipient: AztecAddress, config: BotConfig);
|
|
12
12
|
static create(config: BotConfig, dependencies?: {
|
|
13
13
|
pxe?: PXE;
|
|
14
|
+
node?: AztecNode;
|
|
14
15
|
}): Promise<Bot>;
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
getBalances(): Promise<{
|
package/dest/bot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAKjB,KAAK,MAAM,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAqB,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAKjB,KAAK,MAAM,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAGnF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,qBAAa,GAAG;aAII,MAAM,EAAE,MAAM;aACd,KAAK,EAAE,aAAa;aACpB,SAAS,EAAE,YAAY;aACvB,MAAM,EAAE,SAAS;IANnC,OAAO,CAAC,GAAG,CAAkC;IAE7C,SAAS,aACS,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS;WAGtB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,GAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAK3F,GAAG;IAuDH,WAAW;;;;;;;;;;CAMzB"}
|
package/dest/bot.js
CHANGED
|
@@ -39,12 +39,16 @@ export class Bot {
|
|
|
39
39
|
this.log.verbose(`Sending tx`, logCtx);
|
|
40
40
|
const tx = batch.send(opts);
|
|
41
41
|
const txHash = await tx.getTxHash();
|
|
42
|
-
if (this.config.
|
|
42
|
+
if (this.config.followChain === 'NONE') {
|
|
43
43
|
this.log.info(`Transaction ${txHash} sent, not waiting for it to be mined`);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
this.log.verbose(`Awaiting tx ${txHash} to be
|
|
47
|
-
const receipt = await tx.wait({
|
|
46
|
+
this.log.verbose(`Awaiting tx ${txHash} to be on the ${this.config.followChain} (timeout ${this.config.txMinedWaitSeconds}s)`, logCtx);
|
|
47
|
+
const receipt = await tx.wait({
|
|
48
|
+
timeout: this.config.txMinedWaitSeconds,
|
|
49
|
+
provenTimeout: this.config.txMinedWaitSeconds,
|
|
50
|
+
proven: this.config.followChain === 'PROVEN',
|
|
51
|
+
});
|
|
48
52
|
this.log.info(`Tx ${receipt.txHash} mined in block ${receipt.blockNumber}`, logCtx);
|
|
49
53
|
}
|
|
50
54
|
async getBalances() {
|
|
@@ -54,4 +58,4 @@ export class Bot {
|
|
|
54
58
|
};
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULHFCQUFxQixFQUNyQixrQkFBa0IsRUFHbEIsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxHQUFHO0lBR2QsWUFDa0IsTUFBYyxFQUNkLEtBQW9CLEVBQ3BCLFNBQXVCLEVBQ3ZCLE1BQWlCO1FBSGpCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQU4zQixRQUFHLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFPMUMsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWlCLEVBQUUsZUFBZ0QsRUFBRTtRQUN2RixNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RixPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRztRQUNkLE1BQU0sTUFBTSxHQUFHLEVBQUUs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
|
package/dest/config.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Fr } from '@aztec/circuits.js';
|
|
2
2
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
3
|
+
declare const botFollowChain: readonly ["NONE", "PENDING", "PROVEN"];
|
|
4
|
+
type BotFollowChain = (typeof botFollowChain)[number];
|
|
3
5
|
export type BotConfig = {
|
|
6
|
+
/** The URL to the Aztec node to check for tx pool status. */
|
|
7
|
+
nodeUrl: string | undefined;
|
|
4
8
|
/** URL to the PXE for sending txs, or undefined if an in-proc PXE is used. */
|
|
5
9
|
pxeUrl: string | undefined;
|
|
6
10
|
/** Signing private key for the sender account. */
|
|
@@ -21,10 +25,15 @@ export type BotConfig = {
|
|
|
21
25
|
noStart: boolean;
|
|
22
26
|
/** How long to wait for a tx to be mined before reporting an error. */
|
|
23
27
|
txMinedWaitSeconds: number;
|
|
24
|
-
/**
|
|
25
|
-
|
|
28
|
+
/** Whether to wait for txs to be proven, to be mined, or no wait at all. */
|
|
29
|
+
followChain: BotFollowChain;
|
|
30
|
+
/** Do not send a tx if the node's tx pool already has this many pending txs. */
|
|
31
|
+
maxPendingTxs: number;
|
|
32
|
+
/** Whether to flush after sending each 'setup' transaction */
|
|
33
|
+
flushSetupTransactions: boolean;
|
|
26
34
|
};
|
|
27
35
|
export declare const botConfigMappings: ConfigMappingsType<BotConfig>;
|
|
28
36
|
export declare function getBotConfigFromEnv(): BotConfig;
|
|
29
37
|
export declare function getBotDefaultConfig(): BotConfig;
|
|
38
|
+
export {};
|
|
30
39
|
//# sourceMappingURL=config.d.ts.map
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG;IACtB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kDAAkD;IAClD,gBAAgB,EAAE,EAAE,CAAC;IACrB,iDAAiD;IACjD,yBAAyB,EAAE,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,SAAS,EAAE,EAAE,CAAC;IACd,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,gBAAgB,EAAE,WAAW,GAAG,MAAM,CAAC;IACvC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,QAAA,MAAM,cAAc,wCAAyC,CAAC;AAC9D,KAAK,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG;IACtB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kDAAkD;IAClD,gBAAgB,EAAE,EAAE,CAAC;IACrB,iDAAiD;IACjD,yBAAyB,EAAE,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,SAAS,EAAE,EAAE,CAAC;IACd,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,gBAAgB,EAAE,WAAW,GAAG,MAAM,CAAC;IACvC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,WAAW,EAAE,cAAc,CAAC;IAC5B,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,sBAAsB,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,SAAS,CA+E3D,CAAC;AAEF,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C"}
|
package/dest/config.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Fr } from '@aztec/circuits.js';
|
|
2
2
|
import { booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, } from '@aztec/foundation/config';
|
|
3
|
+
const botFollowChain = ['NONE', 'PENDING', 'PROVEN'];
|
|
3
4
|
export const botConfigMappings = {
|
|
5
|
+
nodeUrl: {
|
|
6
|
+
env: 'AZTEC_NODE_URL',
|
|
7
|
+
description: 'The URL to the Aztec node to check for tx pool status.',
|
|
8
|
+
},
|
|
4
9
|
pxeUrl: {
|
|
5
10
|
env: 'BOT_PXE_URL',
|
|
6
11
|
description: 'URL to the PXE for sending txs, or undefined if an in-proc PXE is used.',
|
|
@@ -54,10 +59,26 @@ export const botConfigMappings = {
|
|
|
54
59
|
description: 'How long to wait for a tx to be mined before reporting an error.',
|
|
55
60
|
...numberConfigHelper(180),
|
|
56
61
|
},
|
|
57
|
-
|
|
58
|
-
env: '
|
|
59
|
-
description:
|
|
60
|
-
|
|
62
|
+
followChain: {
|
|
63
|
+
env: 'BOT_FOLLOW_CHAIN',
|
|
64
|
+
description: 'Which chain the bot follows',
|
|
65
|
+
defaultValue: 'none',
|
|
66
|
+
parseEnv(val) {
|
|
67
|
+
if (!botFollowChain.includes(val)) {
|
|
68
|
+
throw new Error(`Invalid value for BOT_FOLLOW_CHAIN: ${val}`);
|
|
69
|
+
}
|
|
70
|
+
return val;
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
maxPendingTxs: {
|
|
74
|
+
env: 'BOT_MAX_PENDING_TXS',
|
|
75
|
+
description: "Do not send a tx if the node's tx pool already has this many pending txs.",
|
|
76
|
+
...numberConfigHelper(128),
|
|
77
|
+
},
|
|
78
|
+
flushSetupTransactions: {
|
|
79
|
+
env: 'BOT_FLUSH_SETUP_TRANSACTIONS',
|
|
80
|
+
description: 'Make a request for the sequencer to build a block after each setup transaction.',
|
|
81
|
+
...booleanConfigHelper(false),
|
|
61
82
|
},
|
|
62
83
|
};
|
|
63
84
|
export function getBotConfigFromEnv() {
|
|
@@ -66,4 +87,4 @@ export function getBotConfigFromEnv() {
|
|
|
66
87
|
export function getBotDefaultConfig() {
|
|
67
88
|
return getDefaultConfig(botConfigMappings);
|
|
68
89
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEMsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQVUsQ0FBQztBQWtDOUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWtDO0lBQzlELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsV0FBVyxFQUFFLHdEQUF3RDtLQUN0RTtJQUNELE1BQU0sRUFBRTtRQUNOLEdBQUcsRUFBRSxhQUFhO1FBQ2xCLFdBQVcsRUFBRSx5RUFBeUU7S0FDdkY7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixHQUFHLEVBQUUsaUJBQWlCO1FBQ3RCLFdBQVcsRUFBRSw2Q0FBNkM7UUFDMUQsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUM3QyxZQUFZLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRTtLQUMxQjtJQUNELHlCQUF5QixFQUFFO1FBQ3pCLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMsV0FBVyxFQUFFLDRDQUE0QztRQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzdDLFlBQVksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztLQUMxQztJQUNELFNBQVMsRUFBRTtRQUNULEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsV0FBVyxFQUFFLHlDQUF5QztRQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzdDLFlBQVksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztLQUNqQztJQUNELGlCQUFpQixFQUFFO1FBQ2pCLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELHFCQUFxQixFQUFFO1FBQ3JCLEdBQUcsRUFBRSw4QkFBOEI7UUFDbkMsV0FBVyxFQUFFLHVEQUF1RDtRQUNwRSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQztLQUN6QjtJQUNELG9CQUFvQixFQUFFO1FBQ3BCLEdBQUcsRUFBRSw2QkFBNkI7UUFDbEMsV0FBVyxFQUFFLHNEQUFzRDtRQUNuRSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQztLQUN6QjtJQUNELGdCQUFnQixFQUFFO1FBQ2hCLEdBQUcsRUFBRSx3QkFBd0I7UUFDN0IsV0FBVyxFQUFFLHdEQUF3RDtRQUNyRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBRSxHQUE0QixJQUFJLFNBQVM7UUFDM0QsWUFBWSxFQUFFLE1BQU07S0FDckI7SUFDRCxPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsY0FBYztRQUNuQixXQUFXLEVBQUUscUVBQXFFO1FBQ2xGLEdBQUcsbUJBQW1CLEVBQUU7S0FDekI7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixHQUFHLEVBQUUsMkJBQTJCO1FBQ2hDLFdBQVcsRUFBRSxrRUFBa0U7UUFDL0UsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7S0FDM0I7SUFDRCxXQUFXLEVBQUU7UUFDWCxHQUFHLEVBQUUsa0JBQWtCO1FBQ3ZCLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsWUFBWSxFQUFFLE1BQU07UUFDcEIsUUFBUSxDQUFDLEdBQUc7WUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxPQUFPLEdBQXFCLENBQUM7UUFDL0IsQ0FBQztLQUNGO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLHFCQUFxQjtRQUMxQixXQUFXLEVBQUUsMkVBQTJFO1FBQ3hGLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDO0tBQzNCO0lBQ0Qsc0JBQXNCLEVBQUU7UUFDdEIsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxXQUFXLEVBQUUsaUZBQWlGO1FBQzlGLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzlCO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyxxQkFBcUIsQ0FBWSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sZ0JBQWdCLENBQVksaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxDQUFDIn0=
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { type PXE } from '@aztec/circuit-types';
|
|
1
|
+
import { type AztecNode, type PXE } from '@aztec/circuit-types';
|
|
2
2
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
3
3
|
import { type BotConfig } from './config.js';
|
|
4
4
|
export declare class BotFactory {
|
|
5
5
|
private readonly config;
|
|
6
6
|
private pxe;
|
|
7
|
+
private node?;
|
|
7
8
|
private log;
|
|
8
9
|
constructor(config: BotConfig, dependencies?: {
|
|
9
10
|
pxe?: PXE;
|
|
11
|
+
node?: AztecNode;
|
|
10
12
|
});
|
|
11
13
|
/**
|
|
12
14
|
* Initializes a new bot by setting up the sender account, registering the recipient,
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAqB,KAAK,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,qBAAa,UAAU;IAKT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,GAAG,CAAkC;gBAEhB,MAAM,EAAE,SAAS,EAAE,YAAY,GAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAO;IAmBlG;;;OAGG;IACU,KAAK;;;;;;IAQlB;;;OAGG;YACW,YAAY;IAuB1B;;OAEG;YACW,iBAAiB;IAK/B;;;;OAIG;YACW,UAAU;IAqBxB;;;OAGG;YACW,UAAU;CA0BzB"}
|
package/dest/factory.js
CHANGED
|
@@ -9,9 +9,13 @@ export class BotFactory {
|
|
|
9
9
|
constructor(config, dependencies = {}) {
|
|
10
10
|
this.config = config;
|
|
11
11
|
this.log = createDebugLogger('aztec:bot');
|
|
12
|
+
if (config.flushSetupTransactions && !dependencies.node) {
|
|
13
|
+
throw new Error(`Either a node client or node url must be provided if transaction flushing is requested`);
|
|
14
|
+
}
|
|
12
15
|
if (!dependencies.pxe && !config.pxeUrl) {
|
|
13
16
|
throw new Error(`Either a PXE client or a PXE URL must be provided`);
|
|
14
17
|
}
|
|
18
|
+
this.node = dependencies.node;
|
|
15
19
|
if (dependencies.pxe) {
|
|
16
20
|
this.log.info(`Using local PXE`);
|
|
17
21
|
this.pxe = dependencies.pxe;
|
|
@@ -46,7 +50,16 @@ export class BotFactory {
|
|
|
46
50
|
}
|
|
47
51
|
else {
|
|
48
52
|
this.log.info(`Initializing account at ${account.getAddress().toString()}`);
|
|
49
|
-
|
|
53
|
+
const sentTx = account.deploy();
|
|
54
|
+
const txHash = await sentTx.getTxHash();
|
|
55
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
56
|
+
if (this.config.flushSetupTransactions) {
|
|
57
|
+
this.log.verbose('Flushing transactions');
|
|
58
|
+
await this.node.flushTxs();
|
|
59
|
+
}
|
|
60
|
+
this.log.verbose('Waiting for account deployment to settle');
|
|
61
|
+
await sentTx.wait({ timeout: this.config.txMinedWaitSeconds });
|
|
62
|
+
return account.getWallet();
|
|
50
63
|
}
|
|
51
64
|
}
|
|
52
65
|
/**
|
|
@@ -71,7 +84,15 @@ export class BotFactory {
|
|
|
71
84
|
}
|
|
72
85
|
else {
|
|
73
86
|
this.log.info(`Deploying token contract at ${address.toString()}`);
|
|
74
|
-
|
|
87
|
+
const sentTx = deploy.send(deployOpts);
|
|
88
|
+
const txHash = await sentTx.getTxHash();
|
|
89
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
90
|
+
if (this.config.flushSetupTransactions) {
|
|
91
|
+
this.log.verbose('Flushing transactions');
|
|
92
|
+
await this.node.flushTxs();
|
|
93
|
+
}
|
|
94
|
+
this.log.verbose('Waiting for token setup to settle');
|
|
95
|
+
return sentTx.deployed({ timeout: this.config.txMinedWaitSeconds });
|
|
75
96
|
}
|
|
76
97
|
}
|
|
77
98
|
/**
|
|
@@ -94,7 +115,15 @@ export class BotFactory {
|
|
|
94
115
|
this.log.info(`Skipping minting as ${sender.toString()} has enough tokens`);
|
|
95
116
|
return;
|
|
96
117
|
}
|
|
97
|
-
|
|
118
|
+
const sentTx = new BatchCall(token.wallet, calls).send();
|
|
119
|
+
const txHash = await sentTx.getTxHash();
|
|
120
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
121
|
+
if (this.config.flushSetupTransactions) {
|
|
122
|
+
this.log.verbose('Flushing transactions');
|
|
123
|
+
await this.node.flushTxs();
|
|
124
|
+
}
|
|
125
|
+
this.log.verbose('Waiting for token mint to settle');
|
|
126
|
+
await sentTx.wait({ timeout: this.config.txMinedWaitSeconds });
|
|
98
127
|
}
|
|
99
128
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBc0IsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBRXhCLE1BQU0sT0FBTyxVQUFVO0lBS3JCLFlBQTZCLE1BQWlCLEVBQUUsZUFBZ0QsRUFBRTtRQUFyRSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBRnRDLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUczQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7UUFDNUcsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBRTlCLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxNQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsWUFBWTtRQUN4QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDbkYsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxDQUFDLElBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUM3RCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDL0QsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxpQkFBaUI7UUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXFCO1FBQzVDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sVUFBVSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDakUsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywrQkFBK0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLElBQUksQ0FBQyxJQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFvQjtRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sS0FBSyxHQUFtQixFQUFFLENBQUM7UUFDakMsSUFBSSxjQUFjLEdBQUcsV0FBVyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsOEJBQThCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzVFLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLElBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGIn0=
|
package/dest/runner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PXE } from '@aztec/aztec.js';
|
|
1
|
+
import { type AztecNode, type PXE } from '@aztec/aztec.js';
|
|
2
2
|
import { type BotConfig } from './config.js';
|
|
3
3
|
export declare class BotRunner {
|
|
4
4
|
#private;
|
|
@@ -6,9 +6,11 @@ export declare class BotRunner {
|
|
|
6
6
|
private log;
|
|
7
7
|
private bot?;
|
|
8
8
|
private pxe?;
|
|
9
|
+
private node;
|
|
9
10
|
private runningPromise;
|
|
10
|
-
constructor(config: BotConfig, dependencies
|
|
11
|
+
constructor(config: BotConfig, dependencies: {
|
|
11
12
|
pxe?: PXE;
|
|
13
|
+
node?: AztecNode;
|
|
12
14
|
});
|
|
13
15
|
/** Initializes the bot if needed. Blocks until the bot setup is finished. */
|
|
14
16
|
setup(): Promise<void>;
|
package/dest/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAA4C,MAAM,iBAAiB,CAAC;AAIrG,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,SAAS;;IAOD,OAAO,CAAC,MAAM;IANjC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAe;IAC3B,OAAO,CAAC,GAAG,CAAC,CAAM;IAClB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,cAAc,CAAiB;gBAEZ,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;IAS3F,6EAA6E;IAChE,KAAK;IAQlB;;;OAGG;IACU,KAAK;IAQlB;;OAEG;IACU,IAAI;IAQjB,0CAA0C;IACnC,SAAS;IAIhB;;;OAGG;IACU,MAAM,CAAC,MAAM,EAAE,SAAS;IAerC;;;OAGG;IACU,GAAG;IAsBhB,qDAAqD;IAC9C,SAAS;CA6BjB"}
|
package/dest/runner.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
var _BotRunner_instances, _BotRunner_createBot,
|
|
1
|
+
var _BotRunner_instances, _BotRunner_createBot, _BotRunner_work;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import { createDebugLogger } from '@aztec/aztec.js';
|
|
3
|
+
import { createAztecNodeClient, createDebugLogger } from '@aztec/aztec.js';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
5
5
|
import { Bot } from './bot.js';
|
|
6
6
|
export class BotRunner {
|
|
7
|
-
constructor(config, dependencies
|
|
7
|
+
constructor(config, dependencies) {
|
|
8
8
|
_BotRunner_instances.add(this);
|
|
9
9
|
this.config = config;
|
|
10
10
|
this.log = createDebugLogger('aztec:bot');
|
|
11
11
|
this.pxe = dependencies.pxe;
|
|
12
|
-
|
|
12
|
+
if (!dependencies.node && !config.nodeUrl) {
|
|
13
|
+
throw new Error(`Missing node URL in config or dependencies`);
|
|
14
|
+
}
|
|
15
|
+
this.node = dependencies.node ?? createAztecNodeClient(config.nodeUrl);
|
|
16
|
+
this.runningPromise = new RunningPromise(() => __classPrivateFieldGet(this, _BotRunner_instances, "m", _BotRunner_work).call(this), config.txIntervalSeconds * 1000);
|
|
13
17
|
}
|
|
14
18
|
/** Initializes the bot if needed. Blocks until the bot setup is finished. */
|
|
15
19
|
async setup() {
|
|
@@ -94,14 +98,21 @@ export class BotRunner {
|
|
|
94
98
|
}
|
|
95
99
|
_BotRunner_instances = new WeakSet(), _BotRunner_createBot = async function _BotRunner_createBot() {
|
|
96
100
|
try {
|
|
97
|
-
this.bot = Bot.create(this.config, { pxe: this.pxe });
|
|
101
|
+
this.bot = Bot.create(this.config, { pxe: this.pxe, node: this.node });
|
|
98
102
|
await this.bot;
|
|
99
103
|
}
|
|
100
104
|
catch (err) {
|
|
101
105
|
this.log.error(`Error setting up bot: ${err}`);
|
|
102
106
|
throw err;
|
|
103
107
|
}
|
|
104
|
-
},
|
|
108
|
+
}, _BotRunner_work = async function _BotRunner_work() {
|
|
109
|
+
if (this.config.maxPendingTxs > 0) {
|
|
110
|
+
const pendingTxs = await this.node.getPendingTxs();
|
|
111
|
+
if (pendingTxs.length >= this.config.maxPendingTxs) {
|
|
112
|
+
this.log.verbose(`Not sending bot tx since node has ${pendingTxs.length} pending txs`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
105
116
|
try {
|
|
106
117
|
await this.run();
|
|
107
118
|
}
|
|
@@ -109,4 +120,4 @@ _BotRunner_instances = new WeakSet(), _BotRunner_createBot = async function _Bot
|
|
|
109
120
|
// Already logged in run()
|
|
110
121
|
}
|
|
111
122
|
};
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBNEIscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUcvQixNQUFNLE9BQU8sU0FBUztJQU9wQixZQUEyQixNQUFpQixFQUFFLFlBQTZDOztRQUFoRSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBTnBDLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQU8zQyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBTSxNQUFWLElBQUksQ0FBUSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsNkVBQTZFO0lBQ3RFLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sdUJBQUEsSUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js"
|
|
@@ -49,15 +49,15 @@
|
|
|
49
49
|
]
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@aztec/accounts": "0.
|
|
53
|
-
"@aztec/aztec.js": "0.
|
|
54
|
-
"@aztec/circuit-types": "0.
|
|
55
|
-
"@aztec/circuits.js": "0.
|
|
56
|
-
"@aztec/entrypoints": "0.
|
|
57
|
-
"@aztec/foundation": "0.
|
|
58
|
-
"@aztec/noir-contracts.js": "0.
|
|
59
|
-
"@aztec/protocol-contracts": "0.
|
|
60
|
-
"@aztec/types": "0.
|
|
52
|
+
"@aztec/accounts": "0.50.1",
|
|
53
|
+
"@aztec/aztec.js": "0.50.1",
|
|
54
|
+
"@aztec/circuit-types": "0.50.1",
|
|
55
|
+
"@aztec/circuits.js": "0.50.1",
|
|
56
|
+
"@aztec/entrypoints": "0.50.1",
|
|
57
|
+
"@aztec/foundation": "0.50.1",
|
|
58
|
+
"@aztec/noir-contracts.js": "0.50.1",
|
|
59
|
+
"@aztec/protocol-contracts": "0.50.1",
|
|
60
|
+
"@aztec/types": "0.50.1",
|
|
61
61
|
"source-map-support": "^0.5.21",
|
|
62
62
|
"tslib": "^2.4.0"
|
|
63
63
|
},
|
package/src/bot.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type Wallet,
|
|
8
8
|
createDebugLogger,
|
|
9
9
|
} from '@aztec/aztec.js';
|
|
10
|
-
import { type FunctionCall, type PXE } from '@aztec/circuit-types';
|
|
10
|
+
import { type AztecNode, type FunctionCall, type PXE } from '@aztec/circuit-types';
|
|
11
11
|
import { GasSettings } from '@aztec/circuits.js';
|
|
12
12
|
import { times } from '@aztec/foundation/collection';
|
|
13
13
|
import { type TokenContract } from '@aztec/noir-contracts.js';
|
|
@@ -28,7 +28,7 @@ export class Bot {
|
|
|
28
28
|
public readonly config: BotConfig,
|
|
29
29
|
) {}
|
|
30
30
|
|
|
31
|
-
static async create(config: BotConfig, dependencies: { pxe?: PXE } = {}): Promise<Bot> {
|
|
31
|
+
static async create(config: BotConfig, dependencies: { pxe?: PXE; node?: AztecNode } = {}): Promise<Bot> {
|
|
32
32
|
const { wallet, token, recipient } = await new BotFactory(config, dependencies).setup();
|
|
33
33
|
return new Bot(wallet, token, recipient, config);
|
|
34
34
|
}
|
|
@@ -71,13 +71,20 @@ export class Bot {
|
|
|
71
71
|
|
|
72
72
|
const txHash = await tx.getTxHash();
|
|
73
73
|
|
|
74
|
-
if (this.config.
|
|
74
|
+
if (this.config.followChain === 'NONE') {
|
|
75
75
|
this.log.info(`Transaction ${txHash} sent, not waiting for it to be mined`);
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
this.log.verbose(
|
|
80
|
-
|
|
79
|
+
this.log.verbose(
|
|
80
|
+
`Awaiting tx ${txHash} to be on the ${this.config.followChain} (timeout ${this.config.txMinedWaitSeconds}s)`,
|
|
81
|
+
logCtx,
|
|
82
|
+
);
|
|
83
|
+
const receipt = await tx.wait({
|
|
84
|
+
timeout: this.config.txMinedWaitSeconds,
|
|
85
|
+
provenTimeout: this.config.txMinedWaitSeconds,
|
|
86
|
+
proven: this.config.followChain === 'PROVEN',
|
|
87
|
+
});
|
|
81
88
|
this.log.info(`Tx ${receipt.txHash} mined in block ${receipt.blockNumber}`, logCtx);
|
|
82
89
|
}
|
|
83
90
|
|
package/src/config.ts
CHANGED
|
@@ -7,7 +7,12 @@ import {
|
|
|
7
7
|
numberConfigHelper,
|
|
8
8
|
} from '@aztec/foundation/config';
|
|
9
9
|
|
|
10
|
+
const botFollowChain = ['NONE', 'PENDING', 'PROVEN'] as const;
|
|
11
|
+
type BotFollowChain = (typeof botFollowChain)[number];
|
|
12
|
+
|
|
10
13
|
export type BotConfig = {
|
|
14
|
+
/** The URL to the Aztec node to check for tx pool status. */
|
|
15
|
+
nodeUrl: string | undefined;
|
|
11
16
|
/** URL to the PXE for sending txs, or undefined if an in-proc PXE is used. */
|
|
12
17
|
pxeUrl: string | undefined;
|
|
13
18
|
/** Signing private key for the sender account. */
|
|
@@ -28,11 +33,19 @@ export type BotConfig = {
|
|
|
28
33
|
noStart: boolean;
|
|
29
34
|
/** How long to wait for a tx to be mined before reporting an error. */
|
|
30
35
|
txMinedWaitSeconds: number;
|
|
31
|
-
/**
|
|
32
|
-
|
|
36
|
+
/** Whether to wait for txs to be proven, to be mined, or no wait at all. */
|
|
37
|
+
followChain: BotFollowChain;
|
|
38
|
+
/** Do not send a tx if the node's tx pool already has this many pending txs. */
|
|
39
|
+
maxPendingTxs: number;
|
|
40
|
+
/** Whether to flush after sending each 'setup' transaction */
|
|
41
|
+
flushSetupTransactions: boolean;
|
|
33
42
|
};
|
|
34
43
|
|
|
35
44
|
export const botConfigMappings: ConfigMappingsType<BotConfig> = {
|
|
45
|
+
nodeUrl: {
|
|
46
|
+
env: 'AZTEC_NODE_URL',
|
|
47
|
+
description: 'The URL to the Aztec node to check for tx pool status.',
|
|
48
|
+
},
|
|
36
49
|
pxeUrl: {
|
|
37
50
|
env: 'BOT_PXE_URL',
|
|
38
51
|
description: 'URL to the PXE for sending txs, or undefined if an in-proc PXE is used.',
|
|
@@ -86,10 +99,26 @@ export const botConfigMappings: ConfigMappingsType<BotConfig> = {
|
|
|
86
99
|
description: 'How long to wait for a tx to be mined before reporting an error.',
|
|
87
100
|
...numberConfigHelper(180),
|
|
88
101
|
},
|
|
89
|
-
|
|
90
|
-
env: '
|
|
91
|
-
description:
|
|
92
|
-
|
|
102
|
+
followChain: {
|
|
103
|
+
env: 'BOT_FOLLOW_CHAIN',
|
|
104
|
+
description: 'Which chain the bot follows',
|
|
105
|
+
defaultValue: 'none',
|
|
106
|
+
parseEnv(val) {
|
|
107
|
+
if (!botFollowChain.includes(val as any)) {
|
|
108
|
+
throw new Error(`Invalid value for BOT_FOLLOW_CHAIN: ${val}`);
|
|
109
|
+
}
|
|
110
|
+
return val as BotFollowChain;
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
maxPendingTxs: {
|
|
114
|
+
env: 'BOT_MAX_PENDING_TXS',
|
|
115
|
+
description: "Do not send a tx if the node's tx pool already has this many pending txs.",
|
|
116
|
+
...numberConfigHelper(128),
|
|
117
|
+
},
|
|
118
|
+
flushSetupTransactions: {
|
|
119
|
+
env: 'BOT_FLUSH_SETUP_TRANSACTIONS',
|
|
120
|
+
description: 'Make a request for the sequencer to build a block after each setup transaction.',
|
|
121
|
+
...booleanConfigHelper(false),
|
|
93
122
|
},
|
|
94
123
|
};
|
|
95
124
|
|
package/src/factory.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getSchnorrAccount } from '@aztec/accounts/schnorr';
|
|
2
2
|
import { type AccountWallet, BatchCall, createDebugLogger, createPXEClient } from '@aztec/aztec.js';
|
|
3
|
-
import { type FunctionCall, type PXE } from '@aztec/circuit-types';
|
|
3
|
+
import { type AztecNode, type FunctionCall, type PXE } from '@aztec/circuit-types';
|
|
4
4
|
import { Fr, deriveSigningKey } from '@aztec/circuits.js';
|
|
5
5
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
6
6
|
|
|
@@ -12,13 +12,19 @@ const MIN_BALANCE = 1e3;
|
|
|
12
12
|
|
|
13
13
|
export class BotFactory {
|
|
14
14
|
private pxe: PXE;
|
|
15
|
+
private node?: AztecNode;
|
|
15
16
|
private log = createDebugLogger('aztec:bot');
|
|
16
17
|
|
|
17
|
-
constructor(private readonly config: BotConfig, dependencies: { pxe?: PXE } = {}) {
|
|
18
|
+
constructor(private readonly config: BotConfig, dependencies: { pxe?: PXE; node?: AztecNode } = {}) {
|
|
19
|
+
if (config.flushSetupTransactions && !dependencies.node) {
|
|
20
|
+
throw new Error(`Either a node client or node url must be provided if transaction flushing is requested`);
|
|
21
|
+
}
|
|
18
22
|
if (!dependencies.pxe && !config.pxeUrl) {
|
|
19
23
|
throw new Error(`Either a PXE client or a PXE URL must be provided`);
|
|
20
24
|
}
|
|
21
25
|
|
|
26
|
+
this.node = dependencies.node;
|
|
27
|
+
|
|
22
28
|
if (dependencies.pxe) {
|
|
23
29
|
this.log.info(`Using local PXE`);
|
|
24
30
|
this.pxe = dependencies.pxe;
|
|
@@ -54,7 +60,16 @@ export class BotFactory {
|
|
|
54
60
|
return account.register();
|
|
55
61
|
} else {
|
|
56
62
|
this.log.info(`Initializing account at ${account.getAddress().toString()}`);
|
|
57
|
-
|
|
63
|
+
const sentTx = account.deploy();
|
|
64
|
+
const txHash = await sentTx.getTxHash();
|
|
65
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
66
|
+
if (this.config.flushSetupTransactions) {
|
|
67
|
+
this.log.verbose('Flushing transactions');
|
|
68
|
+
await this.node!.flushTxs();
|
|
69
|
+
}
|
|
70
|
+
this.log.verbose('Waiting for account deployment to settle');
|
|
71
|
+
await sentTx.wait({ timeout: this.config.txMinedWaitSeconds });
|
|
72
|
+
return account.getWallet();
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
|
|
@@ -80,7 +95,15 @@ export class BotFactory {
|
|
|
80
95
|
return deploy.register();
|
|
81
96
|
} else {
|
|
82
97
|
this.log.info(`Deploying token contract at ${address.toString()}`);
|
|
83
|
-
|
|
98
|
+
const sentTx = deploy.send(deployOpts);
|
|
99
|
+
const txHash = await sentTx.getTxHash();
|
|
100
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
101
|
+
if (this.config.flushSetupTransactions) {
|
|
102
|
+
this.log.verbose('Flushing transactions');
|
|
103
|
+
await this.node!.flushTxs();
|
|
104
|
+
}
|
|
105
|
+
this.log.verbose('Waiting for token setup to settle');
|
|
106
|
+
return sentTx.deployed({ timeout: this.config.txMinedWaitSeconds });
|
|
84
107
|
}
|
|
85
108
|
}
|
|
86
109
|
|
|
@@ -104,6 +127,14 @@ export class BotFactory {
|
|
|
104
127
|
this.log.info(`Skipping minting as ${sender.toString()} has enough tokens`);
|
|
105
128
|
return;
|
|
106
129
|
}
|
|
107
|
-
|
|
130
|
+
const sentTx = new BatchCall(token.wallet, calls).send();
|
|
131
|
+
const txHash = await sentTx.getTxHash();
|
|
132
|
+
this.log.info(`Sent tx with hash ${txHash.to0xString()}`);
|
|
133
|
+
if (this.config.flushSetupTransactions) {
|
|
134
|
+
this.log.verbose('Flushing transactions');
|
|
135
|
+
await this.node!.flushTxs();
|
|
136
|
+
}
|
|
137
|
+
this.log.verbose('Waiting for token mint to settle');
|
|
138
|
+
await sentTx.wait({ timeout: this.config.txMinedWaitSeconds });
|
|
108
139
|
}
|
|
109
140
|
}
|
package/src/runner.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PXE, createDebugLogger } from '@aztec/aztec.js';
|
|
1
|
+
import { type AztecNode, type PXE, createAztecNodeClient, createDebugLogger } from '@aztec/aztec.js';
|
|
2
2
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
3
|
|
|
4
4
|
import { Bot } from './bot.js';
|
|
@@ -8,11 +8,16 @@ export class BotRunner {
|
|
|
8
8
|
private log = createDebugLogger('aztec:bot');
|
|
9
9
|
private bot?: Promise<Bot>;
|
|
10
10
|
private pxe?: PXE;
|
|
11
|
+
private node: AztecNode;
|
|
11
12
|
private runningPromise: RunningPromise;
|
|
12
13
|
|
|
13
|
-
public constructor(private config: BotConfig, dependencies: { pxe?: PXE
|
|
14
|
+
public constructor(private config: BotConfig, dependencies: { pxe?: PXE; node?: AztecNode }) {
|
|
14
15
|
this.pxe = dependencies.pxe;
|
|
15
|
-
|
|
16
|
+
if (!dependencies.node && !config.nodeUrl) {
|
|
17
|
+
throw new Error(`Missing node URL in config or dependencies`);
|
|
18
|
+
}
|
|
19
|
+
this.node = dependencies.node ?? createAztecNodeClient(config.nodeUrl!);
|
|
20
|
+
this.runningPromise = new RunningPromise(() => this.#work(), config.txIntervalSeconds * 1000);
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
/** Initializes the bot if needed. Blocks until the bot setup is finished. */
|
|
@@ -104,7 +109,7 @@ export class BotRunner {
|
|
|
104
109
|
|
|
105
110
|
async #createBot() {
|
|
106
111
|
try {
|
|
107
|
-
this.bot = Bot.create(this.config, { pxe: this.pxe });
|
|
112
|
+
this.bot = Bot.create(this.config, { pxe: this.pxe, node: this.node });
|
|
108
113
|
await this.bot;
|
|
109
114
|
} catch (err) {
|
|
110
115
|
this.log.error(`Error setting up bot: ${err}`);
|
|
@@ -112,7 +117,15 @@ export class BotRunner {
|
|
|
112
117
|
}
|
|
113
118
|
}
|
|
114
119
|
|
|
115
|
-
async #
|
|
120
|
+
async #work() {
|
|
121
|
+
if (this.config.maxPendingTxs > 0) {
|
|
122
|
+
const pendingTxs = await this.node.getPendingTxs();
|
|
123
|
+
if (pendingTxs.length >= this.config.maxPendingTxs) {
|
|
124
|
+
this.log.verbose(`Not sending bot tx since node has ${pendingTxs.length} pending txs`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
116
129
|
try {
|
|
117
130
|
await this.run();
|
|
118
131
|
} catch (err) {
|