ultratears
Unofficial native Windows port of Tears of the Kingdom 1.4.3 using static recompilation. Builds locally from the player's own extracted game dump; no game files included.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Klynt is a Web3 gaming hub on BOT Chain: play open-source browser games, rank on server-checked leaderboards, and claim capped rewards from an on-chain vault using signed authorisations.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Casual browser games on BOT Chain. Play in your browser, rank on checked leaderboards, and claim capped rewards on BOT Chain once a season is funded.
Status: frontend, score service and reward vault built and tested; not yet deployed to BOT Chain
testnet (968). Rewards are off by default. The GGI token is not verified (see Klynt_PRD.md §9),
so the vault is built to pay any approved ERC-20 and is tested with KTP-TEST, testnet points with
no value.
DATABASE_URL. Tables are created on first use..env.example that you need: at least
NEXT_PUBLIC_KLYNT_API=/api and a random KLYNT_SESSION_SECRET; for rewards also
NEXT_PUBLIC_REWARD_VAULT, ATTESTOR_PRIVATE_KEY and REWARDS_ENABLED=true.NEXT_PUBLIC_KLYNT_API the site runs in Practice mode and the API answers 503.Requires Node 22 or newer. No database to install: locally the score service uses PGlite (Postgres compiled to WebAssembly) in .data/pglite; in production it uses DATABASE_URL (Neon).
npm install
cp .env.example .env.local # set KLYNT_SESSION_SECRET for anything beyond local dev
npm run dev # http://localhost:3000
| Command | What it does |
|---|---|
npm run dev | Development server |
npm run build / npm start | Production build and server |
npm test | Unit tests: score rules, sessions, ranking, sign-in |
npm run typecheck | TypeScript |
cd contracts && forge test | Vault tests: replay, expiry, recipients, signers, caps, pauses, admin access, fuzzed caps |
node --experimental-strip-types scripts/check-vault.ts | Server signatures against a deployed vault (see the file's header) |
node scripts/smoke-api.mjs [url] | End-to-end check of the API with a throwaway wallet. It writes test runs to the database it hits, so point it at a dev database only. |
Play page Score service (src/server, src/app/api)
game starts -> POST /api/sessions session ID, server clock starts
game over -> POST /api/sessions/:id/submit
checks: signed-in wallet owns the session, session unused,
length >= game minimum and <= 2 h, score <= ceiling for the length
<- accepted (with rank) or rejected (with the reason)
Leaderboard -> GET /api/leaderboard?game= best accepted score per wallet, ties to the earlier run
Games report scores through public/games/klynt-bridge.js, a same-origin postMessage bridge.
Rules live in src/server/rules.ts (version 1).
After an accepted run, the player can tap Record on BOT Chain. The server signs an EIP-712 record
(POST /api/scores/record) of that run: wallet, season, game, score, run ID and a one-hour expiry. The player
sends it to KlyntScoreboard (contracts/src/KlyntScoreboard.sol) and pays the gas, about 0.002 BOT.
The contract accepts each run once, only from the wallet that played it, keeps every wallet's best score per
game and season, and emits ScoreRecorded. The server marks the run recorded only after it finds that event
in the transaction (POST /api/scores/record/confirm). Nothing is paid out. Set NEXT_PUBLIC_SCOREBOARD
and ATTESTOR_PRIVATE_KEY to switch it on; deploy with forge script script/DeployScoreboard.s.sol.
End-to-end check: scripts/record-run-test.mjs.
accepted run (score >= game threshold, within the daily cap) -> earnings ledger (server)
Rewards page: Claim -> POST /api/rewards/authorize
server bundles unclaimed earnings, capped by the wallet's remaining on-chain cap
and the pool, signs an EIP-712 Claim with the attestor key
-> wallet sends KlyntRewardVault.claim(claim, signature)
vault checks signer, wallet = sender, token, expiry, unused nonce, pool, cap, pauses
-> POST /api/rewards/confirm server finds the Claimed event in the receipt, then records it
The vault (contracts/src/KlyntRewardVault.sol) only transfers tokens it was funded with. It never
mints. The owner can pause one season or everything, rotate or revoke attestor keys, and withdraw
unclaimed funds only after a season's claim window has closed. Ownership moves in two steps and can't
be renounced.
Needs a deployer wallet funded with testnet BOT (faucet.botchain.ai) and a separate attestor key. Keys go in the environment only, never in files in this repo.
cd contracts
export BOT_TESTNET_RPC=https://rpc.bohr.life
export DEPLOYER_PRIVATE_KEY=... # pays gas, becomes the owner
export ATTESTOR_ADDRESS=0x... # address of the server's ATTESTOR_PRIVATE_KEY
export SEASON_BUDGET=10000 # optional: create and fund Season 1 (testnet points)
forge script script/Deploy.s.sol --rpc-url bot_testnet --broadcast
Then set NEXT_PUBLIC_REWARD_VAULT, ATTESTOR_PRIVATE_KEY and REWARDS_ENABLED=true for the app.
Verify the source on the explorer (BOT Scan; confirm its verifier API before relying on
forge verify-contract), then set the matching sign-off flag. The readiness checklist on
/rewards only ticks items that are read from the chain or signed off in config.
viem.verifyMessage). Smart-contract wallets
(ERC-1271) are not supported yet.forge coverage does not run on this Windows setup (it can't resolve OpenZeppelin through
../node_modules); the tests name every revert path instead.NEXT_PUBLIC_ADMIN_WALLETS, but no
admin API exists yet; it must check the signed-in wallet server-side when it is added.| Game | Source | Licence | Klynt changes |
|---|---|---|---|
| Hextris | github.com/Hextris/hextris | GPL-3.0 | Ads, analytics and remote scripts removed; bridge added |
| Tower Blocks | codepen.io/ste-vg/pen/ppLQNW | MIT (CodePen, to confirm) | Old coin API removed; bridge added |
| Astray | github.com/wwwtyro/Astray | Public domain | Texture paths fixed; bridge added |
| Radius Raid | github.com/jackrugile/radius-raid-js13k | MIT | Not integrated yet |
| Coloron | github.com/greghub/coloron | Apache-2.0 | Not integrated yet |
scripts/vendor-games.mjs re-applies the Klynt changes to fresh upstream copies.
docs/FRONTEND.md is the source of truth for the interface.