@waiaas/adapter-evm 2.6.0-rc.9 → 2.7.0-rc
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
CHANGED
|
@@ -25,22 +25,69 @@ WAIaaS is a local daemon that sits between your AI agent and the blockchain:
|
|
|
25
25
|
|
|
26
26
|
See [Security Model](docs/security-model.md) for full details.
|
|
27
27
|
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
graph LR
|
|
32
|
+
subgraph Interfaces
|
|
33
|
+
SDK["TypeScript SDK"]
|
|
34
|
+
MCP["MCP Server"]
|
|
35
|
+
CLI["CLI"]
|
|
36
|
+
Admin["Admin UI"]
|
|
37
|
+
Skills["Skill Files"]
|
|
38
|
+
WalletSDK["Wallet SDK"]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
subgraph Daemon
|
|
42
|
+
API["API Layer<br>(Hono + Middleware)"]
|
|
43
|
+
Services["Service Layer<br>(Policy, Notifications, Kill Switch)"]
|
|
44
|
+
Pipeline["Transaction Pipeline<br>(6-stage + 8-state)"]
|
|
45
|
+
Infra["Infrastructure<br>(SQLite, Keystore, Config)"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
subgraph Blockchain
|
|
49
|
+
Solana["Solana"]
|
|
50
|
+
EVM["EVM Chains"]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
SDK & MCP & CLI & Admin & Skills & WalletSDK --> API
|
|
54
|
+
API --> Services --> Pipeline --> Infra
|
|
55
|
+
Infra --> Solana & EVM
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**12 packages** in a monorepo:
|
|
59
|
+
|
|
60
|
+
- **@waiaas/core** — Shared types, Zod schemas, enums, and interfaces
|
|
61
|
+
- **@waiaas/daemon** — Self-hosted wallet daemon (Hono HTTP server)
|
|
62
|
+
- **@waiaas/adapter-solana** — Solana chain adapter (SPL / Token-2022)
|
|
63
|
+
- **@waiaas/adapter-evm** — EVM chain adapter (ERC-20 via viem)
|
|
64
|
+
- **@waiaas/actions** — DeFi Action Providers (Jupiter, 0x, LI.FI, Lido, Jito)
|
|
65
|
+
- **@waiaas/sdk** — TypeScript client library
|
|
66
|
+
- **@waiaas/mcp** — Model Context Protocol server for AI agents
|
|
67
|
+
- **@waiaas/cli** — Command-line interface
|
|
68
|
+
- **@waiaas/admin** — Preact-based Admin Web UI
|
|
69
|
+
- **@waiaas/wallet-sdk** — Wallet Signing SDK for wallet app integration
|
|
70
|
+
- **@waiaas/push-relay** — Push Relay Server (ntfy → push services)
|
|
71
|
+
- **@waiaas/skills** — Pre-built `.skill.md` instruction files for AI agents
|
|
72
|
+
|
|
73
|
+
See [Architecture](docs/architecture.md) for the full technical deep-dive.
|
|
74
|
+
|
|
28
75
|
## Quick Start
|
|
29
76
|
|
|
30
77
|
```bash
|
|
31
78
|
npm install -g @waiaas/cli
|
|
32
79
|
waiaas init # Create data directory + config.toml
|
|
33
80
|
waiaas start # Start daemon (sets master password on first run)
|
|
34
|
-
waiaas quickset --mode
|
|
81
|
+
waiaas quickset --mode mainnet # Create wallets + MCP sessions in one step
|
|
35
82
|
```
|
|
36
83
|
|
|
37
84
|
The `quickset` command does everything you need to get started:
|
|
38
85
|
|
|
39
|
-
1. Creates **Solana
|
|
86
|
+
1. Creates **Solana Mainnet + EVM Ethereum Mainnet** wallets automatically
|
|
40
87
|
2. Issues **MCP session tokens** for each wallet
|
|
41
88
|
3. Outputs a **Claude Desktop MCP config** snippet -- just copy and paste
|
|
42
89
|
|
|
43
|
-
>
|
|
90
|
+
> We recommend configuring spending limits and registering an owner wallet for high-value transaction approval. For testing, use `waiaas quickset --mode testnet` to create Solana Devnet + EVM Sepolia wallets instead.
|
|
44
91
|
|
|
45
92
|
### Admin UI
|
|
46
93
|
|
|
@@ -143,6 +190,7 @@ Enabled by default (`admin_ui = true` in config.toml).
|
|
|
143
190
|
|
|
144
191
|
| Document | Description |
|
|
145
192
|
|----------|-------------|
|
|
193
|
+
| [Architecture](docs/architecture.md) | System overview, package structure, pipeline, chain adapters |
|
|
146
194
|
| [Security Model](docs/security-model.md) | Authentication, policy engine, Kill Switch, AutoStop |
|
|
147
195
|
| [Deployment Guide](docs/deployment.md) | Docker, npm, configuration reference |
|
|
148
196
|
| [API Reference](docs/api-reference.md) | REST API endpoints and authentication |
|
|
@@ -14,14 +14,30 @@
|
|
|
14
14
|
* Phase 225-02: Initial implementation.
|
|
15
15
|
*/
|
|
16
16
|
import type { IChainSubscriber, IncomingTransaction, ChainType } from '@waiaas/core';
|
|
17
|
+
/** RPC alert callback type for notifying admin of RPC issues (#185). */
|
|
18
|
+
export type RpcAlertCallback = (alert: {
|
|
19
|
+
type: 'RPC_HEALTH_DEGRADED' | 'INCOMING_TX_RANGE_SKIPPED';
|
|
20
|
+
walletId: string;
|
|
21
|
+
network: string;
|
|
22
|
+
errorCount: number;
|
|
23
|
+
lastError: string;
|
|
24
|
+
fromBlock?: string;
|
|
25
|
+
toBlock?: string;
|
|
26
|
+
}) => void;
|
|
17
27
|
export declare class EvmIncomingSubscriber implements IChainSubscriber {
|
|
18
28
|
readonly chain: ChainType;
|
|
19
29
|
private client;
|
|
20
30
|
private subscriptions;
|
|
21
31
|
private generateId;
|
|
32
|
+
private onRpcAlert?;
|
|
33
|
+
private errorCount;
|
|
34
|
+
private backoffUntil;
|
|
35
|
+
/** Track wallets that already emitted RPC_HEALTH_DEGRADED to avoid spam. */
|
|
36
|
+
private alertedWallets;
|
|
22
37
|
constructor(config: {
|
|
23
38
|
rpcUrl: string;
|
|
24
39
|
generateId?: () => string;
|
|
40
|
+
onRpcAlert?: RpcAlertCallback;
|
|
25
41
|
});
|
|
26
42
|
subscribe(walletId: string, address: string, network: string, onTransaction: (tx: IncomingTransaction) => void): Promise<void>;
|
|
27
43
|
unsubscribe(walletId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-incoming-subscriber.d.ts","sourceRoot":"","sources":["../src/evm-incoming-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"evm-incoming-subscriber.d.ts","sourceRoot":"","sources":["../src/evm-incoming-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAuCrF,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE;IACrC,IAAI,EAAE,qBAAqB,GAAG,2BAA2B,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAK,IAAI,CAAC;AAEX,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAc;IAEvC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAK;IACzB,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAAqB;gBAE/B,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;KAAE;IAQ1F,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,GAC/C,OAAO,CAAC,IAAI,CAAC;IAcV,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,iBAAiB,IAAI,MAAM,EAAE;IAMvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAgIhB,SAAS;YA8BT,aAAa;CA4C5B"}
|
|
@@ -18,14 +18,36 @@ import { createPublicClient, http, parseAbiItem, } from 'viem';
|
|
|
18
18
|
const TRANSFER_EVENT = parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)');
|
|
19
19
|
/** Maximum blocks per poll cycle (pitfall 4: RPC provider limits). */
|
|
20
20
|
const MAX_BLOCK_RANGE = 10n;
|
|
21
|
+
/**
|
|
22
|
+
* L2 network prefixes where getBlock(includeTransactions:true) causes timeouts
|
|
23
|
+
* due to high TX density (500-2000+ TXs/block → 200KB-1MB+ responses).
|
|
24
|
+
* On these chains, only ERC-20 detection (getLogs) is used (#172).
|
|
25
|
+
*/
|
|
26
|
+
const L2_NETWORK_PREFIXES = ['arbitrum', 'optimism', 'base'];
|
|
27
|
+
/** Base backoff in ms after first RPC error. */
|
|
28
|
+
const BACKOFF_BASE_MS = 30_000;
|
|
29
|
+
/** Maximum backoff in ms (cap). */
|
|
30
|
+
const BACKOFF_MAX_MS = 300_000;
|
|
31
|
+
/** Consecutive errors before escalating log level to warn. */
|
|
32
|
+
const WARN_THRESHOLD = 3;
|
|
33
|
+
/** Maximum same-range retries before forcing cursor advancement. */
|
|
34
|
+
const MAX_RETRY_SAME_RANGE = 3;
|
|
35
|
+
/** Consecutive errors before emitting RPC health degraded alert (#185). */
|
|
36
|
+
const RPC_ALERT_THRESHOLD = 5;
|
|
21
37
|
export class EvmIncomingSubscriber {
|
|
22
38
|
chain = 'ethereum';
|
|
23
39
|
client;
|
|
24
40
|
subscriptions = new Map();
|
|
25
41
|
generateId;
|
|
42
|
+
onRpcAlert;
|
|
43
|
+
errorCount = 0;
|
|
44
|
+
backoffUntil = 0;
|
|
45
|
+
/** Track wallets that already emitted RPC_HEALTH_DEGRADED to avoid spam. */
|
|
46
|
+
alertedWallets = new Set();
|
|
26
47
|
constructor(config) {
|
|
27
48
|
this.client = createPublicClient({ transport: http(config.rpcUrl) });
|
|
28
49
|
this.generateId = config.generateId ?? (() => crypto.randomUUID());
|
|
50
|
+
this.onRpcAlert = config.onRpcAlert;
|
|
29
51
|
}
|
|
30
52
|
// -- Subscription management (2) --
|
|
31
53
|
async subscribe(walletId, address, network, onTransaction) {
|
|
@@ -37,6 +59,8 @@ export class EvmIncomingSubscriber {
|
|
|
37
59
|
network,
|
|
38
60
|
onTransaction,
|
|
39
61
|
lastBlock: currentBlock,
|
|
62
|
+
errorCount: 0,
|
|
63
|
+
backoffUntil: 0,
|
|
40
64
|
});
|
|
41
65
|
}
|
|
42
66
|
async unsubscribe(walletId) {
|
|
@@ -70,24 +94,92 @@ export class EvmIncomingSubscriber {
|
|
|
70
94
|
}
|
|
71
95
|
// -- Polling (called by BackgroundWorkers in Phase 226) --
|
|
72
96
|
async pollAll() {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
// Backoff: skip polling if still within backoff window
|
|
98
|
+
if (Date.now() < this.backoffUntil)
|
|
99
|
+
return;
|
|
100
|
+
let hadError = false;
|
|
101
|
+
try {
|
|
102
|
+
const currentBlock = await this.client.getBlockNumber();
|
|
103
|
+
for (const [walletId, sub] of this.subscriptions) {
|
|
104
|
+
// Per-wallet backoff: skip if still within cooldown window
|
|
105
|
+
if (Date.now() < sub.backoffUntil)
|
|
106
|
+
continue;
|
|
107
|
+
try {
|
|
108
|
+
if (sub.lastBlock >= currentBlock)
|
|
109
|
+
continue; // no new blocks
|
|
110
|
+
const toBlock = sub.lastBlock + MAX_BLOCK_RANGE < currentBlock
|
|
111
|
+
? sub.lastBlock + MAX_BLOCK_RANGE
|
|
112
|
+
: currentBlock;
|
|
113
|
+
const erc20Txs = await this.pollERC20(sub.address, sub.lastBlock + 1n, toBlock, walletId, sub.network);
|
|
114
|
+
// Skip native ETH polling on L2 chains to avoid getBlock timeout (#172)
|
|
115
|
+
const isL2 = L2_NETWORK_PREFIXES.some((p) => sub.network.startsWith(p));
|
|
116
|
+
const nativeTxs = isL2
|
|
117
|
+
? []
|
|
118
|
+
: await this.pollNativeETH(sub.address, sub.lastBlock + 1n, toBlock, walletId, sub.network);
|
|
119
|
+
const allTxs = [...erc20Txs, ...nativeTxs];
|
|
120
|
+
for (const tx of allTxs) {
|
|
121
|
+
sub.onTransaction(tx);
|
|
122
|
+
}
|
|
123
|
+
sub.lastBlock = toBlock;
|
|
124
|
+
sub.errorCount = 0;
|
|
125
|
+
sub.backoffUntil = 0;
|
|
126
|
+
this.alertedWallets.delete(walletId);
|
|
86
127
|
}
|
|
87
|
-
|
|
128
|
+
catch (err) {
|
|
129
|
+
hadError = true;
|
|
130
|
+
sub.errorCount++;
|
|
131
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
132
|
+
// Force cursor advancement after N consecutive failures to escape infinite retry
|
|
133
|
+
if (sub.errorCount >= MAX_RETRY_SAME_RANGE) {
|
|
134
|
+
const fromBlock = sub.lastBlock + 1n;
|
|
135
|
+
const toBlock = sub.lastBlock + MAX_BLOCK_RANGE < currentBlock
|
|
136
|
+
? sub.lastBlock + MAX_BLOCK_RANGE
|
|
137
|
+
: currentBlock;
|
|
138
|
+
sub.lastBlock = toBlock;
|
|
139
|
+
// Emit INCOMING_TX_RANGE_SKIPPED alert (#185)
|
|
140
|
+
this.onRpcAlert?.({
|
|
141
|
+
type: 'INCOMING_TX_RANGE_SKIPPED',
|
|
142
|
+
walletId,
|
|
143
|
+
network: sub.network,
|
|
144
|
+
errorCount: sub.errorCount,
|
|
145
|
+
lastError: errMsg,
|
|
146
|
+
fromBlock: String(fromBlock),
|
|
147
|
+
toBlock: String(toBlock),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Per-wallet exponential backoff
|
|
151
|
+
const backoffMs = Math.min(BACKOFF_BASE_MS * 2 ** (sub.errorCount - 1), BACKOFF_MAX_MS);
|
|
152
|
+
sub.backoffUntil = Date.now() + backoffMs;
|
|
153
|
+
// Emit RPC_HEALTH_DEGRADED alert once per wallet (#185)
|
|
154
|
+
if (sub.errorCount === RPC_ALERT_THRESHOLD && !this.alertedWallets.has(walletId)) {
|
|
155
|
+
this.alertedWallets.add(walletId);
|
|
156
|
+
this.onRpcAlert?.({
|
|
157
|
+
type: 'RPC_HEALTH_DEGRADED',
|
|
158
|
+
walletId,
|
|
159
|
+
network: sub.network,
|
|
160
|
+
errorCount: sub.errorCount,
|
|
161
|
+
lastError: errMsg,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Log only after WARN_THRESHOLD, message-only (no full stack trace)
|
|
165
|
+
if (sub.errorCount >= WARN_THRESHOLD) {
|
|
166
|
+
console.warn(`EVM poll failed for wallet ${walletId} (backoff ${backoffMs / 1000}s, consecutive: ${sub.errorCount}): ${errMsg}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Full cycle completed without RPC-level failure → reset backoff
|
|
171
|
+
if (!hadError) {
|
|
172
|
+
this.errorCount = 0;
|
|
173
|
+
this.backoffUntil = 0;
|
|
88
174
|
}
|
|
89
|
-
|
|
90
|
-
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
// RPC-level error (e.g. getBlockNumber failed — 429/500): apply backoff
|
|
178
|
+
this.errorCount++;
|
|
179
|
+
const backoffMs = Math.min(BACKOFF_BASE_MS * 2 ** (this.errorCount - 1), BACKOFF_MAX_MS);
|
|
180
|
+
this.backoffUntil = Date.now() + backoffMs;
|
|
181
|
+
if (this.errorCount >= WARN_THRESHOLD) {
|
|
182
|
+
console.warn(`EVM poll RPC error (backoff ${backoffMs / 1000}s, consecutive: ${this.errorCount}):`, err);
|
|
91
183
|
}
|
|
92
184
|
}
|
|
93
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-incoming-subscriber.js","sourceRoot":"","sources":["../src/evm-incoming-subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,kBAAkB,EAClB,IAAI,EACJ,YAAY,GAGb,MAAM,MAAM,CAAC;AAGd,6DAA6D;AAC7D,MAAM,cAAc,GAAG,YAAY,CACjC,yEAAyE,CAC1E,CAAC;AAEF,sEAAsE;AACtE,MAAM,eAAe,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"evm-incoming-subscriber.js","sourceRoot":"","sources":["../src/evm-incoming-subscriber.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@waiaas/adapter-evm",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0-rc",
|
|
4
4
|
"description": "WAIaaS EVM chain adapter - Ethereum/ERC-20 support via viem",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"viem": "^2.21.0",
|
|
32
|
-
"@waiaas/core": "2.
|
|
32
|
+
"@waiaas/core": "2.7.0-rc"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^25.2.3"
|