Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Golazo is a Web3-integrated 3D penalty kick football game built with React, React Three Fiber, and Wagmi. It features a vibrant, high-contrast arcade aesthetic and runs on X1 EcoChain — an EVM-compatible Layer-1 secured by Proof of Nodes (PoN).
Formerly "StrikeGraph" (a Hedera hashgraph pun); renamed after migrating to X1 EcoChain.README 전문 보기 ↗Live URL: https://playgolazo.xyz
Golazo is a Web3-integrated 3D penalty kick football game built with React, React Three Fiber, and Wagmi. It features a vibrant, high-contrast arcade aesthetic and runs on X1 EcoChain — an EVM-compatible Layer-1 secured by Proof of Nodes (PoN).
Formerly "StrikeGraph" (a Hedera hashgraph pun); renamed after migrating to X1 EcoChain.
keccak256(zone, salt, you) is committed on-chain — your choice stays hidden.blockhash(commitBlock + 1) — a value that did not exist when you committed and can never change afterwards.zone + salt; the contract checks the hash, computes GOAL / SAVED, and pays 2× on a goal. No server, no oracle.Golazo Player / GOLP) with fully on-chain metadata + SVG art. A higher tier makes the keeper cover fewer of the 6 corners (Base/Striker 3, Sniper 2, Legend 1 → a provably-fair 50/50 at Base).ShotResolved events; each result screen shows the real gas cost (~0.0001 X1T for commit + reveal) and links the reveal transaction.E[Δpool] = ½·(+stake) + ½·(−stake) = 0); higher tiers are a deliberate, pool-funded subsidy. commitShot caps a stake so the pool can always pay 2×; the owner tops up / withdraws surplus.| Setting | Value |
|---|---|
| Chain ID | 10778 |
| RPC URL | https://maculatus-rpc.x1eco.com |
| Currency symbol | X1T (18 decimals) |
| Block explorer | https://maculatus-scan.x1eco.com (Blockscout) |
| Faucet | X1 EcoChain Discord — /faucet <address> in #faucet (100 X1T / 24h, balance must be < 500 X1T) |
GolazoArena | 0xdd4973C245924739B38E5b8964CfAF90A17F5ca9 (verified) |
/web3)cd web3
cp .env.example .env # add PRIVATE_KEY of a faucet-funded wallet
npm install
npm test # 12 tests — commit/reveal, stake cap, ERC-721, expiry, pool accounting
npm run deploy # deploys GolazoArena to x1Testnet
After deployment, set GOLAZO_ARENA_ADDRESS in src/config/contract.js to the printed address, then fund payout liquidity (fundContract() is onlyOwner + payable). Verify with npx hardhat verify --network x1Testnet <address>.
| Function | Purpose |
|---|---|
commitShot(bytes32) payable | stake + submit the hidden shot commitment; reverts if 2·stake > poolBalance |
revealShot(uint8 zone, bytes32 salt) | reveal; contract settles GOAL/SAVED — GOAL pays 2×, SAVED keeps the stake in the pool |
expireCommit(address) | anyone clears an unrevealed match after ~240 blocks; the stake stays in the pool |
buyPlayerVariant(uint8 tier) payable | mint a Golazo Player ERC-721 (tier 1/2/3 = 5/10/25 X1T); proceeds stay in the pool |
poolBalance() → uint256 | current payout pool (= contract balance) |
highestTier(address) → uint8 | best variant held (drives keeper coverage) |
keeperCover(uint8 tier) → uint8 | corners the keeper covers (3 / 3 / 2 / 1) |
GolazoArena v3 at 0xdd49…5ca9, deployed + verified, pool funded 24 X1T. Live at playgolazo.xyz.
12 / 12 Hardhat tests pass (cd web3 && npm test): commit/reveal happy paths + reverts (too-early, bad salt, wrong zone), stake-capacity cap, keeper-mask bit-count per tier, expireCommit (stake retained), self-heal on stale match (stake retained), ERC-721 mint / highestTier / transfer, pool accounting on GOAL vs SAVED, owner-only withdraw.
Live end-to-end (2026-09-09) — a 3-round run of the exact playPenalty() sequence the site executes (commitShot → poll until block > commitBlock + 1 → revealShot → parse ShotResolved), against the contract playgolazo.xyz serves:
| Round | Shot | Keeper covered (3/6) | Result | Match gas |
|---|---|---|---|---|
| 1 | bottom-R | bottom-R, top-L, top-R | SAVED — stake retained | 0.000102 X1T |
| 2 | bottom-L | bottom-L, bottom-R, top-C | SAVED — stake retained | 0.000102 X1T |
| 3 | top-C | bottom-L, bottom-R, top-R | GOAL — +1.0 X1T (2× the 0.5 stake) | 0.000107 X1T |
Closed-pool economy confirmed on-chain: poolBalance 25.0 → 25.5 → 26.0 on the two SAVEs (stakes stay in), then 26.0 → 25.5 on the GOAL (2× paid from the pool). Player balance moved −0.5 net (staked 1.5, won 1.0, ~0.0003 gas) — reconciles exactly. Keeper covered exactly 3 of 6 corners each round (keeperCover(0) = 3, Base). Match state cleared after every reveal. ~18 s wall per match (mostly the 2-block wait). ~$0.0001-worth of gas per full match.
Earlier runs also confirmed: a 13 X1T stake against a 24.5 X1T pool is rejected (2·stake > pool), and a Legend holder faces a keeper covering exactly 1 corner.
Browser flow, real wallets — on playgolazo.xyz: the landing loads the current build, opening WalletConnect throws no (origin allowlisted at cloud.reown.com), and Blockscout has indexed settled matches from real wallet sessions — i.e. the in-browser commit → reveal (two MetaMask prompts) works in production. The leaderboard and per-wallet record panel read / logs live via the Blockscout API.
Clone the repository:
git clone https://github.com/timothy0987/strikegraph.git
Install dependencies:
npm install --legacy-peer-deps
Run the development server:
npm run dev
The project is configured for automated deployment to Vercel upon pushing to the main branch.
origin not allowedShotResolvedVariantMinted