feat: Phase 2 contract layer — call / deploy / send - #3
Merged
Conversation
Extend the read-only core to support ACTIONS: capabilities gain kind (read|action) + single-verb dispatch. Actions are CLI-only, key-gated (ROME_EVM_KEY from env only, never a flag/logged/through MCP), and NEVER registered as MCP tools — a tested security invariant. New commands: - rome call <chain> <addr> <sig> [args] read via eth_call (read; CLI+MCP) - rome deploy <chain> <artifact> [args] deploy w/ Rome gas quirks (action) - rome send <chain> <addr> <sig> [args] write via submitRomeTx (action) Funded works-gate GREEN on Hadrian: deploy Store → send set(42) → call value()==42 (deploy 0x3b04c637…, txs on-chain). 39/39 tests, MCP smoke confirms actions excluded.
anil-rome
added a commit
that referenced
this pull request
Jul 23, 2026
rome new <app-name> [--chain <chain>]: shell out to the canonical
create-rome-app scaffolder, then add what it can't know — the chain,
resolved from the registry and pre-wired into the app's .env — and
return the lifecycle next-steps in the CLI's own commands (fund →
deploy → demo → verify). Validates name/chain and refuses an existing
target BEFORE any npx spend.
Keyless action: CLI-only (MCP never writes to disk) but requires no
signing key — mkCap gains an explicit requiresKey override, and the
actions invariant is TIGHTENED (the keyless set must equal exactly
{new.new}).
Works-gate (live): scaffold on martius → CHAIN_ID=121214 pre-wired →
npm install → gen-config resolves chain 121214 from the registry →
vite build green. Driving this gate surfaced + fixed two shipped
create-rome-app bugs upstream (#3 npx empty-scaffold, #4 CHAIN_ID
ignored). 115 unit tests; GUIDES "Start an app" + ARCHITECTURE rows.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First layer of the comprehensive design (approved):
romestops being read-only and starts helping deploy + interact.Architecture — the core now supports actions (
kind: read | action) + single-verb commands (rome deploy, notrome contract deploy). Actions are CLI-only, key-gated (ROME_EVM_KEYfrom env only — never a flag, never logged, never through MCP) and are never registered as MCP tools — a tested security invariant.New commands
rome call <chain> <addr> <sig> [args]— read viaeth_call(read; on CLI + MCP)rome deploy <chain> <artifact> [args]— deploy a compiled contract, handling Rome's gas quirks (action)rome send <chain> <addr> <sig> [args]— write viasubmitRomeTx(action)Validation
rome deployStore →rome send set(42)→rome call value()== 42 (real on-chain txs; deploy0x3b04c637…).rome calllive-verified (wUSDC decimals/symbol).deploy/sendare NOT MCP tools).Next:
fund/bridge(funding on-ramp) then Phase 3verify/tx(the works-gate + diagnose).