@aztec-labs/bot 6.0.0-nightly.20260829
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 +3 -0
- package/dest/amm_bot.d.ts +33 -0
- package/dest/amm_bot.d.ts.map +1 -0
- package/dest/amm_bot.js +108 -0
- package/dest/base_bot.d.ts +21 -0
- package/dest/base_bot.d.ts.map +1 -0
- package/dest/base_bot.js +69 -0
- package/dest/bot.d.ts +29 -0
- package/dest/bot.d.ts.map +1 -0
- package/dest/bot.js +60 -0
- package/dest/config.d.ts +175 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +241 -0
- package/dest/cross_chain_bot.d.ts +56 -0
- package/dest/cross_chain_bot.d.ts.map +1 -0
- package/dest/cross_chain_bot.js +138 -0
- package/dest/factory.d.ts +74 -0
- package/dest/factory.d.ts.map +1 -0
- package/dest/factory.js +532 -0
- package/dest/index.d.ts +9 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +8 -0
- package/dest/interface.d.ts +19 -0
- package/dest/interface.d.ts.map +1 -0
- package/dest/interface.js +38 -0
- package/dest/l1_to_l2_seeding.d.ts +8 -0
- package/dest/l1_to_l2_seeding.d.ts.map +1 -0
- package/dest/l1_to_l2_seeding.js +63 -0
- package/dest/rpc.d.ts +4 -0
- package/dest/rpc.d.ts.map +1 -0
- package/dest/rpc.js +8 -0
- package/dest/runner.d.ts +54 -0
- package/dest/runner.d.ts.map +1 -0
- package/dest/runner.js +566 -0
- package/dest/store/bot_store.d.ts +69 -0
- package/dest/store/bot_store.d.ts.map +1 -0
- package/dest/store/bot_store.js +138 -0
- package/dest/store/index.d.ts +2 -0
- package/dest/store/index.d.ts.map +1 -0
- package/dest/store/index.js +1 -0
- package/dest/utils.d.ts +19 -0
- package/dest/utils.d.ts.map +1 -0
- package/dest/utils.js +29 -0
- package/package.json +95 -0
- package/src/amm_bot.ts +132 -0
- package/src/base_bot.ts +75 -0
- package/src/bot.ts +102 -0
- package/src/config.ts +316 -0
- package/src/cross_chain_bot.ts +208 -0
- package/src/factory.ts +628 -0
- package/src/index.ts +14 -0
- package/src/interface.ts +31 -0
- package/src/l1_to_l2_seeding.ts +79 -0
- package/src/rpc.ts +8 -0
- package/src/runner.ts +220 -0
- package/src/store/bot_store.ts +196 -0
- package/src/store/index.ts +1 -0
- package/src/utils.ts +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
|
+
import type { TxHash, TxReceipt } from '@aztec-labs/aztec.js/tx';
|
|
3
|
+
import type { AMMContract } from '@aztec-labs/noir-contracts.js/AMM';
|
|
4
|
+
import type { TokenContract } from '@aztec-labs/noir-contracts.js/Token';
|
|
5
|
+
import type { BlockTag } from '@aztec-labs/stdlib/block';
|
|
6
|
+
import type { AztecNode, AztecNodeAdmin } from '@aztec-labs/stdlib/interfaces/client';
|
|
7
|
+
import type { EmbeddedWallet } from '@aztec-labs/wallets/embedded';
|
|
8
|
+
import { BaseBot } from './base_bot.js';
|
|
9
|
+
import type { BotConfig } from './config.js';
|
|
10
|
+
import type { BotStore } from './store/index.js';
|
|
11
|
+
type Balances = {
|
|
12
|
+
token0: bigint;
|
|
13
|
+
token1: bigint;
|
|
14
|
+
};
|
|
15
|
+
export declare class AmmBot extends BaseBot {
|
|
16
|
+
readonly amm: AMMContract;
|
|
17
|
+
readonly token0: TokenContract;
|
|
18
|
+
readonly token1: TokenContract;
|
|
19
|
+
protected constructor(node: AztecNode, wallet: EmbeddedWallet, defaultAccountAddress: AztecAddress, amm: AMMContract, token0: TokenContract, token1: TokenContract, config: BotConfig);
|
|
20
|
+
static create(config: BotConfig, wallet: EmbeddedWallet, aztecNode: AztecNode, aztecNodeAdmin: AztecNodeAdmin | undefined, store: BotStore, syncChainTip?: BlockTag): Promise<AmmBot>;
|
|
21
|
+
protected createAndSendTx(logCtx: object): Promise<TxHash>;
|
|
22
|
+
protected onTxMined(receipt: TxReceipt, logCtx: object): Promise<void>;
|
|
23
|
+
getAmmBalances(): Promise<Balances>;
|
|
24
|
+
getBalances(): Promise<{
|
|
25
|
+
senderPublic: Balances;
|
|
26
|
+
senderPrivate: Balances;
|
|
27
|
+
amm: Balances;
|
|
28
|
+
}>;
|
|
29
|
+
private getPublicBalanceFor;
|
|
30
|
+
private getPrivateBalanceFor;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1tX2JvdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FtbV9ib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLakQsS0FBSyxRQUFRLEdBQUc7SUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtDQUFFLENBQUM7QUFFbkQscUJBQWEsTUFBTyxTQUFRLE9BQU87YUFLZixHQUFHLEVBQUUsV0FBVzthQUNoQixNQUFNLEVBQUUsYUFBYTthQUNyQixNQUFNLEVBQUUsYUFBYTtJQU52QyxTQUFTLGFBQ1AsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsY0FBYyxFQUN0QixxQkFBcUIsRUFBRSxZQUFZLEVBQ25CLEdBQUcsRUFBRSxXQUFXLEVBQ2hCLE1BQU0sRUFBRSxhQUFhLEVBQ3JCLE1BQU0sRUFBRSxhQUFhLEVBQ3JDLE1BQU0sRUFBRSxTQUFTLEVBR2xCO0lBRUQsT0FBYSxNQUFNLENBQ2pCLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGNBQWMsRUFBRSxjQUFjLEdBQUcsU0FBUyxFQUMxQyxLQUFLLEVBQUUsUUFBUSxFQUNmLFlBQVksQ0FBQyxFQUFFLFFBQVEsR0FDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVVqQjtJQUVELFVBQWdCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0E2Qy9EO0lBRUQsVUFBeUIsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBR3BGO0lBRU0sY0FBYyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FFekM7SUFFWSxXQUFXLElBQUksT0FBTyxDQUFDO1FBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQztRQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7UUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFBO0tBQUUsQ0FBQyxDQU10RztZQUVhLG1CQUFtQjtZQUtuQixvQkFBb0I7Q0FTbkMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amm_bot.d.ts","sourceRoot":"","sources":["../src/amm_bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9D,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKjD,KAAK,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,qBAAa,MAAO,SAAQ,OAAO;aAKf,GAAG,EAAE,WAAW;aAChB,MAAM,EAAE,aAAa;aACrB,MAAM,EAAE,aAAa;IANvC,SAAS,aACP,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,qBAAqB,EAAE,YAAY,EACnB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrC,MAAM,EAAE,SAAS,EAGlB;IAED,OAAa,MAAM,CACjB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,KAAK,EAAE,QAAQ,EACf,YAAY,CAAC,EAAE,QAAQ,GACtB,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED,UAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6C/D;IAED,UAAyB,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;IAEM,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,CAEzC;IAEY,WAAW,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,QAAQ,CAAC;QAAC,aAAa,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,CAAC,CAMtG;YAEa,mBAAmB;YAKnB,oBAAoB;CASnC"}
|
package/dest/amm_bot.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { NO_WAIT } from '@aztec-labs/aztec.js/contracts';
|
|
2
|
+
import { Fr } from '@aztec-labs/aztec.js/fields';
|
|
3
|
+
import { jsonStringify } from '@aztec-labs/foundation/json-rpc';
|
|
4
|
+
import { BaseBot } from './base_bot.js';
|
|
5
|
+
import { BotFactory } from './factory.js';
|
|
6
|
+
const TRANSFER_BASE_AMOUNT = 1_000;
|
|
7
|
+
const TRANSFER_VARIANCE = 200;
|
|
8
|
+
export class AmmBot extends BaseBot {
|
|
9
|
+
amm;
|
|
10
|
+
token0;
|
|
11
|
+
token1;
|
|
12
|
+
constructor(node, wallet, defaultAccountAddress, amm, token0, token1, config){
|
|
13
|
+
super(node, wallet, defaultAccountAddress, config), this.amm = amm, this.token0 = token0, this.token1 = token1;
|
|
14
|
+
}
|
|
15
|
+
static async create(config, wallet, aztecNode, aztecNodeAdmin, store, syncChainTip) {
|
|
16
|
+
const { defaultAccountAddress, token0, token1, amm } = await new BotFactory(config, wallet, store, aztecNode, aztecNodeAdmin, syncChainTip).setupAmm();
|
|
17
|
+
return new AmmBot(aztecNode, wallet, defaultAccountAddress, amm, token0, token1, config);
|
|
18
|
+
}
|
|
19
|
+
async createAndSendTx(logCtx) {
|
|
20
|
+
const { feePaymentMethod } = this.config;
|
|
21
|
+
const { wallet, amm, token0, token1 } = this;
|
|
22
|
+
const balances = this.getBalances();
|
|
23
|
+
this.log.info(`Preparing tx with ${feePaymentMethod} fee to swap tokens. Balances: ${jsonStringify(balances)}`, {
|
|
24
|
+
...logCtx,
|
|
25
|
+
balances
|
|
26
|
+
});
|
|
27
|
+
// 1000 ± 200
|
|
28
|
+
const amountIn = Math.floor(TRANSFER_BASE_AMOUNT + (Math.random() - 0.5) * TRANSFER_VARIANCE);
|
|
29
|
+
const authwitNonce = Fr.random();
|
|
30
|
+
const [tokenIn, tokenOut] = Math.random() < 0.5 ? [
|
|
31
|
+
token0,
|
|
32
|
+
token1
|
|
33
|
+
] : [
|
|
34
|
+
token1,
|
|
35
|
+
token0
|
|
36
|
+
];
|
|
37
|
+
const swapAuthwit = await wallet.createAuthWit(this.defaultAccountAddress, {
|
|
38
|
+
caller: amm.address,
|
|
39
|
+
call: await tokenIn.methods.transfer_to_public(this.defaultAccountAddress, amm.address, amountIn, authwitNonce).getFunctionCall()
|
|
40
|
+
});
|
|
41
|
+
const { result: tokenInBalance } = await tokenIn.methods.balance_of_public(amm.address).simulate({
|
|
42
|
+
from: this.defaultAccountAddress
|
|
43
|
+
});
|
|
44
|
+
const { result: tokenOutBalance } = await tokenOut.methods.balance_of_public(amm.address).simulate({
|
|
45
|
+
from: this.defaultAccountAddress
|
|
46
|
+
});
|
|
47
|
+
const { result: amountOutMin } = await amm.methods.get_amount_out_for_exact_in(tokenInBalance, tokenOutBalance, amountIn).simulate({
|
|
48
|
+
from: this.defaultAccountAddress
|
|
49
|
+
});
|
|
50
|
+
const swapExactTokensInteraction = amm.methods.swap_exact_tokens_for_tokens(tokenIn.address, tokenOut.address, amountIn, amountOutMin, authwitNonce).with({
|
|
51
|
+
authWitnesses: [
|
|
52
|
+
swapAuthwit
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
const opts = this.getSendMethodOpts();
|
|
56
|
+
this.log.verbose(`Sending transaction`, logCtx);
|
|
57
|
+
this.log.info(`Tx. Balances: ${jsonStringify(balances)}`, {
|
|
58
|
+
...logCtx,
|
|
59
|
+
balances
|
|
60
|
+
});
|
|
61
|
+
const { txHash } = await swapExactTokensInteraction.send({
|
|
62
|
+
...opts,
|
|
63
|
+
wait: NO_WAIT
|
|
64
|
+
});
|
|
65
|
+
return txHash;
|
|
66
|
+
}
|
|
67
|
+
async onTxMined(receipt, logCtx) {
|
|
68
|
+
const balances = await this.getBalances();
|
|
69
|
+
this.log.info(`Balances after swap in tx ${receipt.txHash}: ${jsonStringify(balances)}`, {
|
|
70
|
+
...logCtx,
|
|
71
|
+
balances
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
getAmmBalances() {
|
|
75
|
+
return this.getPublicBalanceFor(this.amm.address);
|
|
76
|
+
}
|
|
77
|
+
async getBalances() {
|
|
78
|
+
return {
|
|
79
|
+
senderPublic: await this.getPublicBalanceFor(this.defaultAccountAddress),
|
|
80
|
+
senderPrivate: await this.getPrivateBalanceFor(this.defaultAccountAddress),
|
|
81
|
+
amm: await this.getPublicBalanceFor(this.amm.address, this.defaultAccountAddress)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async getPublicBalanceFor(address, from) {
|
|
85
|
+
const { result: token0 } = await this.token0.methods.balance_of_public(address).simulate({
|
|
86
|
+
from: from ?? address
|
|
87
|
+
});
|
|
88
|
+
const { result: token1 } = await this.token1.methods.balance_of_public(address).simulate({
|
|
89
|
+
from: from ?? address
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
token0,
|
|
93
|
+
token1
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async getPrivateBalanceFor(address, from) {
|
|
97
|
+
const { result: token0 } = await this.token0.methods.balance_of_private(address).simulate({
|
|
98
|
+
from: from ?? address
|
|
99
|
+
});
|
|
100
|
+
const { result: token1 } = await this.token1.methods.balance_of_private(address).simulate({
|
|
101
|
+
from: from ?? address
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
token0,
|
|
105
|
+
token1
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
|
+
import type { SendInteractionOptions } from '@aztec-labs/aztec.js/contracts';
|
|
3
|
+
import type { TxHash, TxReceipt } from '@aztec-labs/aztec.js/tx';
|
|
4
|
+
import type { AztecNode } from '@aztec-labs/stdlib/interfaces/client';
|
|
5
|
+
import type { EmbeddedWallet } from '@aztec-labs/wallets/embedded';
|
|
6
|
+
import type { BotConfig } from './config.js';
|
|
7
|
+
export declare abstract class BaseBot {
|
|
8
|
+
readonly node: AztecNode;
|
|
9
|
+
readonly wallet: EmbeddedWallet;
|
|
10
|
+
readonly defaultAccountAddress: AztecAddress;
|
|
11
|
+
config: BotConfig;
|
|
12
|
+
protected log: import("@aztec-labs/aztec.js/log").Logger;
|
|
13
|
+
protected attempts: number;
|
|
14
|
+
protected successes: number;
|
|
15
|
+
protected constructor(node: AztecNode, wallet: EmbeddedWallet, defaultAccountAddress: AztecAddress, config: BotConfig);
|
|
16
|
+
run(): Promise<TxReceipt | TxHash>;
|
|
17
|
+
protected abstract createAndSendTx(logCtx: object): Promise<TxHash>;
|
|
18
|
+
protected onTxMined(_receipt: TxReceipt, _logCtx: object): Promise<void>;
|
|
19
|
+
protected getSendMethodOpts(): SendInteractionOptions;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9ib3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlX2JvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUk3RSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLDhCQUFzQixPQUFPO2FBT1QsSUFBSSxFQUFFLFNBQVM7YUFDZixNQUFNLEVBQUUsY0FBYzthQUN0QixxQkFBcUIsRUFBRSxZQUFZO0lBQzVDLE1BQU0sRUFBRSxTQUFTO0lBVDFCLFNBQVMsQ0FBQyxHQUFHLDRDQUF1QjtJQUVwQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBSztJQUMvQixTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBSztJQUVoQyxTQUFTLGFBQ1MsSUFBSSxFQUFFLFNBQVMsRUFDZixNQUFNLEVBQUUsY0FBYyxFQUN0QixxQkFBcUIsRUFBRSxZQUFZLEVBQzVDLE1BQU0sRUFBRSxTQUFTLEVBQ3RCO0lBRVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBeUI5QztJQUVELFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBFLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHdkU7SUFFRCxTQUFTLENBQUMsaUJBQWlCLElBQUksc0JBQXNCLENBY3BEO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_bot.d.ts","sourceRoot":"","sources":["../src/base_bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,8BAAsB,OAAO;aAOT,IAAI,EAAE,SAAS;aACf,MAAM,EAAE,cAAc;aACtB,qBAAqB,EAAE,YAAY;IAC5C,MAAM,EAAE,SAAS;IAT1B,SAAS,CAAC,GAAG,4CAAuB;IAEpC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAK;IAC/B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;IAEhC,SAAS,aACS,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,qBAAqB,EAAE,YAAY,EAC5C,MAAM,EAAE,SAAS,EACtB;IAES,GAAG,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAyB9C;IAED,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;IAED,SAAS,CAAC,iBAAiB,IAAI,sBAAsB,CAcpD;CACF"}
|
package/dest/base_bot.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createLogger } from '@aztec-labs/aztec.js/log';
|
|
2
|
+
import { waitForTx } from '@aztec-labs/aztec.js/node';
|
|
3
|
+
import { TxStatus } from '@aztec-labs/aztec.js/tx';
|
|
4
|
+
import { Gas } from '@aztec-labs/stdlib/gas';
|
|
5
|
+
export class BaseBot {
|
|
6
|
+
node;
|
|
7
|
+
wallet;
|
|
8
|
+
defaultAccountAddress;
|
|
9
|
+
config;
|
|
10
|
+
log;
|
|
11
|
+
attempts;
|
|
12
|
+
successes;
|
|
13
|
+
constructor(node, wallet, defaultAccountAddress, config){
|
|
14
|
+
this.node = node;
|
|
15
|
+
this.wallet = wallet;
|
|
16
|
+
this.defaultAccountAddress = defaultAccountAddress;
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.log = createLogger('bot');
|
|
19
|
+
this.attempts = 0;
|
|
20
|
+
this.successes = 0;
|
|
21
|
+
}
|
|
22
|
+
async run() {
|
|
23
|
+
this.attempts++;
|
|
24
|
+
const { followChain, txMinedWaitSeconds } = this.config;
|
|
25
|
+
const logCtx = {
|
|
26
|
+
runId: Date.now() * 1000 + Math.floor(Math.random() * 1000),
|
|
27
|
+
followChain,
|
|
28
|
+
txMinedWaitSeconds
|
|
29
|
+
};
|
|
30
|
+
this.log.verbose(`Creating tx`, logCtx);
|
|
31
|
+
const txHash = await this.createAndSendTx(logCtx);
|
|
32
|
+
if (followChain === 'NONE') {
|
|
33
|
+
this.log.info(`Transaction ${txHash.toString()} sent, not waiting for it to be mined`);
|
|
34
|
+
return txHash;
|
|
35
|
+
}
|
|
36
|
+
const waitForStatus = TxStatus[followChain];
|
|
37
|
+
this.log.verbose(`Awaiting tx ${txHash.toString()} to be on the ${followChain} chain`, logCtx);
|
|
38
|
+
const receipt = await waitForTx(this.node, txHash, {
|
|
39
|
+
timeout: txMinedWaitSeconds,
|
|
40
|
+
waitForStatus
|
|
41
|
+
});
|
|
42
|
+
this.successes++;
|
|
43
|
+
this.log.info(`Tx #${this.attempts} ${receipt.txHash} successfully mined in block ${receipt.blockNumber} (stats: ${this.successes}/${this.attempts} success)`, logCtx);
|
|
44
|
+
await this.onTxMined(receipt, logCtx);
|
|
45
|
+
return receipt;
|
|
46
|
+
}
|
|
47
|
+
onTxMined(_receipt, _logCtx) {
|
|
48
|
+
// no-op
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
getSendMethodOpts() {
|
|
52
|
+
const { l2GasLimit, daGasLimit, minFeePadding } = this.config;
|
|
53
|
+
this.wallet.setMinFeePadding(minFeePadding);
|
|
54
|
+
const gasSettings = l2GasLimit !== undefined && l2GasLimit > 0 && daGasLimit !== undefined && daGasLimit > 0 ? {
|
|
55
|
+
gasLimits: Gas.from({
|
|
56
|
+
l2Gas: l2GasLimit,
|
|
57
|
+
daGas: daGasLimit
|
|
58
|
+
})
|
|
59
|
+
} : undefined;
|
|
60
|
+
return {
|
|
61
|
+
from: this.defaultAccountAddress,
|
|
62
|
+
...gasSettings ? {
|
|
63
|
+
fee: {
|
|
64
|
+
gasSettings
|
|
65
|
+
}
|
|
66
|
+
} : {}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
package/dest/bot.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AztecAddress } from '@aztec-labs/aztec.js/addresses';
|
|
2
|
+
import { TxHash } from '@aztec-labs/aztec.js/tx';
|
|
3
|
+
import type { PrivateTokenContract } from '@aztec-labs/noir-contracts.js/PrivateToken';
|
|
4
|
+
import type { TokenContract } from '@aztec-labs/noir-contracts.js/Token';
|
|
5
|
+
import type { BlockTag } from '@aztec-labs/stdlib/block';
|
|
6
|
+
import type { AztecNode, AztecNodeAdmin } from '@aztec-labs/stdlib/interfaces/client';
|
|
7
|
+
import type { EmbeddedWallet } from '@aztec-labs/wallets/embedded';
|
|
8
|
+
import { BaseBot } from './base_bot.js';
|
|
9
|
+
import type { BotConfig } from './config.js';
|
|
10
|
+
import type { BotStore } from './store/index.js';
|
|
11
|
+
export declare class Bot extends BaseBot {
|
|
12
|
+
readonly token: TokenContract | PrivateTokenContract;
|
|
13
|
+
readonly recipient: AztecAddress;
|
|
14
|
+
protected constructor(node: AztecNode, wallet: EmbeddedWallet, defaultAccountAddress: AztecAddress, token: TokenContract | PrivateTokenContract, recipient: AztecAddress, config: BotConfig);
|
|
15
|
+
static create(config: BotConfig, wallet: EmbeddedWallet, aztecNode: AztecNode, aztecNodeAdmin: AztecNodeAdmin | undefined, store: BotStore, syncChainTip?: BlockTag): Promise<Bot>;
|
|
16
|
+
updateConfig(config: Partial<BotConfig>): void;
|
|
17
|
+
protected createAndSendTx(logCtx: object): Promise<TxHash>;
|
|
18
|
+
getBalances(): Promise<{
|
|
19
|
+
sender: {
|
|
20
|
+
privateBalance: bigint;
|
|
21
|
+
publicBalance: bigint;
|
|
22
|
+
};
|
|
23
|
+
recipient: {
|
|
24
|
+
privateBalance: bigint;
|
|
25
|
+
publicBalance: bigint;
|
|
26
|
+
};
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm90LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYm90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRCxPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUtqRCxxQkFBYSxHQUFJLFNBQVEsT0FBTzthQUtaLEtBQUssRUFBRSxhQUFhLEdBQUcsb0JBQW9CO2FBQzNDLFNBQVMsRUFBRSxZQUFZO0lBTHpDLFNBQVMsYUFDUCxJQUFJLEVBQUUsU0FBUyxFQUNmLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLHFCQUFxQixFQUFFLFlBQVksRUFDbkIsS0FBSyxFQUFFLGFBQWEsR0FBRyxvQkFBb0IsRUFDM0MsU0FBUyxFQUFFLFlBQVksRUFDdkMsTUFBTSxFQUFFLFNBQVMsRUFHbEI7SUFFRCxPQUFhLE1BQU0sQ0FDakIsTUFBTSxFQUFFLFNBQVMsRUFDakIsTUFBTSxFQUFFLGNBQWMsRUFDdEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsY0FBYyxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQzFDLEtBQUssRUFBRSxRQUFRLEVBQ2YsWUFBWSxDQUFDLEVBQUUsUUFBUSxHQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLENBVWQ7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFHN0M7SUFFRCxVQUFnQixlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBMEIvRDtJQUVZLFdBQVc7Ozs7Ozs7OztPQWtCdkI7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKjD,qBAAa,GAAI,SAAQ,OAAO;aAKZ,KAAK,EAAE,aAAa,GAAG,oBAAoB;aAC3C,SAAS,EAAE,YAAY;IALzC,SAAS,aACP,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,qBAAqB,EAAE,YAAY,EACnB,KAAK,EAAE,aAAa,GAAG,oBAAoB,EAC3C,SAAS,EAAE,YAAY,EACvC,MAAM,EAAE,SAAS,EAGlB;IAED,OAAa,MAAM,CACjB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,KAAK,EAAE,QAAQ,EACf,YAAY,CAAC,EAAE,QAAQ,GACtB,OAAO,CAAC,GAAG,CAAC,CAUd;IAEM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,QAG7C;IAED,UAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B/D;IAEY,WAAW;;;;;;;;;OAkBvB;CACF"}
|
package/dest/bot.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { BatchCall, NO_WAIT } from '@aztec-labs/aztec.js/contracts';
|
|
2
|
+
import { times } from '@aztec-labs/foundation/collection';
|
|
3
|
+
import { BaseBot } from './base_bot.js';
|
|
4
|
+
import { BotFactory } from './factory.js';
|
|
5
|
+
import { getBalances, getPrivateBalance, isStandardTokenContract } from './utils.js';
|
|
6
|
+
const TRANSFER_AMOUNT = 1;
|
|
7
|
+
export class Bot extends BaseBot {
|
|
8
|
+
token;
|
|
9
|
+
recipient;
|
|
10
|
+
constructor(node, wallet, defaultAccountAddress, token, recipient, config){
|
|
11
|
+
super(node, wallet, defaultAccountAddress, config), this.token = token, this.recipient = recipient;
|
|
12
|
+
}
|
|
13
|
+
static async create(config, wallet, aztecNode, aztecNodeAdmin, store, syncChainTip) {
|
|
14
|
+
const { defaultAccountAddress, token, recipient } = await new BotFactory(config, wallet, store, aztecNode, aztecNodeAdmin, syncChainTip).setup();
|
|
15
|
+
return new Bot(aztecNode, wallet, defaultAccountAddress, token, recipient, config);
|
|
16
|
+
}
|
|
17
|
+
updateConfig(config) {
|
|
18
|
+
this.log.info(`Updating bot config ${Object.keys(config).join(', ')}`);
|
|
19
|
+
this.config = {
|
|
20
|
+
...this.config,
|
|
21
|
+
...config
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async createAndSendTx(logCtx) {
|
|
25
|
+
const { privateTransfersPerTx, publicTransfersPerTx, feePaymentMethod } = this.config;
|
|
26
|
+
const { token, recipient, wallet } = this;
|
|
27
|
+
this.log.verbose(`Preparing tx with ${feePaymentMethod} fee with ${privateTransfersPerTx} private and ${publicTransfersPerTx} public transfers`, logCtx);
|
|
28
|
+
const calls = isStandardTokenContract(token) ? [
|
|
29
|
+
times(privateTransfersPerTx, ()=>token.methods.transfer(recipient, TRANSFER_AMOUNT)),
|
|
30
|
+
times(publicTransfersPerTx, ()=>token.methods.transfer_in_public(this.defaultAccountAddress, recipient, TRANSFER_AMOUNT, 0))
|
|
31
|
+
].flat() : times(privateTransfersPerTx, ()=>token.methods.transfer(TRANSFER_AMOUNT, this.defaultAccountAddress, recipient));
|
|
32
|
+
const batch = new BatchCall(wallet, calls);
|
|
33
|
+
const opts = this.getSendMethodOpts();
|
|
34
|
+
this.log.verbose(`Sending transaction`, logCtx);
|
|
35
|
+
const { txHash } = await batch.send({
|
|
36
|
+
...opts,
|
|
37
|
+
wait: NO_WAIT
|
|
38
|
+
});
|
|
39
|
+
return txHash;
|
|
40
|
+
}
|
|
41
|
+
async getBalances() {
|
|
42
|
+
if (isStandardTokenContract(this.token)) {
|
|
43
|
+
return {
|
|
44
|
+
sender: await getBalances(this.token, this.defaultAccountAddress),
|
|
45
|
+
recipient: await getBalances(this.token, this.recipient)
|
|
46
|
+
};
|
|
47
|
+
} else {
|
|
48
|
+
return {
|
|
49
|
+
sender: {
|
|
50
|
+
privateBalance: await getPrivateBalance(this.token, this.defaultAccountAddress),
|
|
51
|
+
publicBalance: 0n
|
|
52
|
+
},
|
|
53
|
+
recipient: {
|
|
54
|
+
privateBalance: await getPrivateBalance(this.token, this.recipient),
|
|
55
|
+
publicBalance: 0n
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
package/dest/config.d.ts
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { type ConfigMappingsType, SecretValue } from '@aztec-labs/foundation/config';
|
|
2
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
3
|
+
import { type DataStoreConfig } from '@aztec-labs/stdlib/kv-store';
|
|
4
|
+
import type { ComponentsVersions } from '@aztec-labs/stdlib/versioning';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
declare const BotFollowChain: readonly ["NONE", "PROPOSED", "CHECKPOINTED", "PROVEN"];
|
|
7
|
+
type BotFollowChain = (typeof BotFollowChain)[number];
|
|
8
|
+
declare const BotMode: readonly ["transfer", "amm", "crosschain"];
|
|
9
|
+
type BotMode = (typeof BotMode)[number];
|
|
10
|
+
export declare enum SupportedTokenContracts {
|
|
11
|
+
TokenContract = "TokenContract",
|
|
12
|
+
PrivateTokenContract = "PrivateTokenContract"
|
|
13
|
+
}
|
|
14
|
+
export type BotConfig = {
|
|
15
|
+
/** The URL to the Aztec node to check for tx pool status. */
|
|
16
|
+
nodeUrl: string | undefined;
|
|
17
|
+
/** The URL to the Aztec node admin API to force-flush txs if configured. */
|
|
18
|
+
nodeAdminUrl: string | undefined;
|
|
19
|
+
/** Url of the ethereum host. */
|
|
20
|
+
l1RpcUrls: string[] | undefined;
|
|
21
|
+
/** The mnemonic for the account to bridge fee juice from L1. */
|
|
22
|
+
l1Mnemonic: SecretValue<string> | undefined;
|
|
23
|
+
/** The private key for the account to bridge fee juice from L1. */
|
|
24
|
+
l1PrivateKey: SecretValue<string> | undefined;
|
|
25
|
+
/** How long to wait for L1 to L2 messages to become available on L2 */
|
|
26
|
+
l1ToL2MessageTimeoutSeconds: number;
|
|
27
|
+
/** Signing private key for the sender account. */
|
|
28
|
+
senderPrivateKey: SecretValue<Fr> | undefined;
|
|
29
|
+
/** Optional salt to use to instantiate the sender account */
|
|
30
|
+
senderSalt: Fr | undefined;
|
|
31
|
+
/** Salt for the token contract instantiation. */
|
|
32
|
+
tokenSalt: Fr;
|
|
33
|
+
/** Every how many seconds should a new tx be sent. */
|
|
34
|
+
txIntervalSeconds: number;
|
|
35
|
+
/** How many private token transfers are executed per tx. */
|
|
36
|
+
privateTransfersPerTx: number;
|
|
37
|
+
/** How many public token transfers are executed per tx. */
|
|
38
|
+
publicTransfersPerTx: number;
|
|
39
|
+
/** How to handle fee payments. */
|
|
40
|
+
feePaymentMethod: 'fee_juice';
|
|
41
|
+
/** 'How much is the bot willing to overpay vs. the current min fee' */
|
|
42
|
+
minFeePadding: number;
|
|
43
|
+
/** True to not automatically setup or start the bot on initialization. */
|
|
44
|
+
noStart: boolean;
|
|
45
|
+
/** How long to wait for a tx to be mined before reporting an error. */
|
|
46
|
+
txMinedWaitSeconds: number;
|
|
47
|
+
/** Whether to wait for txs to be proven, to be mined, or no wait at all. */
|
|
48
|
+
followChain: BotFollowChain;
|
|
49
|
+
/** Do not send a tx if the node's tx pool already has this many pending txs. */
|
|
50
|
+
maxPendingTxs: number;
|
|
51
|
+
/** Whether to flush after sending each 'setup' transaction */
|
|
52
|
+
flushSetupTransactions: boolean;
|
|
53
|
+
/** L2 gas limit for the tx (empty to let the bot's wallet estimate). */
|
|
54
|
+
l2GasLimit: number | undefined;
|
|
55
|
+
/** DA gas limit for the tx (empty to let the bot's wallet estimate). */
|
|
56
|
+
daGasLimit: number | undefined;
|
|
57
|
+
/** Token contract to use */
|
|
58
|
+
contract: SupportedTokenContracts;
|
|
59
|
+
/** The maximum number of consecutive errors before the bot shuts down */
|
|
60
|
+
maxConsecutiveErrors: number;
|
|
61
|
+
/** Stops the bot if service becomes unhealthy */
|
|
62
|
+
stopWhenUnhealthy: boolean;
|
|
63
|
+
/** Bot mode: transfer, amm, or crosschain. */
|
|
64
|
+
botMode: BotMode;
|
|
65
|
+
/** Number of L2→L1 messages per tx (crosschain mode). */
|
|
66
|
+
l2ToL1MessagesPerTx: number;
|
|
67
|
+
/** Max L1→L2 messages to keep in-flight (crosschain mode). */
|
|
68
|
+
l1ToL2SeedCount: number;
|
|
69
|
+
} & Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb'>;
|
|
70
|
+
export declare const BotConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
71
|
+
nodeUrl: z.ZodOptional<z.ZodString>;
|
|
72
|
+
nodeAdminUrl: z.ZodOptional<z.ZodString>;
|
|
73
|
+
l1RpcUrls: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
74
|
+
l1Mnemonic: z.ZodOptional<z.ZodType<SecretValue<string>, any, z.core.$ZodTypeInternals<SecretValue<string>, any>>>;
|
|
75
|
+
l1PrivateKey: z.ZodOptional<z.ZodType<SecretValue<string>, any, z.core.$ZodTypeInternals<SecretValue<string>, any>>>;
|
|
76
|
+
l1ToL2MessageTimeoutSeconds: z.ZodNumber;
|
|
77
|
+
senderPrivateKey: z.ZodOptional<z.ZodType<SecretValue<Fr>, any, z.core.$ZodTypeInternals<SecretValue<Fr>, any>>>;
|
|
78
|
+
senderSalt: z.ZodOptional<import("@aztec-labs/stdlib/schemas").ZodFor<Fr>>;
|
|
79
|
+
tokenSalt: import("@aztec-labs/stdlib/schemas").ZodFor<Fr>;
|
|
80
|
+
txIntervalSeconds: z.ZodNumber;
|
|
81
|
+
privateTransfersPerTx: z.ZodNumber;
|
|
82
|
+
publicTransfersPerTx: z.ZodNumber;
|
|
83
|
+
feePaymentMethod: z.ZodLiteral<"fee_juice">;
|
|
84
|
+
minFeePadding: z.ZodNumber;
|
|
85
|
+
noStart: z.ZodBoolean;
|
|
86
|
+
txMinedWaitSeconds: z.ZodNumber;
|
|
87
|
+
followChain: z.ZodEnum<{
|
|
88
|
+
CHECKPOINTED: "CHECKPOINTED";
|
|
89
|
+
NONE: "NONE";
|
|
90
|
+
PROPOSED: "PROPOSED";
|
|
91
|
+
PROVEN: "PROVEN";
|
|
92
|
+
}>;
|
|
93
|
+
maxPendingTxs: z.ZodNumber;
|
|
94
|
+
flushSetupTransactions: z.ZodBoolean;
|
|
95
|
+
l2GasLimit: z.ZodOptional<z.ZodNumber>;
|
|
96
|
+
daGasLimit: z.ZodOptional<z.ZodNumber>;
|
|
97
|
+
contract: z.ZodEnum<typeof SupportedTokenContracts>;
|
|
98
|
+
maxConsecutiveErrors: z.ZodNumber;
|
|
99
|
+
stopWhenUnhealthy: z.ZodBoolean;
|
|
100
|
+
botMode: z.ZodDefault<z.ZodEnum<{
|
|
101
|
+
amm: "amm";
|
|
102
|
+
crosschain: "crosschain";
|
|
103
|
+
transfer: "transfer";
|
|
104
|
+
}>>;
|
|
105
|
+
l2ToL1MessagesPerTx: z.ZodDefault<z.ZodNumber>;
|
|
106
|
+
l1ToL2SeedCount: z.ZodDefault<z.ZodNumber>;
|
|
107
|
+
dataDirectory: z.ZodOptional<z.ZodString>;
|
|
108
|
+
dataStoreMapSizeKb: z.ZodOptional<z.ZodNumber>;
|
|
109
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
110
|
+
l1ToL2MessageTimeoutSeconds: number;
|
|
111
|
+
tokenSalt: Fr;
|
|
112
|
+
txIntervalSeconds: number;
|
|
113
|
+
privateTransfersPerTx: number;
|
|
114
|
+
publicTransfersPerTx: number;
|
|
115
|
+
feePaymentMethod: "fee_juice";
|
|
116
|
+
minFeePadding: number;
|
|
117
|
+
noStart: boolean;
|
|
118
|
+
txMinedWaitSeconds: number;
|
|
119
|
+
followChain: "CHECKPOINTED" | "NONE" | "PROPOSED" | "PROVEN";
|
|
120
|
+
maxPendingTxs: number;
|
|
121
|
+
flushSetupTransactions: boolean;
|
|
122
|
+
contract: SupportedTokenContracts;
|
|
123
|
+
maxConsecutiveErrors: number;
|
|
124
|
+
stopWhenUnhealthy: boolean;
|
|
125
|
+
botMode: "amm" | "crosschain" | "transfer";
|
|
126
|
+
l2ToL1MessagesPerTx: number;
|
|
127
|
+
l1ToL2SeedCount: number;
|
|
128
|
+
dataDirectory?: string | undefined;
|
|
129
|
+
nodeUrl: string | undefined;
|
|
130
|
+
nodeAdminUrl: string | undefined;
|
|
131
|
+
l1RpcUrls: string[] | undefined;
|
|
132
|
+
senderSalt: Fr | undefined;
|
|
133
|
+
l2GasLimit: number | undefined;
|
|
134
|
+
daGasLimit: number | undefined;
|
|
135
|
+
l1Mnemonic: SecretValue<string> | undefined;
|
|
136
|
+
l1PrivateKey: SecretValue<string> | undefined;
|
|
137
|
+
senderPrivateKey: SecretValue<Fr> | undefined;
|
|
138
|
+
dataStoreMapSizeKb: number;
|
|
139
|
+
}, {
|
|
140
|
+
nodeUrl?: string | undefined;
|
|
141
|
+
nodeAdminUrl?: string | undefined;
|
|
142
|
+
l1RpcUrls?: string[] | undefined;
|
|
143
|
+
l1Mnemonic?: SecretValue<string> | undefined;
|
|
144
|
+
l1PrivateKey?: SecretValue<string> | undefined;
|
|
145
|
+
l1ToL2MessageTimeoutSeconds: number;
|
|
146
|
+
senderPrivateKey?: SecretValue<Fr> | undefined;
|
|
147
|
+
senderSalt?: Fr | undefined;
|
|
148
|
+
tokenSalt: Fr;
|
|
149
|
+
txIntervalSeconds: number;
|
|
150
|
+
privateTransfersPerTx: number;
|
|
151
|
+
publicTransfersPerTx: number;
|
|
152
|
+
feePaymentMethod: "fee_juice";
|
|
153
|
+
minFeePadding: number;
|
|
154
|
+
noStart: boolean;
|
|
155
|
+
txMinedWaitSeconds: number;
|
|
156
|
+
followChain: "CHECKPOINTED" | "NONE" | "PROPOSED" | "PROVEN";
|
|
157
|
+
maxPendingTxs: number;
|
|
158
|
+
flushSetupTransactions: boolean;
|
|
159
|
+
l2GasLimit?: number | undefined;
|
|
160
|
+
daGasLimit?: number | undefined;
|
|
161
|
+
contract: SupportedTokenContracts;
|
|
162
|
+
maxConsecutiveErrors: number;
|
|
163
|
+
stopWhenUnhealthy: boolean;
|
|
164
|
+
botMode: "amm" | "crosschain" | "transfer";
|
|
165
|
+
l2ToL1MessagesPerTx: number;
|
|
166
|
+
l1ToL2SeedCount: number;
|
|
167
|
+
dataDirectory?: string | undefined;
|
|
168
|
+
dataStoreMapSizeKb?: number | undefined;
|
|
169
|
+
}>>;
|
|
170
|
+
export declare const botConfigMappings: ConfigMappingsType<BotConfig>;
|
|
171
|
+
export declare function getBotConfigFromEnv(): BotConfig;
|
|
172
|
+
export declare function getBotDefaultConfig(): BotConfig;
|
|
173
|
+
export declare function getVersions(): Partial<ComponentsVersions>;
|
|
174
|
+
export {};
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBVVosTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHekQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBRXZGLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixRQUFBLE1BQU0sY0FBYyx5REFBMEQsQ0FBQztBQUMvRSxLQUFLLGNBQWMsR0FBRyxDQUFDLE9BQU8sY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLE9BQU8sNENBQTZDLENBQUM7QUFDM0QsS0FBSyxPQUFPLEdBQUcsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXhDLG9CQUFZLHVCQUF1QjtJQUNqQyxhQUFhLGtCQUFrQjtJQUMvQixvQkFBb0IseUJBQXlCO0NBQzlDO0FBRUQsTUFBTSxNQUFNLFNBQVMsR0FBRztJQUN0Qiw2REFBNkQ7SUFDN0QsT0FBTyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDNUIsNEVBQTRFO0lBQzVFLFlBQVksRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLGdDQUFnQztJQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLGdFQUFnRTtJQUNoRSxVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM1QyxtRUFBbUU7SUFDbkUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDOUMsdUVBQXVFO0lBQ3ZFLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztJQUNwQyxrREFBa0Q7SUFDbEQsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM5Qyw2REFBNkQ7SUFDN0QsVUFBVSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDM0IsaURBQWlEO0lBQ2pELFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDZCxzREFBc0Q7SUFDdEQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLDREQUE0RDtJQUM1RCxxQkFBcUIsRUFBRSxNQUFNLENBQUM7SUFDOUIsMkRBQTJEO0lBQzNELG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixrQ0FBa0M7SUFDbEMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO0lBQzlCLHVFQUF1RTtJQUN2RSxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLDBFQUEwRTtJQUMxRSxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2pCLHVFQUF1RTtJQUN2RSxrQkFBa0IsRUFBRSxNQUFNLENBQUM7SUFDM0IsNEVBQTRFO0lBQzVFLFdBQVcsRUFBRSxjQUFjLENBQUM7SUFDNUIsZ0ZBQWdGO0lBQ2hGLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsOERBQThEO0lBQzlELHNCQUFzQixFQUFFLE9BQU8sQ0FBQztJQUNoQyx3RUFBd0U7SUFDeEUsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDL0Isd0VBQXdFO0lBQ3hFLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQy9CLDRCQUE0QjtJQUM1QixRQUFRLEVBQUUsdUJBQXVCLENBQUM7SUFDbEMseUVBQXlFO0lBQ3pFLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixpREFBaUQ7SUFDakQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO0lBQzNCLDhDQUE4QztJQUM5QyxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2pCLDJEQUF5RDtJQUN6RCxtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFDNUIsZ0VBQThEO0lBQzlELGVBQWUsRUFBRSxNQUFNLENBQUM7Q0FDekIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWxFLGVBQU8sTUFBTSxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QzNCLENBQUM7QUFFRixlQUFPLE1BQU0saUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQW1LM0QsQ0FBQztBQUVGLHdCQUFnQixtQkFBbUIsSUFBSSxTQUFTLENBRS9DO0FBRUQsd0JBQWdCLG1CQUFtQixJQUFJLFNBQVMsQ0FFL0M7QUFFRCx3QkFBZ0IsV0FBVyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUt6RCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|