Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

upgrade_registry state

Back to all declarations

ContractEntry

type

ContractEntry represents a registered contract and its upgrade status. An entry's Address is ALWAYS the address that called Register — a contract can only register itself. That call is the proof of control: nobody can claim an address they don't command, so a Deprecate redirect on an entry always originates from whoever genuinely controlled the contract. Entries are permanent by design: migration history is what consumers rely on, so it must not be erasable (and a delete would reopen re-registration squatting). Ownership is two-step (re-audit 2026-09-02): Register/Transfer only NOMINATE an owner; the nominee must AcceptOwnership. Until then the entry is owned by the contract itself, so nobody's address can be attached as "owner" without their consent.

Value

upgrade_registry.ContractEntry

MaxNameLen

untyped bigint

Value

(64 <untyped> bigint)

MaxChainLen

untyped bigint

// GetMigrationChain traversal/output bound (marked when hit)

Value

(50 <untyped> bigint)

MaxRenderEntries

untyped bigint

Value

(100 <untyped> bigint)

RenderLatestHops

untyped bigint

Value

(10 <untyped> bigint)

entries

map[.uverse.address]*upgrade_registry.ContractEntry
Open
OID
0f05f6…10ff:22
entries details

Inspect map

entryAddrs

[].uverse.address (len=2)

// insertion-ordered for deterministic Render

Open
OID
0f05f6…10ff:31
entryAddrs details (len=2)

+2 more Inspect slice

ownerContracts

map[.uverse.address][].uverse.address
Open
OID
0f05f6…10ff:24
ownerContracts details

Inspect map

rejectStraySend

func()

rejectStraySend aborts when coins are attached to a call (audit Y2): this realm handles no funds and holds no banker, so an attached send would strand on the realm address forever. Aborting reverts the transfer back to the sender. Fails open for realm-routed calls, whose attached send lands on the intermediary realm, never here.

Open
OID
0f05f6…10ff:8
rejectStraySend details

Inspect func

isValidName

func(name string) bool

isValidName restricts names to lowercase alphanumeric with underscores. Names appear in rendered markdown and query output, so no delimiter or markdown character may enter one.

Open
OID
0f05f6…10ff:9
isValidName details

Inspect func

ownerIndexRemove

func(owner .uverse.address, contractAddr .uverse.address)
Open
OID
0f05f6…10ff:10
ownerIndexRemove details

Inspect func

Register

func(name string, owner .uverse.address) string

Register adds the CALLING contract to the registry — the entry's address is the caller's own address, which is the proof of control. owner NOMINATES a manager (team EOA or governance realm); it holds no power until it calls AcceptOwnership (nobody can be made an owner without consent — re-audit). Pass "" to manage from the contract itself — but note (audit Y4): entries are permanent, so an entry managed by a contract that has no code path for calling this registry again is FROZEN as active forever: never deprecatable, never transferable. Realms registering from init() should nominate an EOA or governance manager instead.

Open
OID
0f05f6…10ff:11
Register details

Inspect func

AcceptOwnership

func(contractAddr .uverse.address) string

AcceptOwnership completes a nominated ownership: only the pending owner can accept, and only acceptance moves the entry (and the ownerContracts index) to them.

Open
OID
0f05f6…10ff:12
AcceptOwnership details

Inspect func

TransferOwnership

func(contractAddr .uverse.address, newOwner .uverse.address) string

TransferOwnership NOMINATES a new owner for a registry entry; the nominee must AcceptOwnership to take control (two-step — re-audit). Passing "" clears a pending nomination.

Open
OID
0f05f6…10ff:13
TransferOwnership details

Inspect func

Deprecate

func(contractAddr .uverse.address, successorAddr .uverse.address) string

Deprecate marks a contract as deprecated and points to its successor. Only the entry's owner can deprecate. The successor must itself be a REGISTERED entry — registration is self-proving, so a successor can never be a dangling pointer or an address squatted by a third party — and the successor entry must be OWNED BY THE CALLER (re-audit: without consent, an attacker could chain their entry INTO a legitimate contract, forging "official predecessor" provenance). Consent is checked AT CALL TIME: transferring the successor entry away later does not unlink an existing chain — the attestation is that both ends shared an owner when the deprecation was recorded.

Open
OID
0f05f6…10ff:14
Deprecate details

Inspect func

GetLatest

func(contractAddr .uverse.address) .uverse.address
Open
OID
0f05f6…10ff:15
GetLatest details

Inspect func

GetMigrationChain

func(contractAddr .uverse.address) string

GetMigrationChain returns the full upgrade path starting from the given address, at most MaxChainLen hops. A chain longer than the bound is explicitly marked as truncated (re-audit: silent truncation presented a mid-chain node as the endpoint).

Open
OID
0f05f6…10ff:16
GetMigrationChain details

Inspect func

GetInfo

func(contractAddr .uverse.address) string

GetInfo returns a one-line summary for a contract.

Open
OID
0f05f6…10ff:17
GetInfo details

Inspect func

GetOwnerContracts

func(owner .uverse.address) string

GetOwnerContracts returns all contract addresses whose ACCEPTED owner is the given address (nominations don't count until accepted).

Open
OID
0f05f6…10ff:18
GetOwnerContracts details

Inspect func

renderLatest

func(contractAddr .uverse.address) (.uverse.address, bool)
Open
OID
0f05f6…10ff:19
renderLatest details

Inspect func

Render

func(path string) string

Render returns a markdown overview of the most recent entries. Never panics.

Open
OID
0f05f6…10ff:20
Render details

Inspect func

mustGet

func(addr .uverse.address) *upgrade_registry.ContractEntry
Open
OID
0f05f6…10ff:21
mustGet details

Inspect func
ContractEntry : type =upgrade_registry.ContractEntry
MaxNameLen : untyped bigint =(64 <untyped> bigint)
MaxChainLen : untyped bigint =(50 <untyped> bigint)
MaxRenderEntries : untyped bigint =(100 <untyped> bigint)
RenderLatestHops : untyped bigint =(10 <untyped> bigint)
entries : map[.uverse.address]*upgrade_registry.ContractEntry Inspect
entryAddrs : [].uverse.address (len=2) Inspect
ownerContracts : map[.uverse.address][].uverse.address Inspect
init.8 : func() Inspect
rejectStraySend : func() Inspect
isValidName : func(name string) bool Inspect
ownerIndexRemove : func(owner .uverse.address, contractAddr .uverse.address) Inspect
Register : func(name string, owner .uverse.address) string Inspect
AcceptOwnership : func(contractAddr .uverse.address) string Inspect
TransferOwnership : func(contractAddr .uverse.address, newOwner .uverse.address) string Inspect
Deprecate : func(contractAddr .uverse.address, successorAddr .uverse.address) string Inspect
GetLatest : func(contractAddr .uverse.address) .uverse.address Inspect
GetMigrationChain : func(contractAddr .uverse.address) string Inspect
GetInfo : func(contractAddr .uverse.address) string Inspect
GetOwnerContracts : func(owner .uverse.address) string Inspect
renderLatest : func(contractAddr .uverse.address) (.uverse.address, bool) Inspect
Render : func(path string) string Inspect
mustGet : func(addr .uverse.address) *upgrade_registry.ContractEntry Inspect