Skip to content

Commit fb44dd5

Browse files
committed
feat: add solana-localnet program
1 parent a243473 commit fb44dd5

File tree

6 files changed

+137
-3
lines changed

6 files changed

+137
-3
lines changed

.package.json.swo

12 KB
Binary file not shown.

.travis.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
sudo: required
12
language: node_js
23
node_js:
34
- "lts/*"
45
- "node"
56

7+
services:
8+
- docker
9+
610
cache:
711
directories:
812
- ~/.npm
@@ -14,8 +18,12 @@ script:
1418
- npm run doc
1519
- npm run flow
1620
- npm run lint
17-
- npm run examples
1821
- npm run codecov
22+
- npm run localnet:update
23+
- npm run localnet:up
24+
- npm run examples
25+
- npm run test:live
26+
- npm run localnet:down
1927

2028
before_deploy:
2129
- rm -rf deploy

README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,31 @@ console.log(solanaWeb3);
6868
console.log(solanaWeb3);
6969
```
7070

71+
## Local Network
72+
The `solana-localnet` program is provide to easily start a test Solana network
73+
locally on your machine. Docker must be installed. The JSON RPC endpoint of
74+
the local network is `http://localhost:8899`.
75+
76+
To start, first fetch the latest Docker image by running:
77+
```bash
78+
$ npx solana-localnet update
79+
```
80+
81+
Then run the following command to start the network
82+
```bash
83+
$ npx solana-localnet up
84+
```
85+
86+
While the network is running logs are available with:
87+
```bash
88+
$ npx solana-localnet logs -f
89+
```
90+
91+
Stop the network with:
92+
```bash
93+
$ npx solana-localnet up
94+
```
95+
7196
## Flow
7297

7398
A [Flow library definition](https://flow.org/en/docs/libdefs/) is provided at
@@ -79,7 +104,6 @@ activate it:
79104
node_modules/@solana/web3.js/module.flow.js
80105
```
81106

82-
83107
## Examples
84108
See the [examples/](https://github.com/solana-labs/solana-web3.js/tree/master/examples) directory for small snippets.
85109

bin/localnet.sh

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/bin/bash -e
2+
3+
usage() {
4+
exitcode=0
5+
if [[ -n "$1" ]]; then
6+
exitcode=1
7+
echo "Error: $*"
8+
fi
9+
cat <<EOF
10+
usage: $0 [update|up|down|logs] [command-specific options]
11+
12+
Operate a local testnet
13+
14+
update - Update the network image from dockerhub.com
15+
up - Start the network
16+
down - Stop the network
17+
logs - Display network logging
18+
19+
20+
logs-specific options:
21+
-f - Follow log output
22+
23+
update/up-specific options:
24+
edge - Update/start the "edge" channel network
25+
beta - Update/start the "beta" channel network (default)
26+
27+
down-specific options:
28+
none
29+
30+
31+
Assumes that docker is installed
32+
EOF
33+
exit $exitcode
34+
}
35+
36+
[[ -n $1 ]] || usage
37+
cmd="$1"
38+
39+
channel=beta
40+
41+
docker --version || usage "It appears that docker is not installed"
42+
case $cmd in
43+
update)
44+
if [[ -n $2 ]]; then
45+
channel="$2"
46+
fi
47+
[[ $channel = edge || $channel = beta ]] || usage "Invalid channel: $channel"
48+
49+
(
50+
set -x
51+
docker pull solanalabs/solana:"$channel"
52+
)
53+
;;
54+
up)
55+
if [[ -n $2 ]]; then
56+
channel="$2"
57+
fi
58+
[[ $channel = edge || $channel = beta ]] || usage "Invalid channel: $channel"
59+
60+
(
61+
set -x
62+
docker run \
63+
--detach \
64+
--name solana-localnet \
65+
--rm \
66+
--publish 8899:8899 \
67+
--tty \
68+
solanalabs/solana:"$channel"
69+
70+
)
71+
;;
72+
down)
73+
(
74+
set -x
75+
docker stop --time 0 solana-localnet
76+
)
77+
;;
78+
logs)
79+
(
80+
set -x
81+
docker logs solana-localnet "$@"
82+
)
83+
;;
84+
*)
85+
usage "Unknown command: $cmd"
86+
esac
87+
88+
exit 0

examples/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
## Examples
22
Before trying any of the examples in this directory please populate the `lib/`
3-
directory by running `npm install`
3+
directory by running `npm install`.
4+
5+
Additionally most of the examples attempt to connect to a local network. Start
6+
your local network first by running:
7+
```bash
8+
$ npx solana-localnet update
9+
$ npx solana-localnet up
10+
```

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
},
2222
"main": "lib/index.cjs.js",
2323
"module": "lib/index.esm.js",
24+
"bin": {
25+
"solana-localnet": "bin/localnet.sh"
26+
},
2427
"scripts": {
2528
"clean": "rimraf ./coverage ./lib",
2629
"dev": "cross-env NODE_ENV=development rollup -c",
@@ -37,6 +40,10 @@
3740
"lint": "eslint .",
3841
"lint:fix": "npm run lint -- --fix",
3942
"lint:watch": "watch 'npm run lint:fix' . --wait=1 --ignoreDirectoryPattern=/doc/",
43+
"localnet:up": "bin/localnet.sh up",
44+
"localnet:down": "bin/localnet.sh down",
45+
"localnet:update": "bin/localnet.sh update",
46+
"localnet:logs": "bin/localnet.sh logs",
4047
"ok": "npm run lint && npm run flow && npm run test && npm run doc",
4148
"prepare": "npm run clean && npm run ok && npm run build",
4249
"examples": "set -ex; for example in examples/*.js; do node $example; done",

0 commit comments

Comments
 (0)