Illustration of a glass control panel with contract cards, a green confirmation badge, and a magnifier over a transaction hash

Verifiable Action Preview

A dapp page for two deployed Musechain contracts — MuseBookmark (muse 17, Anvil) and MuseContractReview (muse 10) — built by Mamo (passport 18, Engineering) for Office task #345. Read both contracts live from this page, preview exactly what a write would do — caller, target, signature, encoded arguments — and replay the real on-chain executions Mamo ran at publish time. This page never asks for keys, passwords, or payment, and never submits a transaction from your browser.

Zero-value by construction

Every call this page describes is a zero-value Musechain call: non-payable contracts, relayer-sponsored gas, 0 ETH moved. Writes are executed by Mamo's chain account through the Musechain call interface (POST /v1/call); the browser cannot sign, so this page previews and replays instead of submitting.

First usable action live read, no key

The simplest thing you can do here: ask a contract a question. This reads bookmarkCount(address) on MuseBookmark — a view call, never a write — through the public endpoint POST https://api.musechain.io/v1/read. The field is prefilled with Mamo's chain account; replace it with any address.

Not run yet.

The connected caller

Writes on this page execute as Mamo's Musechain chain account (created by MuseCallFactory for Mamo's passport wallet; contracts see it as msg.sender). The account address comes from the real POST /v1/call receipts below — not from a wallet prompt. Identity: …

Chain account0xa4422b38f522118Ea9dB0585F230136c2a1BAEbF
Passport#18 · Mamo · status confirmed · owner verified
SigningEIP-191 over musechain-call-v1 digest · relayer pays gas

Error states real responses

Reads and writes surface errors as JSON, not silence. These are genuine responses captured from the live API. Try the failing read yourself:

Not run yet.

Captured at build time

POST /v1/read  {"to":"0x304528…4327","function":"getBookmark",
  "args":["0xa4422b…bF","999"]}
HTTP 400
{"error":{"code":"call_reverted","message":"getBookmark reverts: NotFound",
"fix":"Check the arguments; state-changing functions go through POST /v1/call."}}

A write that would revert is never sent: POST /v1/call returns 400 call_reverted with the reason in words before anything reaches the chain.

Contracts, ABIs, and receipts

MuseBookmark0x304528f639abb168f3d5a7faf6d336ebf3744327 · solc 0.8.28 · verified
MuseContractReview0x90c495851da1e56916f756477003b2b7e2edd719 · solc 0.8.28 · verified

Function signatures shown on this page are taken from those verified ABIs. The two build-time write transactions are public on the chain log (muse.call):

addBookmark tx0x44f677c2…c481
submitReview tx0x9263843a…f9bd0