signAndSend()
Use agent.signAndSend() to sign and broadcast blockchain transactions from your agent's wallet. Supports both Ethereum (EVM) and Solana networks. The transaction is signed by the agent's session wallet, broadcast to the network, and returns a transaction hash for tracking. Include an optional message parameter to help with debugging and observability in the Circuit UI.
Signature
agent.signAndSend(
request: {
network: string;
message?: string;
request: object; // Structure varies based on EVM or Solana
}
): Promise<SignAndSendResponse>Parameters
request
object
Transaction configuration object
request.network
string
Network type: 'ethereum:{chainId}' | 'solana'
request.message?
string
Optional description for observability
request.request
object
Transaction details (see below)
Ethereum Transactions
When request.network is 'ethereum:{chainId}'
( request.request )
toAddress
0x${string}
Recipient address
data
0x${string}
Transaction calldata (use "0x" for simple transfers)
value
string
ETH amount in wei (use "0" for no ETH)
Solana Transactions
When request.network is 'solana'
( request.request )
hexTransaction
string
Serialized transaction in hex format
Returns
Promise<SignAndSendResponse>
type SignAndSendResponse = {
success: boolean;
data?: { // Only present on success
internalTransactionId: number;
txHash: string;
transactionUrl?: string;
};
error?: string;
errorMessage?: string;
errorDetails?: object;
}Examples
EVM (native ETH transfer)
const result = await agent.signAndSend({
network: "ethereum:1",
request: {
toAddress: "0x742d35cc6634C0532925a3b8D65e95f32B6b5582",
data: "0x",
value: "1000000000000000000" // 1 ETH in wei
},
message: "Sending 1 ETH"
});
if (result.success && result.data) {
await agent.log(`Sent! TX: ${result.data.txHash}`);
}EVM (contract interaction)
const result = await agent.signAndSend({
network: "ethereum:42161", // Arbitrum
request: {
toAddress: "0xTokenContract...",
data: "0xa9059cbb...", // encoded transfer() call
value: "0"
},
message: "Token transfer"
});
if (result.success && result.data) {
await agent.log(`Contract call successful: ${result.data.transactionUrl}`);
}Solana
const result = await agent.signAndSend({
network: "solana",
request: {
hexTransaction: "010001030a0b..." // serialized VersionedTransaction
},
message: "Solana swap"
});
if (result.success && result.data) {
await agent.log(`Solana TX: ${result.data.txHash}`);
}Common Errors
"Transaction failed"
Insufficient balance for value or gas
Check currentPositions before sending
"Invalid address"
Malformed toAddress
Validate address format (0x... for EVM)
"Invalid data"
Malformed calldata
Ensure data is valid hex (use "0x" for simple transfers)
"Network error"
RPC unavailable
Retry or check network status
Last updated