Skip to content

Commit c1c3aa5

Browse files
authored
solana: Deterministic builds via Docker (wormhole-foundation#646)
This PR was initially based on wormhole-foundation#403. However, due to reasons mentioned in [this comment](wormhole-foundation#646 (comment)), the Dockerfile changes were reverted. tl;dr: This PR adds: * Add `artifacts-mainnet`, `artifacts-solana-devnet`, and `artifacts-tilt-devnet` Makefile target to generate verifiable build artifacts using `solana-verify build` * Remove `prod-build` Makefile target
1 parent d4e3994 commit c1c3aa5

File tree

5 files changed

+37
-8
lines changed

5 files changed

+37
-8
lines changed

Tiltfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ docker_build(
4444
only=["./sdk", "./package.json", "./package-lock.json", "jest.config.ts", "tsconfig.json", "tsconfig.esm.json", "tsconfig.cjs.json", "tsconfig.test.json"],
4545
dockerfile = "./sdk/Dockerfile",
4646
)
47-
k8s_yaml_with_ns("./sdk/ci.yaml")
47+
k8s_yaml_with_ns("./sdk/ci.yaml")
4848
k8s_resource(
4949
"ntt-ci-tests",
5050
labels = ["ntt"],

solana/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
**/*.rs.bk
33
node_modules
44
test-ledger
5-
dist
5+
dist
6+
artifacts-*

solana/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ RUN cp ./target/sbf-solana-solana/release/example_native_token_transfers.so /opt
3333
COPY solana/tilt /opt/solana/deps
3434

3535
COPY sdk ../sdk
36-
COPY solana/ts ts
36+
COPY solana/ts ts
3737
COPY solana/package.json package.json
3838
COPY solana/tsconfig.esm.json tsconfig.esm.json
3939
COPY solana/tsconfig.cjs.json tsconfig.cjs.json
@@ -50,7 +50,7 @@ COPY --from=builder /usr/src/solana/ts /usr/src/solana/ts
5050
COPY --from=builder /usr/src/solana/package.json /usr/src/solana/package.json
5151
COPY --from=builder /usr/src/solana/tsconfig.esm.json /usr/src/solana/tsconfig.esm.json
5252
COPY --from=builder /usr/src/solana/tsconfig.cjs.json /usr/src/solana/tsconfig.cjs.json
53-
COPY --from=builder /usr/src/solana/target/idl /usr/src/solana/target/idl
53+
COPY --from=builder /usr/src/solana/target/idl /usr/src/solana/target/idl
5454
COPY --from=builder /usr/src/solana/target/types /usr/src/solana/target/types
5555

5656
FROM node:lts-alpine@sha256:41e4389f3d988d2ed55392df4db1420ad048ae53324a8e2b7c6d19508288107e AS governance

solana/Makefile

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
.DEFAULT_GOAL = build
2-
.PHONY: build cargo-build anchor-build prod-build test cargo-test anchor-test idl sdk clean node_modules lint cargo-lint anchor-lint fix-lint
2+
.PHONY: build cargo-build anchor-build artifacts-mainnet artifacts-solana-devnet artifacts-tilt-devnet _artifacts test cargo-test anchor-test idl sdk clean node_modules lint cargo-lint anchor-lint fix-lint
33

44
# Find and convert version line:
55
# Turn `const VERSION: &str = "major.minor.patch";` into `major_minor_patch`
@@ -27,8 +27,17 @@ anchor-build:
2727
./scripts/patch-idl $$jsonfile; \
2828
done
2929

30-
prod-build:
31-
anchor build --verifiable
30+
artifacts-mainnet:
31+
$(MAKE) _artifacts TARGET_DIR=$@ NETWORK=mainnet
32+
33+
artifacts-solana-devnet:
34+
$(MAKE) _artifacts TARGET_DIR=$@ NETWORK=solana-devnet
35+
36+
artifacts-tilt-devnet:
37+
$(MAKE) _artifacts TARGET_DIR=$@ NETWORK=tilt-devnet
38+
39+
_artifacts:
40+
solana-verify build -- --no-default-features --features $(NETWORK) --target-dir $(TARGET_DIR)
3241

3342
idl: anchor-build
3443
@echo "IDL Version: $(VERSION)"
@@ -86,4 +95,4 @@ anchor-lint:
8695
bash scripts/anchor-lint.sh
8796

8897
fix-lint:
89-
cargo fmt --all --manifest-path Cargo.toml
98+
cargo fmt --all --manifest-path Cargo.toml

solana/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,25 @@ Run the following command to install necessary dependencies and to build the pro
144144
make build
145145
```
146146

147+
#### Verifiable Builds
148+
149+
For building verifiably, make sure [`solana-verify`](https://crates.io/crates/solana-verify) is installed and Docker is installed and running.
150+
151+
Run the following command to build the program binaries deterministically for `mainnet`:
152+
153+
```sh
154+
make artifacts-mainnet
155+
```
156+
157+
> This will produce the generated artifacts in the `artifacts-mainnet` directory.
158+
159+
For Solana devnet builds, or local testing builds, use the following commands:
160+
161+
```sh
162+
make artifacts-solana-devnet
163+
make artifacts-tilt-devnet
164+
```
165+
147166
### Test
148167

149168
Run the following command to generate the IDL and run the full Solana test-suite:

0 commit comments

Comments
 (0)