GL1F is a no-code, browser-only AI studio that trains gradient-boosted tree models on your machine, mints them as ERC-721 AI Model NFTs on GenesisL1 mainnet, and runs deterministic AI inference directly inside smart contracts — for free, by tip, or by paid subscription. No SaaS. No oracle. No company in the middle.
Most projects calling themselves "decentralized AI" are SaaS with a token glued on: weights live on a private server, inference is an HTTP call, and the chain only sees a payment. That isn't decentralized AI — that's a paywall.
GL1F is the first system where every part of the AI lifecycle is decentralized:
| Layer | GL1F | "Decentralized AI" SaaS |
|---|---|---|
| training | browser / your machine | their gpu cluster |
| data | never leaves your device | uploaded to them |
| weights | on-chain bytes (GL1C) | private server |
| inference | EVM opcodes · deterministic | https api |
| identity | keccak256(model) | "v3-final-final" |
| monetization | smart contract · ERC-721 | stripe |
| kill switch | none — chain is the host | their devops team |
Every quant claims a 70% hit-rate. Every "AI trading bot" promises edge. None of them can prove it. The models are private, the backtests are private, the signals arrive without provenance, and "mint a prediction" doesn't exist on any chain.
You can't audit a Discord bot's brain. An "AI signal" arrives — was the model overfit yesterday? Retrained on the answer? You'll never know.
You can't license an AI model. You can't transfer one. You can't earn royalties on inference. The asset class doesn't exist yet.
Smart contracts cannot call XGBoost. AI predictions live in centralized APIs that vanish, rate-limit, or lie. Trust required.
Even if you can train an AI model, deploying it needs Python, Docker, an inference server, an API gateway, monitoring. Most traders just want to drag a CSV.
The GL1F AI studio is a static web application that opens at gl1f.com and runs entirely in your browser. AI training happens locally; deployment uses your wallet. No code is required, no install is required. For datasets larger than browser memory, GL1F supplies optional local Python and C++ servers that you spin up on your own machine — but you keep using the same browser studio UI. Only the compute backend changes.
You always interact with GL1F through the browser at gl1f.com — drag CSVs, pick features, set hyperparameters, watch metrics, mint NFTs. The Python and C++ "trainers" are local servers GL1F supplies that run on your own machine over localhost, and the studio talks to them when you need more compute. Datasets stay on your machine. Wallet stays in your browser. No SaaS, no upload to a third party, no telemetry.
GL1F is a gradient boosting machine over fixed-depth decision trees — the most successful tabular AI architecture of the last decade, and the only one whose inference is cheap and deterministic enough to live inside a smart contract. Each tree fits the residual error of the trees before it. Predictions are the sum of every tree's leaf value, passed through a link function — logistic for binary, softmax for multiclass, sigmoid-per-label for multilabel, identity for regression.
Trees are interpretable, fast, and — critically for on-chain AI — deterministic integer math after quantisation. Thresholds and leaf values are stored as int32; features are packed as int32 LE at scale scaleQ. No floats. No GPU drift. Same input, same byte-exact output, on every node, every block, forever.
| Property | GL1F |
|---|---|
| weak learner | complete binary tree, depth ≤ 12 |
| quantisation | int32 thresholds · int32 leaves |
| format · scalar | GL1F v1 (regression / binary) |
| format · vector | GL1F v2 (multiclass / multilabel) |
| typical config | 250 trees · depth 4 · lr 0.05 |
| on-chain cost | O(n_trees · depth) bytecode reads |
GL1F covers the full GBDT taxonomy supported by the studio. The task is selected on the Dataset tab; everything downstream — loss, link, label encoding, output dimensionality — adapts automatically. Binary classification gets the focus in the rest of this deck because, in crypto, almost every actionable AI question reduces to yes or no.
Predict a number. Squared-error loss. Identity link. The label column must be numeric; non-finite rows are dropped automatically.
Predict yes/no. Logistic loss, sigmoid link. You pick which label value is class 0 and which is class 1; rows with other labels are dropped. Output is calibrated; threshold at 0.5 (or wherever your edge lives).
K mutually exclusive outcomes (K ≥ 2). Softmax cross-entropy loss. K trees per boosting round, stored class-major in the file. Returns a probability vector summing to 1.
L labels (L ≥ 2), each a separate yes/no. Independent sigmoids per label. Each row may have any combination of labels active. Per-label positive weights handle imbalance.
Half of the alpha in this market reduces to a binary: does this event happen in the next N minutes? Pump, liquidation, funding flip, listing announcement, sandwich attack, depeg. Binary classifiers are cheap to train, cheap to evaluate on-chain, and trivially turn into trading rules.
→ A 0.871 AUC on hourly BTC direction is, in practice, a deployable edge — not because it's "magic", but because the cost of being wrong is bounded (your stop-loss) while the payoff of being right compounds. GL1F's job is not to be a crystal ball. Its job is to be a verifiable and tradeable 0.871.
Fit a forest. Three ways. Same studio.
Open gl1f.com → Create → Dataset. Drop a CSV with hourly BTC candles plus engineered features. The studio parses it in your browser, infers numeric vs categorical columns, and lets you click to mark feature columns and the label column. Pick the task — binary_classification — and choose which label value is "pump" (class 1).
The Data Galaxy sub-panel shows a live 3D PCA projection of your data so you can spot leakage or cluster structure before training. Walk-forward, not random split — for time-indexed crypto data the studio defaults to chronological train/val/test partitioning so the model never peeks at the future.
The Training tab exposes the hyperparameters that matter — number of trees, depth, learning rate, min-leaf, bins, seed — with sane defaults for crypto. Training runs in a Web Worker (UI stays smooth); validation log-loss streams live as each tree is added.
Click Heuristic search and the studio runs bounded random mutation around your config to find a better one. Click Refit on train+val at the end and it retrains using the best tree count on the union. All of this is point-and-click in the browser.
⚠ More than ~100k rows? Switch the Compute backend selector from WASM to PYTHON :8088 or C++ :8089. The supplied local server runs on your own machine; the studio sends it the dataset over localhost. The training UI stays exactly the same. Your data never leaves the device.
The Local preview tab decodes the just-trained model bytes locally, replays predictions row-by-row in chronological order, and shows feature importances (split-usage + permutation), per-tree metric curves, and a per-row playground for sanity checks. Time series leak past into future under random splits — GL1F enforces walk-forward by default, so the metrics you see here are the ones you'll get in production.
→ Everything in this tab runs locally against the binary .gl1f file the studio just produced. It is the same decoder the on-chain runtime uses, so what you see here is what the chain will return.
The Mint tab packages your trained .gl1f bytes, splits them into GL1C chunks (≤24,572 B each, the EIP-170 code-size limit minus a 4-byte magic prefix), and deploys each chunk as a tiny pointer contract using ModelStore.write(). A pointer-table contract follows; then ModelRegistry.registerModel() mints the NFT and binds the model.
You fill out: a 128×128 PNG icon, a name, a description, a pricing mode (free / tips / paid-required), a fee, and an owner API access key. You agree to the active license (default CC BY-SA 4.0) and the on-chain Terms version. Click mint. N + 2 transactions later, your model is live on GenesisL1.
For very large models (millions of bytes, tens of chunks), GL1F also supplies an optional Python minter (gl1f-mint) so you can deploy chunks from your terminal in parallel. Same ABIs, same network, same end result. The browser path remains the default and works for the overwhelming majority of models.
✓ Once mined, the model is a transferable ERC-721. Its tokenId is human-facing; its modelId = keccak256(bytes) is content-addressed. Anyone can re-derive that hash from the on-chain bytes — your training is its own witness.
The model lives on GenesisL1 and is queryable by any wallet, any contract, any chain client. This is the only step in the tutorial where code appears — because it's how other dapps consume your model. From the studio side, you've already shipped.
The studio's Model page lets anyone — owner or visitor — call inference with a feature form. Type values, click Predict. Free models call predictView as a gas-free eth_call. Tipped models offer a tip slider. Paid-required models prompt the user to either pay per call or buy a subscription.
// Any contract on GenesisL1 (chainId 29) can call your model. // No oracle middleman. The prediction is part of the same atomic tx as the trade. interface IForestRuntime { function predictView(bytes32 modelId, bytes calldata packedFeaturesQ) external view returns (int256 scoreQ); } contract PumpStrategy { IForestRuntime public immutable runtime; bytes32 public immutable modelId; // 0x9af3…7c2d uint32 public immutable scaleQ; // 1_000_000 function isPump(int32[7] calldata q) external view returns (bool) { bytes memory packed = _packLE(q); // int32 LE per feature int256 scoreQ = runtime.predictView(modelId, packed); // score is logit · scaleQ; >0 means P(pump) > 0.5 return scoreQ > 0; } }
import { JsonRpcProvider, Contract } from "ethers"; import { RUNTIME_ADDR, RUNTIME_ABI, packFeatures } from "./gl1f"; const rpc = new JsonRpcProvider("https://rpc.genesisl1.org"); const runtime = new Contract(RUNTIME_ADDR, RUNTIME_ABI, rpc); const packed = packFeatures([-0.0023, -0.0140, 28.4, 0.0180, -0.0110, -0.0340, -0.0270], 1_000_000); const scoreQ = await runtime.predictView("0x9af3…7c2d", packed); const p = sigmoid(Number(scoreQ) / 1_000_000); console.log(p); // 0.866 — strong pump signal
→ The model crossed 0.5 → 0.86 at candle #7, after the funding rate flipped negative and RSI bottomed at 28.4. Price climbed +1.4% over the following six hours. That is what binary classification on-chain looks like in production: a single, calibrated, signed number — and a deterministic forest you can re-run yourself.
Model bytes are stored as contract code rather than storage slots, using the SSTORE2 pattern. Each chunk is a tiny pointer contract whose runtime bytecode is "GL1C" || data, capped at 24,572 bytes (EIP-170 minus 4-byte magic).
The ForestRuntime reads thresholds and leaves with EXTCODECOPY — far cheaper than SLOAD for medium blobs.
Forest evaluation is just int32 comparisons followed by int32 leaf accumulation into int256. No floats. No GPU non-determinism. Solidity does this natively.
The same input must produce the same output, on every node, every block, forever. Neural nets give that up; GBDTs get it for free.
A model is its bytes. modelId = keccak256(bytes). There is no version drift, no "which checkpoint did we deploy?", no rug-by-silent-update.
Want to fork a model? Mint a new modelId. Want to upgrade? You're minting a new asset — the market decides which to query.
Off-chain eth_call can spoof msg.sender, so paid models cannot rely on it. GL1F gates view inference for paid models with EIP-712 signatures: owners and subscribed access keys sign typed data; the runtime verifies on-chain.
Domain separation pins each signature to GenesisL1's chainId and the runtime address. Short deadlines bound the replay window.
Every minted AI model is an ERC-721 — and the GL1F suite ships with an on-chain AI marketplace (ModelMarketplace) plus a subscription access system (ModelRegistry.AccessPlan). Two orthogonal monetization paths: rent AI inference, or sell the AI asset outright.
Anyone calls predictView() as a free eth_call. Useful for public-good models, reputational plays, and "loss-leader" demonstrations of your alpha.
Free view inference, plus an optional predictTx() path that lets users send a tip. The runtime emits a tipped-inference event. Good models accumulate a public revenue trail.
Free view is disabled. Users pay per call via predictTx(), or buy a subscription AccessPlan (price + duration) — generating an EIP-712 access key for unlimited view calls until expiry.
Mint with mode 2 and define one or more access plans — say, 7 days for 0.1 L1 or 30 days for 0.3 L1. Buyers generate an Ethereum keypair locally, call buyAccess(), and the registry extends their key's expiry on-chain. The L1 paid flows directly to your fee recipient. Your buyers query through predictAccessView() with their key's signature — no further fees, until expiry. Want to trade the model itself? List the NFT in ModelMarketplace. Owner change is an ERC-721 transfer; access keys, plans, and inference settings all follow the new owner.
Discovery is also on-chain: every minted model registers a word-hash index of its title (_wordTokens). The Forest catalog tab and AI Store marketplace tab both use it for paginated AND-search — no off-chain indexer required.
Templates and design sketches you can train in the studio today. Every one fits the GBDT mold — modest feature count, fast inference, on-chain settleable. AUCs and metrics shown are illustrative reference targets, not benchmarks of any deployed model.
The tutorial model. Predicts P(close_t+1 > close_t) on hourly BTC.
Per-position binary. Will this position liquidate within Nh given health factor, vol, funding?
Predicts whether perp funding will flip sign in the next 8h epoch.
4h realised vol on BTC, ETH, SOL. Useful for options-vault rebalancers.
Real-time MEV detection on incoming swap calldata. Pre-trade screening.
Multilabel: low-liquidity / unlocked-supply / dev-active / honeypot. Any subset can fire.
4-class market state: trend-up / trend-down / chop / squeeze. Drives strategy router.
P(|price − 1| > 1% within 6h). Powers depeg-protected stablecoin vaults.
Multiclass: accumulation / distribution / rotation / exit. Built on labelled wallet clusters.
Expected slippage on a sized order, given pool depth and recent flow.
Cross-chain bridge incident probability over the next 24h, by route.
Multilabel over a wallet's behaviour: bridger / LPer / lender / governance / sybil-suspect.
Once an AI model is just a bytes32 modelId on a public chain, every dapp inherits it. Risk engines, AMMs, vaults, prediction markets — they stop calling out to opaque AI APIs and start composing models the same way they compose tokens. None of these are roadmap promises; they're the obvious shape of what builders will reach for next.
→ All composable. All auditable. All deterministic. All on GenesisL1, with GL1F as the decentralized AI primitive.
The studio is open at gl1f.com. There is no testnet — only GenesisL1 mainnet. Permissionless: no whitelist, no waitlist, no signup, no KYC. The only requirement is a working wallet on chainId 29 with enough L1 (the GenesisL1 native coin) for gas and the deploy fee. This is what decentralized AI looks like.