Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 20 additions & 76 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,99 +5,43 @@
<a href="https://www.npmjs.com/package/@solana-program/program-metadata"><img src="https://img.shields.io/npm/v/%40solana-program%2Fprogram-metadata?logo=npm&color=377CC0" /></a>
<a href="https://crates.io/crates/spl-program-metadata-client"><img src="https://img.shields.io/crates/v/spl-program-metadata-client?logo=rust" /></a>

This template should help get you started developing Solana programs. Let's walk through this generated program repository and see what's included.
Attach custom data to any program.

## Project setup
## Overview

The first thing you'll want to do is install NPM dependencies which will allow you to access all the scripts and tools provided by this template.
The Program Metadata provides the ability to attach metadata information to any program. The information is represented by a PDA account with a pre-defined derivation, e.g., it can be used to add the IDL of a program, with a PDA derived using the `"idl"` string.

```sh
pnpm install
```
There are two types of metadata accounts:
* canonical: these are metadata accounts created by the program upgrade authority. They are derived from `[program key, seed]`.
* non-canonical (a.k.a. *third-party*): these are metadata account created by any authority. They are derived from `[program key, authority key, seed]`.

## Managing programs
While there can only be a single canonical metadata account for a pair *(program, seed)*, there can be any number of non-canonical metadata accounts. The rationale is to allow anyone to add additional metadata to any program, but also provide a mechanism to differentiate metadata information added by the program upgrade authority.

You'll notice a `program` folder in the root of this repository. This is where your generated Solana program is located.

Whilst only one program gets generated, note that you can have as many programs as you like in this repository.
Whenever you add a new program folder to this repository, remember to add it to the `members` array of your root `Cargo.toml` file.
That way, your programs will be recognized by the following scripts that allow you to build, test, format and lint your programs respectively.
## Building

To build the program locally, first install the required packages using:
```sh
pnpm programs:build
pnpm programs:test
pnpm programs:format
pnpm programs:lint
```

## Generating IDLs

You may use the following command to generate the IDLs for your programs.

```sh
pnpm generate:idls
```

Depending on your program's framework, this will either use Shank or Anchor to generate the IDLs.
Note that, to ensure IDLs are generated using the correct framework version, the specific version used by the program will be downloaded and used locally.

## Generating clients

Once your programs' IDLs have been generated, you can generate clients for them using the following command.

```sh
pnpm generate:clients
pnpm install
```

Alternatively, you can use the `generate` script to generate both the IDLs and the clients at once.

and then run:
```sh
pnpm generate
pnpm programs:build
```

## Managing clients

The following clients are available for your programs. You may use the following links to learn more about each client.

- [JS client](./clients/js)
- [Rust client](./clients/rust)

## Starting and stopping the local validator
## Testing

The following script is available to start your local validator.
The repository includes two types of tests: program tests and JS client tests.

To run the program tests:
```sh
pnpm validator:start
pnpm programs:test
```

By default, if a local validator is already running, the script will be skipped. You may use the `validator:restart` script instead to force the validator to restart.

To run the JS tests:
```sh
pnpm validator:restart
pnpm clients:js:test
```

Finally, you may stop the local validator using the following command.

```sh
pnpm validator:stop
```
## License

## Using external programs in your validator

If your program requires any external programs to be running, you'll want to in your local validator.

You can do this by adding their program addresses to the `program-dependencies` array in the `Cargo.toml` of your program.

```toml
program-dependencies = [
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV",
]
```

Next time you build your program and run your validator, these external programs will automatically be fetched from mainnet and used in your local validator.

```sh
pnpm programs:build
pnpm validator:restart
```
The code is licensed under the [Apache License Version 2.0](LICENSE)
3 changes: 0 additions & 3 deletions program/README.md

This file was deleted.

1 change: 1 addition & 0 deletions program/README.md