yoink
Original:🇺🇸 English
Translated
Play Yoink, an onchain capture-the-flag game on Base. Yoink the flag from the current holder, check game stats and leaderboards, view player scores, and compete for the trophy. Uses Bankr for transaction execution.
3installs
Sourcebankrbot/skills
Added on
NPX Install
npx skill4agent add bankrbot/skills yoinkTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Yoink
Play Yoink, an onchain capture-the-flag game on Base. Yoink the flag from the current holder to start your clock. The player with the most total yoinks holds the trophy.
Contract: on Base (chain ID 8453)
0x4bBFD120d9f352A0BEd7a014bd67913a2007a878Game Rules
- Yoink the flag - Call to take the flag from the current holder
yoink() - Cooldown - You must wait 10 minutes (600 seconds) between yoinks
- No self-yoink - You cannot yoink from yourself
- Accumulate time - While you hold the flag, your time score increases
- Compete for trophy - The player with the most total yoinks holds the trophy (token ID 2)
- Track yoinks - Your total yoink count is tracked separately from time
Contract Interface
RPC template:
bash
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 |
|---|---|---|---|
| | - | (write) |
| | - | address |
| | - | uint256 timestamp |
| | - | uint256 |
| | - | address (trophy holder) |
| | - | uint256 (record) |
| | - | uint256 (600) |
| | addr (32B padded) | (yoinks, time, lastYoinkedAt) |
| | addr + tokenId | uint256 (FLAG_ID=1, TROPHY_ID=2) |
Encoding: Addresses are zero-padded to 32 bytes. returns 96 bytes (3 × uint256).
score()Yoinking
Use Bankr's arbitrary transaction feature:
{
"to": "0x4bBFD120d9f352A0BEd7a014bd67913a2007a878",
"data": "0x9846cd9e",
"value": "0",
"chainId": 8453
}Errors
| Error | Selector | Meaning |
|---|---|---|
| | Cooldown not elapsed. Param = seconds remaining. |
| | You already hold the flag. |
Cooldown check:
current_time - lastYoinkedAt() >= 600Workflow
- Query and
lastYoinkedBy()to check status/cooldownlastYoinkedAt() - Ensure cooldown elapsed (600s) and you're not current holder
- Submit yoink transaction via Bankr
- Verify with or
lastYoinkedBy()score(address)
Resources
- Basescan: https://basescan.org/address/0x4bBFD120d9f352A0BEd7a014bd67913a2007a878 (ABI, events, source)
- Source Code: https://github.com/horsefacts/yoink-contracts