@saw-protocol/policy
v1.0.8
Published
Default Policy Engine implementation for the SAW Protocol
Readme
@saw-protocol/policy
The standard execution Policy Engine for the SAWP Protocol.
This module acts as the protocol's firewall. It implements IPolicyEngine and ensures agents never exceed financial constraints, communicate with untrusted programs, or violate delegated bounds before constructing blockchain transactions.
Installation
npm install @saw-protocol/policyExample Usage
import { CorePolicyEngine } from "@saw-protocol/policy";
import { PublicKey } from "@solana/web3.js";
import { TransactionIntent } from "@saw-protocol/core";
import { v4 as uuidv4 } from "uuid";
const mockStorage: IStorageProvider<any> = {
get: async (key: string) => null,
set: async (key: string, value: any) => {},
delete: async (key: string) => {},
};
const engine = new CorePolicyEngine(mockStorage);
const walletPubkey = new PublicKey("..."); // Target wallet address
// Add foundational safety boundaries
await engine.addRule(walletPubkey, {
type: "SpendLimit",
maxSOLPerTx: 0.1, // Never allow a transaction intent above 0.1 SOL
maxSOLPerDay: 1.0,
});
await engine.addRule(walletPubkey, {
type: "ProgramAllowList",
allowedProgramIds: [new PublicKey("JUP6LkbZbjS1jKKwapdH67yIeU1B...")], // Only Jupyter Swaps
});
// A malicious Agent tries to request a transfer of 5 SOL to an unknown program
const badIntent: TransactionIntent = {
id: uuidv4(),
agentId: "did:sol:someAgent",
walletAddress: walletPubkey,
action: {
type: "transfer",
estimatedValue: 5.0, // Instantly stopped by SpendLimit
params: {},
},
reasoning: "Attempting to drain funds",
signature: "...",
timestamp: Date.now(),
};
// Evaluate the structural intent. Does NOT communicate with the chain.
const evaluation = await engine.evaluate(badIntent, mockWalletObj, {
network: "devnet",
currentBalance: 10,
});
console.log(evaluation.allowed); // false
console.log(evaluation.reason); // "Policy Denied: Estimated value 5 exceeds per-tx limit of 0.1"