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.