Files
zeekayandHanzo Dev 1778e53f00 the pin hashes what solc was fed, and names the upstream that was exercised
Settings belong in the preimage because source is not what deploys: turn
the optimizer off and every file stays byte-identical while the bytecode
changes. Hashing what solc recorded about its own inputs catches that, and
catches whatever moved them — a stray FOUNDRY_OPTIMIZER, a foundry.toml
edit, a toolchain default that shifted.

The protocol digest was stale: luxfi/liquid moved after it was written, so
deploy.sh refused, which is the guard doing its job. The new one is
written down having done what the file asks for it — the whole stack
deployed onto a local chain and the markets exercised against it: deposit,
borrow to the ceiling, the borrow past it refused on chain, repay,
withdraw, and every adversarial guard beside them.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-27 19:56:39 -07:00

32 lines
1.9 KiB
Plaintext

# The upstream this deployment was driven against and verified on. One line per
# step: the name of its foundry profile, then a hash over what solc was fed —
# every .sol file in that step's import closure by content, and the settings it
# compiled them under.
#
# lib/standard and lib/liquid are symlinks to checkouts. A tag would pin the
# checkout and not the symlink, and a working tree has no tag at all, so what
# gets recorded here is what actually determines the bytecode. deploy.sh
# recomputes it and stops before broadcasting anything if the two disagree.
#
# Source alone was the whole preimage once, and it passed a build that was
# nothing like the pinned one: FOUNDRY_OPTIMIZER=false leaves every file
# byte-identical, grows the tokens bytecode 1.85x, and the pin still read green.
# The preimage is now solc's own record of what it was handed — compiler version,
# the whole settings block, source hashes — dropping only the derived half of the
# metadata, since abi and docs follow from sources that are already hashed.
# Excluding that one key beats naming the keys to keep: a setting solc adds later
# is covered the day it lands instead of silently missing.
#
# compilationTarget and libraries read like noise and are not. compilationTarget
# names the file and contract compiled, which deploy.sh fixes by argument, so it
# cannot churn — and compiling a different contract out of the same closure is a
# different deployment. libraries stays empty until a library is linked, and a
# linked address is bytecode.
#
# Moving a line means the deployed contracts change. Exercise the markets against
# the new upstream — deposit, borrow, repay, withdraw — before writing it down.
tokens ff8b12d034fee759ca79d14c4090ed042c7ab40a9714ec1526a8b4db28e80bc9
protocol 8fb9f9be0ec7dc2f7a4f5970a0f09479b73c8165e1268237bce794fb6e05881e
grants 52d0c855468e2d7779d850fea7f4af2f3bca908748d6c4916005d2aade38994a