An audit is a photograph. Upgrades happen the next day.
Most tokens and vaults your agent touches can swap their code. Pin the version you accepted, and
GenLayer validators read every upgrade after it and rule on one question: did the new version gain a power over
holders? If it did, or if nobody can read it, the gate closes: safe(id, max_age).
1. Pin what you acceptedGive a chain and a proxy address. The contract records the running implementation and a hash of its whole verified source.
2. Every upgrade is readAnybody can run a check. The chain's Upgraded events name every version since the pin, so an upgrade to a trap and back still shows.
3. Code decides what was readNo upgrade means no model. A version nobody can read closes the gate. Only you, the pinner, can accept a tripped change.
Pin a contract
One wallet transaction. The pin is yours, and only you can accept a change on it.
Real proxies:
Look at a wire
Looking up needs no wallet. Anybody can run a check.
Try:
Every wire
Reading from chain...
For agents and contracts
True only while the wire is watching and was checked within the age you ask for, never more than 30 days.
# before adding to a position: checked within the last hour
ok = gl.contract.get_at(Address(TRIPWIRE)).view().safe(wire_id, "3600")