@pocketagent/paw 1.0.3 ā 1.0.4
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/dist/cli/commands/address.d.ts.map +1 -1
- package/dist/cli/commands/address.js +6 -0
- package/dist/cli/commands/address.js.map +1 -1
- package/dist/cli/commands/dashboard.js +1 -1
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/export.d.ts +3 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +96 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/import.d.ts +3 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +70 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/multi-send.d.ts +3 -0
- package/dist/cli/commands/multi-send.d.ts.map +1 -0
- package/dist/cli/commands/multi-send.js +104 -0
- package/dist/cli/commands/multi-send.js.map +1 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +38 -12
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/package.json +5 -2
- package/skills/.gitkeep +0 -0
- package/skills/pocketagent-wallet/SKILL.md +0 -406
package/README.md
CHANGED
|
@@ -65,6 +65,9 @@ We're launching on Solana because:
|
|
|
65
65
|
- **Total Portfolio View**: See combined value of SOL + tokens in USD
|
|
66
66
|
- **Multi-Token Support**: Trade any SPL token by mint address
|
|
67
67
|
- **Transaction History**: Track all agent activities
|
|
68
|
+
- **QR Code Display**: Generate QR codes for easy mobile funding
|
|
69
|
+
- **Wallet Import/Export**: Backup and migrate wallets easily
|
|
70
|
+
- **Multi-Send**: Send to multiple addresses in one transaction
|
|
68
71
|
|
|
69
72
|
### šÆ Meme Trading Ready
|
|
70
73
|
- **Configurable Slippage**: Set high slippage for volatile tokens
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,cAAc,SAkCvB,CAAC"}
|
|
@@ -3,10 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.addressCommand = void 0;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const manager_1 = require("../../core/wallet/manager");
|
|
6
|
+
const qrcode = require('qrcode-terminal');
|
|
6
7
|
exports.addressCommand = new commander_1.Command('address')
|
|
7
8
|
.description('š Show wallet address')
|
|
8
9
|
.argument('[agent-id]', 'Agent identifier')
|
|
9
10
|
.option('--agent-id <id>', 'Agent identifier (alternative)')
|
|
11
|
+
.option('--qr', 'Display address as QR code')
|
|
10
12
|
.action(async (agentIdArg, options) => {
|
|
11
13
|
try {
|
|
12
14
|
// Support both positional and flag syntax
|
|
@@ -22,6 +24,10 @@ exports.addressCommand = new commander_1.Command('address')
|
|
|
22
24
|
console.log('\nš PAW - Wallet Address');
|
|
23
25
|
console.log('Agent ID:', agentId);
|
|
24
26
|
console.log('Address: ', walletInfo.address);
|
|
27
|
+
if (options.qr) {
|
|
28
|
+
console.log('\nš± Scan QR Code:\n');
|
|
29
|
+
qrcode.generate(walletInfo.address, { small: true });
|
|
30
|
+
}
|
|
25
31
|
console.log('');
|
|
26
32
|
}
|
|
27
33
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/cli/commands/address.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,uDAA0D;
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/cli/commands/address.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,uDAA0D;AAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE7B,QAAA,cAAc,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,0CAA0C;QAC1C,MAAM,OAAO,GAAG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;QAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,uBAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE9D,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,YAAY,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -147,7 +147,7 @@ exports.dashboardCommand = new commander_1.Command('dashboard')
|
|
|
147
147
|
content += '\n';
|
|
148
148
|
// Agent info
|
|
149
149
|
content += `{green-fg}AGENT:{/green-fg} ${agentId}\n`;
|
|
150
|
-
content += `{green-fg}ADDR:{/green-fg} ${walletInfo.address
|
|
150
|
+
content += `{green-fg}ADDR:{/green-fg} ${walletInfo.address}\n`;
|
|
151
151
|
content += `{green-fg}NET:{/green-fg} ${network.toUpperCase()}\n`;
|
|
152
152
|
content += '\n';
|
|
153
153
|
content += 'āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA6DtB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.exportCommand = void 0;
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const manager_1 = require("../../core/wallet/manager");
|
|
42
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
43
|
+
const readline = __importStar(require("readline"));
|
|
44
|
+
exports.exportCommand = new commander_1.Command('export')
|
|
45
|
+
.description('š Export wallet private key')
|
|
46
|
+
.argument('<agent-id>', 'Agent identifier')
|
|
47
|
+
.option('--confirm <agent-id>', 'Skip confirmation prompt (for automation)')
|
|
48
|
+
.action(async (agentId, options) => {
|
|
49
|
+
try {
|
|
50
|
+
// Security warning
|
|
51
|
+
console.log('\nā ļø WARNING: SENSITIVE DATA EXPORT');
|
|
52
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
53
|
+
console.log('This will display your wallet private key in PLAINTEXT!');
|
|
54
|
+
console.log('Anyone with this information can STEAL YOUR FUNDS!');
|
|
55
|
+
console.log('Only export in a secure, private location.');
|
|
56
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
57
|
+
// Confirmation
|
|
58
|
+
if (!options.confirm || options.confirm !== agentId) {
|
|
59
|
+
// Interactive confirmation
|
|
60
|
+
const rl = readline.createInterface({
|
|
61
|
+
input: process.stdin,
|
|
62
|
+
output: process.stdout,
|
|
63
|
+
});
|
|
64
|
+
const answer = await new Promise((resolve) => {
|
|
65
|
+
rl.question(`Type '${agentId}' to confirm export: `, resolve);
|
|
66
|
+
});
|
|
67
|
+
rl.close();
|
|
68
|
+
if (answer !== agentId) {
|
|
69
|
+
console.log('\nā Export cancelled - confirmation did not match\n');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Load keypair
|
|
74
|
+
const keypair = await manager_1.WalletManager.loadKeypairAuto(agentId);
|
|
75
|
+
console.log('\nš PAW - Wallet Export');
|
|
76
|
+
console.log('Agent ID:', agentId);
|
|
77
|
+
console.log('');
|
|
78
|
+
// Export as base58 encoded private key
|
|
79
|
+
const privateKeyBase58 = bs58_1.default.encode(keypair.secretKey);
|
|
80
|
+
console.log('š Private Key (Base58):');
|
|
81
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
82
|
+
console.log(privateKeyBase58);
|
|
83
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
84
|
+
console.log('\nā ļø Keep this secret and secure!');
|
|
85
|
+
console.log('ā ļø Never share it with anyone!');
|
|
86
|
+
console.log('š” Import this into Phantom, Solflare, or any Solana wallet');
|
|
87
|
+
console.log('');
|
|
88
|
+
// Clear keypair from memory
|
|
89
|
+
keypair.secretKey.fill(0);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error('\nā Error:', error.message);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,uDAA0D;AAC1D,gDAAwB;AACxB,mDAAqC;AAExB,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,sBAAsB,EAAE,2CAA2C,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAErE,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACpD,2BAA2B;YAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACnD,EAAE,CAAC,QAAQ,CAAC,SAAS,OAAO,uBAAuB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAG,MAAM,uBAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,cAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAE3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,4BAA4B;QAC5B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,YAAY,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SAiEtB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.importCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
9
|
+
const encryption_1 = require("../../core/storage/encryption");
|
|
10
|
+
const filesystem_1 = require("../../core/storage/filesystem");
|
|
11
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
12
|
+
exports.importCommand = new commander_1.Command('import')
|
|
13
|
+
.description('š Import existing wallet from private key')
|
|
14
|
+
.argument('<agent-id>', 'Agent identifier for the imported wallet')
|
|
15
|
+
.requiredOption('--private-key <key>', 'Base58 encoded private key')
|
|
16
|
+
.option('--network <network>', 'Network to use (devnet, mainnet-beta, testnet)', 'mainnet-beta')
|
|
17
|
+
.action(async (agentId, options) => {
|
|
18
|
+
try {
|
|
19
|
+
// Check if wallet already exists
|
|
20
|
+
if (await filesystem_1.FileSystemStorage.exists(agentId)) {
|
|
21
|
+
console.error(`\nā Error: Wallet for agent "${agentId}" already exists`);
|
|
22
|
+
console.log('\nUse a different agent ID or delete the existing wallet first.');
|
|
23
|
+
console.log('');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
console.log('\nš PAW - Import Wallet');
|
|
27
|
+
console.log('Agent ID:', agentId);
|
|
28
|
+
console.log('Network: ', options.network);
|
|
29
|
+
console.log('');
|
|
30
|
+
// Decode private key from base58
|
|
31
|
+
let keypair;
|
|
32
|
+
try {
|
|
33
|
+
const privateKeyBytes = bs58_1.default.decode(options.privateKey);
|
|
34
|
+
keypair = web3_js_1.Keypair.fromSecretKey(privateKeyBytes);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('ā Error: Invalid private key');
|
|
38
|
+
console.log(`\nDetails: ${error.message}`);
|
|
39
|
+
console.log('');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
// Generate passphrase for encryption
|
|
43
|
+
const passphrase = encryption_1.EncryptionService.generatePassphrase();
|
|
44
|
+
// Encrypt keypair
|
|
45
|
+
const encryptedKeypair = encryption_1.EncryptionService.encrypt(keypair, passphrase);
|
|
46
|
+
// Save encrypted keypair to disk
|
|
47
|
+
await filesystem_1.FileSystemStorage.saveKeypair(agentId, encryptedKeypair);
|
|
48
|
+
// Save passphrase (encrypted with machine-specific key)
|
|
49
|
+
await filesystem_1.FileSystemStorage.savePassphrase(agentId, passphrase);
|
|
50
|
+
// Save config
|
|
51
|
+
await filesystem_1.FileSystemStorage.saveConfig(agentId, {
|
|
52
|
+
agentId,
|
|
53
|
+
publicKey: keypair.publicKey.toBase58(),
|
|
54
|
+
createdAt: new Date().toISOString(),
|
|
55
|
+
network: options.network,
|
|
56
|
+
});
|
|
57
|
+
console.log('ā
Wallet imported successfully!\n');
|
|
58
|
+
console.log('Agent ID:', agentId);
|
|
59
|
+
console.log('Address: ', keypair.publicKey.toBase58());
|
|
60
|
+
console.log('Network: ', options.network);
|
|
61
|
+
console.log('');
|
|
62
|
+
// Clear keypair from memory
|
|
63
|
+
encryption_1.EncryptionService.clearKeypair(keypair);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('\nā Error:', error.message);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/multi-send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,gBAAgB,SAiHzB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.multiSendCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const manager_1 = require("../../core/wallet/manager");
|
|
6
|
+
const solana_1 = require("../../utils/solana");
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
exports.multiSendCommand = new commander_1.Command('multi-send')
|
|
9
|
+
.description('š Send SOL to multiple addresses')
|
|
10
|
+
.argument('<agent-id>', 'Agent identifier')
|
|
11
|
+
.requiredOption('--addresses <addresses>', 'Comma-separated list of recipient addresses')
|
|
12
|
+
.requiredOption('--amounts <amounts>', 'Comma-separated list of amounts (in SOL)')
|
|
13
|
+
.option('--network <network>', 'Network to use (devnet, mainnet-beta, testnet)', 'mainnet-beta')
|
|
14
|
+
.action(async (agentId, options) => {
|
|
15
|
+
try {
|
|
16
|
+
console.log('\nš PAW - Multi-Send');
|
|
17
|
+
console.log('Agent ID:', agentId);
|
|
18
|
+
console.log('Network: ', options.network);
|
|
19
|
+
console.log('');
|
|
20
|
+
// Parse addresses and amounts
|
|
21
|
+
const addresses = options.addresses.split(',').map((addr) => addr.trim());
|
|
22
|
+
const amounts = options.amounts.split(',').map((amt) => parseFloat(amt.trim()));
|
|
23
|
+
// Validate
|
|
24
|
+
if (addresses.length !== amounts.length) {
|
|
25
|
+
console.error('ā Error: Number of addresses must match number of amounts');
|
|
26
|
+
console.log(`\nAddresses: ${addresses.length}, Amounts: ${amounts.length}`);
|
|
27
|
+
console.log('');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (addresses.length === 0) {
|
|
31
|
+
console.error('ā Error: At least one recipient required');
|
|
32
|
+
console.log('');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Validate addresses
|
|
36
|
+
const recipients = [];
|
|
37
|
+
for (let i = 0; i < addresses.length; i++) {
|
|
38
|
+
try {
|
|
39
|
+
recipients.push(new web3_js_1.PublicKey(addresses[i]));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error(`ā Error: Invalid address at position ${i + 1}: ${addresses[i]}`);
|
|
43
|
+
console.log('');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Calculate total
|
|
48
|
+
const totalAmount = amounts.reduce((sum, amt) => sum + amt, 0);
|
|
49
|
+
const totalLamports = Math.floor(totalAmount * web3_js_1.LAMPORTS_PER_SOL);
|
|
50
|
+
console.log('š Transfer Summary:');
|
|
51
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
52
|
+
for (let i = 0; i < addresses.length; i++) {
|
|
53
|
+
console.log(`${i + 1}. ${addresses[i]}`);
|
|
54
|
+
console.log(` Amount: ${amounts[i]} SOL`);
|
|
55
|
+
}
|
|
56
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
57
|
+
console.log(`Total: ${totalAmount} SOL (${recipients.length} recipients)`);
|
|
58
|
+
console.log('');
|
|
59
|
+
// Load keypair
|
|
60
|
+
const keypair = await manager_1.WalletManager.loadKeypairAuto(agentId);
|
|
61
|
+
// Check balance
|
|
62
|
+
const connection = solana_1.SolanaClient.getConnection(options.network);
|
|
63
|
+
const balance = await connection.getBalance(keypair.publicKey);
|
|
64
|
+
const balanceSOL = balance / web3_js_1.LAMPORTS_PER_SOL;
|
|
65
|
+
// Estimate fees (5000 lamports per transfer + base fee)
|
|
66
|
+
const estimatedFees = (recipients.length * 5000 + 5000) / web3_js_1.LAMPORTS_PER_SOL;
|
|
67
|
+
const totalNeeded = totalAmount + estimatedFees;
|
|
68
|
+
if (balanceSOL < totalNeeded) {
|
|
69
|
+
console.error(`ā Error: Insufficient balance`);
|
|
70
|
+
console.log(`\nRequired: ${totalNeeded.toFixed(6)} SOL (${totalAmount} + ~${estimatedFees.toFixed(6)} fees)`);
|
|
71
|
+
console.log(`Available: ${balanceSOL.toFixed(6)} SOL`);
|
|
72
|
+
console.log('');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
console.log('š° Balance: ', balanceSOL.toFixed(6), 'SOL');
|
|
76
|
+
console.log('šø Estimated fees: ~', estimatedFees.toFixed(6), 'SOL');
|
|
77
|
+
console.log('');
|
|
78
|
+
// Build transaction with multiple transfers
|
|
79
|
+
const transaction = new web3_js_1.Transaction();
|
|
80
|
+
for (let i = 0; i < recipients.length; i++) {
|
|
81
|
+
const lamports = Math.floor(amounts[i] * web3_js_1.LAMPORTS_PER_SOL);
|
|
82
|
+
transaction.add(web3_js_1.SystemProgram.transfer({
|
|
83
|
+
fromPubkey: keypair.publicKey,
|
|
84
|
+
toPubkey: recipients[i],
|
|
85
|
+
lamports,
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
console.log('š¤ Sending transactions...');
|
|
89
|
+
// Send transaction
|
|
90
|
+
const signature = await connection.sendTransaction(transaction, [keypair]);
|
|
91
|
+
console.log('ā³ Confirming...');
|
|
92
|
+
// Confirm transaction
|
|
93
|
+
await connection.confirmTransaction(signature);
|
|
94
|
+
console.log('\nā
Multi-send completed!');
|
|
95
|
+
console.log('Signature:', signature);
|
|
96
|
+
console.log('Explorer: https://explorer.solana.com/tx/' + signature);
|
|
97
|
+
console.log('');
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error('\nā Error:', error.message);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=multi-send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-send.js","sourceRoot":"","sources":["../../../src/cli/commands/multi-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,WAAW,SAkHpB,CAAC"}
|
|
@@ -7,12 +7,14 @@ const engine_1 = require("../../core/signer/engine");
|
|
|
7
7
|
const solana_1 = require("../../utils/solana");
|
|
8
8
|
const filesystem_1 = require("../../core/storage/filesystem");
|
|
9
9
|
const web3_js_1 = require("@solana/web3.js");
|
|
10
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
10
11
|
exports.sendCommand = new commander_1.Command('send')
|
|
11
|
-
.description('š Send SOL to another address')
|
|
12
|
+
.description('š Send SOL or SPL tokens to another address')
|
|
12
13
|
.argument('[agent-id]', 'Agent identifier')
|
|
13
14
|
.option('--agent-id <id>', 'Agent identifier (alternative)')
|
|
14
15
|
.requiredOption('--to <address>', 'Recipient address')
|
|
15
|
-
.requiredOption('--amount <amount>', 'Amount
|
|
16
|
+
.requiredOption('--amount <amount>', 'Amount to send')
|
|
17
|
+
.option('--token <mint>', 'SPL token mint address (omit for SOL)')
|
|
16
18
|
.option('--network <network>', 'Network to use (overrides config)')
|
|
17
19
|
.action(async (agentIdArg, options) => {
|
|
18
20
|
try {
|
|
@@ -31,24 +33,48 @@ exports.sendCommand = new commander_1.Command('send')
|
|
|
31
33
|
const config = await filesystem_1.FileSystemStorage.loadConfig(agentId);
|
|
32
34
|
network = config.network || 'mainnet-beta';
|
|
33
35
|
}
|
|
36
|
+
const isSPLToken = !!options.token;
|
|
34
37
|
console.log('\nš PAW - Send Transaction');
|
|
35
38
|
console.log('Agent ID:', agentId);
|
|
36
39
|
console.log('To: ', options.to);
|
|
37
|
-
console.log('Amount: ', options.amount, 'SOL');
|
|
40
|
+
console.log('Amount: ', options.amount, isSPLToken ? 'tokens' : 'SOL');
|
|
41
|
+
if (isSPLToken) {
|
|
42
|
+
console.log('Token: ', options.token);
|
|
43
|
+
}
|
|
38
44
|
console.log('Network: ', network);
|
|
39
45
|
// Load keypair
|
|
40
46
|
const keypair = await manager_1.WalletManager.loadKeypairAuto(agentId);
|
|
41
47
|
// Get connection
|
|
42
48
|
const connection = solana_1.SolanaClient.getConnection(network);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
let transaction;
|
|
50
|
+
if (isSPLToken) {
|
|
51
|
+
// SPL Token Transfer
|
|
52
|
+
console.log('\nPreparing SPL token transfer...');
|
|
53
|
+
const mintPubkey = new web3_js_1.PublicKey(options.token);
|
|
54
|
+
const recipientPubkey = new web3_js_1.PublicKey(options.to);
|
|
55
|
+
// Get mint info to determine decimals
|
|
56
|
+
const mintInfo = await (0, spl_token_1.getMint)(connection, mintPubkey);
|
|
57
|
+
const decimals = mintInfo.decimals;
|
|
58
|
+
const amount = Math.floor(parseFloat(options.amount) * Math.pow(10, decimals));
|
|
59
|
+
console.log('Token decimals:', decimals);
|
|
60
|
+
// Get or create associated token accounts
|
|
61
|
+
console.log('Getting token accounts...');
|
|
62
|
+
const sourceAccount = await (0, spl_token_1.getOrCreateAssociatedTokenAccount)(connection, keypair, mintPubkey, keypair.publicKey);
|
|
63
|
+
const destinationAccount = await (0, spl_token_1.getOrCreateAssociatedTokenAccount)(connection, keypair, mintPubkey, recipientPubkey);
|
|
64
|
+
// Create transfer instruction
|
|
65
|
+
const transferInstruction = (0, spl_token_1.createTransferInstruction)(sourceAccount.address, destinationAccount.address, keypair.publicKey, amount);
|
|
66
|
+
transaction = new web3_js_1.Transaction().add(transferInstruction);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// SOL Transfer
|
|
70
|
+
const lamports = Math.floor(parseFloat(options.amount) * web3_js_1.LAMPORTS_PER_SOL);
|
|
71
|
+
const transferInstruction = web3_js_1.SystemProgram.transfer({
|
|
72
|
+
fromPubkey: keypair.publicKey,
|
|
73
|
+
toPubkey: new web3_js_1.PublicKey(options.to),
|
|
74
|
+
lamports,
|
|
75
|
+
});
|
|
76
|
+
transaction = new web3_js_1.Transaction().add(transferInstruction);
|
|
77
|
+
}
|
|
52
78
|
// Sign and send
|
|
53
79
|
console.log('\nSigning transaction...');
|
|
54
80
|
const signature = await engine_1.SignerEngine.signAndSend(transaction, keypair, connection);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,uDAA0D;AAC1D,qDAAwD;AACxD,+CAAkD;AAClD,8DAAkE;AAClE,6CAMyB;
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -11,6 +11,9 @@ const history_1 = require("./commands/history");
|
|
|
11
11
|
const config_1 = require("./commands/config");
|
|
12
12
|
const tokens_1 = require("./commands/tokens");
|
|
13
13
|
const dashboard_1 = require("./commands/dashboard");
|
|
14
|
+
const export_1 = require("./commands/export");
|
|
15
|
+
const import_1 = require("./commands/import");
|
|
16
|
+
const multi_send_1 = require("./commands/multi-send");
|
|
14
17
|
const program = new commander_1.Command();
|
|
15
18
|
program
|
|
16
19
|
.name('paw')
|
|
@@ -18,14 +21,17 @@ program
|
|
|
18
21
|
.version('0.1.0');
|
|
19
22
|
// Register commands
|
|
20
23
|
program.addCommand(init_1.initCommand);
|
|
24
|
+
program.addCommand(import_1.importCommand);
|
|
21
25
|
program.addCommand(dashboard_1.dashboardCommand);
|
|
22
26
|
program.addCommand(config_1.configCommand);
|
|
23
27
|
program.addCommand(address_1.addressCommand);
|
|
24
28
|
program.addCommand(balance_1.balanceCommand);
|
|
25
29
|
program.addCommand(tokens_1.tokensCommand);
|
|
26
30
|
program.addCommand(send_1.sendCommand);
|
|
31
|
+
program.addCommand(multi_send_1.multiSendCommand);
|
|
27
32
|
program.addCommand(swap_1.swapCommand);
|
|
28
33
|
program.addCommand(history_1.historyCommand);
|
|
34
|
+
program.addCommand(export_1.exportCommand);
|
|
29
35
|
// Parse arguments
|
|
30
36
|
program.parse();
|
|
31
37
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,gDAAoD;AACpD,gDAAoD;AACpD,0CAA8C;AAC9C,0CAA8C;AAC9C,gDAAoD;AACpD,8CAAkD;AAClD,8CAAkD;AAClD,oDAAwD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,gDAAoD;AACpD,gDAAoD;AACpD,0CAA8C;AAC9C,0CAA8C;AAC9C,gDAAoD;AACpD,8CAAkD;AAClD,8CAAkD;AAClD,oDAAwD;AACxD,8CAAkD;AAClD,8CAAkD;AAClD,sDAAyD;AAEzD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,6BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pocketagent/paw",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "PocketAgent Wallet - agentic wallet for AI agents on Solana š",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -56,18 +56,21 @@
|
|
|
56
56
|
"packageManager": "yarn@4.5.2",
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@jup-ag/referral-sdk": "^0.3.0",
|
|
59
|
+
"@solana/spl-token": "^0.4.14",
|
|
59
60
|
"@solana/web3.js": "^1.98.4",
|
|
60
61
|
"blessed": "^0.1.81",
|
|
61
62
|
"blessed-contrib": "^4.11.0",
|
|
62
63
|
"bs58": "^6.0.0",
|
|
63
64
|
"chalk": "^5.6.2",
|
|
64
65
|
"cli-table3": "^0.6.5",
|
|
65
|
-
"commander": "^14.0.3"
|
|
66
|
+
"commander": "^14.0.3",
|
|
67
|
+
"qrcode-terminal": "^0.12.0"
|
|
66
68
|
},
|
|
67
69
|
"devDependencies": {
|
|
68
70
|
"@types/blessed": "^0",
|
|
69
71
|
"@types/jest": "^30.0.0",
|
|
70
72
|
"@types/node": "^25.3.0",
|
|
73
|
+
"@types/qrcode-terminal": "^0",
|
|
71
74
|
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
72
75
|
"@typescript-eslint/parser": "^8.56.0",
|
|
73
76
|
"eslint": "^10.0.0",
|
package/skills/.gitkeep
DELETED
|
File without changes
|
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pocketagent-wallet
|
|
3
|
-
description: >-
|
|
4
|
-
Lightning-fast autonomous wallet for AI agents on Solana. Use for wallet creation,
|
|
5
|
-
crypto transactions, token swaps, DeFi trading, Jupiter DEX, meme coin trading,
|
|
6
|
-
Solana payments, autonomous trading bots, portfolio management, and agentic wallets.
|
|
7
|
-
license: MIT
|
|
8
|
-
metadata:
|
|
9
|
-
author: PocketAgent Team
|
|
10
|
-
version: "1.0.3"
|
|
11
|
-
category: wallet
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# š PAW Skills for AI Agents
|
|
15
|
-
|
|
16
|
-
**PocketAgent Wallet (PAW)** - Lightning-fast autonomous wallet for AI agents on Solana
|
|
17
|
-
|
|
18
|
-
## What is PAW?
|
|
19
|
-
|
|
20
|
-
PAW is a high-performance agentic wallet designed for AI agents to execute crypto operations at Telegram bot speed. Built with Helius RPC for maximum throughput.
|
|
21
|
-
|
|
22
|
-
Key capabilities:
|
|
23
|
-
- Create and manage wallets programmatically
|
|
24
|
-
- Sign transactions automatically (no human approval needed)
|
|
25
|
-
- Execute swaps in milliseconds via Jupiter DEX
|
|
26
|
-
- Hold SOL and any SPL token
|
|
27
|
-
- Real-time balance and transaction tracking
|
|
28
|
-
|
|
29
|
-
## Quick Command Reference
|
|
30
|
-
|
|
31
|
-
### Essential Commands
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Create wallet (defaults to mainnet-beta for real trading)
|
|
35
|
-
paw init <agent-id>
|
|
36
|
-
|
|
37
|
-
# Or specify network:
|
|
38
|
-
# paw init <agent-id> --network devnet # For testing with free SOL
|
|
39
|
-
# paw init <agent-id> --network mainnet-beta # For real trading (default)
|
|
40
|
-
|
|
41
|
-
# Get address
|
|
42
|
-
paw address <agent-id>
|
|
43
|
-
|
|
44
|
-
# Check total portfolio (SOL + tokens in USD)
|
|
45
|
-
paw balance <agent-id>
|
|
46
|
-
|
|
47
|
-
# List all tokens
|
|
48
|
-
paw tokens <agent-id>
|
|
49
|
-
|
|
50
|
-
# Send SOL
|
|
51
|
-
paw send <agent-id> --to <address> --amount <sol-amount>
|
|
52
|
-
|
|
53
|
-
# Swap tokens (Jupiter DEX)
|
|
54
|
-
paw swap <agent-id> --from <token> --to <token> --amount <amount>
|
|
55
|
-
|
|
56
|
-
# View transaction history
|
|
57
|
-
paw history <agent-id>
|
|
58
|
-
|
|
59
|
-
# Configure wallet settings
|
|
60
|
-
paw config <agent-id> --network <devnet|mainnet-beta|testnet>
|
|
61
|
-
paw config <agent-id> --slippage <bps>
|
|
62
|
-
paw config <agent-id> --priority-fee <lamports>
|
|
63
|
-
paw config <agent-id> --show
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## AI Agent Workflow Examples
|
|
67
|
-
|
|
68
|
-
### Example 1: Check Balance Before Action
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
# Get balance
|
|
72
|
-
paw balance trading-bot-001
|
|
73
|
-
|
|
74
|
-
# Output shows total portfolio:
|
|
75
|
-
# š° Total Portfolio:
|
|
76
|
-
# ~1.649990 SOL
|
|
77
|
-
# ~138.68 USD
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Example 2: Fast Token Swap
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# Swap 0.1 SOL to USDC on mainnet
|
|
84
|
-
paw swap trading-bot-001 --from SOL --to USDC --amount 0.1 --network mainnet-beta
|
|
85
|
-
|
|
86
|
-
# Executes in <2 seconds using Jupiter aggregator
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Example 3: Send Payment
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
# Send 0.5 SOL to another agent
|
|
93
|
-
paw send agent-alice --to DJcVfT6dienfSbudJzZ82WN4EkVPgVaT18oBK971Yi2c --amount 0.5
|
|
94
|
-
|
|
95
|
-
# Or send to another agent by ID (if you know their address)
|
|
96
|
-
paw send agent-alice --to <address> --amount 0.5
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Example 4: Monitor Transactions
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Check last 10 transactions
|
|
103
|
-
paw history trading-bot-001 --limit 10
|
|
104
|
-
|
|
105
|
-
# Shows table with:
|
|
106
|
-
# - Transaction signature
|
|
107
|
-
# - Type (send/receive)
|
|
108
|
-
# - Amount
|
|
109
|
-
# - Status (success/failed)
|
|
110
|
-
# - Timestamp
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Example 5: Multi-Agent Setup
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
# Create multiple agents
|
|
117
|
-
paw init agent-alice
|
|
118
|
-
paw init agent-bob
|
|
119
|
-
paw init trading-bot-001
|
|
120
|
-
|
|
121
|
-
# Each agent has independent wallet and config
|
|
122
|
-
# Stored in ~/.paw/agents/<agent-id>/
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Decision-Making Script for AI Agents
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
#!/bin/bash
|
|
129
|
-
# Autonomous trading agent
|
|
130
|
-
|
|
131
|
-
AGENT="trading-bot-001"
|
|
132
|
-
|
|
133
|
-
# 1. Check portfolio
|
|
134
|
-
BALANCE=$(paw balance $AGENT)
|
|
135
|
-
|
|
136
|
-
# 2. Get transaction history
|
|
137
|
-
HISTORY=$(paw history $AGENT --limit 5)
|
|
138
|
-
|
|
139
|
-
# 3. Make decision based on balance
|
|
140
|
-
# If balance > 1 SOL, swap some to USDC
|
|
141
|
-
paw swap $AGENT --from SOL --to USDC --amount 0.5
|
|
142
|
-
|
|
143
|
-
# 4. Verify transaction
|
|
144
|
-
paw history $AGENT --limit 1
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Performance Features
|
|
148
|
-
|
|
149
|
-
### Lightning Fast Execution
|
|
150
|
-
- **Helius RPC**: Premium RPC endpoints for mainnet and devnet
|
|
151
|
-
- **Connection Pooling**: Reuses connections for speed
|
|
152
|
-
- **Jupiter DEX**: Best price aggregation across all Solana DEXs
|
|
153
|
-
- **Real-time Prices**: Live SOL price from CoinGecko
|
|
154
|
-
|
|
155
|
-
### Speed Comparison
|
|
156
|
-
- Balance check: ~200ms
|
|
157
|
-
- Token swap: ~1-2 seconds
|
|
158
|
-
- Send transaction: ~500ms
|
|
159
|
-
- History fetch: ~300ms
|
|
160
|
-
|
|
161
|
-
Similar to Telegram trading bots - fast enough for real-time trading!
|
|
162
|
-
|
|
163
|
-
## Network Configuration
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
# Set network (persists in config)
|
|
167
|
-
paw config <agent-id> --network mainnet-beta
|
|
168
|
-
|
|
169
|
-
# Set default slippage for all swaps (in basis points)
|
|
170
|
-
paw config <agent-id> --slippage 1000 # 10% for meme coins
|
|
171
|
-
|
|
172
|
-
# Set default priority fee for faster execution
|
|
173
|
-
paw config <agent-id> --priority-fee 100000 # 100k lamports
|
|
174
|
-
|
|
175
|
-
# Set multiple settings at once
|
|
176
|
-
paw config <agent-id> --network mainnet-beta --slippage 1000 --priority-fee 100000
|
|
177
|
-
|
|
178
|
-
# View current configuration
|
|
179
|
-
paw config <agent-id> --show
|
|
180
|
-
|
|
181
|
-
# Networks:
|
|
182
|
-
# - devnet: Free testing (use faucet for SOL)
|
|
183
|
-
# - mainnet-beta: Real money, production
|
|
184
|
-
# - testnet: Testing network
|
|
185
|
-
|
|
186
|
-
# Override config for single command
|
|
187
|
-
paw balance <agent-id> --network mainnet-beta
|
|
188
|
-
paw swap <agent-id> --from SOL --to USDC --amount 0.1 --slippage 500
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## Common Token Addresses
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
# Mainnet tokens
|
|
195
|
-
SOL: Native token (use "SOL")
|
|
196
|
-
USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
|
|
197
|
-
USDT: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
|
|
198
|
-
BONK: DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
|
|
199
|
-
|
|
200
|
-
# Use token symbol or mint address
|
|
201
|
-
paw swap bot-1 --from SOL --to USDC --amount 0.1
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## Security Model
|
|
205
|
-
|
|
206
|
-
### Double Encryption (Safe Inside a Safe)
|
|
207
|
-
1. **Layer 1**: Wallet keypair encrypted with AES-256-GCM + passphrase
|
|
208
|
-
2. **Layer 2**: Passphrase encrypted with machine-specific key
|
|
209
|
-
|
|
210
|
-
### Machine-Specific Key
|
|
211
|
-
Generated from:
|
|
212
|
-
- Hostname + Username + OS + Architecture + Home directory
|
|
213
|
-
- Wallet files are useless if stolen (only work on your machine)
|
|
214
|
-
|
|
215
|
-
### Memory Safety
|
|
216
|
-
- Keypairs loaded only when needed
|
|
217
|
-
- Cleared from memory immediately after use
|
|
218
|
-
- No plaintext secrets on disk
|
|
219
|
-
|
|
220
|
-
## Getting Started on Devnet (Testing)
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
# 1. Create wallet on devnet for testing
|
|
224
|
-
paw init my-first-agent --network devnet
|
|
225
|
-
|
|
226
|
-
# 2. Get address
|
|
227
|
-
ADDRESS=$(paw address my-first-agent | grep "Address:" | awk '{print $2}')
|
|
228
|
-
|
|
229
|
-
# 3. Get free devnet SOL
|
|
230
|
-
solana airdrop 2 $ADDRESS --url devnet
|
|
231
|
-
|
|
232
|
-
# 4. Check balance
|
|
233
|
-
paw balance my-first-agent
|
|
234
|
-
|
|
235
|
-
# 5. Test send
|
|
236
|
-
paw send my-first-agent --to <another-address> --amount 0.1
|
|
237
|
-
|
|
238
|
-
# 6. Check history
|
|
239
|
-
paw history my-first-agent
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## Use Cases for AI Agents
|
|
243
|
-
|
|
244
|
-
1. **High-Frequency Trading Bot**: Execute trades based on price signals
|
|
245
|
-
2. **Meme Coin Trading**: Snipe launches, scalp pumps, automated take-profit
|
|
246
|
-
3. **Portfolio Manager**: Rebalance assets automatically
|
|
247
|
-
4. **Payment Processor**: Handle recurring payments
|
|
248
|
-
5. **Arbitrage Bot**: Cross-DEX arbitrage opportunities
|
|
249
|
-
6. **Yield Optimizer**: Move funds to highest yield protocols
|
|
250
|
-
7. **Market Maker**: Provide liquidity and earn fees
|
|
251
|
-
8. **DCA Bot**: Dollar-cost averaging strategy
|
|
252
|
-
|
|
253
|
-
## Meme Trading Capabilities
|
|
254
|
-
|
|
255
|
-
PAW is built for fast, autonomous meme coin trading:
|
|
256
|
-
|
|
257
|
-
### Quick Meme Trading Commands
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
# Buy meme coin with custom slippage
|
|
261
|
-
paw swap bot --from SOL --to <MEME_MINT> --amount 0.5 --slippage 1000
|
|
262
|
-
|
|
263
|
-
# Sell meme coin fast with priority fee
|
|
264
|
-
paw swap bot --from <MEME_MINT> --to SOL --amount 1000000 --slippage 1000 --priority-fee 100000
|
|
265
|
-
|
|
266
|
-
# Trade popular meme coins by symbol
|
|
267
|
-
paw swap bot --from SOL --to BONK --amount 0.5 --slippage 500
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### Slippage Settings for Meme Coins
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
--slippage 50 # 0.5% - Stable tokens
|
|
274
|
-
--slippage 100 # 1% - Normal trading
|
|
275
|
-
--slippage 500 # 5% - Meme coins (volatile)
|
|
276
|
-
--slippage 1000 # 10% - High volatility / low liquidity
|
|
277
|
-
--slippage 5000 # 50% - New launches / extreme volatility
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### Priority Fees for Speed
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
--priority-fee 10000 # Normal speed
|
|
284
|
-
--priority-fee 50000 # Fast
|
|
285
|
-
--priority-fee 100000 # Very fast (meme launches)
|
|
286
|
-
--priority-fee 500000 # Ultra fast (competitive sniping)
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
### Example: Sniper Bot
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
#!/bin/bash
|
|
293
|
-
# Snipe new token launch
|
|
294
|
-
|
|
295
|
-
AGENT="sniper-bot"
|
|
296
|
-
TARGET="<NEW_MEME_MINT>"
|
|
297
|
-
|
|
298
|
-
# Fast execution with high priority
|
|
299
|
-
paw swap $AGENT \
|
|
300
|
-
--from SOL \
|
|
301
|
-
--to $TARGET \
|
|
302
|
-
--amount 0.5 \
|
|
303
|
-
--slippage 2000 \
|
|
304
|
-
--priority-fee 500000
|
|
305
|
-
|
|
306
|
-
# Verify purchase
|
|
307
|
-
paw tokens $AGENT | grep $TARGET
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### Example: Take Profit Bot
|
|
311
|
-
|
|
312
|
-
```bash
|
|
313
|
-
#!/bin/bash
|
|
314
|
-
# Sell when target hit
|
|
315
|
-
|
|
316
|
-
AGENT="profit-bot"
|
|
317
|
-
MEME="<MEME_MINT>"
|
|
318
|
-
|
|
319
|
-
# Sell 50% of holdings
|
|
320
|
-
paw swap $AGENT \
|
|
321
|
-
--from $MEME \
|
|
322
|
-
--to SOL \
|
|
323
|
-
--amount 500000 \
|
|
324
|
-
--slippage 1000 \
|
|
325
|
-
--priority-fee 100000
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Popular Meme Coins
|
|
329
|
-
|
|
330
|
-
```bash
|
|
331
|
-
BONK: DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
|
|
332
|
-
WIF: EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm
|
|
333
|
-
POPCAT: 7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr
|
|
334
|
-
|
|
335
|
-
# Use symbol or mint address
|
|
336
|
-
paw swap bot --from SOL --to BONK --amount 0.5
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Why PAW is Fast for Meme Trading
|
|
340
|
-
|
|
341
|
-
- **Helius RPC**: Premium endpoints for fastest execution
|
|
342
|
-
- **Jupiter DEX**: Aggregates ALL Solana DEXs for best prices
|
|
343
|
-
- **Auto Priority Fees**: Transactions land faster during congestion
|
|
344
|
-
- **<2 Second Swaps**: Fast enough to snipe launches and catch pumps
|
|
345
|
-
- **No Human Approval**: Fully autonomous execution
|
|
346
|
-
|
|
347
|
-
For detailed meme trading strategies, see: `docs/MEME_TRADING_GUIDE.md`
|
|
348
|
-
|
|
349
|
-
## Command Output Format
|
|
350
|
-
|
|
351
|
-
All commands output clean, parseable text:
|
|
352
|
-
|
|
353
|
-
```bash
|
|
354
|
-
# Balance output
|
|
355
|
-
š PAW - Balance
|
|
356
|
-
Agent ID: trading-bot-001
|
|
357
|
-
Address: HWd4qkpz5r7c9zSFSUGy2MkkvwuvFd3tqiMkCLiMyb4D
|
|
358
|
-
Network: devnet
|
|
359
|
-
|
|
360
|
-
š° Total Portfolio:
|
|
361
|
-
~1.649990 SOL
|
|
362
|
-
~138.68 USD
|
|
363
|
-
|
|
364
|
-
# Easy to parse with grep/awk for automation
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## Error Handling
|
|
368
|
-
|
|
369
|
-
PAW provides clear error messages:
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# Insufficient balance
|
|
373
|
-
ā Error: Insufficient balance. Required: 1.5 SOL, Available: 0.5 SOL
|
|
374
|
-
|
|
375
|
-
# Invalid address
|
|
376
|
-
ā Error: Invalid recipient address
|
|
377
|
-
|
|
378
|
-
# Network issues
|
|
379
|
-
ā Error: Failed to connect to Solana network
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
## Tips for AI Agents
|
|
383
|
-
|
|
384
|
-
1. **Always check balance before transactions**
|
|
385
|
-
2. **Use --network flag to override config when needed**
|
|
386
|
-
3. **Monitor transaction history to verify operations**
|
|
387
|
-
4. **Start on devnet for testing, move to mainnet when ready**
|
|
388
|
-
5. **Use tokens command to see all assets**
|
|
389
|
-
6. **Set network in config to avoid repeating --network flag**
|
|
390
|
-
|
|
391
|
-
## File Locations
|
|
392
|
-
|
|
393
|
-
```bash
|
|
394
|
-
# Wallet data
|
|
395
|
-
~/.paw/agents/<agent-id>/wallet.enc
|
|
396
|
-
~/.paw/agents/<agent-id>/passphrase.enc
|
|
397
|
-
~/.paw/agents/<agent-id>/config.json
|
|
398
|
-
|
|
399
|
-
# All encrypted except config.json
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
**Built for speed, security, and autonomy** š
|
|
405
|
-
|
|
406
|
-
For issues or questions: https://github.com/pocketagent/paw
|