The deployment half of rain.extrospection: the concrete Extrospect
contract, its generated deploy record (src/generated/candidate/Extrospect.sol
and the LibExtrospectDeploy alias lib), the per-function equivalence tests
that hold Extrospect to the libraries it forwards to, and the deploy script.
The library half — IExtrospectV1, IBeacon, IOwnable and the
LibExtrospect* libraries — lives in
rain.extrospection and
is imported here as the rain-extrospection Soldeer package. Consumers that
need only the interfaces or libraries depend on rain-extrospection; consumers
that need the deployed address, codehash or creation bytecode depend on
rain-extrospection-deploy.
This repo carries the
rain.deploy deploy standard,
generated rather than hand-written:
src/abstract/ExtrospectDeploySuites.soldeclares everything this repo deploys, ONCE: the rollingextrospectcandidate anchored totype(Extrospect).creationCode, and the released suites read from the generatedLibReleasedSuites— empty until the first release is cut.src/generated/candidate/Extrospect.solis the rolling snapshotscript/Build.solregenerates from current source: deterministic Zoltu address, codehash, creation bytecode, runtime bytecode and dependency list.src/lib/LibExtrospectDeploy.solaliases its pins under a stable import path.script/Deploy.solis the declaration plusRainDeployBroadcast, nothing else;script/Build.solis the declaration plusBuildScript.
ExtrospectDeploySnapshotTest inherits every no-network assertion from
RainDeployVerifySnapshot: the record derives from its own creation code, the
candidate is a snapshot of this repo's source, and every frozen
src/generated/<tag>/ record is declared. ExtrospectDeployChainTest inherits
RainDeployVerifyChain, which holds every RELEASED suite live on every
supported network — with no release cut it has no subject and forks nothing.
ExtrospectConstantsTest ties the generated candidate to the pinned V2
deployment (0x01A8116e07D63348c02818Af858769EaCdaF134A, deployed by the next
release; V1 remains live at 0x1BE878af679C1a0A6AC15108b0F4398de1f94506 and
recorded in src/generated/0_1_0/) byte for byte, and executes the recorded
creation bytecode through the Zoltu factory's own bytecode, etched offline. The
whole record is a pure function of the creation code, so none of that needs a
network.
Releases are manual sol-v* tags, never merges. Tagging runs
rainix-tag-release, which never broadcasts; its mechanics live in rainix.
The on-chain deploy is separate and human-dispatched, run BEFORE tagging: the
Manual sol artifacts workflow runs script/Deploy.sol for the extrospect
suite.
See rainlanguage/rain.extrospection#46 for the split rationale.