amped-defi 1.0.0
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 +757 -0
- package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
- package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
- package/dist/__mocks__/@sodax/sdk.js +24 -0
- package/dist/__mocks__/@sodax/sdk.js.map +1 -0
- package/dist/__tests__/setup.d.ts +4 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +32 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -0
- package/dist/policy/policyEngine.d.ts +119 -0
- package/dist/policy/policyEngine.d.ts.map +1 -0
- package/dist/policy/policyEngine.js +322 -0
- package/dist/policy/policyEngine.js.map +1 -0
- package/dist/providers/spokeProviderFactory.d.ts +38 -0
- package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
- package/dist/providers/spokeProviderFactory.js +212 -0
- package/dist/providers/spokeProviderFactory.js.map +1 -0
- package/dist/sodax/client.d.ts +34 -0
- package/dist/sodax/client.d.ts.map +1 -0
- package/dist/sodax/client.js +99 -0
- package/dist/sodax/client.js.map +1 -0
- package/dist/tools/bridge.d.ts +105 -0
- package/dist/tools/bridge.d.ts.map +1 -0
- package/dist/tools/bridge.js +334 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/discovery.d.ts +141 -0
- package/dist/tools/discovery.d.ts.map +1 -0
- package/dist/tools/discovery.js +777 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/moneyMarket.d.ts +227 -0
- package/dist/tools/moneyMarket.d.ts.map +1 -0
- package/dist/tools/moneyMarket.js +867 -0
- package/dist/tools/moneyMarket.js.map +1 -0
- package/dist/tools/portfolio.d.ts +43 -0
- package/dist/tools/portfolio.d.ts.map +1 -0
- package/dist/tools/portfolio.js +538 -0
- package/dist/tools/portfolio.js.map +1 -0
- package/dist/tools/swap.d.ts +71 -0
- package/dist/tools/swap.d.ts.map +1 -0
- package/dist/tools/swap.js +762 -0
- package/dist/tools/swap.js.map +1 -0
- package/dist/tools/walletManagement.d.ts +80 -0
- package/dist/tools/walletManagement.d.ts.map +1 -0
- package/dist/tools/walletManagement.js +289 -0
- package/dist/tools/walletManagement.js.map +1 -0
- package/dist/types.d.ts +205 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errorUtils.d.ts +2 -0
- package/dist/utils/errorUtils.d.ts.map +1 -0
- package/dist/utils/errorUtils.js +19 -0
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/errors.d.ts +144 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +310 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/positionAggregator.d.ts +122 -0
- package/dist/utils/positionAggregator.d.ts.map +1 -0
- package/dist/utils/positionAggregator.js +377 -0
- package/dist/utils/positionAggregator.js.map +1 -0
- package/dist/utils/priceService.d.ts +45 -0
- package/dist/utils/priceService.d.ts.map +1 -0
- package/dist/utils/priceService.js +108 -0
- package/dist/utils/priceService.js.map +1 -0
- package/dist/utils/sodaxApi.d.ts +92 -0
- package/dist/utils/sodaxApi.d.ts.map +1 -0
- package/dist/utils/sodaxApi.js +143 -0
- package/dist/utils/sodaxApi.js.map +1 -0
- package/dist/utils/tokenResolver.d.ts +54 -0
- package/dist/utils/tokenResolver.d.ts.map +1 -0
- package/dist/utils/tokenResolver.js +252 -0
- package/dist/utils/tokenResolver.js.map +1 -0
- package/dist/wallet/backendConfig.d.ts +37 -0
- package/dist/wallet/backendConfig.d.ts.map +1 -0
- package/dist/wallet/backendConfig.js +125 -0
- package/dist/wallet/backendConfig.js.map +1 -0
- package/dist/wallet/backends/BankrBackend.d.ts +73 -0
- package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/backends/BankrBackend.js +315 -0
- package/dist/wallet/backends/BankrBackend.js.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
- package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
- package/dist/wallet/backends/BankrWalletProvider.js +243 -0
- package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
- package/dist/wallet/backends/EnvBackend.d.ts +50 -0
- package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EnvBackend.js +114 -0
- package/dist/wallet/backends/EnvBackend.js.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
- package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
- package/dist/wallet/backends/index.d.ts +10 -0
- package/dist/wallet/backends/index.d.ts.map +1 -0
- package/dist/wallet/backends/index.js +10 -0
- package/dist/wallet/backends/index.js.map +1 -0
- package/dist/wallet/index.d.ts +9 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +12 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
- package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
- package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
- package/dist/wallet/providers/BankrBackend.d.ts +105 -0
- package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
- package/dist/wallet/providers/BankrBackend.js +327 -0
- package/dist/wallet/providers/BankrBackend.js.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
- package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
- package/dist/wallet/providers/LocalKeyBackend.js +152 -0
- package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
- package/dist/wallet/providers/chainConfig.d.ts +209 -0
- package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
- package/dist/wallet/providers/chainConfig.js +175 -0
- package/dist/wallet/providers/chainConfig.js.map +1 -0
- package/dist/wallet/providers/index.d.ts +30 -0
- package/dist/wallet/providers/index.d.ts.map +1 -0
- package/dist/wallet/providers/index.js +32 -0
- package/dist/wallet/providers/index.js.map +1 -0
- package/dist/wallet/providers/types.d.ts +156 -0
- package/dist/wallet/providers/types.d.ts.map +1 -0
- package/dist/wallet/providers/types.js +11 -0
- package/dist/wallet/providers/types.js.map +1 -0
- package/dist/wallet/skillWalletAdapter.d.ts +96 -0
- package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
- package/dist/wallet/skillWalletAdapter.js +280 -0
- package/dist/wallet/skillWalletAdapter.js.map +1 -0
- package/dist/wallet/types.d.ts +134 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +138 -0
- package/dist/wallet/types.js.map +1 -0
- package/dist/wallet/walletManager.d.ts +111 -0
- package/dist/wallet/walletManager.d.ts.map +1 -0
- package/dist/wallet/walletManager.js +476 -0
- package/dist/wallet/walletManager.js.map +1 -0
- package/dist/wallet/walletRegistry.d.ts +95 -0
- package/dist/wallet/walletRegistry.d.ts.map +1 -0
- package/dist/wallet/walletRegistry.js +184 -0
- package/dist/wallet/walletRegistry.js.map +1 -0
- package/index.js +2 -0
- package/openclaw.plugin.json +37 -0
- package/package.json +69 -0
- package/src/__mocks__/@sodax/sdk.ts +28 -0
- package/src/__tests__/errors.test.ts +238 -0
- package/src/__tests__/policyEngine.test.ts +354 -0
- package/src/__tests__/positionAggregator.test.ts +271 -0
- package/src/__tests__/setup.ts +35 -0
- package/src/__tests__/sodaxApi.test.ts +203 -0
- package/src/__tests__/walletRegistry.test.ts +155 -0
- package/src/index.ts +376 -0
- package/src/policy/policyEngine.ts +389 -0
- package/src/providers/spokeProviderFactory.ts +283 -0
- package/src/sodax/client.ts +113 -0
- package/src/tools/bridge.ts +425 -0
- package/src/tools/discovery.ts +989 -0
- package/src/tools/moneyMarket.ts +1265 -0
- package/src/tools/portfolio.ts +697 -0
- package/src/tools/swap.ts +926 -0
- package/src/tools/walletManagement.ts +359 -0
- package/src/types.ts +228 -0
- package/src/utils/errorUtils.ts +16 -0
- package/src/utils/errors.ts +396 -0
- package/src/utils/positionAggregator.ts +559 -0
- package/src/utils/priceService.ts +153 -0
- package/src/utils/sodaxApi.ts +261 -0
- package/src/utils/tokenResolver.ts +286 -0
- package/src/wallet/backendConfig.ts +151 -0
- package/src/wallet/backends/BankrBackend.ts +399 -0
- package/src/wallet/backends/BankrWalletProvider.ts +329 -0
- package/src/wallet/backends/EnvBackend.ts +149 -0
- package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
- package/src/wallet/backends/index.ts +10 -0
- package/src/wallet/index.ts +14 -0
- package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
- package/src/wallet/providers/BankrBackend.ts +407 -0
- package/src/wallet/providers/LocalKeyBackend.ts +184 -0
- package/src/wallet/providers/chainConfig.ts +194 -0
- package/src/wallet/providers/index.ts +62 -0
- package/src/wallet/providers/types.ts +186 -0
- package/src/wallet/skillWalletAdapter.ts +335 -0
- package/src/wallet/types.ts +248 -0
- package/src/wallet/walletManager.ts +561 -0
- package/src/wallet/walletRegistry.ts +216 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bankr Backend - Transaction Execution via Bankr API
|
|
3
|
+
*
|
|
4
|
+
* Submits raw transactions to Bankr's Agent API using the
|
|
5
|
+
* arbitrary transaction format documented at:
|
|
6
|
+
* https://github.com/BankrBot/openclaw-skills/blob/main/bankr/references/arbitrary-transaction.md
|
|
7
|
+
*
|
|
8
|
+
* Supported chains: Ethereum (1), Polygon (137), Base (8453)
|
|
9
|
+
*/
|
|
10
|
+
import type { Address, Hash } from 'viem';
|
|
11
|
+
import type { IWalletBackend, RawTransaction } from '../types';
|
|
12
|
+
/**
|
|
13
|
+
* Bankr backend configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface BankrBackendConfig {
|
|
16
|
+
nickname?: string;
|
|
17
|
+
apiKey: string;
|
|
18
|
+
apiUrl?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Bankr wallet backend
|
|
22
|
+
* Submits raw transactions via Bankr Agent API
|
|
23
|
+
*/
|
|
24
|
+
export declare class BankrBackend implements IWalletBackend {
|
|
25
|
+
readonly type: "bankr";
|
|
26
|
+
readonly nickname: string;
|
|
27
|
+
readonly supportedChains: readonly ["ethereum", "polygon", "base"];
|
|
28
|
+
private readonly apiUrl;
|
|
29
|
+
private readonly apiKey;
|
|
30
|
+
private cachedAddress;
|
|
31
|
+
private cachedSolanaAddress;
|
|
32
|
+
private readonly pollIntervalMs;
|
|
33
|
+
private readonly maxPollAttempts;
|
|
34
|
+
constructor(config: BankrBackendConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Load cached address from disk
|
|
37
|
+
*/
|
|
38
|
+
private loadCachedAddress;
|
|
39
|
+
/**
|
|
40
|
+
* Save address to disk cache
|
|
41
|
+
*/
|
|
42
|
+
private saveCachedAddress;
|
|
43
|
+
getAddress(): Promise<Address>;
|
|
44
|
+
/**
|
|
45
|
+
* Get the Solana wallet address from Bankr
|
|
46
|
+
*/
|
|
47
|
+
getSolanaAddress(): Promise<string | null>;
|
|
48
|
+
supportsChain(chainId: string): boolean;
|
|
49
|
+
isReady(): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Send raw transaction via Bankr
|
|
52
|
+
* Uses the arbitrary transaction format
|
|
53
|
+
*/
|
|
54
|
+
sendRawTransaction(tx: RawTransaction): Promise<Hash>;
|
|
55
|
+
/**
|
|
56
|
+
* Submit prompt and wait for text response
|
|
57
|
+
*/
|
|
58
|
+
private submitAndWait;
|
|
59
|
+
/**
|
|
60
|
+
* Submit prompt and wait for job completion
|
|
61
|
+
*/
|
|
62
|
+
private submitAndWaitForJob;
|
|
63
|
+
/**
|
|
64
|
+
* Extract transaction hash from Bankr response
|
|
65
|
+
*/
|
|
66
|
+
private extractTransactionHash;
|
|
67
|
+
private sleep;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a Bankr backend from API key
|
|
71
|
+
*/
|
|
72
|
+
export declare function createBankrBackend(config: BankrBackendConfig): BankrBackend;
|
|
73
|
+
//# sourceMappingURL=BankrBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BankrBackend.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/BankrBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0C/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,2CAA0B;IAElD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAE3B,MAAM,EAAE,kBAAkB;IAetC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAanB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IA8BpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoDhD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBjC;;;OAGG;IACG,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC3D;;OAEG;YACW,aAAa;IAK3B;;OAEG;YACW,mBAAmB;IAqEjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAE3E"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bankr Backend - Transaction Execution via Bankr API
|
|
3
|
+
*
|
|
4
|
+
* Submits raw transactions to Bankr's Agent API using the
|
|
5
|
+
* arbitrary transaction format documented at:
|
|
6
|
+
* https://github.com/BankrBot/openclaw-skills/blob/main/bankr/references/arbitrary-transaction.md
|
|
7
|
+
*
|
|
8
|
+
* Supported chains: Ethereum (1), Polygon (137), Base (8453)
|
|
9
|
+
*/
|
|
10
|
+
import { BANKR_SUPPORTED_CHAINS, isBankrSupportedChain } from '../types';
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { homedir } from 'os';
|
|
14
|
+
/**
|
|
15
|
+
* Disk cache path for bankr address
|
|
16
|
+
*/
|
|
17
|
+
const BANKR_CACHE_DIR = join(homedir(), '.openclaw', 'cache');
|
|
18
|
+
const getBankrCachePath = (nickname) => join(BANKR_CACHE_DIR, `bankr-${nickname}-address.json`);
|
|
19
|
+
/**
|
|
20
|
+
* Bankr wallet backend
|
|
21
|
+
* Submits raw transactions via Bankr Agent API
|
|
22
|
+
*/
|
|
23
|
+
export class BankrBackend {
|
|
24
|
+
type = 'bankr';
|
|
25
|
+
nickname;
|
|
26
|
+
supportedChains = BANKR_SUPPORTED_CHAINS;
|
|
27
|
+
apiUrl;
|
|
28
|
+
apiKey;
|
|
29
|
+
cachedAddress = null;
|
|
30
|
+
cachedSolanaAddress = null;
|
|
31
|
+
// Polling configuration
|
|
32
|
+
pollIntervalMs = 2000;
|
|
33
|
+
maxPollAttempts = 150; // 5 minutes max
|
|
34
|
+
constructor(config) {
|
|
35
|
+
this.nickname = config.nickname || 'bankr';
|
|
36
|
+
this.apiUrl = config.apiUrl || 'https://api.bankr.bot';
|
|
37
|
+
this.apiKey = config.apiKey;
|
|
38
|
+
// Try to load cached address from disk
|
|
39
|
+
this.loadCachedAddress();
|
|
40
|
+
console.log(`[BankrBackend] Initialized as "${this.nickname}"`);
|
|
41
|
+
console.log(`[BankrBackend] Supported chains: ${this.supportedChains.join(', ')}`);
|
|
42
|
+
if (this.cachedAddress) {
|
|
43
|
+
console.log(`[BankrBackend] Loaded cached address: ${this.cachedAddress}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load cached address from disk
|
|
48
|
+
*/
|
|
49
|
+
loadCachedAddress() {
|
|
50
|
+
const cachePath = getBankrCachePath(this.nickname);
|
|
51
|
+
if (existsSync(cachePath)) {
|
|
52
|
+
try {
|
|
53
|
+
const data = JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
54
|
+
if (data.address && data.address.match(/^0x[a-fA-F0-9]{40}$/)) {
|
|
55
|
+
this.cachedAddress = data.address;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.warn(`[BankrBackend] Failed to load cached address: ${e}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Save address to disk cache
|
|
65
|
+
*/
|
|
66
|
+
saveCachedAddress(address) {
|
|
67
|
+
const cachePath = getBankrCachePath(this.nickname);
|
|
68
|
+
try {
|
|
69
|
+
if (!existsSync(BANKR_CACHE_DIR)) {
|
|
70
|
+
mkdirSync(BANKR_CACHE_DIR, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
writeFileSync(cachePath, JSON.stringify({ address, timestamp: Date.now() }));
|
|
73
|
+
console.log(`[BankrBackend] Cached address to ${cachePath}`);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.warn(`[BankrBackend] Failed to cache address: ${e}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async getAddress() {
|
|
80
|
+
if (this.cachedAddress)
|
|
81
|
+
return this.cachedAddress;
|
|
82
|
+
// Query Bankr for the wallet address
|
|
83
|
+
console.log('[BankrBackend] Fetching wallet address from Bankr...');
|
|
84
|
+
try {
|
|
85
|
+
const response = await this.submitAndWait('What is my EVM wallet address?');
|
|
86
|
+
// Extract address from response
|
|
87
|
+
const addressMatch = response.match(/0x[a-fA-F0-9]{40}/);
|
|
88
|
+
if (!addressMatch) {
|
|
89
|
+
console.warn('[BankrBackend] Could not parse address from response:', response.slice(0, 100));
|
|
90
|
+
throw new Error('[BankrBackend] Could not determine wallet address from Bankr');
|
|
91
|
+
}
|
|
92
|
+
this.cachedAddress = addressMatch[0];
|
|
93
|
+
// Save to disk for next time
|
|
94
|
+
this.saveCachedAddress(this.cachedAddress);
|
|
95
|
+
console.log(`[BankrBackend] Wallet address: ${this.cachedAddress}`);
|
|
96
|
+
return this.cachedAddress;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error('[BankrBackend] Failed to get address:', error);
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the Solana wallet address from Bankr
|
|
105
|
+
*/
|
|
106
|
+
async getSolanaAddress() {
|
|
107
|
+
if (this.cachedSolanaAddress)
|
|
108
|
+
return this.cachedSolanaAddress;
|
|
109
|
+
// Check for cached address on disk
|
|
110
|
+
const cachePath = `${process.env.HOME}/.openclaw/cache/bankr-${this.nickname}-solana-address.json`;
|
|
111
|
+
try {
|
|
112
|
+
const fs = await import('fs');
|
|
113
|
+
if (fs.existsSync(cachePath)) {
|
|
114
|
+
const cached = JSON.parse(fs.readFileSync(cachePath, 'utf8'));
|
|
115
|
+
if (cached.address && Date.now() - cached.timestamp < 86400000) {
|
|
116
|
+
this.cachedSolanaAddress = cached.address;
|
|
117
|
+
console.log(`[BankrBackend] Loaded cached Solana address: ${this.cachedSolanaAddress}`);
|
|
118
|
+
return this.cachedSolanaAddress;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
// Cache miss, continue to query
|
|
124
|
+
}
|
|
125
|
+
console.log('[BankrBackend] Fetching Solana wallet address from Bankr...');
|
|
126
|
+
try {
|
|
127
|
+
const response = await this.submitAndWait('What is my Solana wallet address?');
|
|
128
|
+
// Solana addresses are base58, typically 32-44 chars, no 0x prefix
|
|
129
|
+
const solanaMatch = response.match(/[1-9A-HJ-NP-Za-km-z]{32,44}/);
|
|
130
|
+
if (!solanaMatch) {
|
|
131
|
+
console.warn('[BankrBackend] Could not parse Solana address from response');
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
this.cachedSolanaAddress = solanaMatch[0];
|
|
135
|
+
console.log(`[BankrBackend] Solana address: ${this.cachedSolanaAddress}`);
|
|
136
|
+
// Cache to disk
|
|
137
|
+
try {
|
|
138
|
+
const fs = await import('fs');
|
|
139
|
+
const path = await import('path');
|
|
140
|
+
const cacheDir = path.dirname(cachePath);
|
|
141
|
+
if (!fs.existsSync(cacheDir))
|
|
142
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
143
|
+
fs.writeFileSync(cachePath, JSON.stringify({ address: this.cachedSolanaAddress, timestamp: Date.now() }));
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
console.warn('[BankrBackend] Failed to cache Solana address:', e);
|
|
147
|
+
}
|
|
148
|
+
return this.cachedSolanaAddress;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error('[BankrBackend] Failed to get Solana address:', error);
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
supportsChain(chainId) {
|
|
156
|
+
// Normalize chain ID to handle SODAX format (0x2105.base -> base)
|
|
157
|
+
return isBankrSupportedChain(chainId);
|
|
158
|
+
}
|
|
159
|
+
async isReady() {
|
|
160
|
+
if (!this.apiKey)
|
|
161
|
+
return false;
|
|
162
|
+
try {
|
|
163
|
+
// Test API connectivity
|
|
164
|
+
const response = await fetch(`${this.apiUrl}/agent/prompt`, {
|
|
165
|
+
method: 'POST',
|
|
166
|
+
headers: {
|
|
167
|
+
'X-API-Key': this.apiKey,
|
|
168
|
+
'Content-Type': 'application/json',
|
|
169
|
+
},
|
|
170
|
+
body: JSON.stringify({ prompt: 'ping' }),
|
|
171
|
+
});
|
|
172
|
+
return response.status !== 503 && response.status !== 502;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Send raw transaction via Bankr
|
|
180
|
+
* Uses the arbitrary transaction format
|
|
181
|
+
*/
|
|
182
|
+
async sendRawTransaction(tx) {
|
|
183
|
+
console.log(`[BankrBackend] Sending raw transaction`);
|
|
184
|
+
console.log(`[BankrBackend] To: ${tx.to}`);
|
|
185
|
+
console.log(`[BankrBackend] Chain: ${tx.chainId}`);
|
|
186
|
+
console.log(`[BankrBackend] Value: ${tx.value}`);
|
|
187
|
+
console.log(`[BankrBackend] Data: ${tx.data.slice(0, 20)}...`);
|
|
188
|
+
// Format as documented in arbitrary-transaction.md
|
|
189
|
+
const txJson = JSON.stringify({
|
|
190
|
+
to: tx.to,
|
|
191
|
+
data: tx.data,
|
|
192
|
+
value: tx.value,
|
|
193
|
+
chainId: tx.chainId,
|
|
194
|
+
}, null, 2);
|
|
195
|
+
// Use the documented prompt format
|
|
196
|
+
const prompt = `Submit this transaction:
|
|
197
|
+
${txJson}`;
|
|
198
|
+
console.log(`[BankrBackend] Submitting to Bankr API...`);
|
|
199
|
+
const result = await this.submitAndWaitForJob(prompt);
|
|
200
|
+
// Extract transaction hash from response
|
|
201
|
+
const txHash = this.extractTransactionHash(result);
|
|
202
|
+
if (!txHash) {
|
|
203
|
+
const errorMsg = result.error || result.response || 'Unknown error';
|
|
204
|
+
throw new Error(`[BankrBackend] Transaction failed: ${errorMsg}`);
|
|
205
|
+
}
|
|
206
|
+
console.log(`[BankrBackend] Transaction hash: ${txHash}`);
|
|
207
|
+
return txHash;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Submit prompt and wait for text response
|
|
211
|
+
*/
|
|
212
|
+
async submitAndWait(prompt) {
|
|
213
|
+
const result = await this.submitAndWaitForJob(prompt);
|
|
214
|
+
return result.response || '';
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Submit prompt and wait for job completion
|
|
218
|
+
*/
|
|
219
|
+
async submitAndWaitForJob(prompt) {
|
|
220
|
+
// Submit job
|
|
221
|
+
const submitResponse = await fetch(`${this.apiUrl}/agent/prompt`, {
|
|
222
|
+
method: 'POST',
|
|
223
|
+
headers: {
|
|
224
|
+
'X-API-Key': this.apiKey,
|
|
225
|
+
'Content-Type': 'application/json',
|
|
226
|
+
},
|
|
227
|
+
body: JSON.stringify({ prompt }),
|
|
228
|
+
});
|
|
229
|
+
if (!submitResponse.ok) {
|
|
230
|
+
const error = await submitResponse.text();
|
|
231
|
+
throw new Error(`[BankrBackend] Failed to submit job: ${submitResponse.status} ${error}`);
|
|
232
|
+
}
|
|
233
|
+
const submitData = await submitResponse.json();
|
|
234
|
+
if (!submitData.success || !submitData.jobId) {
|
|
235
|
+
throw new Error(`[BankrBackend] Invalid job response: ${JSON.stringify(submitData)}`);
|
|
236
|
+
}
|
|
237
|
+
const jobId = submitData.jobId;
|
|
238
|
+
console.log(`[BankrBackend] Job submitted: ${jobId}`);
|
|
239
|
+
// Poll for completion
|
|
240
|
+
let lastStatus = '';
|
|
241
|
+
for (let attempt = 0; attempt < this.maxPollAttempts; attempt++) {
|
|
242
|
+
await this.sleep(this.pollIntervalMs);
|
|
243
|
+
const statusResponse = await fetch(`${this.apiUrl}/agent/job/${jobId}`, {
|
|
244
|
+
method: 'GET',
|
|
245
|
+
headers: { 'X-API-Key': this.apiKey },
|
|
246
|
+
});
|
|
247
|
+
if (!statusResponse.ok) {
|
|
248
|
+
const error = await statusResponse.text();
|
|
249
|
+
throw new Error(`[BankrBackend] Failed to get job status: ${statusResponse.status} ${error}`);
|
|
250
|
+
}
|
|
251
|
+
const result = await statusResponse.json();
|
|
252
|
+
// Log status changes
|
|
253
|
+
if (result.status !== lastStatus) {
|
|
254
|
+
console.log(`[BankrBackend] Job ${jobId}: ${result.status}`);
|
|
255
|
+
lastStatus = result.status;
|
|
256
|
+
}
|
|
257
|
+
// Log progress updates
|
|
258
|
+
if (result.statusUpdates && result.statusUpdates.length > 0) {
|
|
259
|
+
const lastUpdate = result.statusUpdates[result.statusUpdates.length - 1];
|
|
260
|
+
console.log(`[BankrBackend] Progress: ${lastUpdate.message}`);
|
|
261
|
+
}
|
|
262
|
+
// Check terminal states
|
|
263
|
+
switch (result.status) {
|
|
264
|
+
case 'completed':
|
|
265
|
+
return result;
|
|
266
|
+
case 'failed':
|
|
267
|
+
throw new Error(`[BankrBackend] Job failed: ${result.error || 'Unknown error'}`);
|
|
268
|
+
case 'cancelled':
|
|
269
|
+
throw new Error(`[BankrBackend] Job was cancelled`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
throw new Error(`[BankrBackend] Job ${jobId} timed out`);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Extract transaction hash from Bankr response
|
|
276
|
+
*/
|
|
277
|
+
extractTransactionHash(result) {
|
|
278
|
+
// Check richData for transaction info
|
|
279
|
+
if (result.richData) {
|
|
280
|
+
for (const item of result.richData) {
|
|
281
|
+
if (item.transactionHash)
|
|
282
|
+
return item.transactionHash;
|
|
283
|
+
if (item.txHash)
|
|
284
|
+
return item.txHash;
|
|
285
|
+
if (item.hash)
|
|
286
|
+
return item.hash;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Try to extract from response text
|
|
290
|
+
if (result.response) {
|
|
291
|
+
// Look for 0x + 64 hex chars
|
|
292
|
+
const hashMatch = result.response.match(/0x[a-fA-F0-9]{64}/);
|
|
293
|
+
if (hashMatch)
|
|
294
|
+
return hashMatch[0];
|
|
295
|
+
// Check for failure indicators
|
|
296
|
+
if (result.response.toLowerCase().includes('reverted') ||
|
|
297
|
+
result.response.toLowerCase().includes('failed') ||
|
|
298
|
+
result.response.toLowerCase().includes('insufficient')) {
|
|
299
|
+
console.error(`[BankrBackend] Transaction failed: ${result.response}`);
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
sleep(ms) {
|
|
306
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Create a Bankr backend from API key
|
|
311
|
+
*/
|
|
312
|
+
export function createBankrBackend(config) {
|
|
313
|
+
return new BankrBackend(config);
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=BankrBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BankrBackend.js","sourceRoot":"","sources":["../../../src/wallet/backends/BankrBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bankr Wallet Provider for SODAX SDK
|
|
3
|
+
*
|
|
4
|
+
* Implements IEvmWalletProvider interface to allow SODAX SDK
|
|
5
|
+
* to execute transactions through Bankr's API.
|
|
6
|
+
*
|
|
7
|
+
* Instead of signing locally, transactions are submitted to Bankr
|
|
8
|
+
* which signs and broadcasts them server-side.
|
|
9
|
+
*
|
|
10
|
+
* Supported chains: Ethereum (1), Polygon (137), Base (8453)
|
|
11
|
+
*/
|
|
12
|
+
import type { Address, Hash, PublicClient } from 'viem';
|
|
13
|
+
import type { IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt } from '@sodax/types';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for BankrWalletProvider
|
|
16
|
+
*/
|
|
17
|
+
export interface BankrWalletProviderConfig {
|
|
18
|
+
apiKey: string;
|
|
19
|
+
apiUrl?: string;
|
|
20
|
+
chainId: number;
|
|
21
|
+
rpcUrl?: string;
|
|
22
|
+
/** Pre-cached address (avoids initial API call) */
|
|
23
|
+
cachedAddress?: Address;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Bankr Wallet Provider
|
|
27
|
+
*
|
|
28
|
+
* Implements IEvmWalletProvider for use with SODAX SDK's SpokeProvider.
|
|
29
|
+
* Transactions are signed and broadcast via Bankr's Agent API.
|
|
30
|
+
*/
|
|
31
|
+
export declare class BankrWalletProvider implements IEvmWalletProvider {
|
|
32
|
+
readonly publicClient: PublicClient;
|
|
33
|
+
private readonly apiUrl;
|
|
34
|
+
private readonly apiKey;
|
|
35
|
+
private readonly chainId;
|
|
36
|
+
private cachedAddress;
|
|
37
|
+
private readonly pollIntervalMs;
|
|
38
|
+
private readonly maxPollAttempts;
|
|
39
|
+
constructor(config: BankrWalletProviderConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Get the Bankr wallet address
|
|
42
|
+
*/
|
|
43
|
+
getWalletAddress(): Promise<Address>;
|
|
44
|
+
/**
|
|
45
|
+
* Send a transaction via Bankr
|
|
46
|
+
*
|
|
47
|
+
* This is the key method - it receives raw transaction data from SODAX SDK
|
|
48
|
+
* and submits it to Bankr for signing and broadcasting.
|
|
49
|
+
*/
|
|
50
|
+
sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash>;
|
|
51
|
+
/**
|
|
52
|
+
* Wait for transaction receipt
|
|
53
|
+
*
|
|
54
|
+
* Uses the public client to query the blockchain directly.
|
|
55
|
+
*/
|
|
56
|
+
waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt>;
|
|
57
|
+
/**
|
|
58
|
+
* Submit prompt and wait for text response
|
|
59
|
+
*/
|
|
60
|
+
private submitAndWait;
|
|
61
|
+
/**
|
|
62
|
+
* Submit prompt and wait for job completion
|
|
63
|
+
*/
|
|
64
|
+
private submitAndWaitForJob;
|
|
65
|
+
/**
|
|
66
|
+
* Extract transaction hash from Bankr response
|
|
67
|
+
*/
|
|
68
|
+
private extractTransactionHash;
|
|
69
|
+
private sleep;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a BankrWalletProvider
|
|
73
|
+
*/
|
|
74
|
+
export declare function createBankrWalletProvider(config: BankrWalletProviderConfig): BankrWalletProvider;
|
|
75
|
+
//# sourceMappingURL=BankrWalletProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BankrWalletProvider.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/BankrWalletProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGxD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAuCtB;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,aAAa,CAAiB;IAGtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAE3B,MAAM,EAAE,yBAAyB;IAwB7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB1C;;;;;OAKG;IACG,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjE;;;;OAIG;IACG,yBAAyB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAqChF;;OAEG;YACW,aAAa;IAK3B;;OAEG;YACW,mBAAmB;IA+DjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,mBAAmB,CAEhG"}
|