Yoink
Jouez à Yoink, un jeu capture-the-flag onchain sur Base. Yoink le drapeau du détenteur actuel pour démarrer votre chronomètre. Le joueur avec le plus de yoinks au total détient le trophée.
Contract: 0x4bBFD120d9f352A0BEd7a014bd67913a2007a878 sur Base (chain ID 8453)
Game Rules
- Yoink le drapeau - Appelez
yoink()pour prendre le drapeau du détenteur actuel - Cooldown - Vous devez attendre 10 minutes (600 secondes) entre les yoinks
- Pas d'auto-yoink - Vous ne pouvez pas yoink depuis vous-même
- Accumuler le temps - Tant que vous tenez le drapeau, votre score de temps augmente
- Concourir pour le trophée - Le joueur avec le plus de yoinks au total détient le trophée (token ID 2)
- Suivre les yoinks - Votre nombre total de yoinks est suivi séparément du temps
Contract Interface
RPC template:
curl -s -X POST https://mainnet.base.org -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x4bBFD120d9f352A0BEd7a014bd67913a2007a878","data":"SELECTOR+PARAMS"},"latest"],"id":1}' | jq -r '.result'
| Function | Selector | Params | Returns |
|---|---|---|---|
yoink() |
0x9846cd9e |
- | (write) |
lastYoinkedBy() |
0xd4dbf9f4 |
- | address |
lastYoinkedAt() |
0x6a99616f |
- | uint256 timestamp |
totalYoinks() |
0xa5d0dadd |
- | uint256 |
topYoinker() |
0x6a974e6e |
- | address (trophy holder) |
mostYoinks() |
0xd2d7774a |
- | uint256 (record) |
COOLDOWN() |
0xa2724a4d |
- | uint256 (600) |
score(address) |
0x776f3843 |
addr (32B padded) | (yoinks, time, lastYoinkedAt) |
balanceOf(address,uint256) |
0x00fdd58e |
addr + tokenId | uint256 (FLAG_ID=1, TROPHY_ID=2) |
Encoding: Les adresses sont complétées à 32 bytes. score() retourne 96 bytes (3 × uint256).
Yoinking
Utilisez la fonction de transaction arbitraire de Bankr:
{
"to": "0x4bBFD120d9f352A0BEd7a014bd67913a2007a878",
"data": "0x9846cd9e",
"value": "0",
"chainId": 8453
}
Errors
| Error | Selector | Meaning |
|---|---|---|
SlowDown(uint256) |
0x58d6f4c6 |
Cooldown not elapsed. Param = seconds remaining. |
Unauthorized() |
0x82b42900 |
You already hold the flag. |
Cooldown check: current_time - lastYoinkedAt() >= 600
Workflow
- Requête
lastYoinkedBy()etlastYoinkedAt()pour vérifier le statut/cooldown - Vérifiez que le cooldown est écoulé (600s) et que vous n'êtes pas le détenteur actuel
- Soumettez la transaction yoink via Bankr
- Vérifiez avec
lastYoinkedBy()ouscore(address)
Resources
- Basescan: https://basescan.org/address/0x4bBFD120d9f352A0BEd7a014bd67913a2007a878 (ABI, events, source)
- Source Code: https://github.com/horsefacts/yoink-contracts