Agentic Trading Lab
에이전트와 대화하고, 거래 아이디어를 테스트하며, 코드 없이 실제 시장 데이터에 AI 트레이딩 에이전트를 적용
솔라나 기반 인보이스를 즉시 체인 자동 분할·공유 블링크·카자흐스탄 완료증명서와 솔스캔 QR 시일로 제공
Solana invoices with instant on-chain auto-split, shareable Blinks, and an official Kazakhstan Act of Completed Works with Solscan QR seal.
금융TypeScript · RustGitHub @OMaRgaLy온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Invoice the world. Get paid in one click. Solana invoices with instant on-chain auto-split, shareable Blinks, and an official Kazakhstan Ðкт выполненных работ sealed with an on-chain QR.
Built for the Superteam Kazakhstan track of the Colosseum Crypto World's Fair Hackathon.
Freelancers in Kazakhstan and Central Asia selling to clients abroad face slow, expensive SWIFT transfers, cards that don't work across borders, and platforms (Upwork, Fiverr) that own their reputation. On top of that, local accounting and tax filing still expect a formal Ðкт выполненных работ tied to every payment.
flowchart LR
F[Freelancer wallet] -- initialize_invoice --> P[(Anchor program<br/>steppe_invoice)]
P --> I[Invoice PDA<br/>creator + id]
C[Client in X / Telegram / web] -- GET/POST Action --> A[Next.js Actions API<br/>/api/actions/invoice/creator/id]
A -- reads --> I
A -- unsigned pay_invoice tx --> C
C -- signs --> P
P -- atomic split --> W1[Freelancer 85%]
P -- atomic split --> W2[Savings vault 10%]
P -- atomic split --> W3[Collaborator 5%]
I --> ACT[Act of Completed Works<br/>+ QR to Solscan]
I --> PROF[Reputation profile]
| Part | Where |
|---|---|
| Anchor program | programs/steppe_invoice/src/lib.rs |
| Program tests (9) | tests/steppe_invoice.ts |
| Web app (Next.js) | app/ |
| Blink / Actions API | app/app/api/actions/invoice/[creator]/[id]/route.ts, app/app/actions.json/route.ts |
| Act of Works | app/app/invoice/[creator]/[id]/act/page.tsx |
| Reputation profile | app/app/profile/[wallet]/page.tsx |
Invoice PDA seeds: ["invoice", creator, invoice_id (u64 LE)].
initialize_invoice validates vault_bps + collaborator_bps <= 10000, title ≤ 64 bytes, amount > 0, and that a collaborator share has a collaborator wallet.pay_invoice computes shares with checked_mul / checked_div, transfers to vault, collaborator and creator via the System Program in the same transaction, sets is_paid, payer, paid_at, and emits InvoicePaidEvent. The creator receives the remainder, so rounding dust is never lost. A paid invoice cannot be paid again.cancel_invoice closes an unpaid invoice and refunds rent to the creator; only the creator can call it.Open /demo: five public Devnet test wallets (freelancer, two clients, vault, collaborator) are built into the site. Their keys are published on purpose and hold worthless test SOL. Connect Demo Freelancer, create an invoice, switch to Demo Client 1, pay it, and watch the balances change. An on-screen Activity log shows every step. Phantom/Solflare also work.
@steppeinvoice_bot (Russian, Kazakh, English; picks the language from Telegram, /lang overrides it). Every action is a button on the main menu:
/demo): the bot creates an invoice as Demo Freelancer, offers Pay as demo client, and then sends the "Paid" alert with a link to the act. The whole flow with nothing to install./new): a short dialogue that hands a prefilled draft to the site, where the wallet signs./wallet <address> or /wallet demo), My invoices (/my), Taxes (/tax), SOL rate (/rate)./dashboard combines on-chain income with income earned elsewhere (added by hand), and estimates Kazakhstan 2026 taxes for the self-employed regime and for an IP on the simplified declaration, with the next payment deadlines. Rules and sources live in app/lib/tax/kz2026.ts and are covered by tests. It is an estimate, not tax advice.
Prerequisites: Rust, Solana CLI, Anchor 1.2.1, Node 22. (On Windows use WSL Ubuntu; scripts/ contains the setup helpers.)
# 1. Program tests (local validator)
anchor build
anchor test --validator legacy # 9 passing
# 2. Web app
cd app
cp .env.example .env.local # set NEXT_PUBLIC_PROGRAM_ID (+ bot variables, see docs/TELEGRAM_SETUP.md)
npm install --legacy-peer-deps
npm run dev # ngrok tunnel + Telegram webhook + site, one command
npm run dev:plain # site only, http://localhost:3000
npm run build # production build
npx vitest run # split math unit tests
# 3. End-to-end scripts (any cluster)
KEYPAIR=~/.config/solana/id.json RPC=https://api.devnet.solana.com \
NEXT_PUBLIC_PROGRAM_ID=<id> npx tsx scripts/smoke.ts
KEYPAIR=... RPC=... APP=http://localhost:3000 NEXT_PUBLIC_PROGRAM_ID=<id> npx tsx scripts/blink-e2e.ts
solana config set --url devnet
solana airdrop 2 # or https://faucet.solana.com
anchor deploy --provider.cluster devnet
Program ID (declared in the program): 7ze4Utjmn73v42terYZMTFVGCt2ygVu9u85US89uNGJm
Deployed on Devnet: program. Sample create/pay transactions:
docs/DEVNET.md.
GET /actions.json (and /api/actions.json): routing rules for /pay/*/* → /api/actions/invoice/*/*.GET /api/actions/invoice/:creator/:id: Action metadata (dynamic banner, title, auto-split description, Pay Invoice label).POST /api/actions/invoice/:creator/:id with { "account": "<payer>" }: returns a base64 pay_invoice transaction + message.Blinks unfurl inside X only from a public HTTPS domain registered with Dialect; every invoice also works through https://dial.to/?action=solana-action:<action-url>.
SPL USDC, yield-vault routing, per-invoice client details on-chain via hashed metadata, recurring invoices, Kaspi/KZT off-ramp partners, e-sign of the Act.