mirror of
https://github.com/luxfi/bank.git
synced 2026-10-30 17:02:07 +00:00
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]>
32 lines
1.9 KiB
Plaintext
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
|