An escrow program (smart contract) built for the Solana blockchain
The on-chain escrow program (written in Rust) is heavily inspired by the Solana Escrow program by Paul Schaaf.
Due to time constraints, only an initializer.js
has been included in the /tests
folder to demonstrate
what's possible, and to provide a stepping stone for interested developers.
Thus, the following are the THREE KEY FUNCTIONALITIES yet to be implemented:
- Tests that exercise the SPL token program
- Tests that exercise the escrow program
- A UI for the escrow program
- Install Rust from https://www.rust-lang.org/tools/install
- Visit https://docs.solana.com/cli/install-solana-cli-tools to get the Solana CLI tools on your machine:
-
Open your favorite Terminal application
-
Install the Solana release
v1.6.10
on your machine by running:
sh -c "$(curl -sSfL https://release.solana.com/v1.6.10/install)"
You can replace v1.6.10
with the release tag matching the software version of your desired release, or use one of the three symbolic channel names: stable
, beta
, or edge
.
The following output indicates a successful update:
downloading v1.6.10 installer
Configuration: /home/solana/.config/solana/install/config.yml
Active release directory: /home/solana/.local/share/solana/install/active_release
* Release version: v1.6.10
* Release URL: https://github.com/solana-labs/solana/releases/download/v1.6.10/solana-release-x86_64-unknown-linux-gnu.tar.bz2
Update successful
If there are errors installing the Solana CLI tools... such as the following:
--- stderr
thread 'main' panicked at 'Unable to find libudev: Failure { command: "\"pkg-config\" \"--libs\" \"--cflags\" \"libudev\"", output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "Package libudev was not found in the pkg-config search path.\nP
erhaps you should add the directory containing `libudev.pc\'\nto the PKG_CONFIG_PATH environment variable\nNo package \'libudev\' found\n" } }', /home/ccdle12/.cargo/registry/src/github.com-1ecc6299db9ec823/hidapi-1.2.6/build.rs:53:54
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `spl-token-cli v2.0.11`, intermediate artifacts can be found at `/tmp/cargo-installd5uUAO`
- Install
pkg-config
(on Linux):
apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang make
- If the following prompt appears after installation:
Please update your PATH environment variable to include the
solana programs:
PATH="<your-solana-bin-path>”
OPTION 1: Close your terminal and then open it again to activate the environment variables
OPTION 2:
- Open
~/.bashrc
or whichever shell you are using and addexport PATH=”<your-solana-bin-path”>
Follow these instructions to build and deploy the escrow program on devnet.
- Install the latest version of NodeJS and npm. You can download both at https://nodejs.org/en/download/.
- Clone the repository.
- Navigate to the root folder of the application in the command line.
npm install
to install required npm packages and/or dependencies.npm run build
will compile the smart contracts.- Check that Solana was installed:
solana --version
- View the current Solana configuration:
solana config get
- You should see some output like this:
Config File: /home/YOUR-USERNAME/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /home/YOUR-USERNAME/.config/solana/id.json
Commitment: confirmed
- Switch to devnet:
solana config set --url https://devnet.solana.com
- Generate a keypair:
solana-keygen new
- Make a note of the generated pubkey and seed phrase, e.g.:
pubkey: 5werYWXT4SgtsoV91u9zG6BNngtMKFKsY76L21yZTNKN
Seed phrase: <foo>
- Request SOL from the devnet faucet
solana airdrop 1
- Deploying the smart contracts requires access to the host machine's
secretKey
. Updatesolana.escrow.config.json
with the path to the keypair generated previously:
"keypairPath": "/home/YOUR-USERNAME/.config/solana/id.json"
npm run deploy
the program (smart contract) to the specified network insolana.escrow.config.json
.