Skip to content

clockwork-xyz/clockwork

Repository files navigation

Clockwork

Automation engine for the Solana blockchain

code scan Discord Chat License

Deployments

Program Address Devnet Mainnet
Network F8dKseqmBoAkHx3c58Lmb9TgJv5qeTf3BbtZZSEzYvUa v1.4.0 v1.4.0
Thread 3XXuUFfweXBwFgFfYaejLvZE4cGZiHgKiGfMtdxNzYmv v1.4.0 v1.4.0

SDKs

Language Description Lib Examples
Anchor Anchor bindings for Solana programs. crates.io See Example Repo
Rust Rust bindings for clients. crates.io See Example Repo
Typescript Typescript bindings for clients and frontends. npm Explorer

Notes

  • Clockwork is under active development. All interfaces and implementations are subject to change.
  • Program deployments are secured by a 2-of-2 multisig and managed by a core team of maintainers.
  • Solana mainnet currently has 3 independent worker node operators. To join the workernet, you can install the Clockwork plugin and request an earlybird token delegation in the workernet Discord channel.
  • Occassionally, a new release may change the state schema and require users to migrate to a new program. These releases will be marked by a new major version upgrade (e.g. v2.x, v3.x, etc.).
  • The smart-contracts in this repository are automatically scanned by Sec3's auto-auditing software and are currently being reviewed by the team at Ottersec. Their audit report is in progress and will be published soon.

Getting Started

Local Development

1. Download the source code.

git clone https://github.com/clockwork-xyz/clockwork
cd clockwork

2. Checkout the latest stable release branch.

git describe --tags `git rev-list --tags --max-count=1`
git checkout tags/...

3. Build the repo.

./scripts/build-all.sh .
export PATH=$PWD/bin:$PATH

4. Start a localnet for development.

clockwork localnet

5. Stream program logs.

solana logs --url localhost

Deploying a worker

1. Either build from scratch (see above) or install the pre-built binary.

curl -s https://api.github.com/repos/clockwork-xyz/clockwork/releases/latest | grep "clockwork-geyser-plugin-release-x86_64-unknown-linux-gnu.tar" | cut -d : -f 2,3 | tr -d \" | wget -qi -
tar -xjvf clockwork-geyser-plugin-release-x86_64-unknown-linux-gnu.tar.bz2
rm clockwork-geyser-plugin-release-x86_64-unknown-linux-gnu.tar.bz2

2. Next, create a new keypair for signing Clockwork txs.

solana-keygen new -o clockwork-worker-keypair.json

3. Load this keypair with a small amount of SOL (~0.01 ◎).

4. Register your worker and get a worker ID:

clockwork worker create clockwork-worker-keypair.json

5. Setup the plugin config file.

{
  "libpath": "/home/sol/clockwork-geyser-plugin-release/lib/libclockwork_plugin.so",
  "keypath": "/home/sol/clockwork-worker-keypair.json",
  "rpc_url": "http:https://127.0.0.1:8899",
  "transaction_timeout_threshold": 150,
  "thread_count": 10,
  "worker_id": 0, 
}

6. Configure your validator to run with the Clockwork plugin.

#!/bin/bash
exec solana-validator \
  --identity ~/validator-keypair.json \
  --rpc-port 8899 \
  --entrypoint entrypoint.devnet.solana.com:8001 \
  --no-voting \
  --full-rpc-api \
  --limit-ledger-size \
  
  # Add this line! 👇🏼
  --geyser-plugin-config ~/clockwork-geyser-config.json

7. Restart your validator however you normally would!

sudo systemctl restart sol