RFC: First-class on-chain program addresses in plugin registry entries #7513
Replies: 2 comments
-
|
Strong +1 for making on-chain program addresses first-class in the registry. For plugins that move value or make trust decisions, the registry entry should be sufficient for an operator to verify runtime intent before install, without reverse-reading package source or I would model this as an array rather than a single address, because most serious plugins will eventually have more than one program or deployment role: onchainPrograms: [{
chain: "solana",
network: "devnet" | "mainnet-beta",
programId: "...",
role: "escrow" | "reputation" | "identity" | "settlement",
upgradeAuthority: "..." | null,
expectedIdlHash: "sha256:...",
sourceCommitOrTag: "...",
verifiedAtSlot: 123456,
status: "active" | "legacy" | "deprecated",
supersededBy: "...",
failureMode: "deny-install" | "warn" | "allow-dev-only"
}]The key security property is not only display, but validation. The plugin manager could fail closed when a value-moving plugin declares a mainnet program whose IDL hash, source tag, network, or upgrade authority does not match the registry metadata. Local overrides can still exist for development, but they should be explicit, visible in diagnostics, and logged as an operator override. This also gives downstream agents a clean policy hook: character files can say "only use plugins with registry-verified escrow/reputation programs on this network" instead of embedding one-off address checks in agent logic. |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for raising this standalone, Matthew — this is the right place for it. The drift problem maps exactly to what we hit on the EVM/Base side when we redeployed On open question #2 (address typing): discriminated union over plain string, but for a different reason than formatting validation. The fields that compose a complete trust declaration differ by chain. On Solana you want On open question #4 (separate kind): defer to a second RFC. The One addition to @musaabhasan's |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Following up on a thread from elizaOS/discussions#7071 where @MrTalecky and I agreed this was worth raising standalone.
The problem
Plugins that interact with on-chain programs — escrow, trading, identity, reputation — are tied to specific deployed program addresses. Today the registry schema (
packages/app-core/src/registry/schema.ts) has no field for these. Operators discover them by reading docs, package source, or environment files distributed with the plugin.That's fine for a curated bundle. It's a real exposure for installable plugins where money moves:
vaultpactto2chF47Db…and we had to ripple the change through the SDK, dashboard, runbooks, threat model, and seven test files. Anyone who'd installed mid-flight against an old version would have been talking to a stale program.What we ship today as a workaround
Holdfast publishes a
release-manifest.jsonalongside each SDK release that pins the on-chain program IDs that version expects. The SDK and our dashboard both consume it at runtime to refuse mismatches. That works for us, but it's per-package convention — there's no way for the elizaOS surface to know about it, surface it to operators, or enforce it.Proposed addition to
commonFieldsFor Holdfast, our entry would carry:
Why this isn't just documentation
It changes the contract from "operators figure out which program this plugin talks to" into "the registry asserts which program this plugin version trusts". That makes:
addressis visible in the registry diff, not buried in source.Open questions
commonFields, or only on thepluginEntrySchemasubtype: "blockchain"branch?addressbe a string or a discriminated union per chain (Solana base58 vs EVM hex)?releaseManifestUrllive? Convention? Schema'd format? Out of scope?kind: "onchain-program"registry entry that plugins reference by id, so the same program can be authoritatively described once and referenced by multiple plugins (reputation reader + escrow writer pointing at the same vaultpact program, for example)?Happy to PR a concrete schema change once a direction lands. Filed separately from the original Holdfast registry submission so it can be evaluated on its own merits and benefit any financial / escrow plugin.
— Matthew @ Casemate Labs
Beta Was this translation helpful? Give feedback.
All reactions