Loading…

Trade the block.
Mint the drop.

One attempt costs 0.00019 ETH. If the previous blockhash ends in a–f, you win an NFT. Digits 0–9 — payment stays in the contract (~37.5% win rate). All collected ETH goes into the $LBLOCK liquidity pool.

Wallet not connected

How it works

  1. Connect your wallet on the correct chain.
  2. Mint for exactly 0.00019 ETH.
  3. Contract reads blockhash(prev). Last hex nibble a–f → NFT. 0–9 → no NFT.
  4. All collected ETH goes into the $LBLOCK liquidity pool.
Minted —
Left —
Max 5555
Odds 37.5%

Mint logic

1. Overview

Public mint: each valid attempt costs exactly 0.00019 ETH. Max supply 5,555. All collected ETH goes into the $LBLOCK liquidity pool.

The contract reads the previous block hash and uses its last hex nibble:

  • a–f → win → NFT minted
  • 0–9 → lose → no NFT, ETH stays in the contract
ParameterValue
MINT_PRICE0.00019 ETH
MAX_SUPPLY5555
Win odds37.5% (6/16)
Lose odds62.5% (10/16)
Token IDs1–5555
2. Conditions to mint
  1. Mint not paused (mintActive)
  2. Start time reached (block.timestamp >= mintStartsAt)
  3. Exact 0.00019 ETH — no over/under pay
  4. Supply below 5,555
  5. Previous block hash available and non-zero

Any failed check reverts the transaction. Wrong amounts like 0.00018 or 0.00020 → WrongPrice.

3. How the outcome is decided

For a tx in block N, the contract uses blockhash(N - 1), then:

uint8 lastNibble = uint8(uint256(prev) & 0xf);
won = lastNibble >= 10;  // a–f win, 0–9 lose

Example: hash ending …7c → nibble c → win. Theoretical win rate ≈ 37.5%.

4. Win vs lose

Win: a random unused token ID from 1–5555 is minted (for random traits), emit Transfer + MintAttempt(won=true). ETH stays in the contract.

Lose: no NFT, supply unchanged, tokenId = 0, tx still succeeds, emit MintAttempt(won=false), ETH stays in the contract.

A lose is a valid game outcome — not a failed transaction. Reverts (paused, wrong price, sold out, etc.) are different: no outcome is produced.

5. Mint flow & examples
mintActive? → start time? → exact price?
  → supply < 5555? → prev blockhash OK?
    → 0–9 lose · a–f win (random free ID) → emit MintAttempt
  • Win → random free ID among remaining (not sequential)
  • Lose → no NFT, supply unchanged
  • Wrong ETH / paused / sold out → revert, no event
6. ETH flow

Every valid attempt sends 0.00019 ETH into the contract — win or lose. Funds are not paid out to the player.

All collected ETH goes into the liquidity pool of the $LBLOCK token.

Owner withdraws later with withdraw(address payable to) (full balance, owner-only) to fund that pool.

7. Supply accounting

totalSupply counts minted NFTs only — not attempts. Token IDs are picked at random from the remaining set (not 1, 2, 3…). Reaching max needs exactly 5,555 wins.

At ~37.5% win rate: ≈ 2.67 attempts per NFT, ≈ 14,813 attempts for the full collection (expectation only).

Once sold out, further calls (even would-be losses) revert with SoldOut.

8. MintAttempt event
event MintAttempt(address indexed player, bytes32 prevBlockHash, bool won, uint256 tokenId);

Emitted on every successful mint call. On loss tokenId is 0. Lets anyone verify the outcome from logs.

9. Admin & metadata
  • stopMint() / startMint() — pause switch
  • setMintStartsAt(...) — open time
  • setBaseURI(...) — metadata base

Mint is open only when mintActive and block.timestamp >= mintStartsAt.

Token URI: {baseURI}{tokenId}.json (files 1.json … 5555.json).

10. Safety & randomness notes

mint is nonReentrant. Wins use _safeMint — incompatible contract receivers revert the whole mint.

Randomness is the previous public block hash (last nibble). No VRF / commit-reveal. Fine for a low-stakes game; not cryptographically strong.