Stake on your LinkedIn Games performance using stablecoins and earn rewards based on real, verified results. Built for LinkedIn Games fans using Algorand blockchain logic on Sepolia testnet, PyTeal (Python smart contracts), Solidity, TypeScript, TailWind and Next.js.
- Sepolia Testnet - All staking and rewards use the Ethereum Sepolia testnet for fast, low-cost testing
- USDC Stablecoin - Stake and earn rewards using Sepolia USDC (ERC20)
- Algorand Blockchain - Fast, secure, and near-zero transaction fees
- Python Smart Contracts - PyTeal for readable, Python-based blockchain logic
- USDC Staking - Stake stablecoins on your LinkedIn Games scores
- Score Verification - On-chain verification of game performance
- Instant Rewards - Earn up to 20% APY when you meet your target score
- Pera/Defly Wallet - Easy wallet integration for Algorand
- Pleasant UI - Clean, minimal design inspired by competitive gaming and LinkedIn Games
- Zero Gas Fees - Free testnet transactions, minimal mainnet costs
- Connect Wallet - Link your MetaMask wallet (Sepolia testnet)
- Choose Game - Select a LinkedIn Game (Queens, Crossword, Pinpoint, Tango, Zip & Mini Sudoku)
- Stake USDC - Set your target and stake amount (minimum: 0.01 USDC)
- Play & Verify - Complete the game and verify your result on-chain
- Earn Rewards - Meet your target = get your stake back + 20% APY!
- Next.js 14 - React framework with App Router
- TypeScript - Type-safe development
- TailwindCSS - For the styling
- Framer Motion - Smooth animations
- @txnlab/use-wallet - Algorand wallet connection
- Solidity - For 1 smart contract
- algosdk - Algorand JavaScript SDK
- PyTeal - Python for Algorand smart contracts
- Sepolia Testnet - Free, fast blockchain (3.7s finality)
- TEAL - Algorand's compiled contract language
- Box Storage - Scalable on-chain data storage
- Python 3.8+ - Contract compilation & deployment
- py-sepolia-sdk - Python SDK for Sepolia
- Node.js 18+ and npm
- Python 3.8+ and pip
- MetaMask Wallet (mobile or browser extension)
- Sepolia Testnet Account (created via wallet)
cd StakeLiGames
npm installcd contracts
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
pip install -r requirements.txt# From contracts directory
python compile_solidity.pyThis generates:
staking_approval.teal- Main contract logicstaking_clear.teal- Clear state program
The testnet now uses Sepolia USDC (ERC20) for simulation and staking.
- Visit the official Circle Sepolia USDC faucet: https://faucet.circle.com/
- Connect your wallet (e.g., MetaMask) and select the Sepolia network.
- Paste your wallet address and request testnet USDC.
- Confirm the transaction in your wallet.
- You will receive Sepolia USDC directly to your wallet (no asset opt-in required).
Note: The old Algorand testnet asset (ID 10458941) is no longer used. All staking and rewards now use Sepolia USDC.
# From contracts directory (with venv activated)
python deploy_sepolia.pyOptions:
- Enter existing mnemonic (25 words from your wallet) OR
- Press Enter to generate a new account (you'll need to fund it)
The deployment script will:
- Compile PyTeal → TEAL
- Deploy to Algorand testnet
- Generate Application ID
- Create
.env.localwith config
Output:
Contract deployed successfully!
Application ID: 123456789
Application Address: XXXX...
The deployment script automatically creates .env.local:
# Ethereum Sepolia Configuration
NEXT_PUBLIC_CHAIN_ID=
NEXT_PUBLIC_RPC_URL=https://rpc.sepolia.org
NEXT_PUBLIC_NETWORK_NAME=Sepolia Testnet
# Smart Contract Addresses
NEXT_PUBLIC_CONTRACT_ADDRESS=
NEXT_PUBLIC_USDC_ADDRESS=
# Application Settings
NEXT_PUBLIC_APP_NAME=
# From project root
npm run dev-
Connect Wallet - Click "Connect Wallet" (top right)
-
Select Game:
- Queens (Hard) - Complete in under 40 seconds → 25% reward
- Crossclimb (Hard) - Complete in under 50 seconds → 25% reward
- Mini Sudoku (Medium) - Complete in under 80 seconds → 20% reward
- Tango (Medium) - Complete in under 90 seconds → 20% reward
- Zip (Easy) - Complete in under 120 seconds → 15% reward
- Pinpoint (Special) - Score 1-5 or NA → 30% reward
-
Configure Stake:
- Enter USDC amount (min: 0.01 USDC)
- Set your target (time or score, as per game)
- Review estimated returns
-
Create Stake - Approve transaction in wallet
-
Play Game - Complete your LinkedIn Game
-
Verify Result - Submit your result to claim rewards
// Example: Verify score and claim rewards
// This functionality will trigger the smart contract to:
// - Check if score >= target
// - If YES: Return stake + 20% reward
// - If NO: Stake goes to reward pool# Frontend
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
# Smart Contracts
npm run contracts:compile # Compile PyTeal contracts
npm run contracts:deploy # Deploy to Sepolia
# Python (from contracts/)
python compile_solidity.py # Compile contracts
python deploy_sepolia.py # Deploy to testnet- Faucet: https://sepolia-faucet.pk910.de/#/ (Get free Sepolia ETH - Official)
- Explorer Options:
- https://testnet.explorer.perawallet.app (Pera Explorer - Recommended)
- https://testnet.explorer.lora.algokit.io (Lora Explorer)
- https://app.dappflow.org/explorer (Dappflow)
- Docs: https://developer.algorand.org (Algorand dev docs)
- PyTeal Guide: https://pyteal.readthedocs.io (Smart contract docs)
- AlgoNode API: https://testnet-api.algonode.cloud (Free RPC node - Most reliable)
Global State:
total_staked- Total USDC locked in platformtotal_games- Number of games createdplatform_fee- Fee percentage (250 = 2.5%)owner- Platform owner address
Local State (per user):
staked_amount- User's active stakesgames_participated- Total games counttotal_winnings- Cumulative winningstotal_losses- Cumulative losses
Box Storage (scalable):
- Game data: player, target score, stake amount, timestamp, status
-
create_game- Create new stake on game result- Args: game_id, target_score, stake_amount
- Requires: USDC transfer to contract (min: 0.01 USDC)
-
verify_payout- Verify result and distribute rewards- Args: game_id, actual_score
- Logic: If result meets/exceeds target → return stake + reward (see above)
- Else: stake → reward pool
-
withdraw_fees- Owner withdraws platform fees- Args: amount
- Requires: Owner signature
- Clean & Minimal - Inspired by the challenge and excitement of LinkedIn Games
- Accessible - High contrast, readable fonts
- Responsive - Mobile-first design
- OpenZeppelin patterns (Algorand equivalent)
- Reentrancy protection via atomic transactions
- Access control for admin functions
- Box storage for scalability
- Testnet first - Deploy safely before mainnet
Vercel (Recommended):
npm install -g vercel
vercel deployNetlify:
npm run build
netlify deploy --prod --dir=.nextEdit components/StakingInterface.tsx:
const games = [
{ id: "new_game", name: "New Game", difficulty: "Hard", targetTime: 60, unit: "sec", reward: "25%" },
// ... existing games
];Edit contracts/staking_contract.py:
reward := stake_amount / Int(5), # 20% reward (1/5)
# Change to stake_amount / Int(4) for 25%
# Change to stake_amount / Int(10) for 10%Recompile and redeploy:
python compile_solidity.py
python deploy_sepolia.pyContributions welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
- Algorand Discord: https://discord.gg/algorand
- PyTeal Docs: https://pyteal.readthedocs.ionot
- Next.js Docs: https://nextjs.org/docs
-
Video Demo: https://youtu.be/JwrerLWBUw0
-
FirstDollar: https://firstdollar.money/SoumilMukh6476
-
Referral: https://firstdollar.money/?r=k3S11X
-
Blockchain Python: https://github.com/topics/blockchain-python
Built with love using Algorand + PyTeal + Next.js
Turn your gaming confidence into instant liquidity!
- Contract Address: 0x68900B5594De2D84FeE2265b01B3481b090E11e8
- Chain ID: 11155111
- Network: Sepolia Testnet
📦 StakeLiGames
├─ .env.example
├─ .eslintrc.json
├─ .gitignore
├─ GAME_CONFIGURATIONS.md
├─ README.md
├─ app
│ ├─ dashboard
│ │ └─ page.tsx
│ ├─ game
│ │ └─ [gameId]
│ │ └─ page.tsx
│ ├─ globals.css
│ ├─ layout.tsx
│ └─ page.tsx
├─ components
│ ├─ Features.tsx
│ ├─ Footer.tsx
│ ├─ Header.tsx
│ ├─ Hero.tsx
│ ├─ HowItWorks.tsx
│ ├─ NotificationBar.tsx
│ ├─ StakedGamesDashboard.tsx
│ ├─ StakingInterface.tsx
│ ├─ Stats.tsx
│ ├─ ThemeProvider.tsx
│ ├─ ThemeToggle.tsx
│ ├─ UserDashboard.tsx
│ └─ WalletProvider.tsx
├─ contracts
│ ├─ .env.example
│ ├─ @openzeppelin
│ │ └─ contracts
│ │ ├─ access
│ │ │ ├─ AccessControl.sol
│ │ │ ├─ AccessControlCrossChain.sol
│ │ │ ├─ AccessControlDefaultAdminRules.sol
│ │ │ ├─ AccessControlEnumerable.sol
│ │ │ ├─ IAccessControl.sol
│ │ │ ├─ IAccessControlDefaultAdminRules.sol
│ │ │ ├─ IAccessControlEnumerable.sol
│ │ │ ├─ Ownable.sol
│ │ │ ├─ Ownable2Step.sol
│ │ │ └─ README.adoc
│ │ ├─ crosschain
│ │ │ ├─ CrossChainEnabled.sol
│ │ │ ├─ README.adoc
│ │ │ ├─ amb
│ │ │ │ ├─ CrossChainEnabledAMB.sol
│ │ │ │ └─ LibAMB.sol
│ │ │ ├─ arbitrum
│ │ │ │ ├─ CrossChainEnabledArbitrumL1.sol
│ │ │ │ ├─ CrossChainEnabledArbitrumL2.sol
│ │ │ │ ├─ LibArbitrumL1.sol
│ │ │ │ └─ LibArbitrumL2.sol
│ │ │ ├─ errors.sol
│ │ │ ├─ optimism
│ │ │ │ ├─ CrossChainEnabledOptimism.sol
│ │ │ │ └─ LibOptimism.sol
│ │ │ └─ polygon
│ │ │ └─ CrossChainEnabledPolygonChild.sol
│ │ ├─ finance
│ │ │ ├─ PaymentSplitter.sol
│ │ │ ├─ README.adoc
│ │ │ └─ VestingWallet.sol
│ │ ├─ governance
│ │ │ ├─ Governor.sol
│ │ │ ├─ IGovernor.sol
│ │ │ ├─ README.adoc
│ │ │ ├─ TimelockController.sol
│ │ │ ├─ compatibility
│ │ │ │ ├─ GovernorCompatibilityBravo.sol
│ │ │ │ └─ IGovernorCompatibilityBravo.sol
│ │ │ ├─ extensions
│ │ │ │ ├─ GovernorCountingSimple.sol
│ │ │ │ ├─ GovernorPreventLateQuorum.sol
│ │ │ │ ├─ GovernorProposalThreshold.sol
│ │ │ │ ├─ GovernorSettings.sol
│ │ │ │ ├─ GovernorTimelockCompound.sol
│ │ │ │ ├─ GovernorTimelockControl.sol
│ │ │ │ ├─ GovernorVotes.sol
│ │ │ │ ├─ GovernorVotesComp.sol
│ │ │ │ ├─ GovernorVotesQuorumFraction.sol
│ │ │ │ └─ IGovernorTimelock.sol
│ │ │ └─ utils
│ │ │ ├─ IVotes.sol
│ │ │ └─ Votes.sol
│ │ ├─ interfaces
│ │ │ ├─ IERC1155.sol
│ │ │ ├─ IERC1155MetadataURI.sol
│ │ │ ├─ IERC1155Receiver.sol
│ │ │ ├─ IERC1271.sol
│ │ │ ├─ IERC1363.sol
│ │ │ ├─ IERC1363Receiver.sol
│ │ │ ├─ IERC1363Spender.sol
│ │ │ ├─ IERC165.sol
│ │ │ ├─ IERC1820Implementer.sol
│ │ │ ├─ IERC1820Registry.sol
│ │ │ ├─ IERC1967.sol
│ │ │ ├─ IERC20.sol
│ │ │ ├─ IERC20Metadata.sol
│ │ │ ├─ IERC2309.sol
│ │ │ ├─ IERC2612.sol
│ │ │ ├─ IERC2981.sol
│ │ │ ├─ IERC3156.sol
│ │ │ ├─ IERC3156FlashBorrower.sol
│ │ │ ├─ IERC3156FlashLender.sol
│ │ │ ├─ IERC4626.sol
│ │ │ ├─ IERC4906.sol
│ │ │ ├─ IERC5267.sol
│ │ │ ├─ IERC5313.sol
│ │ │ ├─ IERC5805.sol
│ │ │ ├─ IERC6372.sol
│ │ │ ├─ IERC721.sol
│ │ │ ├─ IERC721Enumerable.sol
│ │ │ ├─ IERC721Metadata.sol
│ │ │ ├─ IERC721Receiver.sol
│ │ │ ├─ IERC777.sol
│ │ │ ├─ IERC777Recipient.sol
│ │ │ ├─ IERC777Sender.sol
│ │ │ ├─ README.adoc
│ │ │ ├─ draft-IERC1822.sol
│ │ │ └─ draft-IERC2612.sol
│ │ ├─ metatx
│ │ │ ├─ ERC2771Context.sol
│ │ │ ├─ MinimalForwarder.sol
│ │ │ └─ README.adoc
│ │ ├─ mocks
│ │ │ ├─ AccessControlCrossChainMock.sol
│ │ │ ├─ ArraysMock.sol
│ │ │ ├─ CallReceiverMock.sol
│ │ │ ├─ ConditionalEscrowMock.sol
│ │ │ ├─ ContextMock.sol
│ │ │ ├─ DummyImplementation.sol
│ │ │ ├─ EIP712Verifier.sol
│ │ │ ├─ ERC1271WalletMock.sol
│ │ │ ├─ ERC165
│ │ │ │ ├─ ERC165MaliciousData.sol
│ │ │ │ ├─ ERC165MissingData.sol
│ │ │ │ ├─ ERC165NotSupported.sol
│ │ │ │ └─ ERC165ReturnBomb.sol
│ │ │ ├─ ERC20Mock.sol
│ │ │ ├─ ERC20Reentrant.sol
│ │ │ ├─ ERC2771ContextMock.sol
│ │ │ ├─ ERC3156FlashBorrowerMock.sol
│ │ │ ├─ ERC4626Mock.sol
│ │ │ ├─ EtherReceiverMock.sol
│ │ │ ├─ InitializableMock.sol
│ │ │ ├─ MulticallTest.sol
│ │ │ ├─ MultipleInheritanceInitializableMocks.sol
│ │ │ ├─ PausableMock.sol
│ │ │ ├─ PullPaymentMock.sol
│ │ │ ├─ ReentrancyAttack.sol
│ │ │ ├─ ReentrancyMock.sol
│ │ │ ├─ RegressionImplementation.sol
│ │ │ ├─ SafeMathMemoryCheck.sol
│ │ │ ├─ SingleInheritanceInitializableMocks.sol
│ │ │ ├─ StorageSlotMock.sol
│ │ │ ├─ TimelockReentrant.sol
│ │ │ ├─ TimersBlockNumberImpl.sol
│ │ │ ├─ TimersTimestampImpl.sol
│ │ │ ├─ VotesMock.sol
│ │ │ ├─ compound
│ │ │ │ └─ CompTimelock.sol
│ │ │ ├─ crosschain
│ │ │ │ ├─ bridges.sol
│ │ │ │ └─ receivers.sol
│ │ │ ├─ docs
│ │ │ │ └─ ERC4626Fees.sol
│ │ │ ├─ governance
│ │ │ │ ├─ GovernorCompMock.sol
│ │ │ │ ├─ GovernorCompatibilityBravoMock.sol
│ │ │ │ ├─ GovernorMock.sol
│ │ │ │ ├─ GovernorPreventLateQuorumMock.sol
│ │ │ │ ├─ GovernorTimelockCompoundMock.sol
│ │ │ │ ├─ GovernorTimelockControlMock.sol
│ │ │ │ ├─ GovernorVoteMock.sol
│ │ │ │ └─ GovernorWithParamsMock.sol
│ │ │ ├─ proxy
│ │ │ │ ├─ BadBeacon.sol
│ │ │ │ ├─ ClashingImplementation.sol
│ │ │ │ ├─ UUPSLegacy.sol
│ │ │ │ └─ UUPSUpgradeableMock.sol
│ │ │ ├─ token
│ │ │ │ ├─ ERC1155ReceiverMock.sol
│ │ │ │ ├─ ERC20DecimalsMock.sol
│ │ │ │ ├─ ERC20ExcessDecimalsMock.sol
│ │ │ │ ├─ ERC20FlashMintMock.sol
│ │ │ │ ├─ ERC20ForceApproveMock.sol
│ │ │ │ ├─ ERC20MulticallMock.sol
│ │ │ │ ├─ ERC20NoReturnMock.sol
│ │ │ │ ├─ ERC20PermitNoRevertMock.sol
│ │ │ │ ├─ ERC20ReturnFalseMock.sol
│ │ │ │ ├─ ERC20VotesLegacyMock.sol
│ │ │ │ ├─ ERC4626OffsetMock.sol
│ │ │ │ ├─ ERC4646FeesMock.sol
│ │ │ │ ├─ ERC721ConsecutiveEnumerableMock.sol
│ │ │ │ ├─ ERC721ConsecutiveMock.sol
│ │ │ │ ├─ ERC721ReceiverMock.sol
│ │ │ │ ├─ ERC721URIStorageMock.sol
│ │ │ │ ├─ ERC777Mock.sol
│ │ │ │ ├─ ERC777SenderRecipientMock.sol
│ │ │ │ └─ VotesTimestamp.sol
│ │ │ └─ wizard
│ │ │ ├─ MyGovernor1.sol
│ │ │ ├─ MyGovernor2.sol
│ │ │ └─ MyGovernor3.sol
│ │ ├─ package.json
│ │ ├─ proxy
│ │ │ ├─ Clones.sol
│ │ │ ├─ ERC1967
│ │ │ │ ├─ ERC1967Proxy.sol
│ │ │ │ └─ ERC1967Upgrade.sol
│ │ │ ├─ Proxy.sol
│ │ │ ├─ README.adoc
│ │ │ ├─ beacon
│ │ │ │ ├─ BeaconProxy.sol
│ │ │ │ ├─ IBeacon.sol
│ │ │ │ └─ UpgradeableBeacon.sol
│ │ │ ├─ transparent
│ │ │ │ ├─ ProxyAdmin.sol
│ │ │ │ └─ TransparentUpgradeableProxy.sol
│ │ │ └─ utils
│ │ │ ├─ Initializable.sol
│ │ │ └─ UUPSUpgradeable.sol
│ │ ├─ security
│ │ │ ├─ Pausable.sol
│ │ │ ├─ PullPayment.sol
│ │ │ ├─ README.adoc
│ │ │ └─ ReentrancyGuard.sol
│ │ ├─ token
│ │ │ ├─ ERC1155
│ │ │ │ ├─ ERC1155.sol
│ │ │ │ ├─ IERC1155.sol
│ │ │ │ ├─ IERC1155Receiver.sol
│ │ │ │ ├─ README.adoc
│ │ │ │ ├─ extensions
│ │ │ │ │ ├─ ERC1155Burnable.sol
│ │ │ │ │ ├─ ERC1155Pausable.sol
│ │ │ │ │ ├─ ERC1155Supply.sol
│ │ │ │ │ ├─ ERC1155URIStorage.sol
│ │ │ │ │ └─ IERC1155MetadataURI.sol
│ │ │ │ ├─ presets
│ │ │ │ │ ├─ ERC1155PresetMinterPauser.sol
│ │ │ │ │ └─ README.md
│ │ │ │ └─ utils
│ │ │ │ ├─ ERC1155Holder.sol
│ │ │ │ └─ ERC1155Receiver.sol
│ │ │ ├─ ERC20
│ │ │ │ ├─ ERC20.sol
│ │ │ │ ├─ IERC20.sol
│ │ │ │ ├─ README.adoc
│ │ │ │ ├─ extensions
│ │ │ │ │ ├─ ERC20Burnable.sol
│ │ │ │ │ ├─ ERC20Capped.sol
│ │ │ │ │ ├─ ERC20FlashMint.sol
│ │ │ │ │ ├─ ERC20Pausable.sol
│ │ │ │ │ ├─ ERC20Permit.sol
│ │ │ │ │ ├─ ERC20Snapshot.sol
│ │ │ │ │ ├─ ERC20Votes.sol
│ │ │ │ │ ├─ ERC20VotesComp.sol
│ │ │ │ │ ├─ ERC20Wrapper.sol
│ │ │ │ │ ├─ ERC4626.sol
│ │ │ │ │ ├─ IERC20Metadata.sol
│ │ │ │ │ ├─ IERC20Permit.sol
│ │ │ │ │ ├─ draft-ERC20Permit.sol
│ │ │ │ │ └─ draft-IERC20Permit.sol
│ │ │ │ ├─ presets
│ │ │ │ │ ├─ ERC20PresetFixedSupply.sol
│ │ │ │ │ ├─ ERC20PresetMinterPauser.sol
│ │ │ │ │ └─ README.md
│ │ │ │ └─ utils
│ │ │ │ ├─ SafeERC20.sol
│ │ │ │ └─ TokenTimelock.sol
│ │ │ ├─ ERC721
│ │ │ │ ├─ ERC721.sol
│ │ │ │ ├─ IERC721.sol
│ │ │ │ ├─ IERC721Receiver.sol
│ │ │ │ ├─ README.adoc
│ │ │ │ ├─ extensions
│ │ │ │ │ ├─ ERC721Burnable.sol
│ │ │ │ │ ├─ ERC721Consecutive.sol
│ │ │ │ │ ├─ ERC721Enumerable.sol
│ │ │ │ │ ├─ ERC721Pausable.sol
│ │ │ │ │ ├─ ERC721Royalty.sol
│ │ │ │ │ ├─ ERC721URIStorage.sol
│ │ │ │ │ ├─ ERC721Votes.sol
│ │ │ │ │ ├─ ERC721Wrapper.sol
│ │ │ │ │ ├─ IERC721Enumerable.sol
│ │ │ │ │ ├─ IERC721Metadata.sol
│ │ │ │ │ └─ draft-ERC721Votes.sol
│ │ │ │ ├─ presets
│ │ │ │ │ ├─ ERC721PresetMinterPauserAutoId.sol
│ │ │ │ │ └─ README.md
│ │ │ │ └─ utils
│ │ │ │ └─ ERC721Holder.sol
│ │ │ ├─ ERC777
│ │ │ │ ├─ ERC777.sol
│ │ │ │ ├─ IERC777.sol
│ │ │ │ ├─ IERC777Recipient.sol
│ │ │ │ ├─ IERC777Sender.sol
│ │ │ │ ├─ README.adoc
│ │ │ │ └─ presets
│ │ │ │ └─ ERC777PresetFixedSupply.sol
│ │ │ └─ common
│ │ │ ├─ ERC2981.sol
│ │ │ └─ README.adoc
│ │ ├─ utils
│ │ │ ├─ Address.sol
│ │ │ ├─ Arrays.sol
│ │ │ ├─ Base64.sol
│ │ │ ├─ Checkpoints.sol
│ │ │ ├─ Context.sol
│ │ │ ├─ Counters.sol
│ │ │ ├─ Create2.sol
│ │ │ ├─ Multicall.sol
│ │ │ ├─ README.adoc
│ │ │ ├─ ShortStrings.sol
│ │ │ ├─ StorageSlot.sol
│ │ │ ├─ Strings.sol
│ │ │ ├─ Timers.sol
│ │ │ ├─ cryptography
│ │ │ │ ├─ ECDSA.sol
│ │ │ │ ├─ EIP712.sol
│ │ │ │ ├─ MerkleProof.sol
│ │ │ │ ├─ SignatureChecker.sol
│ │ │ │ └─ draft-EIP712.sol
│ │ │ ├─ escrow
│ │ │ │ ├─ ConditionalEscrow.sol
│ │ │ │ ├─ Escrow.sol
│ │ │ │ └─ RefundEscrow.sol
│ │ │ ├─ introspection
│ │ │ │ ├─ ERC165.sol
│ │ │ │ ├─ ERC165Checker.sol
│ │ │ │ ├─ ERC165Storage.sol
│ │ │ │ ├─ ERC1820Implementer.sol
│ │ │ │ ├─ IERC165.sol
│ │ │ │ ├─ IERC1820Implementer.sol
│ │ │ │ └─ IERC1820Registry.sol
│ │ │ ├─ math
│ │ │ │ ├─ Math.sol
│ │ │ │ ├─ SafeCast.sol
│ │ │ │ ├─ SafeMath.sol
│ │ │ │ ├─ SignedMath.sol
│ │ │ │ └─ SignedSafeMath.sol
│ │ │ └─ structs
│ │ │ ├─ BitMaps.sol
│ │ │ ├─ DoubleEndedQueue.sol
│ │ │ ├─ EnumerableMap.sol
│ │ │ └─ EnumerableSet.sol
│ │ └─ vendor
│ │ ├─ amb
│ │ │ └─ IAMB.sol
│ │ ├─ arbitrum
│ │ │ ├─ IArbSys.sol
│ │ │ ├─ IBridge.sol
│ │ │ ├─ IDelayedMessageProvider.sol
│ │ │ ├─ IInbox.sol
│ │ │ └─ IOutbox.sol
│ │ ├─ compound
│ │ │ ├─ ICompoundTimelock.sol
│ │ │ └─ LICENSE
│ │ ├─ optimism
│ │ │ ├─ ICrossDomainMessenger.sol
│ │ │ └─ LICENSE
│ │ └─ polygon
│ │ └─ IFxMessageProcessor.sol
│ ├─ StakeLiGames.sol
│ ├─ abi.json
│ ├─ bytecode.txt
│ ├─ compile.py
│ ├─ compile_solidity.py
│ ├─ compiled_contract.json
│ ├─ deploy.py
│ ├─ deploy_sepolia.py
│ ├─ deployment.json
│ ├─ hardhat.config.js
│ ├─ package.json
│ ├─ requirements.txt
│ ├─ scripts
│ │ └─ deploy.js
│ └─ staking_contract.py
├─ next.config.js
├─ package-lock.json
├─ package.json
├─ postcss.config.js
├─ public
│ └─ favicon.jpg
├─ tailwind.config.ts
├─ tsconfig.json
└─ types
└─ ethereum.d.ts