# Newton CLI
The Newton CLI (`newton-cli`) is a command-line interface for interacting with the Newton Policy Protocol AVS. It provides tools for deploying policies, managing policy data, configuring policy clients, and submitting evaluation requests.
## Overview
The Newton CLI enables developers and operators to:
- **Generate CIDs** for policy files and upload them to IPFS via Pinata
- **Deploy and simulate** policy data contracts
- **Deploy and simulate** policy contracts
- **Configure policy clients** with parameters and expiration settings
- **Submit evaluation requests** to the prover AVS
## Installation
Build the CLI from source:
```bash
cargo build --bin newton-cli --release
```
The binary will be available at `target/release/newton-cli`.
## Configuration
Most commands support configuration via environment variables or command-line arguments. You can create a `.env` file in your working directory with common settings:
```bash
CHAIN_ID=11155111
PRIVATE_KEY="your_private_key"
RPC_URL="https://eth-sepolia.g.alchemy.com/v2/apiKey"
PINATA_JWT="your_pinata_jwt"
PINATA_GATEWAY="your_pinata_gateway"
```
Global flags that can be used with any command:
- `--chain-id`: The chain ID to use (can also be set via `CHAIN_ID` env var)
- `--log-format`: Log format (full, compact, pretty, json, or minimal)
## Command Reference
The commands are organized by workflow, from policy creation to task submission.
---
## Policy Files
Commands for managing policy files and generating content identifiers (CIDs) for IPFS storage.
### generate-cids
Generates CIDs for policy files and uploads them to IPFS via Pinata.
```bash
newton-cli --chain-id 11155111 policy-files generate-cids \
--directory policy-files \
--output policy-files/policy_cids.json \
--pinata-jwt "your pinata jwt" \
--pinata-gateway "your pinata gatway" \
--entrypoint "max_gas_price.allow"
```
**Using environment variables:**
Create a `.env` file:
```bash
CHAIN_ID=11155111
PINATA_JWT="your pinata jwt"
PINATA_GATEWAY="your pinata gatway"
```
Then run:
```bash
newton-cli policy-files generate-cids \
--directory policy-files \
--output policy-files/policy_cids.json \
--entrypoint "max_gas_price.allow"
```
---
## Policy Data
Commands for deploying and testing policy data contracts that store policy information on-chain.
### deploy
Deploys a policy data contract with the specified policy CIDs.
```bash
newton-cli --chain-id 11155111 policy-data deploy \
--private-key "development_pk" \
--rpc-url "https://eth-sepolia.g.alchemy.com/v2/apiKey" \
--policy-cids policy-files/policy_cids.json
```
**Using environment variables:**
Create a `.env` file:
```bash
CHAIN_ID=11155111
PRIVATE_KEY="development_pk"
RPC_URL="https://eth-sepolia.g.alchemy.com/v2/apiKey"
```
Then run:
```bash
newton-cli policy-data deploy --policy-cids policy-files/policy_cids.json
```
### simulate
Simulates policy data execution locally without deploying to the blockchain.
```bash
newton-cli --chain-id 11155111 policy-data simulate \
--wasm-file policy-files/policy.wasm \
--input-json "{}"
```
---
## Policy
Commands for deploying and testing policy contracts that define authorization rules.
### deploy
Deploys a policy contract with the specified policy CIDs and policy data address.
```bash
newton-cli --chain-id 11155111 policy deploy \
--private-key "development_pk" \
--rpc-url "https://eth-sepolia.g.alchemy.com/v2/apiKey" \
--policy-cids policy-files/policy_cids.json \
--policy-data-address "0xdB9578b6c719122ECd30667D84D1fb483c789BC8"
```
**Using environment variables:**
Create a `.env` file:
```bash
CHAIN_ID=11155111
PRIVATE_KEY="development_pk"
RPC_URL="https://eth-sepolia.g.alchemy.com/v2/apiKey"
```
Then run:
```bash
newton-cli policy deploy \
--policy-cids policy-files/policy_cids.json \
--policy-data-address "0xab23A45365F0BF660887B54b42787fA5519eb574"
```
### simulate
Simulates policy evaluation locally without deploying to the blockchain. Useful for testing policies before deployment.
```bash
newton-cli --chain-id 11155111 policy simulate \
--wasm-file policy-files/policy.wasm \
--rego-file policy-files/policy.rego \
--intent-json policy-files/intent.json \
--entrypoint "max_gas_price.allow" \
--wasm-args policy-files/wasm_args.json \
--policy-params-data policy-files/policy_params_data.json
```
**Notes:**
- The "data." prefix is automatically added to the entrypoint if not present. You can specify either "max_gas_price.allow" or "data.max_gas_price.allow".
- The `--wasm-args` argument is optional. If not provided, an empty JSON object `{}` will be used as input to the WASM execution.
- The `--policy-params-data` argument is optional. If not provided, an empty JSON object `{}` will be used for the params field in the policy evaluation.
---
## Policy Client
Commands for configuring policy clients with runtime parameters.
### set-policy-params
Sets policy parameters for a policy client contract, including expiration settings.
```bash
newton-cli --chain-id 11155111 policy-client set-policy-params \
--policy-client "0x..." \
--policy-params policy-files/policy_params_data.json \
--expire-after 1000 \
--private-key "development_pk" \
--rpc-url "https://eth-sepolia.g.alchemy.com/v2/apiKey"
```
**Using environment variables:**
Create a `.env` file:
```bash
CHAIN_ID=11155111
PRIVATE_KEY="development_pk"
RPC_URL="https://eth-sepolia.g.alchemy.com/v2/apiKey"
```
Then run:
```bash
newton-cli policy-client set-policy-params \
--policy-client "0x058b50701c3Bb70B0F7cb4D583f005212679c903" \
--policy-params policy-files/policy_params_data.json \
--expire-after 1000
```
---
## Task
Commands for submitting and managing policy evaluation requests.
### submit-evaluation-request
Submits a task for policy evaluation to the prover AVS. The command normalizes the intent, signs the task, and submits it.
```bash
newton-cli --chain-id 11155111 task submit-evaluation-request \
--task-json path/to/task.json \
--private-key "development_pk"
```
**Using environment variables:**
Create a `.env` file:
```bash
CHAIN_ID=11155111
PRIVATE_KEY="development_pk"
DEPLOYMENT_ENV=stagef # .env only, not exposed as a cli parameter
```
Then run:
```bash
newton-cli task submit-evaluation-request --task-json task.json
```
**Notes:**
- The `DEPLOYMENT_ENV` environment variable defaults to "prod" if not set. Valid values are "stagef" or "prod".
- The command normalizes the intent (converts value/chainId to hex), signs the task, and submits it to the prover AVS.
- The task JSON file should contain fields: `policyClient`, `intent`, `quorumNumber` (optional), `quorumThresholdPercentage` (optional), `wasmArgs` (optional), and `timeout`.