Publishing Source
The Anchor Program Registry at apr.dev hosts a catalog of verified programs on Solana both written with and without Anchor. It is recommended that authors of smart contracts publish their source to promote best practices for security and transparency.
The Anchor Program Registry is currently in alpha testing. For access to publishing please ask on Discord.
Getting Started
The process for publishing is mostly identical to crates.io
.
- Signup for an account here.
- Navigate to your Profile on the top navbar.
- Click "Generate New Access Token".
- Run
anchor login <token>
at the command line.
And you're ready to interact with the registry.
Configuring a Build
Whether your program is written in Anchor or not, all source being published must
have an Anchor.toml
to define the build.
An example Anchor.toml
config looks as follows,
[toolchain]
anchor_version = "0.30.1"
solana_version = "1.18.17"
[workspace]
members = ["programs/multisig"]
[provider]
cluster = "mainnet"
wallet = "~/.config/solana/id.json"
[programs.mainnet]
multisig = "A9HAbnCwoD6f2NkZobKFf6buJoN9gUVVvX5PoUnDHS6u"
[programs.localnet]
multisig = "A9HAbnCwoD6f2NkZobKFf6buJoN9gUVVvX5PoUnDHS6u"
Here there are four sections.
[toolchain]
(optional) - sets the Anchor and Solana version to use. By default, the builder will use the current versions.[workspace]
(optional) - sets the paths--relative to theAnchor.toml
-- to all programs in the local workspace, i.e., the path to theCargo.toml
manifest associated with each program that can be compiled by theanchor
CLI. For programs using the standard Anchor workflow, this can be omitted. For programs not written in Anchor but still want to publish, this should be added.[provider]
- configures the wallet and cluster settings. Here,mainnet
is used because the registry only supportsmainnet
binary verification at the moment.[programs.mainnet]
- configures each program in the workspace, providing theaddress
of the program to verify.
When defining program in [programs.mainnet]
, make sure the name provided
matches the lib name for your program, which is defined
by your program's Cargo.toml
.
Examples
Anchor Program
An example of a toml file for an Anchor program can be found here.
Non Anchor Program
An example of a toml file for a non-anchor program can be found here.
Publishing
To publish to the Anchor Program Registry, change directories to the Anchor.toml
defined root and run
anchor publish <program-name>
where <program-name>
is as defined in [programs.mainnet]
, i.e., multisig
in the example above.