You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: rewrite README with deployed addresses and versions (#59)
* docs: rewrite README with deployed addresses and versions
Replace the stale README with one that matches the shipped contracts:
- Deployments table: mainnet events/profile at 1.1.0, testnet
events/profile at 1.0.0 (addresses + live version() reads)
- Contract descriptions cover all four pillars and the current
profile surface (reputation + earnings, lazy bootstrap)
- Repo layout matches the tree (bootstrap.rs, crowdfunding.rs,
profile_client.rs, scripts/admin + scripts/deploy)
- Deploy sequence reflects the current constructors; upgrade section
documents the timelocked propose/apply/migrate flow
- Drop external spec references and stale audit/deployment notes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore: remove obsolete contract-deploy workflow file
* chore: add testnet branch to rustfmt and verify-build CI triggers
* ci: remove dangling references to deleted contract-deploy workflow
rustfmt.yml: drop the workflow_call trigger, deploy job, and secret
declarations that existed only to chain into contract-deploy.yml.
verify-build.yml: drop the chained rustfmt job that called rustfmt.yml
as a reusable workflow (no longer reusable) with secrets it no longer
declares; the standalone rustfmt workflow covers the same push branches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+34-28Lines changed: 34 additions & 28 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,24 +8,28 @@ Two contracts in one workspace.
8
8
9
9
| Contract | Path | Purpose |
10
10
|----------|------|---------|
11
-
|`boundless-events`|`contracts/events`| Event records (hackathon, bounty, grant) and inlined escrow. Multi-token whitelist. Idempotency. Per-pillar dispatch on a single canonical `create_event`. |
12
-
|`boundless-profile`|`contracts/profile`| Per-user credits and reputation. Lazy bootstrap. Per-token earnings tracking. Mutated almost exclusively by the events contract. |
11
+
|`boundless-events`|`contracts/events`| Event records for the four pillars (hackathon, bounty, grant, crowdfunding) with inlined escrow. Multi-token whitelist. Idempotent operations. Per-pillar dispatch on a single canonical `create_event`. Paged cancellation and timelocked upgrades. |
12
+
|`boundless-profile`|`contracts/profile`| Per-user reputation and per-token earnings. Lazy profile bootstrap. Mutated almost exclusively by the events contract. |
13
13
14
-
Specs live in the platform PRD set under the parent `boundless-repos/` directory:
Both contracts expose an on-chain `version()` view; the versions above are live reads.
20
24
21
25
## Architecture in one paragraph
22
26
23
-
The events contract is the on-chain anchor of event existence, key terms, escrow custody, submission anchors, and winner records. The profile contract is the on-chain anchor of credit balances and reputation scores. The events contract calls into the profile contract for credit charging on apply, credit earning on accept, and reputation bumping on win. The off-chain orchestrator (`boundless-nestjs`) handles everything else: drafts, rich content via `content_uri`, KYC, role policies, AI features, moderation. The contracts hold the things the platform cannot afford to be trusted on; nestjs holds the things that benefit from iteration speed.
27
+
The events contract is the on-chain anchor of event existence, key terms, escrow custody, submission anchors, and winner records. Funds enter escrow at creation (or through top-ups), fees are taken at deposit, and payouts release through `select_winners` or per-milestone claims. The profile contract is the on-chain anchor of reputation scores and per-token earnings. The events contract calls into the profile contract to bootstrap profiles on first touch, bump reputation on wins and milestones, and register earnings on payout. Every state-mutating operation carries an idempotency key, admin surfaces are pausable, and upgrades are timelocked.
24
28
25
29
## Prerequisites
26
30
27
31
- Rust 1.90.0 (`rust-toolchain.toml` pins this).
28
-
- Soroban SDK 23.5.2.
32
+
- Soroban SDK 23.5.x (workspace-pinned in `Cargo.toml`).
29
33
-`stellar` CLI for building WASM (`brew install stellar/tap/stellar-cli`).
@@ -44,14 +48,17 @@ cd contracts/events && make size && cd ../..
44
48
cd contracts/profile && make size &&cd ../..
45
49
```
46
50
51
+
Test snapshots under `contracts/*/test_snapshots/` are the audit trail. When fixtures change shape, regenerate snapshots intentionally and commit them in the same PR.
Two-step sequence (see `boundless-credits-reputation-prd.md` Section 13.1):
96
-
97
-
1. Deploy `boundless-profile` with `default_bootstrap_credits = 10`.
98
-
2. Deploy `boundless-events` with the profile contract's address + admin + fee_account + fee_bps.
99
-
3. Call `profile.set_events_contract(events_addr)`, then `accept_events_contract` as the events contract address.
100
-
4. Register supported tokens on `boundless-events` (USDC at launch).
103
+
## Deployment and upgrades
101
104
102
-
Deployment scripts live in `scripts/`. Mainnet deploys are multisig-gated and only after external audit clears.
105
+
Fresh deploy sequence for a new network:
103
106
104
-
## Audit
107
+
1. Deploy `boundless-profile` with the admin address.
108
+
2. Deploy `boundless-events` with the profile contract's address, admin, fee account, and fee bps.
109
+
3. Call `profile.set_events_contract(events_addr)` (first-set-only; later rotation is a timelocked two-step).
110
+
4. Register supported tokens on `boundless-events`.
105
111
106
-
External audit is the hard gate before mainnet. Audit checklist is in the platform contract PRD Section 15.3.
112
+
Upgrades are timelocked three-step operations: `propose_upgrade(wasm_hash, version)`, wait the timelock (~1 day on mainnet), `apply_upgrade()`, then `migrate()` to stamp the migration marker. A pending proposal can be inspected with `get_pending_upgrade()` and withdrawn with `cancel_pending_upgrade()`.
0 commit comments