Add tenderly-testnet skill#259
Conversation
|
@tcxcx is attempting to deploy a commit to the Vercel Team on Vercel. A member of the Team first needs to authorize it. |
| @@ -0,0 +1,94 @@ | |||
| #!/bin/bash | |||
Sets up a Tenderly Virtual TestNet (testnet-only, refuses mainnet), deploys
contracts to it or to a real public testnet Tenderly indexes, and ends with
every contract verified + named in the dashboard's Contracts tab — not the
Wallets tab, which is where the obvious `POST /wallet` endpoint silently
lands them.
Captures lessons that aren't in Tenderly's published docs:
- The /wallet REST endpoint mis-classifies contracts as wallets. The
Foundry verifier path is the only one that surfaces a contract under
the Contracts tab with source-decoded traces.
- Tenderly's verifier rejects forge --guess-constructor-args ("Action not
supported") — encode args manually with cast abi-encode.
- Re-verifying is idempotent (returns Pass - Verified).
- Free-plan caps to plan around: 20 monitored addresses, 2 vnets, max
block height per vnet, TUs/s rate limit (mitigate with forge --slow).
- The rename / tag / bulk-delete REST endpoints needed to manage a
project (none appear in the official API reference).
Ships two reusable bash helpers:
- scripts/tenderly-verify-one.sh
- scripts/tenderly-verify-many.sh
Both resolve manifest paths to absolute before any cd to avoid the
silent-broken-read bug that bit me when I first wrote them with relative
paths.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4c679f7 to
14979b9
Compare
|
Fixed in 14979b9 — added Working on the verified-signature side next (need to register the SSH key as a GitHub signing key first). |
…-slot patterns
Bumps version to 1.1.0. Adds five new sections to SKILL.md covering live-
chain test patterns that came out of an extended Tenderly dogfood session:
Step 10 — Simulate API for integration tests
Personas pattern (whale/mid/small EOAs with state_objects-overridden
ERC-20 balances + allowances). simulate-bundle for sequences where
state needs to propagate (ERC-4626 totalSupply, lending bookkeeping).
Pyth-fresh bundle: fetch Hermes VAA at runtime + updatePriceFeeds to
flip OracleStale reverts to passes on testnet feeds.
Step 11 — Storage layout debugging
forge inspect ... storage-layout is the only authoritative source. OZ
v5's transient-storage ReentrancyGuard frees slot 0 for the child's
first state variable, breaking the "ReentrancyGuard owns slot 0"
assumption. cast storage verification pattern.
Step 12 — Mock contracts via setCode
MockMTStub pattern for stubbing CCTP V2 MessageTransmitter (or any
external dependency): compile a tiny Solidity stub, extract
deployedBytecode, use as state_objects.<addr>.code with packed storage
(address low 20B + uint96 high 12B in slot 0).
Step 13 — Universal Router + Permit2 sim patterns
Permit2.allowance storage derivation for the triple-nested mapping at
slot 1 (allowance owner→token→spender PackedAllowance). Pack helper:
amount uint160 | expiration uint48 | nonce uint48 in one 32-byte slot.
Step 14 — Forks deprecated → primed vnet workflow
POST /fork returns 410 Gone since mid-2025 ("Forks are deprecated.
Please use Virtual Testnets"). Migration: vnet + admin RPC priming
(tenderly_setBalance, tenderly_setErc20Balance) + sim against vnet's
Public RPC instead of /simulate.
Also updates:
- Undocumented endpoints table with /simulate, /simulate-bundle, and the
410-Gone /fork.
- README intro to cover the live-state-sim use case + reference the
example protocol it was extracted from (CCTP V2 cross-chain stack
with Uniswap v4 hook + Morpho Blue hub).
- LICENSE, frontmatter version bump 1.0.0 → 1.1.0.
All script files unchanged.
|
Updated to v1.1.0 with five new sections covering live-chain integration
Plus an updated Re-zipped. All script files unchanged. |
Summary
Adds a new
tenderly-testnetskill that sets up a Tenderly Virtual TestNet (testnet-only, refuses mainnet) and ends with every deployed contract properly verified + named in the Tenderly dashboard's Contracts tab — not the Wallets tab, which is where the obvious-lookingPOST /walletendpoint silently lands them.The skill captures lessons that aren't in Tenderly's published docs:
POST /walletmis-classifies contract addresses asaccount_type=wallet— they show up under Wallets, source isn't attached, traces stay opaque.forge verify-contract --verifier custom --verifier-url <tenderly-etherscan-compat>— uploads source, setsaccount_type=contract, and unlocks decoded traces in the dashboard.forge --guess-constructor-args("Action not supported"). Args must be encoded manually withcast abi-encode.Pass - Verifiedagain, no special handling needed.forge --slowto spread bursts).Layout
Both scripts resolve their manifest argument to an absolute path before any internal
cd— guards against the silent-broken-read bug I hit when first writing them with relative paths.Test plan
CLAUDE.md(name + description + metadata)#!/bin/bash+set -e🤖 Generated with Claude Code