Docs

How the pieces
fit together.

Everything the studio does happens in your browser or in your wallet, except optional AI drafting. These pages describe each piece precisely enough to check it.

The studio

The studio has three parts. The brief panel on the left keeps the conversation: what you asked for and what the drafter did. The editor on the right is a plain text field with highlighting; every line is yours to change. The console below compiles, reviews, outlines tests and deploys.

Hand edits always win. If you ask for a change after editing by hand, the studio warns you before a new draft would replace your edits. Projects save themselves to this browser a moment after you stop typing.

When the site has no AI key, the badge in the brief panel says AI not configured · rule-based and every draft comes from the templates below. With a key, briefs go to the configured model; “Explain the source” always runs locally.

Templates

All templates are single files with no imports, written for Solidity 0.8.24 and later. None reads msg.sender in its constructor; owners, recipients and buyers are constructor arguments, so they work through the press as well as directly.

  • ERC-20 token. Fixed supply to a recipient you name; optional burn and capped owner mint.
  • NFT collection. ERC-721 with a hard supply limit and owner-only minting.
  • ETH vault. Deposits, per-account balances and pull withdrawals, with an optional lock.
  • Token vesting. Releases an ERC-20 to one beneficiary on a linear schedule with a cliff.
  • Two-party escrow. Buyer funds, seller is paid on release, an arbiter settles disputes.
  • Payment splitter. Splits incoming ETH between fixed payees by fixed shares.

The rule-based drafter reads settings from the brief: token name, symbol, supply, burn, capped owner mint; NFT supply limit; vault lock in days. Change requests such as “remove the burn function” toggle only what they mention.

Compiler settings

Solidity 0.8.28 (0.8.28+commit.7893614a), the WebAssembly build from binaries.soliditylang.org. The browser checks SHA-256 72ef580a6ec59431… before running it. Defaults: EVM target paris, optimizer on with 200 runs, no metadata hash and no CBOR metadata appended, so the bytecode depends only on the source and settings. You can switch the target to shanghai or cancun.

Deploying

Deployment needs a clean compile of the exact text in the editor; any edit afterwards blocks it until you compile again. The form takes each constructor argument by type (addresses, whole numbers or “1.5 ether”, booleans, strings, hex bytes, and JSON lists for arrays). A checklist confirms you read the source and the findings, with one more line when there are high findings.

Direct deployment sends a contract-creation transaction from your wallet. Deployment with an imprint calls WerboPress.press instead. Either way the studio shows the expected address first and checks that code exists there after the block.

WerboPress reference

Address on Robinhood Chain: not deployed yet. No owner, no admin role, no fee, no pause and no upgrade path; it never keeps ETH.

  • press(bytes initCode, bytes32 salt, bytes32 sourceHash, string label, string compiler) payable → address
    Deploys initCode with CREATE2 for the caller and records the imprint. Any ETH sent goes to the new contract's constructor. label and compiler are at most 96 bytes each; sourceHash must be non-zero.
  • predictAddress(address deployer, bytes32 salt, bytes32 initCodeHash) view → address
    Where press would deploy for that caller, salt and creation code. The salt is bound to the caller, so nobody else can take your predicted address.
  • imprintOf(address) view → Imprint
    deployer, pressedAt, blockNumber, sourceHash, initCodeHash, runtimeHash. All zero for addresses the press did not deploy.
  • isPressed(address) / codeUnchanged(address) view → bool
    Whether the press deployed it, and whether its code still matches the recorded runtime hash.
  • countOf(address) · totalPressed() · deploymentsOf(address, start, count) · deployments(start, count)
    Counters and pages of addresses, oldest first.

Event: Pressed(deployed, deployer, sourceHash, initCodeHash, runtimeHash, salt, value, label, compiler). Errors: EmptyInitCode, MissingSourceHash, NoteTooLong, DeployFailed, NoRuntimeCode; a reverting constructor's own error is passed through unchanged.

The press cannot check the source hash; it records who declared it. Treat a matching hash as “the deployer claims this file”, and confirm by verifying the source on the explorer.

Verifying on the explorer

On the Robinhood Chain explorer, choose Solidity standard JSON input and use the same settings the studio used: compiler 0.8.28+commit.7893614a, your EVM target, optimizer runs, metadata.bytecodeHash: none and appendCBOR: false. Paste the constructor arguments the studio encoded. Contracts deployed through the press verify the same way; the explorer reads the creation code from the press call.

Network

Robinhood Chain mainnet, chain id 4663 (hex 0x1237), gas paid in ETH, explorer robinhoodchain.blockscout.com. Connecting a wallet adds the network if it is missing. Some wallets cannot add custom networks and are shown as unsupported in the dialog.

Running your own copy

The site runs with no environment variables at all. Optional settings: an RPC endpoint for the server and the browser, a WalletConnect project id for phone wallets, an AI provider key and model for drafting with an hourly ceiling on paid calls, and a key-value store so rate limits hold across server instances. The README in the source repository lists each one and what happens without it.

Questions not covered here are probably in the FAQ.