Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/maxsam4/fork-off-substrate
This script allows bootstrapping a new substrate chain with the current state of a live chain
https://github.com/maxsam4/fork-off-substrate
Last synced: about 1 month ago
JSON representation
This script allows bootstrapping a new substrate chain with the current state of a live chain
- Host: GitHub
- URL: https://github.com/maxsam4/fork-off-substrate
- Owner: maxsam4
- License: mit
- Created: 2020-07-19T07:52:28.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-03-07T00:01:43.000Z (almost 2 years ago)
- Last Synced: 2024-01-24T04:15:12.478Z (11 months ago)
- Language: JavaScript
- Size: 86.9 KB
- Stars: 111
- Watchers: 5
- Forks: 62
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-substrate - Fork Off Substrate - Script to help bootstrap a new chain with the state of a running chain. (Tools)
- awesome-substrate - Fork Off Substrate - Script to help bootstrap a new chain with the state of a running chain. (Tools)
README
# Fork off substrate
This script allows bootstrapping a new substrate chain with the current state of a live chain. Using this, you can create a fork of Polkadot, Kusama and other substrate chain for development purposes.
## Usage
1. Clone this repository and install dependencies
```bash
git clone https://github.com/maxsam4/fork-off-substrate.git
cd fork-off-substrate
npm i
```2. Create a folder called `data` inside the top folder (`fork-off-substrate`).
```bash
mkdir data
```3. Copy the executable/binary of your substrate based node inside the data folder and rename it to `binary`.
4. Copy the runtime WASM blob of your substrate based blockchain to the data folder and rename it to `runtime.wasm`. To get the WASM blob, compile your blockchain and look for `./target/release/wbuild/runtime/runtime.compact.wasm`. If you are forking Polkadot/Kusama/Westend, you can download the WASM blobs from [Polkadot's release page](https://github.com/paritytech/polkadot/releases).
5. If your substrate chain uses additional custom types than what are available in polkadot.js, define them in a JSON file of format `{ "types": { } }`. Copy the file to the `data` folder and rename it to `schema.json`.
6. Either run a full node for your blockchain locally(Recommended) or have an external endpoint handy.
7. Run the script
* If using a local node, simply run the script using```bash
npm start
```* If you are using an external/non-default endpoint, you need to provide it to the script via the `HTTP_RPC_ENDPOINT` environment variable
```bash
HTTP_RPC_ENDPOINT=https://example.com npm start
```8. You should have the genesis file for the forked chain inside the `data` folder. It will be called `fork.json`.
9. You can now run a new chain using this genesis file
```bash
./binary --chain fork.json --alice
```## Configuration
The script can be tweaked and configured using various environment variables -
| Environment Variable | Effects | Default value |
| --- | --- | --- |
| HTTP_RPC_ENDPOINT | HTTP RPC endpoint that should be used to query state | http://localhost:9933 |
| FORK_CHUNKS_LEVEL | Determines how many chunks to split the RPC download in. Effect is exponential, recommended value for most is 1. You can try 0 for small chains and 2 for large chains for potential speed improvements | 1 |
| ORIG_CHAIN | Chain to use as the original chain. | `$default_of_the_binary` |
| FORK_CHAIN | Chain to use as base for the forked chain. | `dev` |
| ALICE | If set, the script will replace the chain's sudo account with `//Alice` | `NULL` |
| QUICK_MODE | If set, it parallelizes the data download from the RPC endpoint | `NULL` |## Read more
If you would like to understand how this script works, please read this [blog post](https://mudit.blog/fork-substrate-blockchain/)
## Using Docker
### Build the image
docker build -t fork-off-substrate .
### Run
BINARY=/full/path/to/your/linux/binary
HTTP_RPC_ENDPOINT=http://localhost:9933
docker run --rm -it \
-e HTTP_RPC_ENDPOINT=$HTTP_RPC_ENDPOINT \
-v "$BINARY":/data/binary
fork-off-substrate## Credits
This script is based on [a script shared in the substrate riot channel](https://hackmd.io/mGgNZX0VT4S0UTaq89-_SQ)