diff --git a/README.md b/README.md index 080cf55..0bd0139 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,11 @@ whoami Show current agent profile summary wallet address Get agent wallet address wallet balance Get all token balances +wallet topup Get topup URL to add funds +wallet send-transaction Send a raw transaction + --to
Recipient address (required) + --value Transaction value (default: 0) + --data Transaction calldata (default: 0x) browse Search agents on the marketplace @@ -113,6 +118,9 @@ acp job pay 123 --accept true --content 'Looks good, please proceed' # Check wallet acp wallet balance +# Send a raw transaction +acp wallet send-transaction --to "0x1234..." --value "1000" --data "0x" + # Launch a token acp token launch MYAGENT "My agent token" diff --git a/bin/acp.ts b/bin/acp.ts index 6947566..9e3cef6 100755 --- a/bin/acp.ts +++ b/bin/acp.ts @@ -92,6 +92,10 @@ function buildHelp(): string { cmd("wallet address", "Get agent wallet address"), cmd("wallet balance", "Get all token balances"), cmd("wallet topup", "Get topup URL to add funds"), + cmd("wallet send-transaction", "Send a raw transaction"), + flag("--to
", "Recipient address (required)"), + flag("--value ", "Transaction value (default: 0)"), + flag("--data ", "Transaction calldata (default: 0x)"), "", section("Token"), cmd("token launch ", "Launch agent token"), @@ -227,6 +231,11 @@ function buildCommandHelp(command: string): string | undefined { "", cmd("address", "Get your wallet address (Base chain)"), cmd("balance", "Get all token balances in your wallet"), + cmd("topup", "Get topup URL to add funds"), + cmd("send-transaction", "Send a raw transaction"), + flag("--to
", "Recipient address (required)"), + flag("--value ", "Transaction value (default: 0)"), + flag("--data ", "Transaction calldata (default: 0x)"), "", ].join("\n"), @@ -596,6 +605,16 @@ async function main(): Promise { if (subcommand === "address") return wallet.address(); if (subcommand === "balance") return wallet.balance(); if (subcommand === "topup") return wallet.topup(); + if (subcommand === "send-transaction") { + const to = getFlagValue(rest, "--to"); + const value = getFlagValue(rest, "--value") ?? "0"; + const txData = getFlagValue(rest, "--data") ?? "0x"; + if (!to) { + console.error("Error: --to
is required"); + process.exit(1); + } + return wallet.sendTransaction(to, value, txData); + } console.log(buildCommandHelp("wallet")); return; } diff --git a/src/commands/wallet.ts b/src/commands/wallet.ts index 70c387c..04a79fd 100644 --- a/src/commands/wallet.ts +++ b/src/commands/wallet.ts @@ -1,7 +1,8 @@ // ============================================================================= -// acp wallet address — Get wallet address -// acp wallet balance — Get token balances -// acp wallet topup — Get topup URL +// acp wallet address — Get wallet address +// acp wallet balance — Get token balances +// acp wallet topup — Get topup URL +// acp wallet send-transaction — Send a raw transaction // ============================================================================= import { getPaymentUrl } from "../lib/api.js"; @@ -102,3 +103,22 @@ export async function topup(): Promise { output.fatal(`Failed to get topup URL: ${e instanceof Error ? e.message : String(e)}`); } } + +export async function sendTransaction(to: string, value: string, data: string): Promise { + try { + const res = await client.post("/acp/wallets/send-transaction", { to, value, data }); + + output.output(res.data, (res) => { + output.heading("Send Transaction"); + output.field("To", to); + output.field("Value", value); + output.field("Data", data); + if (res?.data?.txHash) { + output.field("Tx Hash", res.data.txHash); + } + output.log(""); + }); + } catch (e) { + output.fatal(`Failed to send transaction: ${e instanceof Error ? e.message : String(e)}`); + } +}