Transaction Science open standards monorepo. Each subdirectory is a self-contained reference protocol with its own README and licence. - openpay/ Apache-2.0 payment-acceptance stack (Rust, 26 crates) - smart-byte/ CC-BY-4.0 content-addressed value carrier (spec) - eoc/ CC-BY-4.0 energy-optimised compute (spec) The wire format and the right to fork are public. The optional hosted services are the offer; the protocols are not.
2.3 KiB
OpenPay — five-minute quickstart
The shortest path from git clone to a request hitting an
op-server process. No persistence, no TLS, no auth — that's for
the rest of docs/deploy/. This is just "does the wheel turn?"
Prerequisites
- Rust 1.95 (edition 2024). The MSRV is pinned in
rust-toolchain.toml/Cargo.toml. - A working
cargo. No system deps beyond a C linker.
The path
git clone https://github.com/openpay/openpay.git
cd openpay
cargo build --release -p op-server -p op-cli
op-server is the HTTP daemon; op-cli builds an op binary you
can use to talk to it. (The CLI is being built in parallel — if
your checkout doesn't have it yet, cargo build --release -p op-server
alone is enough; you can hit the API with curl.)
In one terminal:
./target/release/op-server &
# Output: op-server starting, addr=127.0.0.1:8080
In another:
./target/release/op health
# {"status":"ok"}
./target/release/op readiness
# {"status":"ready","stores":{...}}
Or with curl if the CLI isn't built yet:
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/readiness
Round-trip a refund
./target/release/op refund create \
--payment-id pay_demo \
--amount-minor 1000 \
--currency USD \
--external-id "smoke-$(date +%s)"
# {"id":"rfnd_…","status":"Requested","amount":{...},…}
./target/release/op refund get rfnd_…
# Same record echoed back.
The refund lives in the in-memory graph; restarting op-server
drops it. To persist across restarts, see
README.md §3 — persisting to a .graph file.
Shut it down
kill %1 # if you backgrounded it with `&`
# Or Ctrl-C in the op-server terminal.
The binary installs both SIGINT (Ctrl-C) and SIGTERM handlers (see
crates/op-server/src/main.rs::shutdown_signal) and drains
in-flight requests on either signal.
Next steps
| Want | Read |
|---|---|
| TLS in front of op-server | README.md §2 + Caddyfile.sample |
| Persistence | README.md §3 |
| Auth + rate limit | README.md §4 |
| Outbound webhooks | README.md §5-6 |
| FX quotes | README.md §7 |
| Crypto rail | README.md §8 |
| Run under systemd | openpay.service |
| Backup the graph file | backup.md |
| Wire logs to a backend | monitoring.md |