A wallet is enough.
No signup forms, identity documents or operator approval to play, invest or claim. Your agent can work directly with the contract.
No accounts. No KYC. No operator-held balance. A public Ethereum contract your agent can inspect, verify and use—with a bankroll it can earn from.
Bankroll capital is at risk. Returns are variable. Know the operating limits.
No signup forms, identity documents or operator approval to play, invest or claim. Your agent can work directly with the contract.
Stake limits, odds, proof deadlines and exit rules are public code. Read state, calculate outcomes and simulate a transaction before signing.
Anyone can keep an active, funded contract moving with valid proofs and transactions. The website operator does not have to be online.
Supply ETH behind larger prizes and receive LUCKOTTO bankroll shares. Those shares participate in the bankroll’s gains and losses. When ETH per share rises, your agent’s stake becomes worth more ETH.
Bankroll-backed tickets can carry a house edge. Across settled draws, that edge creates expected revenue for the bankroll before gas and rounding. Actual returns depend on ticket volume, the edges players choose and draw outcomes.
Pool-only tickets contribute no protocol edge. There is no fixed APY, guaranteed profit or protected principal; bankroll losses can be near-total.
Read bankroll assets, share supply and recent rounds. Model exposure and gas costs against your agent’s capital budget.
Quote previewInvestment, then send ETH with invest(minSharesOut). Shares mint to the caller.
Read previewRedeem and redeemableShares. Redeem with a minimum ETH output when the withdrawal window is open.
Active withdrawals are limited to blocks 1–260 after each 10,000-block boundary, once every earlier closed round is settled or expired. Deposits pause while a closed round awaits finalization. Late settlement does not extend the window. Read the exact share and withdrawal rules →
0x5AD041D4Bfd502D408cB9DE539F03Da921059f28 ↗0x40d62556b4023e38afe4833365c05fad79958c0ffae63dde70592043150a3ea0Sourcify’s record links this chain and address to its recompiled source and deployment transaction. Inspect the creation and runtime match statuses yourself.
Read eth_chainId and eth_getCode through an RPC you trust. Hash the deployed runtime and compare it with the value above. Pin the address and hash in your agent’s configuration.
This build omits Solidity’s metadata fingerprint. Sourcify reports match for creation and runtime code, rather than exact_match. What that verification distinction means ↗
This JavaScript example uses viem and an ETH_RPC_URL environment variable. It makes no transaction and needs no signing key. The chain, address and hash come from this website’s configured deployment; cross-check them with Sourcify before adopting them as trusted pins.
import { createPublicClient, http, keccak256 } from "viem";
// Use an Ethereum RPC you trust. No wallet or signing key is needed.
if (!process.env.ETH_RPC_URL) throw new Error("Set ETH_RPC_URL");
const client = createPublicClient({ transport: http(process.env.ETH_RPC_URL) });
const address = "0x5AD041D4Bfd502D408cB9DE539F03Da921059f28";
const expectedHash = "0x40d62556b4023e38afe4833365c05fad79958c0ffae63dde70592043150a3ea0";
if (await client.getChainId() !== 1) throw new Error("Wrong chain");
const blockNumber = await client.getBlockNumber();
const code = await client.getCode({ address, blockNumber });
if (!code || keccak256(code) !== expectedHash) throw new Error("Wrong contract");
const response = await fetch("https://luckotto.com/abi/luckotto.json");
if (!response.ok) throw new Error("ABI unavailable");
const abi = await response.json();
const bankroll = await client.readContract({
address, abi, functionName: "bankrollAssets", blockNumber,
});
const shares = await client.readContract({
address, abi, functionName: "totalSupply", blockNumber,
});
console.log({ block: blockNumber.toString(),
bankrollWei: bankroll.toString(), totalShareUnits: shares.toString() });A source match establishes code provenance, not safety. The contract is non-upgradeable; an independent professional audit remains outstanding. Review the evidence and owner controls →
A settled round is a reproducible calculation. Your agent can fetch the public inputs, verify the randomness and check which ticket won—without trusting a result displayed by this website.
Read the round and candidate position. Authenticate the Ethereum header against canonical chain data and verify the Quicknet BLS signature against the pinned drand key.
Rebuild the deployment-bound seed with the recorded settlement bankroll. Reproduce the candidate, coverage and risk checks; compare the payout with contract state.
Anyone can submit a valid settlement proof in time. A separate claimWinner call pays only the ticket’s fixed beneficiary, regardless of who submits it.
The local verifier checks the supplied inputs; a valid drand signature alone does not authenticate an Ethereum header. Settlement authenticates the header through EIP-2935 and checks the signature through EIP-2537. There is no resolver bounty. Read the complete proof and draw specification →
| Your agent’s job | Contract calls | What to preserve |
|---|---|---|
| Assess and bankroll | bankrollAssets, totalSupply, previewInvestment, invest | ETH budget, minimum shares and current deposit eligibility |
| Manage and redeem | balanceOf, previewRedeem, redeemableShares, redeem | Withdrawal window, finalized earlier rounds and minimum ETH output |
| Read or enter a round | getRoundInfo, getPosition, placeBet | Stake limit, payout target, encoded edge cap and fixed beneficiary |
| Finalize and pay | settle, expireRound, claimWinner, claimRefund | Round order, proof deadline, gas budget and confirmed receipts |
Bankroll shares can lose nearly all their value; lottery tickets can lose their full stake. Set investment, stake and gas budgets, simulate calls and confirm receipts before updating your agent’s records.
Someone must submit the full proof within 8,191-block history limits. After expiry, all round stakes go to the bankroll without a refund. Ethereum, RPC and drand availability still matter.
ETH is held by the contract under its rules. The owner can freeze it after closed rounds are finalized, cancelling open rounds. After 365 days from freeze, the owner can drain all cash, including backing for unpaid claims, refunds and bankroll shares. KYC-free does not mean anonymous on Ethereum.
Everything your agent needs to evaluate the opportunity is open.