Contributing
Build Turmite from source, run the tests and send a pull request.
Turmite is a community project. The code, the issues and the pull requests are on GitHub. Contributions are under the MIT license.
Report security problems in private. Do not open a public issue. See Reporting a vulnerability.
Repository layout
| Path | Contents |
|---|---|
crates/turmite/ |
The library and the turmite binary (Rust 2024) |
crates/turmite/src/http/ |
Merchant API, checkout, dashboard, assets, middleware |
crates/turmite/src/chains/ |
One driver per chain family, the mock driver, the network catalog, node health and failover |
crates/turmite/src/worker/ |
Background loops: chain watching, sweeps, the EVM sweeper, the address pool |
crates/turmite/src/payouts/ |
Payouts: limits, approvals, signing per chain |
crates/turmite/src/exchange/ |
Pay with any coin through Trocador |
crates/turmite/src/db/ |
Database access, one file per area |
crates/turmite/templates/ |
Server-rendered templates: dashboard and checkout |
crates/turmite/migrations/ |
Database migrations |
contracts/ |
Foundry project: EVM DepositFactory and DepositWallet |
sdk/typescript/ |
@turmite/sdk |
plugins/woocommerce/ |
The WooCommerce plugin |
deploy/ |
Compose file, Caddyfile, install.sh, Kubernetes manifests, testnet stack |
site/ |
This website |
openapi.yaml |
OpenAPI 3.1 description of the merchant API and the webhook payloads |
Requirements
- Rust 1.99.1.
rust-toolchain.tomlselects it when you userustup. - Docker with the Compose plugin, for PostgreSQL 18 and the testnet stack.
- Foundry, only to change the EVM contracts.
- Node.js 26 and pnpm 12, only for the SDK and the site. CI uses these versions.
Build and run
-
Clone the repository:
git clone https://github.com/loruorg/turmite.git cd turmite -
Start PostgreSQL. It listens on
127.0.0.1:5433:docker compose -f deploy/testnets/docker-compose.yml up -d postgres -
Run the server with mock chains:
cargo run -- serve --demoThe defaults of
TURMITE_DATABASE_URLandTURMITE_SITE_URLpoint to this database and tohttp://localhost:8080. With--demo, Turmite makes a randomTURMITE_SECRETwhen none is set. -
Open
http://localhost:8080/dashboardand create the first user.
Tests
cargo test
The tests need the PostgreSQL server from step 2. Each test makes its own database there. To use another server, set TURMITE_TEST_PG=postgres://user:pass@host:port. The default features build every chain, so the tests need no feature flag.
The real-chain tests skip unless TURMITE_TEST_CHAINS names their chain (bitcoin,monero) or is all. They need the local testnet stack.
Before you send a pull request, also run:
cargo fmt --all --check
cargo clippy --locked --all-targets -- -D warnings
For the EVM contracts:
cd contracts && forge test
Do not change the deployed contract bytecode without a migration plan. The factory bytecode decides every EVM deposit address.
Local testnet stack
deploy/testnets runs PostgreSQL and a local node for each chain. All images run on arm64 and amd64.
docker compose -f deploy/testnets/docker-compose.yml up -d # PostgreSQL, Bitcoin, Monero, EVM
docker compose -f deploy/testnets/docker-compose.yml --profile all up -d # adds Solana, Tron, TON
deploy/testnets/verify.sh # checks each local node
scripts/e2e.sh # every test, with the real-chain tests on every chain
scripts/e2e.sh fails when a real-chain test skips. The profile public adds clients for the public testnets (Bitcoin Signet, Monero Stagenet). Optional settings, such as API keys for verify.sh --public, go in deploy/testnets/.env. See .env.example. deploy/testnets/README.md lists the ports, the funding commands and the faucets.
Pull requests
- Keep each pull request to one change.
- Add or update tests for the change.
- Update the docs in
site/src/content/docs/when behaviour changes. - Write user-facing text in ASD-STE100 Simplified Technical English: short sentences, active voice, one fact per sentence.
- Do not add telemetry, analytics or third-party trackers.
- Do not add an environment variable that turns a feature on or off. Settings belong in the dashboard. Open an issue first if you think a new variable is necessary.
The website
The site is an Astro project in site/:
cd site
pnpm install
pnpm dev
pnpm build writes the static site to site/dist/ and builds the search index.