@elizaos/plugin-wallet 2.0.0-beta.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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/auto-enable.ts +76 -0
  4. package/dist/LpManagementService-BWrQ5-cO.mjs +353 -0
  5. package/dist/MockLpService-D_Apn4Fd.mjs +99 -0
  6. package/dist/aerodrome-CfnESC32.mjs +890 -0
  7. package/dist/chunk-hT5z_Zn9.mjs +35 -0
  8. package/dist/index.d.mts +34727 -0
  9. package/dist/index.mjs +21590 -0
  10. package/dist/lib/server-wallet-trade.d.mts +34 -0
  11. package/dist/lib/server-wallet-trade.mjs +306 -0
  12. package/dist/meteora-BPX39hZo.mjs +22640 -0
  13. package/dist/orca-Bybp1HXO.mjs +249 -0
  14. package/dist/pancakeswp-CkEXlXti.mjs +604 -0
  15. package/dist/plugin-ZO_MTyd0.mjs +529 -0
  16. package/dist/raydium-rfaM9yEf.mjs +539 -0
  17. package/dist/sdk/index.d.mts +32492 -0
  18. package/dist/sdk/index.mjs +6415 -0
  19. package/dist/types-D5252NZk.mjs +487 -0
  20. package/dist/uniswap-CReXgXVN.mjs +573 -0
  21. package/dist/wallet-action.d.mts +6 -0
  22. package/dist/wallet-action.mjs +820 -0
  23. package/package.json +152 -0
  24. package/src/actions/failure-codes.ts +79 -0
  25. package/src/actions/index.ts +1 -0
  26. package/src/analytics/birdeye/actions/wallet-search-address.ts +9 -0
  27. package/src/analytics/birdeye/birdeye-task.ts +175 -0
  28. package/src/analytics/birdeye/birdeye.ts +813 -0
  29. package/src/analytics/birdeye/constants.ts +74 -0
  30. package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +18 -0
  31. package/src/analytics/birdeye/providers/market.ts +227 -0
  32. package/src/analytics/birdeye/providers/portfolio-factory.test.ts +138 -0
  33. package/src/analytics/birdeye/providers/portfolio-factory.ts +252 -0
  34. package/src/analytics/birdeye/providers/trending.ts +365 -0
  35. package/src/analytics/birdeye/providers/wallet.ts +14 -0
  36. package/src/analytics/birdeye/search-category.test.ts +207 -0
  37. package/src/analytics/birdeye/search-category.ts +506 -0
  38. package/src/analytics/birdeye/service.ts +992 -0
  39. package/src/analytics/birdeye/tasks/birdeye.ts +232 -0
  40. package/src/analytics/birdeye/types/api/common.ts +305 -0
  41. package/src/analytics/birdeye/types/api/defi.ts +220 -0
  42. package/src/analytics/birdeye/types/api/pair.ts +200 -0
  43. package/src/analytics/birdeye/types/api/search.ts +86 -0
  44. package/src/analytics/birdeye/types/api/token.ts +635 -0
  45. package/src/analytics/birdeye/types/api/trader.ts +76 -0
  46. package/src/analytics/birdeye/types/api/wallet.ts +181 -0
  47. package/src/analytics/birdeye/types/shared.ts +106 -0
  48. package/src/analytics/birdeye/utils.ts +700 -0
  49. package/src/analytics/dexscreener/errors.ts +28 -0
  50. package/src/analytics/dexscreener/index.ts +3 -0
  51. package/src/analytics/dexscreener/search-category.test.ts +49 -0
  52. package/src/analytics/dexscreener/search-category.ts +42 -0
  53. package/src/analytics/dexscreener/service.ts +595 -0
  54. package/src/analytics/dexscreener/types.ts +128 -0
  55. package/src/analytics/lpinfo/index.d.ts +7 -0
  56. package/src/analytics/lpinfo/index.ts +52 -0
  57. package/src/analytics/lpinfo/kamino/README.md +102 -0
  58. package/src/analytics/lpinfo/kamino/index.ts +24 -0
  59. package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +422 -0
  60. package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +365 -0
  61. package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +496 -0
  62. package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +1123 -0
  63. package/src/analytics/lpinfo/kamino/services/kaminoService.ts +758 -0
  64. package/src/analytics/lpinfo/steer/README.md +169 -0
  65. package/src/analytics/lpinfo/steer/index.ts +23 -0
  66. package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +544 -0
  67. package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +1690 -0
  68. package/src/analytics/lpinfo/steer/steer-display-types.ts +99 -0
  69. package/src/analytics/news/index.ts +52 -0
  70. package/src/analytics/news/interfaces/types.ts +222 -0
  71. package/src/analytics/news/providers/defiNewsProvider.ts +734 -0
  72. package/src/analytics/news/services/newsDataService.ts +332 -0
  73. package/src/analytics/news/utils/formatters.ts +151 -0
  74. package/src/analytics/token-info/action.ts +240 -0
  75. package/src/analytics/token-info/index.ts +3 -0
  76. package/src/analytics/token-info/params.ts +215 -0
  77. package/src/analytics/token-info/providers.ts +681 -0
  78. package/src/analytics/token-info/service.ts +168 -0
  79. package/src/analytics/token-info/types.ts +74 -0
  80. package/src/audit/audit-log.ts +45 -0
  81. package/src/browser-shim/build-shim.ts +123 -0
  82. package/src/browser-shim/index.ts +5 -0
  83. package/src/browser-shim/shim.template.js +563 -0
  84. package/src/chains/evm/.github/workflows/npm-deploy.yml +112 -0
  85. package/src/chains/evm/LICENSE +21 -0
  86. package/src/chains/evm/README.md +106 -0
  87. package/src/chains/evm/actions/helpers.ts +147 -0
  88. package/src/chains/evm/actions/swap.ts +839 -0
  89. package/src/chains/evm/actions/transfer.ts +254 -0
  90. package/src/chains/evm/biome.json +61 -0
  91. package/src/chains/evm/bridge-router.ts +660 -0
  92. package/src/chains/evm/build.ts +89 -0
  93. package/src/chains/evm/chain-handler.ts +416 -0
  94. package/src/chains/evm/constants.ts +23 -0
  95. package/src/chains/evm/contracts/artifacts/OZGovernor.json +1707 -0
  96. package/src/chains/evm/contracts/artifacts/TimelockController.json +1007 -0
  97. package/src/chains/evm/contracts/artifacts/VoteToken.json +895 -0
  98. package/src/chains/evm/dex/aerodrome/index.ts +34 -0
  99. package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +558 -0
  100. package/src/chains/evm/dex/aerodrome/types.ts +318 -0
  101. package/src/chains/evm/dex/pancakeswp/index.ts +35 -0
  102. package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +743 -0
  103. package/src/chains/evm/dex/pancakeswp/types.ts +65 -0
  104. package/src/chains/evm/dex/uniswap/index.ts +35 -0
  105. package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +759 -0
  106. package/src/chains/evm/dex/uniswap/types.ts +390 -0
  107. package/src/chains/evm/generated/specs/spec-helpers.ts +73 -0
  108. package/src/chains/evm/generated/specs/specs.ts +151 -0
  109. package/src/chains/evm/gov-router.ts +250 -0
  110. package/src/chains/evm/index.browser.ts +16 -0
  111. package/src/chains/evm/index.ts +31 -0
  112. package/src/chains/evm/prompts.ts +193 -0
  113. package/src/chains/evm/providers/get-balance.ts +123 -0
  114. package/src/chains/evm/providers/wallet.ts +715 -0
  115. package/src/chains/evm/routes/sign.ts +333 -0
  116. package/src/chains/evm/rpc-providers.ts +410 -0
  117. package/src/chains/evm/service.ts +140 -0
  118. package/src/chains/evm/templates/index.ts +10 -0
  119. package/src/chains/evm/types/index.ts +432 -0
  120. package/src/chains/evm/vitest.config.ts +18 -0
  121. package/src/chains/registry.ts +668 -0
  122. package/src/chains/solana/README.md +367 -0
  123. package/src/chains/wallet-action.ts +533 -0
  124. package/src/chains/wallet-router.test.ts +296 -0
  125. package/src/contracts.ts +65 -0
  126. package/src/core-augmentation.ts +10 -0
  127. package/src/index.ts +71 -0
  128. package/src/lib/server-wallet-trade.ts +192 -0
  129. package/src/lib/wallet-export-guard.ts +330 -0
  130. package/src/lp/actions/liquidity.ts +827 -0
  131. package/src/lp/e2e/real-token-tests.ts +428 -0
  132. package/src/lp/e2e/scenarios.ts +470 -0
  133. package/src/lp/e2e/test-utils.ts +145 -0
  134. package/src/lp/lp-manager-entry.ts +303 -0
  135. package/src/lp/services/ConcentratedLiquidityService.ts +120 -0
  136. package/src/lp/services/DexInteractionService.ts +226 -0
  137. package/src/lp/services/LpManagementService.test.ts +148 -0
  138. package/src/lp/services/LpManagementService.ts +632 -0
  139. package/src/lp/services/UserLpProfileService.ts +163 -0
  140. package/src/lp/services/VaultService.ts +153 -0
  141. package/src/lp/services/YieldOptimizationService.ts +344 -0
  142. package/src/lp/services/__tests__/MockLpService.ts +146 -0
  143. package/src/lp/tasks/LpAutoRebalanceTask.ts +117 -0
  144. package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +370 -0
  145. package/src/lp/types.ts +582 -0
  146. package/src/lp/utils/solanaClient.ts +143 -0
  147. package/src/plugin.ts +125 -0
  148. package/src/policy/policy.ts +19 -0
  149. package/src/providers/canonical-provider.ts +27 -0
  150. package/src/providers/unified-wallet-provider.ts +79 -0
  151. package/src/register-routes.ts +11 -0
  152. package/src/routes/plugin.ts +47 -0
  153. package/src/routes/wallet-market-overview-route.ts +869 -0
  154. package/src/sdk/abi.ts +258 -0
  155. package/src/sdk/bridge/abis.ts +126 -0
  156. package/src/sdk/bridge/client.ts +518 -0
  157. package/src/sdk/bridge/index.ts +56 -0
  158. package/src/sdk/bridge/solana.ts +604 -0
  159. package/src/sdk/bridge/types.ts +202 -0
  160. package/src/sdk/convenience.ts +347 -0
  161. package/src/sdk/escrow/MutualStakeEscrow.ts +480 -0
  162. package/src/sdk/escrow/types.ts +64 -0
  163. package/src/sdk/escrow/verifiers.ts +73 -0
  164. package/src/sdk/identity/erc8004.ts +692 -0
  165. package/src/sdk/identity/reputation.ts +449 -0
  166. package/src/sdk/identity/uaid.ts +497 -0
  167. package/src/sdk/identity/validation.ts +372 -0
  168. package/src/sdk/index.ts +763 -0
  169. package/src/sdk/policy/SpendingPolicy.ts +260 -0
  170. package/src/sdk/policy/UptoBillingPolicy.ts +320 -0
  171. package/src/sdk/router/PaymentRouter.ts +215 -0
  172. package/src/sdk/router/index.ts +8 -0
  173. package/src/sdk/swap/SwapModule.ts +310 -0
  174. package/src/sdk/swap/abi.ts +117 -0
  175. package/src/sdk/swap/index.ts +34 -0
  176. package/src/sdk/swap/types.ts +135 -0
  177. package/src/sdk/tokens/decimals.ts +140 -0
  178. package/src/sdk/tokens/registry.ts +911 -0
  179. package/src/sdk/tokens/solana.ts +419 -0
  180. package/src/sdk/tokens/transfers.ts +327 -0
  181. package/src/sdk/types.ts +158 -0
  182. package/src/sdk/wallet-core.ts +115 -0
  183. package/src/sdk/x402/budget.ts +168 -0
  184. package/src/sdk/x402/chains/abstract/index.ts +280 -0
  185. package/src/sdk/x402/client.ts +320 -0
  186. package/src/sdk/x402/index.ts +46 -0
  187. package/src/sdk/x402/middleware.ts +92 -0
  188. package/src/sdk/x402/multi-asset.ts +144 -0
  189. package/src/sdk/x402/types.ts +156 -0
  190. package/src/services/wallet-backend-service.ts +328 -0
  191. package/src/types/wallet-router.ts +227 -0
  192. package/src/utils/intent-trajectory.ts +106 -0
  193. package/src/wallet/backend.ts +62 -0
  194. package/src/wallet/errors.ts +49 -0
  195. package/src/wallet/index.ts +27 -0
  196. package/src/wallet/local-eoa-backend.ts +201 -0
  197. package/src/wallet/pending.ts +60 -0
  198. package/src/wallet/select-backend.ts +47 -0
  199. package/src/wallet/steward-backend.ts +161 -0
  200. package/src/wallet-action.ts +1 -0
@@ -0,0 +1,106 @@
1
+ # @elizaos/plugin-wallet — EVM chain
2
+
3
+ EVM chain implementation inside `@elizaos/plugin-wallet`. Provides token transfers, cross-chain bridging, token swaps via LiFi, and DAO governance helpers across all major EVM-compatible chains.
4
+
5
+ ## Features
6
+
7
+ - **Multi-chain Support**: Ethereum, Base, Arbitrum, Optimism, Polygon, and 10+ more chains
8
+ - **Native Token Transfers**: Send ETH, MATIC, BNB, and other native gas tokens
9
+ - **ERC20 Token Transfers**: Send any ERC20 token
10
+ - **Cross-chain Bridging**: Bridge tokens between chains via LiFi
11
+ - **Token Swaps**: Exchange tokens on supported DEXs
12
+ - **DAO Governance**: Propose, vote, queue, and execute proposals
13
+ - **Strong Typing**: Branded types with Zod schemas, fail-fast validation
14
+
15
+ ## Supported Chains
16
+
17
+ | Chain | ID | Native Token |
18
+ | ----------------- | -------- | ------------ |
19
+ | Ethereum Mainnet | 1 | ETH |
20
+ | Sepolia (testnet) | 11155111 | ETH |
21
+ | Base | 8453 | ETH |
22
+ | Base Sepolia | 84532 | ETH |
23
+ | Arbitrum One | 42161 | ETH |
24
+ | Optimism | 10 | ETH |
25
+ | Polygon | 137 | MATIC |
26
+ | Avalanche C-Chain | 43114 | AVAX |
27
+ | BNB Smart Chain | 56 | BNB |
28
+ | Gnosis | 100 | xDAI |
29
+ | Fantom | 250 | FTM |
30
+ | Linea | 59144 | ETH |
31
+ | Scroll | 534352 | ETH |
32
+ | zkSync Era | 324 | ETH |
33
+ | Radius Network | 723487 | RUSD |
34
+ | Radius Testnet | 72344 | RUSD |
35
+
36
+ ## Installation
37
+
38
+ ```bash
39
+ bun add @elizaos/plugin-wallet
40
+ # or
41
+ npm install @elizaos/plugin-wallet
42
+ ```
43
+
44
+ ## Quick Start
45
+
46
+ ```typescript
47
+ import { evmPlugin, EvmService } from "@elizaos/plugin-wallet";
48
+
49
+ // Add to your agent
50
+ const agent = createAgent({
51
+ plugins: [evmPlugin],
52
+ });
53
+
54
+ // Or use the service directly
55
+ const service = new EvmService();
56
+ await service.initialize(runtime);
57
+
58
+ // Get wallet info
59
+ const address = service.getAddress();
60
+ const balance = await service.getBalance("mainnet");
61
+ ```
62
+
63
+ ## Strong Typing (Zod + Branded Types)
64
+
65
+ ```typescript
66
+ import { ZAddress, ZTransferParams } from "@elizaos/plugin-wallet";
67
+
68
+ // Validated at runtime
69
+ const address = ZAddress.parse("0x1234..."); // Throws if invalid
70
+ const params = ZTransferParams.parse({
71
+ fromChain: "mainnet",
72
+ toAddress: "0x...",
73
+ amount: "1.0",
74
+ });
75
+ ```
76
+
77
+ ## Directory Structure
78
+
79
+ ```
80
+ plugins/plugin-wallet/src/chains/evm/
81
+ ├── actions/ # Transfer, swap, bridge, governance actions
82
+ ├── providers/ # EVM wallet provider
83
+ ├── types/ # Branded types and Zod schemas
84
+ ├── contracts/ # ABI bindings
85
+ ├── prompts/ # Action prompt specs
86
+ ├── generated/ # Auto-generated docs
87
+ ├── service.ts # EvmService entry
88
+ ├── rpc-providers.ts # Provider routing (Alchemy / Infura / Ankr / elizacloud)
89
+ └── index.ts # Module entry
90
+ ```
91
+
92
+ ## Configuration
93
+
94
+ | Environment Variable | Required | Description |
95
+ | -------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
96
+ | `EVM_PRIVATE_KEY` | Yes | Private key for the agent's wallet (hex, starting with `0x`) |
97
+ | `EVM_RPC_PROVIDER` | No | Default RPC provider preference: `alchemy` / `infura` / `ankr` / `elizacloud` |
98
+ | `ALCHEMY_API_KEY` / `INFURA_API_KEY` / `ANKR_API_KEY` | No | API keys for the corresponding RPC provider |
99
+ | `ETHEREUM_PROVIDER_<CHAIN>` | No | Custom RPC URL override (e.g. `ETHEREUM_PROVIDER_BASE`, `ETHEREUM_PROVIDER_ARBITRUM`) |
100
+ | `TEE_MODE` | No | Trusted Execution Environment mode (`OFF` / `ON`) |
101
+ | `WALLET_SECRET_SALT` | No | Salt for TEE-derived wallet keypair |
102
+ | `SEPOLIA_RPC_URL` / `BASE_SEPOLIA_RPC_URL` | No | Custom testnet RPC URLs |
103
+
104
+ ## License
105
+
106
+ MIT — see [LICENSE](./LICENSE).
@@ -0,0 +1,147 @@
1
+ import type {
2
+ Action,
3
+ ActionResult,
4
+ HandlerCallback,
5
+ IAgentRuntime,
6
+ Memory,
7
+ State,
8
+ } from "@elizaos/core";
9
+ import type { Address, Chain, Hex, SendTransactionParameters } from "viem";
10
+ import type { Account } from "viem/accounts";
11
+
12
+ type ActionValidate = NonNullable<Action["validate"]>;
13
+
14
+ type ConfirmationValue =
15
+ | string
16
+ | number
17
+ | boolean
18
+ | null
19
+ | ConfirmationValue[]
20
+ | { [key: string]: ConfirmationValue };
21
+
22
+ interface EvmActionValidatorConfig {
23
+ readonly keywords: readonly string[];
24
+ readonly regex: RegExp;
25
+ }
26
+
27
+ export function hasEvmPrivateKey(runtime: IAgentRuntime): boolean {
28
+ const privateKey = runtime.getSetting("EVM_PRIVATE_KEY");
29
+ return typeof privateKey === "string" && privateKey.startsWith("0x");
30
+ }
31
+
32
+ export function isConfirmed(options?: Record<string, unknown>): boolean {
33
+ return options?.confirmed === true;
34
+ }
35
+
36
+ function toConfirmationValue(value: unknown): ConfirmationValue {
37
+ if (value === undefined) {
38
+ return null;
39
+ }
40
+ if (typeof value === "bigint") {
41
+ return value.toString();
42
+ }
43
+ if (value === null) {
44
+ return null;
45
+ }
46
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
47
+ return value;
48
+ }
49
+ if (Array.isArray(value)) {
50
+ return value.map((item) => toConfirmationValue(item));
51
+ }
52
+ if (value && typeof value === "object") {
53
+ return Object.fromEntries(
54
+ Object.entries(value).map(([key, item]) => [key, toConfirmationValue(item)])
55
+ ) as Record<string, ConfirmationValue>;
56
+ }
57
+ return String(value);
58
+ }
59
+
60
+ function toConfirmationRecord(record: object): Record<string, ConfirmationValue> {
61
+ return Object.fromEntries(
62
+ Object.entries(record).map(([key, value]) => [key, toConfirmationValue(value)])
63
+ ) as Record<string, ConfirmationValue>;
64
+ }
65
+
66
+ export async function confirmationRequired(params: {
67
+ actionName: string;
68
+ preview: string;
69
+ parameters: object;
70
+ callback?: HandlerCallback;
71
+ }): Promise<ActionResult> {
72
+ const confirmation = {
73
+ actionName: params.actionName,
74
+ confirmed: false,
75
+ parameters: {
76
+ ...toConfirmationRecord(params.parameters),
77
+ confirmed: true,
78
+ },
79
+ };
80
+
81
+ const content = {
82
+ success: false,
83
+ requiresConfirmation: true,
84
+ preview: params.preview,
85
+ confirmation,
86
+ };
87
+
88
+ await params.callback?.({
89
+ text: params.preview,
90
+ content,
91
+ });
92
+
93
+ return {
94
+ success: false,
95
+ text: params.preview,
96
+ data: content,
97
+ };
98
+ }
99
+
100
+ export function createEvmActionValidator(_config: EvmActionValidatorConfig): ActionValidate {
101
+ return async (
102
+ runtime: IAgentRuntime,
103
+ _message: Memory,
104
+ _state?: State,
105
+ _options?: unknown
106
+ ): Promise<boolean> => {
107
+ try {
108
+ return hasEvmPrivateKey(runtime);
109
+ } catch {
110
+ return false;
111
+ }
112
+ };
113
+ }
114
+
115
+ export function buildSendTxParams(params: {
116
+ account: Account;
117
+ to: Address;
118
+ value?: bigint;
119
+ data?: Hex;
120
+ chain?: Chain;
121
+ gas?: bigint;
122
+ gasPrice?: bigint;
123
+ }): SendTransactionParameters {
124
+ const txParams: Partial<SendTransactionParameters> &
125
+ Pick<SendTransactionParameters, "account" | "to"> = {
126
+ account: params.account,
127
+ to: params.to,
128
+ };
129
+
130
+ if (params.value !== undefined) {
131
+ txParams.value = params.value;
132
+ }
133
+ if (params.data !== undefined) {
134
+ txParams.data = params.data;
135
+ }
136
+ if (params.chain !== undefined) {
137
+ txParams.chain = params.chain;
138
+ }
139
+ if (params.gas !== undefined) {
140
+ txParams.gas = params.gas;
141
+ }
142
+ if (params.gasPrice !== undefined) {
143
+ txParams.gasPrice = params.gasPrice;
144
+ }
145
+
146
+ return txParams as SendTransactionParameters;
147
+ }