Skip to content

Commit 7c6eb49

Browse files
committed
update readme
1 parent fd76592 commit 7c6eb49

File tree

1 file changed

+38
-79
lines changed

1 file changed

+38
-79
lines changed

README.md

Lines changed: 38 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,62 @@
1-
# Feature Gate
1+
# Solana Feature Gate Program
22

33
<a href="https://github.com/solana-program/feature-gate/actions/workflows/main.yml"><img src="https://img.shields.io/github/actions/workflow/status/solana-program/feature-gate/main.yml?logo=GitHub" /></a>
44
<a href="https://explorer.solana.com/address/Feature111111111111111111111111111111111111"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolana-program%2Ffeature-gate%2Fmain%2Fprogram%2Fidl.json&query=%24.version&label=program&logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iMzEzIiBoZWlnaHQ9IjI4MSIgdmlld0JveD0iMCAwIDMxMyAyODEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80NzZfMjQzMCkiPgo8cGF0aCBkPSJNMzExLjMxOCAyMjEuMDU3TDI1OS42NiAyNzYuNTU4QzI1OC41MzcgMjc3Ljc2NCAyNTcuMTc4IDI3OC43MjUgMjU1LjY2OSAyNzkuMzgyQzI1NC4xNTkgMjgwLjAzOSAyNTIuNTMgMjgwLjM3OCAyNTAuODg0IDI4MC4zNzdINS45OTcxOUM0LjgyODcgMjgwLjM3NyAzLjY4NTY4IDI4MC4wMzUgMi43MDg1NSAyNzkuMzkzQzEuNzMxNDMgMjc4Ljc1MSAwLjk2Mjc3MSAyNzcuODM3IDAuNDk3MDIgMjc2Ljc2NEMwLjAzMTI2OTEgMjc1LjY5IC0wLjExMTI4NiAyNzQuNTA0IDAuMDg2ODcxMiAyNzMuMzVDMC4yODUwMjggMjcyLjE5NiAwLjgxNTI2NSAyNzEuMTI2IDEuNjEyNDMgMjcwLjI3TDUzLjMwOTkgMjE0Ljc2OUM1NC40Mjk5IDIxMy41NjYgNTUuNzg0MyAyMTIuNjA3IDU3LjI4OTMgMjExLjk1QzU4Ljc5NDMgMjExLjI5MyA2MC40MTc4IDIxMC45NTMgNjIuMDU5NSAyMTAuOTVIMzA2LjkzM0MzMDguMTAxIDIxMC45NSAzMDkuMjQ0IDIxMS4yOTIgMzEwLjIyMSAyMTEuOTM0QzMxMS4xOTkgMjEyLjU3NiAzMTEuOTY3IDIxMy40OSAzMTIuNDMzIDIxNC41NjRDMzEyLjg5OSAyMTUuNjM3IDMxMy4wNDEgMjE2LjgyNCAzMTIuODQzIDIxNy45NzdDMzEyLjY0NSAyMTkuMTMxIDMxMi4xMTUgMjIwLjIwMSAzMTEuMzE4IDIyMS4wNTdaTTI1OS42NiAxMDkuMjk0QzI1OC41MzcgMTA4LjA4OCAyNTcuMTc4IDEwNy4xMjcgMjU1LjY2OSAxMDYuNDdDMjU0LjE1OSAxMDUuODEzIDI1Mi41MyAxMDUuNDc0IDI1MC44ODQgMTA1LjQ3NUg1Ljk5NzE5QzQuODI4NyAxMDUuNDc1IDMuNjg1NjggMTA1LjgxNyAyLjcwODU1IDEwNi40NTlDMS43MzE0MyAxMDcuMTAxIDAuOTYyNzcxIDEwOC4wMTUgMC40OTcwMiAxMDkuMDg4QzAuMDMxMjY5MSAxMTAuMTYyIC0wLjExMTI4NiAxMTEuMzQ4IDAuMDg2ODcxMiAxMTIuNTAyQzAuMjg1MDI4IDExMy42NTYgMC44MTUyNjUgMTE0LjcyNiAxLjYxMjQzIDExNS41ODJMNTMuMzA5OSAxNzEuMDgzQzU0LjQyOTkgMTcyLjI4NiA1NS43ODQzIDE3My4yNDUgNTcuMjg5MyAxNzMuOTAyQzU4Ljc5NDMgMTc0LjU1OSA2MC40MTc4IDE3NC44OTkgNjIuMDU5NSAxNzQuOTAySDMwNi45MzNDMzA4LjEwMSAxNzQuOTAyIDMwOS4yNDQgMTc0LjU2IDMxMC4yMjEgMTczLjkxOEMzMTEuMTk5IDE3My4yNzYgMzExLjk2NyAxNzIuMzYyIDMxMi40MzMgMTcxLjI4OEMzMTIuODk5IDE3MC4yMTUgMzEzLjA0MSAxNjkuMDI4IDMxMi44NDMgMTY3Ljg3NUMzMTIuNjQ1IDE2Ni43MjEgMzEyLjExNSAxNjUuNjUxIDMxMS4zMTggMTY0Ljc5NUwyNTkuNjYgMTA5LjI5NFpNNS45OTcxOSA2OS40MjY3SDI1MC44ODRDMjUyLjUzIDY5LjQyNzUgMjU0LjE1OSA2OS4wODkgMjU1LjY2OSA2OC40MzJDMjU3LjE3OCA2Ny43NzUxIDI1OC41MzcgNjYuODEzOSAyNTkuNjYgNjUuNjA4MkwzMTEuMzE4IDEwLjEwNjlDMzEyLjExNSA5LjI1MTA3IDMxMi42NDUgOC4xODA1NiAzMTIuODQzIDcuMDI2OTVDMzEzLjA0MSA1Ljg3MzM0IDMxMi44OTkgNC42ODY4NiAzMTIuNDMzIDMuNjEzM0MzMTEuOTY3IDIuNTM5NzQgMzExLjE5OSAxLjYyNTg2IDMxMC4yMjEgMC45ODM5NDFDMzA5LjI0NCAwLjM0MjAyNiAzMDguMTAxIDMuOTUzMTRlLTA1IDMwNi45MzMgMEw2Mi4wNTk1IDBDNjAuNDE3OCAwLjAwMjc5ODY2IDU4Ljc5NDMgMC4zNDMxNCA1Ny4yODkzIDAuOTk5OTUzQzU1Ljc4NDMgMS42NTY3NyA1NC40Mjk5IDIuNjE2MDcgNTMuMzA5OSAzLjgxODQ3TDEuNjI1NzYgNTkuMzE5N0MwLjgyOTM2MSA2MC4xNzQ4IDAuMjk5MzU5IDYxLjI0NCAwLjEwMDc1MiA2Mi4zOTY0Qy0wLjA5Nzg1MzkgNjMuNTQ4OCAwLjA0MzU2OTggNjQuNzM0MiAwLjUwNzY3OSA2NS44MDczQzAuOTcxNzg5IDY2Ljg4MDMgMS43Mzg0MSA2Ny43OTQzIDIuNzEzNTIgNjguNDM3MkMzLjY4ODYzIDY5LjA4MDIgNC44Mjk4NCA2OS40MjQgNS45OTcxOSA2OS40MjY3WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzQ3Nl8yNDMwKSIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfNDc2XzI0MzAiIHgxPSIyNi40MTUiIHkxPSIyODcuMDU5IiB4Mj0iMjgzLjczNSIgeTI9Ii0yLjQ5NTc0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIG9mZnNldD0iMC4wOCIgc3RvcC1jb2xvcj0iIzk5NDVGRiIvPgo8c3RvcCBvZmZzZXQ9IjAuMyIgc3RvcC1jb2xvcj0iIzg3NTJGMyIvPgo8c3RvcCBvZmZzZXQ9IjAuNSIgc3RvcC1jb2xvcj0iIzU0OTdENSIvPgo8c3RvcCBvZmZzZXQ9IjAuNiIgc3RvcC1jb2xvcj0iIzQzQjRDQSIvPgo8c3RvcCBvZmZzZXQ9IjAuNzIiIHN0b3AtY29sb3I9IiMyOEUwQjkiLz4KPHN0b3Agb2Zmc2V0PSIwLjk3IiBzdG9wLWNvbG9yPSIjMTlGQjlCIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxjbGlwUGF0aCBpZD0iY2xpcDBfNDc2XzI0MzAiPgo8cmVjdCB3aWR0aD0iMzEyLjkzIiBoZWlnaHQ9IjI4MC4zNzciIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==&color=9945FF" /></a>
55
<a href="https://www.npmjs.com/package/@solana-program/feature-gate"><img src="https://img.shields.io/npm/v/%40solana-program%2Ffeature-gate?logo=npm&color=377CC0" /></a>
66
<a href="https://crates.io/crates/solana-feature-gate-client"><img src="https://img.shields.io/crates/v/solana-feature-gate-client?logo=rust" /></a>
77

8-
This template should help get you started developing Solana programs. Let's walk through this generated program repository and see what's included.
8+
The Solana Feature Gate program is a new Core BPF program introduced in
9+
[SIMD 0089](https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0089-programify-feature-gate-program.md).
910

10-
## Project setup
11+
Currently, it's sole responsibility is to enable core contributors to revoke
12+
pending feature activations. With all feature accounts owned by
13+
`Feature111111111111111111111111111111111111` (this program's ID), that means
14+
this program can manipulate feature accounts.
1115

12-
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.
16+
As per SIMD 0089, the single instruction `RevokePendingActivation` can -
17+
provided a signature from the feature keypair - revoke a feature activation that
18+
has been recently queued for activation, but not yet activated.
1319

14-
```sh
15-
pnpm install
20+
```rust
21+
enum FeatureGateInstruction {
22+
/// Revoke a pending feature activation.
23+
///
24+
/// This instruction will burn any lamports in the feature account.
25+
///
26+
/// A "pending" feature activation is a feature account that has been
27+
/// allocated and assigned, but hasn't yet been updated by the runtime
28+
/// with an `activation_slot`.
29+
///
30+
/// Features that _have_ been activated by the runtime cannot be revoked.
31+
///
32+
/// Accounts expected by this instruction:
33+
///
34+
/// 0. `[w+s]` Feature account
35+
/// 1. `[w]` Incinerator
36+
/// 2. `[ ]` System program
37+
RevokePendingActivation,
38+
}
1639
```
1740

18-
## Managing programs
41+
Support for this revoke instruction has been added to the Solana CLI.
1942

20-
You'll notice a `program` folder in the root of this repository. This is where your generated Solana program is located.
43+
## Build & Test
2144

22-
Whilst only one program gets generated, note that you can have as many programs as you like in this repository.
23-
Whenever you add a new program folder to this repository, remember to add it to the `members` array of your root `Cargo.toml` file.
24-
That way, your programs will be recognized by the following scripts that allow you to build, test, format and lint your programs respectively.
45+
This repository is managed with [`pnpm`](https://pnpm.io/).
2546

26-
```sh
27-
pnpm programs:build
28-
pnpm programs:test
29-
pnpm programs:format
30-
pnpm programs:lint
31-
```
32-
33-
## Generating IDLs
34-
35-
You may use the following command to generate the IDLs for your programs.
36-
37-
```sh
38-
pnpm generate:idls
39-
```
40-
41-
Depending on your program's framework, this will either use Shank or Anchor to generate the IDLs.
42-
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.
47+
All scripts can be found in `package.json` and under the `scripts` folder.
4348

44-
## Generating clients
49+
Build & test the program:
4550

46-
Once your programs' IDLs have been generated, you can generate clients for them using the following command.
47-
48-
```sh
49-
pnpm generate:clients
5051
```
51-
52-
Alternatively, you can use the `generate` script to generate both the IDLs and the clients at once.
53-
54-
```sh
55-
pnpm generate
52+
pnpm programs:build
53+
pnpm programs:test
5654
```
5755

58-
## Managing clients
56+
## Clients
5957

60-
The following clients are available for your programs. You may use the following links to learn more about each client.
58+
The following clients are available for the Feature Gate program.
6159

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

65-
## Starting and stopping the local validator
66-
67-
The following script is available to start your local validator.
68-
69-
```sh
70-
pnpm validator:start
71-
```
72-
73-
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.
74-
75-
```sh
76-
pnpm validator:restart
77-
```
78-
79-
Finally, you may stop the local validator using the following command.
80-
81-
```sh
82-
pnpm validator:stop
83-
```
84-
85-
## Using external programs in your validator
86-
87-
If your program requires any external programs to be running, you'll want to in your local validator.
88-
89-
You can do this by adding their program addresses to the `program-dependencies` array in the `Cargo.toml` of your program.
90-
91-
```toml
92-
program-dependencies = [
93-
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
94-
"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV",
95-
]
96-
```
97-
98-
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.
99-
100-
```sh
101-
pnpm programs:build
102-
pnpm validator:restart
103-
```

0 commit comments

Comments
 (0)