// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
/// @notice Factory for Robinhood Chain Gamba-style token wager pools.
/// @dev Structural EVM equivalent of Gamba pools: ERC20 LP shares, configurable games,
/// wager requests, committed entropy epochs, and creator/protocol fees.
contract RobinhoodGambleFiFactory is Ownable {
event PoolCreated(address indexed asset, address indexed pool, address indexed treasury, address entropyAdmin);
mapping(address asset => address pool) public poolForAsset;
address[] public allPools;
constructor(address initialOwner) Ownable(initialOwner) {}
function createPool(
IERC20 asset,
string calldata lpName,
string calldata lpSymbol,
address treasury,
address entropyAdmin,
bytes32 firstEntropyCommitment
) external onlyOwner returns (RobinhoodGambleFiPool pool) {
require(address(asset) != address(0), "asset=0");
require(poolForAsset[address(asset)] == address(0), "pool exists");
require(treasury != address(0), "treasury=0");
require(entropyAdmin != address(0), "entropy=0");
require(firstEntropyCommitment != bytes32(0), "commitment=0");
pool = new RobinhoodGambleFiPool(
asset,
lpName,
lpSymbol,
msg.sender,
treasury,
entropyAdmin,
firstEntropyCommitment
);
poolForAsset[address(asset)] = address(pool);
allPools.push(address(pool));
emit PoolCreated(address(asset), address(pool), treasury, entropyAdmin);
}
function poolsLength() external view returns (uint256) {
return allPools.length;
}
}
contract RobinhoodGambleFiPool is ERC20, Ownable, Pausable, ReentrancyGuard {
using SafeERC20 for IERC20;
uint256 public constant BPS = 10_000;
uint256 public constant MAX_OUTCOMES = 256;
uint256 public constant MAX_TOTAL_FEE_BPS = 2_000; // 20%; hard cap so creators cannot hide abusive fees.
IERC20 public immutable asset;
address public treasury;
address public entropyAdmin;
uint256 public lockedLiability;
uint256 public nextGameId = 1;
uint256 public nextRequestId = 1;
uint256 public currentEntropyEpoch = 1;
struct Game {
address creator;
bool active;
string name;
uint256 minWager;
uint256 maxWager;
uint16 creatorFeeBps;
uint16 protocolFeeBps;
uint32 maxMultiplierBps;
uint16[] multipliersBps;
}
struct GameConfig {
string name;
address creator;
uint256 minWager;
uint256 maxWager;
uint16 creatorFeeBps;
uint16 protocolFeeBps;
uint16[] multipliersBps;
}
struct WagerRequest {
address player;
uint256 gameId;
uint256 wager;
uint256 maxLiability;
uint256 entropyEpoch;
bool settled;
}
struct EntropyEpoch {
bytes32 commitment;
bytes32 seed;
bool revealed;
}
mapping(uint256 gameId => Game game) private games;
mapping(uint256 requestId => WagerRequest request) public requests;
mapping(uint256 epoch => EntropyEpoch entropy) public entropyEpochs;
event TreasuryUpdated(address indexed treasury);
event EntropyAdminUpdated(address indexed entropyAdmin);
event EntropyCommitted(uint256 indexed epoch, bytes32 indexed commitment);
event EntropyRevealed(uint256 indexed epoch, bytes32 seed, uint256 indexed nextEpoch, bytes32 nextCommitment);
event GameCreated(uint256 indexed gameId, address indexed creator, string name, uint256 minWager, uint256 maxWager);
event GameStatusUpdated(uint256 indexed gameId, bool active);
event LiquidityDeposited(address indexed provider, uint256 assets, uint256 shares);
event LiquidityWithdrawn(address indexed provider, uint256 assets, uint256 shares);
event WagerPlaced(uint256 indexed requestId, uint256 indexed gameId, address indexed player, uint256 wager, uint256 maxLiability, uint256 entropyEpoch);
event WagerSettled(
uint256 indexed requestId,
uint256 indexed gameId,
address indexed player,
uint256 outcomeIndex,
uint256 multiplierBps,
uint256 payout,
uint256 creatorFee,
uint256 protocolFee
);
error InvalidGame();
error InvalidOdds();
error InvalidWager();
error InsufficientUnlockedLiquidity();
error EntropyNotRevealed();
error BadEntropySeed();
error AlreadySettled();
error NotEntropyAdmin();
modifier onlyEntropyAdmin() {
if (msg.sender != entropyAdmin) revert NotEntropyAdmin();
_;
}
constructor(
IERC20 asset_,
string memory lpName,
string memory lpSymbol,
address initialOwner,
address treasury_,
address entropyAdmin_,
bytes32 firstEntropyCommitment
) ERC20(lpName, lpSymbol) Ownable(initialOwner) {
require(address(asset_) != address(0), "asset=0");
require(treasury_ != address(0), "treasury=0");
require(entropyAdmin_ != address(0), "entropy=0");
require(firstEntropyCommitment != bytes32(0), "commitment=0");
asset = asset_;
treasury = treasury_;
entropyAdmin = entropyAdmin_;
entropyEpochs[currentEntropyEpoch].commitment = firstEntropyCommitment;
emit EntropyCommitted(currentEntropyEpoch, firstEntropyCommitment);
}
function totalAssets() public view returns (uint256) {
return asset.balanceOf(address(this));
}
function unlockedAssets() public view returns (uint256) {
uint256 balance = totalAssets();
return balance > lockedLiability ? balance - lockedLiability : 0;
}
function gameInfo(uint256 gameId)
external
view
returns (
address creator,
bool active,
string memory name,
uint256 minWager,
uint256 maxWager,
uint16 creatorFeeBps,
uint16 protocolFeeBps,
uint32 maxMultiplierBps,
uint16[] memory multipliersBps
)
{
Game storage g = games[gameId];
if (g.creator == address(0)) revert InvalidGame();
return (g.creator, g.active, g.name, g.minWager, g.maxWager, g.creatorFeeBps, g.protocolFeeBps, g.maxMultiplierBps, g.multipliersBps);
}
function depositLiquidity(uint256 assets, address receiver) external nonReentrant returns (uint256 shares) {
require(receiver != address(0), "receiver=0");
require(assets > 0, "assets=0");
uint256 supply = totalSupply();
uint256 assetsBefore = totalAssets();
uint256 unlockedBefore = assetsBefore > lockedLiability ? assetsBefore - lockedLiability : 0;
shares = supply == 0 || unlockedBefore == 0 ? assets : (assets * supply) / unlockedBefore;
require(shares > 0, "shares=0");
asset.safeTransferFrom(msg.sender, address(this), assets);
_mint(receiver, shares);
emit LiquidityDeposited(receiver, assets, shares);
}
function withdrawLiquidity(uint256 shares, address receiver) external nonReentrant returns (uint256 assetsOut) {
require(receiver != address(0), "receiver=0");
require(shares > 0, "shares=0");
uint256 supply = totalSupply();
assetsOut = (shares * unlockedAssets()) / supply;
require(assetsOut > 0, "assets=0");
_burn(msg.sender, shares);
asset.safeTransfer(receiver, assetsOut);
emit LiquidityWithdrawn(receiver, assetsOut, shares);
}
function createGame(GameConfig calldata cfg) external onlyOwner returns (uint256 gameId) {
uint32 maxMultiplier = _validateGameConfig(cfg);
gameId = nextGameId++;
Game storage g = games[gameId];
g.creator = cfg.creator;
g.active = true;
g.name = cfg.name;
g.minWager = cfg.minWager;
g.maxWager = cfg.maxWager;
g.creatorFeeBps = cfg.creatorFeeBps;
g.protocolFeeBps = cfg.protocolFeeBps;
g.maxMultiplierBps = maxMultiplier;
for (uint256 i = 0; i < cfg.multipliersBps.length; i++) {
g.multipliersBps.push(cfg.multipliersBps[i]);
}
emit GameCreated(gameId, cfg.creator, cfg.name, cfg.minWager, cfg.maxWager);
}
function _validateGameConfig(GameConfig calldata cfg) internal pure returns (uint32 maxMultiplier) {
require(cfg.creator != address(0), "creator=0");
require(bytes(cfg.name).length > 0, "name empty");
require(cfg.minWager > 0 && cfg.maxWager >= cfg.minWager, "wager bounds");
require(cfg.multipliersBps.length > 0 && cfg.multipliersBps.length <= MAX_OUTCOMES, "outcomes");
require(uint256(cfg.creatorFeeBps) + uint256(cfg.protocolFeeBps) <= MAX_TOTAL_FEE_BPS, "fee high");
uint256 sum;
for (uint256 i = 0; i < cfg.multipliersBps.length; i++) {
uint16 m = cfg.multipliersBps[i];
sum += m;
if (m > maxMultiplier) maxMultiplier = uint32(m);
}
if ((sum / cfg.multipliersBps.length) + cfg.creatorFeeBps + cfg.protocolFeeBps > BPS) revert InvalidOdds();
}
function setGameActive(uint256 gameId, bool active) external onlyOwner {
if (games[gameId].creator == address(0)) revert InvalidGame();
games[gameId].active = active;
emit GameStatusUpdated(gameId, active);
}
function placeWager(uint256 gameId, uint256 wager) external whenNotPaused nonReentrant returns (uint256 requestId) {
Game storage g = games[gameId];
if (g.creator == address(0) || !g.active) revert InvalidGame();
if (wager < g.minWager || wager > g.maxWager) revert InvalidWager();
if (entropyEpochs[currentEntropyEpoch].revealed) revert EntropyNotRevealed();
uint256 maxPayout = (wager * g.maxMultiplierBps) / BPS;
uint256 maxFees = (wager * (uint256(g.creatorFeeBps) + uint256(g.protocolFeeBps))) / BPS;
uint256 maxLiability = maxPayout + maxFees;
if (unlockedAssets() + wager < maxLiability) revert InsufficientUnlockedLiquidity();
requestId = nextRequestId++;
requests[requestId] = WagerRequest({
player: msg.sender,
gameId: gameId,
wager: wager,
maxLiability: maxLiability,
entropyEpoch: currentEntropyEpoch,
settled: false
});
lockedLiability += maxLiability;
asset.safeTransferFrom(msg.sender, address(this), wager);
emit WagerPlaced(requestId, gameId, msg.sender, wager, maxLiability, currentEntropyEpoch);
}
function revealEntropyAndCommitNext(bytes32 seed, bytes32 nextCommitment) external onlyEntropyAdmin {
require(seed != bytes32(0), "seed=0");
require(nextCommitment != bytes32(0), "next=0");
EntropyEpoch storage epoch = entropyEpochs[currentEntropyEpoch];
if (epoch.commitment != keccak256(abi.encodePacked(seed))) revert BadEntropySeed();
epoch.seed = seed;
epoch.revealed = true;
uint256 oldEpoch = currentEntropyEpoch;
currentEntropyEpoch++;
entropyEpochs[currentEntropyEpoch].commitment = nextCommitment;
emit EntropyRevealed(oldEpoch, seed, currentEntropyEpoch, nextCommitment);
emit EntropyCommitted(currentEntropyEpoch, nextCommitment);
}
function settleWager(uint256 requestId) external nonReentrant {
WagerRequest storage request = requests[requestId];
if (request.player == address(0)) revert InvalidWager();
if (request.settled) revert AlreadySettled();
EntropyEpoch storage epoch = entropyEpochs[request.entropyEpoch];
if (!epoch.revealed) revert EntropyNotRevealed();
Game storage g = games[request.gameId];
uint256 outcomeIndex = uint256(keccak256(abi.encodePacked(epoch.seed, requestId, request.player, request.gameId, address(this)))) % g.multipliersBps.length;
uint256 multiplierBps = g.multipliersBps[outcomeIndex];
uint256 payout = (request.wager * multiplierBps) / BPS;
uint256 creatorFee = (request.wager * g.creatorFeeBps) / BPS;
uint256 protocolFee = (request.wager * g.protocolFeeBps) / BPS;
request.settled = true;
lockedLiability -= request.maxLiability;
if (payout > 0) asset.safeTransfer(request.player, payout);
if (creatorFee > 0) asset.safeTransfer(g.creator, creatorFee);
if (protocolFee > 0) asset.safeTransfer(treasury, protocolFee);
emit WagerSettled(requestId, request.gameId, request.player, outcomeIndex, multiplierBps, payout, creatorFee, protocolFee);
}
function setTreasury(address treasury_) external onlyOwner {
require(treasury_ != address(0), "treasury=0");
treasury = treasury_;
emit TreasuryUpdated(treasury_);
}
function setEntropyAdmin(address entropyAdmin_) external onlyOwner {
require(entropyAdmin_ != address(0), "entropy=0");
entropyAdmin = entropyAdmin_;
emit EntropyAdminUpdated(entropyAdmin_);
}
function pause() external onlyOwner { _pause(); }
function unpause() external onlyOwner { _unpause(); }
}[
{
"type": "constructor",
"inputs": [
{
"name": "asset_",
"type": "address",
"internalType": "contract IERC20"
},
{
"name": "lpName",
"type": "string",
"internalType": "string"
},
{
"name": "lpSymbol",
"type": "string",
"internalType": "string"
},
{
"name": "initialOwner",
"type": "address",
"internalType": "address"
},
{
"name": "treasury_",
"type": "address",
"internalType": "address"
},
{
"name": "entropyAdmin_",
"type": "address",
"internalType": "address"
},
{
"name": "firstEntropyCommitment",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadySettled",
"type": "error",
"inputs": []
},
{
"name": "BadEntropySeed",
"type": "error",
"inputs": []
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "EnforcedPause",
"type": "error",
"inputs": []
},
{
"name": "EntropyNotRevealed",
"type": "error",
"inputs": []
},
{
"name": "ExpectedPause",
"type": "error",
"inputs": []
},
{
"name": "InsufficientUnlockedLiquidity",
"type": "error",
"inputs": []
},
{
"name": "InvalidGame",
"type": "error",
"inputs": []
},
{
"name": "InvalidOdds",
"type": "error",
"inputs": []
},
{
"name": "InvalidWager",
"type": "error",
"inputs": []
},
{
"name": "NotEntropyAdmin",
"type": "error",
"inputs": []
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EntropyAdminUpdated",
"type": "event",
"inputs": [
{
"name": "entropyAdmin",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "EntropyCommitted",
"type": "event",
"inputs": [
{
"name": "epoch",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "commitment",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "EntropyRevealed",
"type": "event",
"inputs": [
{
"name": "epoch",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "seed",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "nextEpoch",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "nextCommitment",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "GameCreated",
"type": "event",
"inputs": [
{
"name": "gameId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "minWager",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "maxWager",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "GameStatusUpdated",
"type": "event",
"inputs": [
{
"name": "gameId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "active",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "LiquidityDeposited",
"type": "event",
"inputs": [
{
"name": "provider",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "assets",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "shares",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LiquidityWithdrawn",
"type": "event",
"inputs": [
{
"name": "provider",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "assets",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "shares",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Paused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TreasuryUpdated",
"type": "event",
"inputs": [
{
"name": "treasury",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "WagerPlaced",
"type": "event",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "gameId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "player",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "wager",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "maxLiability",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "entropyEpoch",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "WagerSettled",
"type": "event",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "gameId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "player",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "outcomeIndex",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "multiplierBps",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "payout",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "creatorFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "protocolFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_OUTCOMES",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_TOTAL_FEE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "asset",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "createGame",
"type": "function",
"inputs": [
{
"name": "cfg",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "minWager",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxWager",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "creatorFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "protocolFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "multipliersBps",
"type": "uint16[]",
"internalType": "uint16[]"
}
],
"internalType": "struct RobinhoodGambleFiPool.GameConfig"
}
],
"outputs": [
{
"name": "gameId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "currentEntropyEpoch",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "depositLiquidity",
"type": "function",
"inputs": [
{
"name": "assets",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "shares",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "entropyAdmin",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "entropyEpochs",
"type": "function",
"inputs": [
{
"name": "epoch",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "commitment",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "seed",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "revealed",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "gameInfo",
"type": "function",
"inputs": [
{
"name": "gameId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "active",
"type": "bool",
"internalType": "bool"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "minWager",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxWager",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "creatorFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "protocolFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "maxMultiplierBps",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "multipliersBps",
"type": "uint16[]",
"internalType": "uint16[]"
}
],
"stateMutability": "view"
},
{
"name": "lockedLiability",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "nextGameId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "nextRequestId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "placeWager",
"type": "function",
"inputs": [
{
"name": "gameId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "wager",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "requests",
"type": "function",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "player",
"type": "address",
"internalType": "address"
},
{
"name": "gameId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "wager",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxLiability",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "entropyEpoch",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "settled",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "revealEntropyAndCommitNext",
"type": "function",
"inputs": [
{
"name": "seed",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "nextCommitment",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setEntropyAdmin",
"type": "function",
"inputs": [
{
"name": "entropyAdmin_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setGameActive",
"type": "function",
"inputs": [
{
"name": "gameId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "active",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTreasury",
"type": "function",
"inputs": [
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "settleWager",
"type": "function",
"inputs": [
{
"name": "requestId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalAssets",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "unlockedAssets",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawLiquidity",
"type": "function",
"inputs": [
{
"name": "shares",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "assetsOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
}
]0x6080604052600436101561001257600080fd5b60003560e01c806301e1d11414611f7c57806306fdde0314611ed45780630943eab114611eb1578063095ea7b314611e2b578063158060af14611e0d57806318160ddd14611def57806323b872dd14611d02578063249d39e914611ce5578063313ce56714611cc95780633862c86014611c8157806338d52e0f14611c3c5780633f4ba83a14611bcb578063431a9caa14611bae5780634fc5e1ea14611b8557806352015d2714611b675780635c975abb14611b4157806361d027b314611b1857806368fc0c9a146119b25780636a84a9851461199457806370a082311461195a578063715018a6146118fd578063787df6d9146118645780637ab9a628146116df57806381d12c581461166f5780638451fef6146115d55780638456cb59146115735780638da5cb5b1461154a57806395d89b4114611465578063a0e2dff41461120f578063a6f8166814610d63578063a9059cbb14610d32578063b135bbb014610d14578063dc73d16414610cf7578063dd62ed3e14610ca6578063f0421dac146109ef578063f0f4426014610954578063f110a67e146107db578063f2fde38b146107515763f8ed429e146101c957600080fd5b3461074c57602036600319011261074c5760043567ffffffffffffffff811161074c57806004019060e0600319823603011261074c57610207612389565b600091602482016001600160a01b0361021f82612254565b161561071b5761022f8280612268565b9050156106e957604483013591821515806106db575b156106a75760c484019161025983836122aa565b9050151580610690575b1561066057608485019461ffff6102798761229b565b16956107d061029960a484019861ffff6102928b61229b565b16906121ff565b116106305760009560005b6102ae87876122aa565b9050811015610302576102e161ffff6102d96102d4846102ce8c8c6122aa565b906122e0565b61229b565b1680996121ff565b9763ffffffff8b1681116102f9575b506001016102a4565b995060016102f0565b50909195966127106103406103346103288c979b6103208b8b6122aa565b9190506121be565b61ffff6102928861229b565b61ffff6102928561229b565b1161061f57600954936103528561220c565b6009556000858152600c60205260409020976001600160a01b036103758b612254565b8a54600160a01b6001600160a81b03199091169190921660ff60a01b1916171789556103a18780612268565b60018b019167ffffffffffffffff82116104c3576103bf83546120b8565b601f81116105d7575b50600090601f831160011461056957918060649492610416969460009261055e575b50508160011b916000199060031b1c19161790559a999a5b8560028d01550135948560038c015561229b565b9060048a019261ffff67ffffffff0000000063ffff000061043887549461229b565b60101b169360201b1693169067ffffffffffffffff19161717179055600560009701965b61046686866122aa565b90508110156104d9576104806102d4826102ce89896122aa565b90885491680100000000000000008310156104c3576104a68360018095018c558b61221b565b61ffff80839493549260031b9316831b921b19161790550161045c565b634e487b7160e01b600052604160045260246000fd5b507fa8a150541f7c70610c7148cf0adc58655fbd9e75ee9378fa502d63c3e711cc276020946080859361051561050e8b612254565b9380612268565b968794919260405195869460608652816060870152868601376000848a018601528a84015260408301526001600160a01b031695601f01601f19168101030190a3604051908152f35b013590508f806103ea565b8382526020822091601f198416815b8181106105bf5750926001928592610416989660649896106105a5575b505050811b0190559a999a610402565b0135600019600384901b60f8161c191690558f8080610595565b91936020600181928787013581550195019201610578565b836000526020600020601f840160051c81019160208510610615575b601f0160051c01905b81811061060957506103c8565b600081556001016105fc565b90915081906105f3565b63fdfffca760e01b60005260046000fd5b60405162461bcd60e51b81526020600482015260086024820152670cccaca40d0d2ced60c31b6044820152606490fd5b60405162461bcd60e51b81526020600482015260086024820152676f7574636f6d657360c01b6044820152606490fd5b5061010061069e84846122aa565b90501115610263565b60405162461bcd60e51b815260206004820152600c60248201526b776167657220626f756e647360a01b6044820152606490fd5b508260648501351015610245565b60405162461bcd60e51b815260206004820152600a6024820152696e616d6520656d70747960b01b6044820152606490fd5b60405162461bcd60e51b8152602060048201526009602482015268063726561746f723d360bc1b6044820152606490fd5b600080fd5b3461074c57602036600319011261074c5761076a611fd8565b610772612389565b6001600160a01b031680156107c557600580546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b631e4fbdf760e01b600052600060045260246000fd5b3461074c57604036600319011261074c5760075460243590600435906001600160a01b031633036109435780156109155781156108e757600b54600052600e602052604060002090815460405160208101908382526020815261083f604082612004565b519020036108d657600282826001604095015501600160ff19825416179055600b5461086a8161220c565b80600b55600052600e6020528383600020557f65c68cf6d12b9fb4e3864babc95221b9dc88133f0ed516c41321c3dfc03058b8600b549384938151908152866020820152a37f6cf5ab647ff4bd3f560831a1b302a3ecc46614c659a9ee0ab3f44a723076fd3e600080a3005b63077fd59160e11b60005260046000fd5b60405162461bcd60e51b815260206004820152600660248201526506e6578743d360d41b6044820152606490fd5b60405162461bcd60e51b81526020600482015260066024820152650736565643d360d41b6044820152606490fd5b63acf7767160e01b60005260046000fd5b3461074c57602036600319011261074c5761096d611fd8565b610975612389565b6001600160a01b031680156109bd57600680546001600160a01b031916821790557f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1600080a2005b60405162461bcd60e51b815260206004820152600a602482015269074726561737572793d360b41b6044820152606490fd5b3461074c57602036600319011261074c57600435610a0b6123b2565b6000818152600d602052604090208054916001600160a01b03831615610c955760058201805460ff8116610c85576004840154600052600e602052604060002060ff60028201541615610c7457600185019586549081600052600c602052600160406000209301549160405191602083019384528760408401526bffffffffffffffffffffffff199060601b16606083015260748201523060601b609482015260888152610aba60a882612004565b5190209160058201918254948515610c5e5761ffff610aff7fb963ca63209f47f33b7930f1ab768e6001faa1fa699c925fe3be1f149ecfc9fb9760a09706809661221b565b90549060031b1c1698600289015492612710610b1b8c866121ab565b04926001612710610b4760048501549761ffff83610b3b828c16846121ab565b049960101c16906121ab565b049660ff1916179055610b6060038b01546008546120f2565b60085582610c26575b8380610bec575b505083610bb3575b5497600180871b03905416986040519485526020850152604084015260608301526080820152a4600160008051602061250883398151915255005b610be784600180891b03600654167f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686123ee565b610b78565b610c1f916001808a1b039054167f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686123ee565b8a83610b70565b610c59836001808a1b038c54167f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686123ee565b610b69565b634e487b7160e01b600052601260045260246000fd5b631bdf2ac560e01b60005260046000fd5b62560ff960e81b60005260046000fd5b632f763a0160e01b60005260046000fd5b3461074c57604036600319011261074c57610cbf611fd8565b610cc7611fee565b6001600160a01b039182166000908152600160209081526040808320949093168252928352819020549051908152f35b3461074c57600036600319011261074c5760206040516101008152f35b3461074c57600036600319011261074c576020600954604051908152f35b3461074c57604036600319011261074c57610d58610d4e611fd8565b60243590336122f0565b602060405160018152f35b3461074c57602036600319011261074c576004356000908152600c6020526040902080546001600160a01b0381169182156111fe57600181019160028201549160038101546005600483015492019460405190816000825492610dc5846120b8565b80845293600181169081156111dc5750600114611195575b50610dea92500382612004565b60405193846020885491828152019081986000526020600020906000915b81600f8401106110b35793610ec389610eea9560209b9a989560ff9563ffffffff9b9954918181106110a0575b818110611089575b818110611074575b81811061105d575b818110611046575b81811061102f575b818110611018575b818110611001575b818110610fea575b818110610fd3575b818110610fbc575b818110610fa5575b818110610f8e575b818110610f77575b818110610f60575b10610f53575b5090989796959493509c9b9a999890919c0387612004565b60ff6040519b8c9b8c5260a01c161515878b015261012060408b01526101208a0190611f97565b956060890152608088015261ffff811660a088015261ffff8160101c1660c0880152831c1660e0860152848303610100860152519182815201919060005b818110610f36575050500390f35b825161ffff16845285945060209384019390920191600101610f28565b60f01c81528b018f610eab565b928e60019161ffff8560e01c168152019301610ea5565b928e60019161ffff8560d01c168152019301610e9d565b928e60019161ffff8560c01c168152019301610e95565b928e60019161ffff8560b01c168152019301610e8d565b928e60019161ffff8560a01c168152019301610e85565b928e60019161ffff8560901c168152019301610e7d565b928e60019161ffff8560801c168152019301610e75565b928e60019161ffff8560701c168152019301610e6d565b928e60019161ffff8560601c168152019301610e65565b928e60019161ffff8560501c168152019301610e5d565b928e60019161ffff8560401c168152019301610e55565b928e60019161ffff8560301c168152019301610e4d565b828f1c61ffff168452928e0192600101610e45565b928e60019161ffff8560101c168152019301610e3d565b61ffff83168452928e0192600101610e35565b926001610200601092865461ffff8116825261ffff81861c16602083015261ffff8160201c16604083015261ffff8160301c16606083015261ffff8160401c16608083015261ffff8160501c1660a083015261ffff8160601c1660c083015261ffff8160701c1660e083015261ffff8160801c1661010083015261ffff8160901c1661012083015261ffff8160a01c1661014083015261ffff8160b01c1661016083015261ffff8160c01c1661018083015261ffff8160d01c166101a083015261ffff8160e01c166101c083015260f01c6101e0820152019401920191610e08565b90506000929192526020600020906000915b8183106111c0575050906020610dea928201018a610ddd565b60209193508060019154838588010152019101909183926111a7565b905060209250610dea94915060ff191682840152151560051b8201018a610ddd565b6357e25a0960e01b60005260046000fd5b3461074c57604036600319011261074c5760243560043561122e6124e7565b6112366123b2565b6000818152600c6020526040902080549092906001600160a01b03811615908115611456575b506111fe57600283015481108015611449575b610c9557600b549283600052600e60205260ff60026040600020015416610c745760046112d49101546127106112cd6112c7826112b563ffffffff8660201c16886121ab565b049361ffff808260101c1691166121ff565b856121ab565b04906121ff565b91826112e7836112e2612115565b6121ff565b1061143857600a54926112f98461220c565b600a556040519460c0860186811067ffffffffffffffff8211176104c357602096600591604052338152878101928584526040820187815260608301908682526080840192835260a0840195600087528a600052600d8c5260406000209460018060a01b039060018060a01b03905116166bffffffffffffffffffffffff60a01b865416178555516001850155516002840155516003830155516004820155019051151560ff801983541691161790556113b5816008546121ff565b6008556113e48330337f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d16861247b565b600b5490604051938452858401526040830152827f4e14945de12dfaf5d3ac7537c9fdc60b4b9bc55be370433acd72325f3999b56f60603394a4600160008051602061250883398151915255604051908152f35b632ac17b5960e11b60005260046000fd5b506003830154811161126f565b60ff915060a01c16158461125c565b3461074c57600036600319011261074c576040516000600454611487816120b8565b808452906001811690811561152657506001146114c7575b6114c3836114af81850382612004565b604051918291602083526020830190611f97565b0390f35b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b80821061150c575090915081016020016114af61149f565b9192600181602092548385880101520191019092916114f4565b60ff191660208086019190915291151560051b840190910191506114af905061149f565b3461074c57600036600319011261074c576005546040516001600160a01b039091168152602090f35b3461074c57600036600319011261074c5761158c612389565b6115946124e7565b6005805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a1005b3461074c57602036600319011261074c576115ee611fd8565b6115f6612389565b6001600160a01b0316801561163e57600780546001600160a01b031916821790557f72bfefbefe492a38a8f9ce69e9287c63c87905014ee1d8d3f6dc9fd903b7eeba600080a2005b60405162461bcd60e51b81526020600482015260096024820152680656e74726f70793d360bc1b6044820152606490fd5b3461074c57602036600319011261074c57600435600052600d60205260c0604060002060018060a01b0381541690600181015490600281015460038201549060ff6005600485015494015416936040519586526020860152604085015260608401526080830152151560a0820152f35b3461074c57604036600319011261074c576004356116fb611fee565b6117036123b2565b6001600160a01b0316801590611719821561213b565b6117248315156121c8565b60025461172f612026565b6008548082111561185b57611743916120f2565b81158015611853575b1561183b57505082915b611761831515612174565b61178d8430337f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d16861247b565b611825577fb7cd4486a08dcd2bf7da217a07d1069da69db8ffb3518c7014d6e6d4d973a55260406020946117c3856002546121ff565b6002558360008181528088528381208781540190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef888551898152a381519081528486820152a2600160008051602061250883398151915255604051908152f35b63ec442f0560e01b600052600060045260246000fd5b61184861184d92866121ab565b6121be565b91611756565b50801561174c565b50506000611743565b3461074c57604036600319011261074c5760043560243580151580910361074c5761188d612389565b6000828152600c60205260409020546001600160a01b0316156111fe576000828152600c6020908152604091829020805460ff60a01b191660a085901b60ff60a01b1617905590519182527fe73717d6122a14c3f71c3fd43975a9eacddec0850e4407b31c84c286d01d256a91a2005b3461074c57600036600319011261074c57611916612389565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461074c57602036600319011261074c576001600160a01b0361197b611fd8565b1660005260006020526020604060002054604051908152f35b3461074c57600036600319011261074c576020600a54604051908152f35b3461074c57604036600319011261074c576004356119ce611fee565b906119d76123b2565b6001600160a01b0382166119ec81151561213b565b6119f7821515612174565b611a086002546118486112c7612115565b91611a148315156121c8565b3315611b025760009333855284602052604085205494828610611ae75791611ac2856040937fb195a67e698c5700e4f48f7b7748dda3a206ee2767ef024b61a26d7b17b2d63a958460209a338352828c520386822055846002540360025585518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b3392a37f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686123ee565b81519085825286820152a2600160008051602061250883398151915255604051908152f35b606490838763391434e360e21b835233600452602452604452fd5b634b637e8f60e11b600052600060045260246000fd5b3461074c57600036600319011261074c576006546040516001600160a01b039091168152602090f35b3461074c57600036600319011261074c57602060ff60055460a01c166040519015158152f35b3461074c57600036600319011261074c576020600b54604051908152f35b3461074c57600036600319011261074c576007546040516001600160a01b039091168152602090f35b3461074c57600036600319011261074c5760206040516107d08152f35b3461074c57600036600319011261074c57611be4612389565b60055460ff8160a01c1615611c2b5760ff60a01b19166005556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a1005b638dfc202b60e01b60005260046000fd5b3461074c57600036600319011261074c576040517f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03168152602090f35b3461074c57602036600319011261074c57600435600052600e6020526060604060002080549060ff600260018301549201541690604051928352602083015215156040820152f35b3461074c57600036600319011261074c57602060405160128152f35b3461074c57600036600319011261074c5760206040516127108152f35b3461074c57606036600319011261074c57611d1b611fd8565b611d23611fee565b6001600160a01b0382166000818152600160209081526040808320338452909152902054909260443592916000198110611d63575b50610d5893506122f0565b838110611dd2578415611dbc573315611da657610d58946000526001602052604060002060018060a01b0333166000526020528360406000209103905584611d58565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8390637dc7a0d960e11b6000523360045260245260445260646000fd5b3461074c57600036600319011261074c576020600254604051908152f35b3461074c57600036600319011261074c576020600854604051908152f35b3461074c57604036600319011261074c57611e44611fd8565b602435903315611dbc576001600160a01b0316908115611da657336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461074c57600036600319011261074c576020611ecc612115565b604051908152f35b3461074c57600036600319011261074c576040516000600354611ef6816120b8565b80845290600181169081156115265750600114611f1d576114c3836114af81850382612004565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210611f62575090915081016020016114af61149f565b919260018160209254838588010152019101909291611f4a565b3461074c57600036600319011261074c576020611ecc612026565b919082519283825260005b848110611fc3575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201611fa2565b600435906001600160a01b038216820361074c57565b602435906001600160a01b038216820361074c57565b90601f8019910116810190811067ffffffffffffffff8211176104c357604052565b6040516370a0823160e01b81523060048201526020816024817f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03165afa9081156120ac5760009161207d575090565b90506020813d6020116120a4575b8161209860209383612004565b8101031261074c575190565b3d915061208b565b6040513d6000823e3d90fd5b90600182811c921680156120e8575b60208310146120d257565b634e487b7160e01b600052602260045260246000fd5b91607f16916120c7565b919082039182116120ff57565b634e487b7160e01b600052601160045260246000fd5b61211d612026565b6008548082111561213457612131916120f2565b90565b5050600090565b1561214257565b60405162461bcd60e51b815260206004820152600a602482015269072656365697665723d360b41b6044820152606490fd5b1561217b57565b60405162461bcd60e51b815260206004820152600860248201526707368617265733d360c41b6044820152606490fd5b818102929181159184041417156120ff57565b8115610c5e570490565b156121cf57565b60405162461bcd60e51b815260206004820152600860248201526706173736574733d360c41b6044820152606490fd5b919082018092116120ff57565b60001981146120ff5760010190565b919091805483101561223e57600052601e60206000208360041c019260011b1690565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b038116810361074c5790565b903590601e198136030182121561074c570180359067ffffffffffffffff821161074c5760200191813603831361074c57565b3561ffff8116810361074c5790565b903590601e198136030182121561074c570180359067ffffffffffffffff821161074c57602001918160051b3603831361074c57565b919081101561223e5760051b0190565b6001600160a01b0316908115611b02576001600160a01b031691821561182557600082815280602052604081205482811061236f5791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b916064928463391434e360e21b8452600452602452604452fd5b6005546001600160a01b0316330361239d57565b63118cdaa760e01b6000523360045260246000fd5b600260008051602061250883398151915254146123dd57600260008051602061250883398151915255565b633ee5aeb560e01b60005260046000fd5b60405163a9059cbb60e01b60009081526001600160a01b03909316600452602493909352919060209060448180865af190600160005114821615612459575b604052156124385750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b90600181151661247157823b15153d1516169061242d565b503d6000823e3d90fd5b6040516323b872dd60e01b60009081526001600160a01b039384166004529290931660245260449390935260209060648180865af1906001600051148216156124cf575b6040526000606052156124385750565b90600181151661247157823b15153d151616906124bf565b60ff60055460a01c166124f657565b63d93c066560e01b60005260046000fdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212204ef7eb30096b37a30f99c928bad8b491033e9e37b82f45abe4086811da28ce3464736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000102 | $0 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xdeaf34…d16837 | 34 days agoTue, 14 Jul 2026 09:40:27 UTC | 0xa8a150…cc27 | [0] 0x000000000000…0000000a [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x38885f…d1f1bf | 34 days agoTue, 14 Jul 2026 09:40:22 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000009 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x8295ff…b6145f | 34 days agoTue, 14 Jul 2026 09:40:17 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000008 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x236853…bc3660 | 34 days agoTue, 14 Jul 2026 09:40:12 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000007 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x8b009c…63374e | 34 days agoTue, 14 Jul 2026 09:39:50 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000006 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x286da2…3d1b75 | 34 days agoTue, 14 Jul 2026 09:39:46 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000005 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0xdd0dc8…f4632d | 34 days agoTue, 14 Jul 2026 09:39:17 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000004 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x4ef370…102e68 | 34 days agoTue, 14 Jul 2026 09:39:12 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000003 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x2f3e57…562527 | 34 days agoTue, 14 Jul 2026 09:39:07 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000002 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x02ab5f…6793b0 | 34 days agoTue, 14 Jul 2026 04:35:21 UTC | 0xa8a150…cc27 | [0] 0x000000000000…00000001 [1] 0x000000000000…8cd0a7eb data: 0x000000000000000000…00000000 |
| 0x6bc5ec…720e96 | 34 days agoTue, 14 Jul 2026 03:24:29 UTC | 0x6cf5ab…fd3e | [0] 0x000000000000…00000001 [1] 0x4193a9108a2d…d25100ff |
| 0x6bc5ec…720e96 | 34 days agoTue, 14 Jul 2026 03:24:29 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…8cd0a7eb |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xa24b26b3…23aaa4 | Transfer | 18,549,724 | 23 days agoFri, 24 Jul 2026 23:38:01 UTC | 0xcaf7…5d11 | IN | 0x63f3…cf6f | $0.001 DIH |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xdeaf34…d16837 | createGame | 9,428,628 | 34 days agoTue, 14 Jul 2026 09:40:27 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00001808 | |
| 0x38885f…d1f1bf | createGame | 9,428,580 | 34 days agoTue, 14 Jul 2026 09:40:22 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00001246 | |
| 0x8295ff…b6145f | createGame | 9,428,532 | 34 days agoTue, 14 Jul 2026 09:40:17 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000941 | |
| 0x236853…bc3660 | createGame | 9,428,484 | 34 days agoTue, 14 Jul 2026 09:40:12 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000952 | |
| 0x8b009c…63374e | createGame | 9,428,267 | 34 days agoTue, 14 Jul 2026 09:39:50 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00001243 | |
| 0x286da2…3d1b75 | createGame | 9,428,207 | 34 days agoTue, 14 Jul 2026 09:39:46 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000952 | |
| 0xdd0dc8…f4632d | createGame | 9,427,925 | 34 days agoTue, 14 Jul 2026 09:39:17 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000932 | |
| 0x4ef370…102e68 | createGame | 9,427,876 | 34 days agoTue, 14 Jul 2026 09:39:12 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000894 | |
| 0x2f3e57…562527 | createGame | 9,427,827 | 34 days agoTue, 14 Jul 2026 09:39:07 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000954 | |
| 0x02ab5f…6793b0 | createGame | 9,246,112 | 34 days agoTue, 14 Jul 2026 04:35:21 UTC | 0x898f…a7eb | IN | RobinhoodGambleFiPool | $0.000 ETH | 0.00000968 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 9,203,751 | 34 days agoTue, 14 Jul 2026 03:24:29 UTC | 0x6bc5ec…720e96 | CREATE | createPool | 0xc11d…1fae | IN | 0x63f3…cf6f | 0 ETH |