Skip to content
KYZEN DOCUMENTATIONLaunch app

DocsGuides

Verify a memo

Check that a Scheduler memo is the one the registry recorded.

#You need

  • The rotation to check, or the newest one
  • A terminal with curl, xxd and Foundry's cast, or Node.js with viem
  • No wallet and no ETH: every step only reads

What a memo holds and how its bytes are fixed: Memos and verification.

#Steps

  1. 01
    Open the latest memo
    The Scheduler page shows the newest memo under The latest memo, once its hash matches the registry. Its Memo hash row links to the memo’s JSON, and its copy button copies the full hash. The page counts rotations from 1 and the registry from 0: Rotation 1 is rotation(0).
  2. 02
    Read the registry

    Open the weight registry, 0x9960eb·227d09, on Blockscout. In its Contract tab, under Read/Write contract, latest() gives the newest rotation and rotation(n) any other; rotationCount() gives how many exist. Note memoHash and memoURI. Before the first rotation, latest() reverts with NoRotation.

    Read a rotation
    cast call 0x9960eb28D2fb78A901E310dd2aB99Ba4ea227d09 "rotationCount()(uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com
    cast call 0x9960eb28D2fb78A901E310dd2aB99Ba4ea227d09 "latest()((uint16[5],bytes32,string,uint64,uint64))" --rpc-url https://rpc.mainnet.chain.robinhood.com
    cast call 0x9960eb28D2fb78A901E310dd2aB99Ba4ea227d09 "rotation(uint256)((uint16[5],bytes32,string,uint64,uint64))" <n> --rpc-url https://rpc.mainnet.chain.robinhood.com
  3. 03
    Download the exact bytes
    Save the file at memoURI exactly as served, with the first command below. Any change, even a space or the final newline, changes the hash.
  4. 04
    Hash the bytes

    Hash the file’s bytes with keccak-256.

    Hash a memo
    curl -s <memoURI> -o memo.json
    cast keccak "0x$(xxd -p memo.json | tr -d '\n')"
  5. 05
    Compare
    The result equals memoHash and the hash on the Scheduler page. A memo whose hash differs is not the memo the registry recorded.

The testnet dry run shows the whole check: rotation 0 on the testnet registry, a memo of test readings, and the same hash on both sides.

Testnet rotation 0
cast call 0xd0f9B82095186Ec1E8568ECB8B7C85C8D77534A2 "rotation(uint256)((uint16[5],bytes32,string,uint64,uint64))" 0 --rpc-url https://rpc.testnet.chain.robinhood.com
# ([1548, 2903, 2065, 1548, 1936], 0xfaf30ce57c54e5dfe4fd3f58df73cfe200ab87d1adb40ddf114c5e0095b2e268, "https://docs.kyzen.network/memos/testnet/0.json", 1793629800 [1.793e9], 1791024111 [1.791e9])

curl -s https://docs.kyzen.network/memos/testnet/0.json -o memo.json
cast keccak "0x$(xxd -p memo.json | tr -d '\n')"
# 0xfaf30ce57c54e5dfe4fd3f58df73cfe200ab87d1adb40ddf114c5e0095b2e268
Esc
  • OverviewGet started
  • Quick startGet started
  • Wallets and networkGet started
  • Where the app opensGet started
  • GuidesGuides
  • Buy $KYZNGuides