个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Solana 协议的收益债券——自动从费用份额偿还,在费用产生的同一笔交易中。
AI 翻译
Revenue bonds for Solana protocols — repaid automatically from a share of fees, in the same transaction the fee arises.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A marketplace for revenue-based financing of onchain protocols on Solana.
A protocol that already earns fees issues a short-term bond with a fixed face
value and coupon. The bond repays itself: an agreed share of the protocol's fees
is split off at the moment a fee arises and distributed to bondholders until
face plus coupon has been paid out. After that the interception stops on its
own. Bonds trade until maturity.
No token dilution, no user funds as collateral, no credit committee.
Status — v0.2.0, a way out before maturity查看完整 README ↗A marketplace for revenue-based financing of onchain protocols on Solana.
A protocol that already earns fees issues a short-term bond with a fixed face value and coupon. The bond repays itself: an agreed share of the protocol's fees is split off at the moment a fee arises and distributed to bondholders until face plus coupon has been paid out. After that the interception stops on its own. Bonds trade until maturity.
No token dilution, no user funds as collateral, no credit committee.
What ships:
Measured: the money adds up to the smallest USDC unit after every step of 1,000 random sequences of fee arrivals, claims, transfers and sales, and no holder ever takes more than their bonds earned; from listing to USDC on the seller's screen takes 1.3 s on a local validator and 3.0 s on devnet; the whole issuance-to-payout cycle runs in 16.4 s of machine time on devnet.
What does not exist yet:
One issuer, and it is our own demo issuer.
Anchor 0.32.1 · Rust 1.97.1 · Agave 4.2.0 · Token-2022 with Transfer Hook · mollusk-svm 0.15.0 · pnpm 9 workspaces · TypeScript 5.9 strict · Biome · Vitest · React 18 + Vite 5 · Node ≥ 22.
There is no database and no backend on purpose: the canonical state lives in Solana accounts, and the interface reads them straight over RPC.
programs/daddys-club core: protocol config, revenue sources, issuance, escrows,
interception, payout; the bond mint carries the transfer hook
programs/daddys-market secondary market: offers, purchase and cancellation
programs/demo-issuer reference integration: a swap that hands over a share of its fee
packages/sdk types, PDA derivations, account decoders, mirror of the arithmetic
apps/web marketplace, issue detail, issuer dashboard, offers
scripts the full-cycle demo and the SC-002 / SC-009 measurements on a live node
fixtures shared arithmetic fixtures for Rust ↔ TypeScript
pnpm install
pnpm gate # lint + typecheck + TypeScript tests
anchor build # all three programs
cargo test -p daddys-club # program tests on mollusk-svm; needs anchor build first
The program tests load the freshly built bytecode of all three programs, so
anchor build has to run before cargo test.
Copy .env.example to .env and set the RPC endpoint for your cluster; the
defaults point at a local validator. The web app is started with pnpm dev.
To see the whole cycle end to end — a local validator with the programs, the demo issuer generating fees, holders getting paid — see scripts/README.md.
The landing page and the web app are published to GitHub Pages by
.github/workflows/pages.yml on every push to
main. One-time setup for the repository owner: Settings → Pages → Source:
GitHub Actions. One site, two folders:
https://<owner>.github.io/<repo>/ — the landing page,
apps/landing: static HTML and CSS, no build. It reads the
standing devnet issue once from the public devnet RPC and falls back to the
figures in its markup. Its copy of the Issue layout is held against the
decoder by packages/sdk/src/landing.test.ts.https://<owner>.github.io/<repo>/app/ — the web app, built with
--base=/<repo>/app/. It routes by hash (app/#/issue/…), so every address
is served with status 200. Addresses from before the move (/<repo>/issue/…)
are sent to their hash form by the landing's 404.html.The demo screens run on built-in figures and need no configuration. The live
screen (app/#/live/issue) reads the cluster set in repository variables
VITE_RPC_URL, VITE_CLUSTER and VITE_PROGRAM_ID (Settings → Secrets and
variables → Actions → Variables). They end up in a public bundle, so an RPC
key placed there must be restricted to the site's origin.
All three programs are deployed to devnet under the same IDs as in
Anchor.toml:
| Address | |
|---|---|
daddys_club | 7eT5T7mq1uD9piYJ2rMAzma8iYL7C7CZGPgxsB8DckoB |
daddys_market | G29gfknNBKtvpfPAjrigefg3tkX7cVXFgnd62NUtcniq |
demo_issuer | 8wKjGiLvnMTv7oi9PcztmbRv4v63emT2qPPrA8x1fW3z |
| protocol config | 4HLq2cCPFRgHurFywRv24eLXxKURyz3To7FF2eGoyeg1 |
| settlement mint (test USDC, 6 decimals) | A2BL4NnYRAjAdDyoyVXmpM55CC1EcsX6ELsS4uHqdoYX |
| standing demo issue | C32HkBAdKzf3ZkMpKGtMuJTr2zWXJuwwSXEHLiSJWHJM |
The settlement currency is a test mint of our own, not Circle's devnet USDC: the demo needs amounts no faucet hands out. Visitors can watch the standing issue and its offer book, but have no way to get this USDC, so trading it is for the scripts. The repository variables for this deployment:
VITE_CLUSTER=devnet
VITE_RPC_URL=https://api.devnet.solana.com
VITE_PROGRAM_ID stays unset: the IDs are the same as on localnet.
init_protocol is open to whoever calls it first, so on devnet it was run
straight after the deploy and the admin read back from the chain. Restricting
it to the upgrade authority is due before mainnet.
MIT