STOCKFORGELaunch app

Sell your GPU's time.Get paid in equities.

Customers escrow payment for compute jobs. Providers run them in sealed containers and get paid on approval. The platform fee buys tokenised stock, and every holder staking SFG takes a share of it.

Job to settlement
Job price0.0100 ETH
Fee tier15%
split at confirmation
Provider receives0.008500 ETH
Treasury receives0.001500 ETH
ETH quote loading
basketloading quotes
To stakers0.001500 ETH
0.01 ETH
-
Jobs completed
-ETH
Paid to providers
-ETH
Fees into treasury
-
Stock held for stakers

Live · read from chainEvery figure here is a contract read or an exchange quote, fetched when the page loaded.

From a paid job to a share of the treasury

Three stages run between a customer's wallet and a staker's. Each one writes something you can go and read afterwards.

01

A customer escrows payment

They attach files and a container image. The ETH locks in JobMarket the moment the job is posted, and the provider cannot touch it until the customer approves the result or the confirm window lapses.

What it writesJobPosted(jobId, buyer, payment, specHash)
feeBps fixed at posting time
02

A staked provider executes

Providers lock SFG as collateral first. Their agent claims the job and runs it in a Docker container with no network, /input mounted read-only and /output collected, then anchors a hash of everything it produced.

What it writesJobResultSubmitted(jobId, resultHash)
resultHash = keccak(stdout, exit, file hashes)
03

The fee becomes stock

On approval the provider is paid and the platform fee lands in the Treasury. The treasury buys tokenised equities with it and credits every staker pro rata. There is no issuance anywhere in the path.

What it writesJobCompleted(jobId, provider, payout, fee)
Distributed(asset, amount, totalStaked)

Paid in the equities the treasury actually holds

Each reward asset is a tokenised stock listed on Robinhood Chain. The quote is that token's own, read from the chain's explorer. The weight is the share of treasury value it represents right now.

SymbolReward assetReferencePriceIn treasuryWeight
loading assets

No price history is shown because none is stored. A 24 h column would be invented.

Built to be checked, not just trusted

Six claims. Next to each one, the thing you can do yourself to find out whether it holds.

Nothing is minted for idle hardware

How to checkComputeRegistry.reportCompute() updates a counter and emits an event. Read the function: there is no mint call in it. Utilisation makes a provider discoverable, and only a paid job pays.

The treasury distributes only what a customer put in

How to checkTreasury.distribute() pulls the asset from the manager's wallet before crediting anyone. Sum the Distributed events and compare them against FeeReceived. The second is the only source of the first.

Providers post collateral they can lose

How to checkProviderStaking.stakeOf(address) is denominated in SFG. Read a resolved dispute: resolveDispute(..., favorProvider=false) calls slash(), and the buyer's balance rises by exactly the slashed amount.

The file you download is the file committed on chain

How to checkEach output file's sha256 sits in the result manifest, the manifest sits inside resultHash, and resultHash sits in JobResultSubmitted. Re-hash what you downloaded and walk it back.

The token supply cannot grow

How to checkNetworkToken has no mint function after construction. Read the contract, then compare totalSupply() today against the value at the deployment block.

Execution is the one step you cannot verify by proof

How to checkVerifiable computation is unsolved, so nothing here claims it. What backs a result instead is escrow, slashable collateral, a minimum run duration and a dispute window. Reject a bad result and the arbiter can take the provider's stake.

Every step is a contract you can read

Escrow, settlement and distribution are on-chain transactions. Execution is the single off-chain hop, and it is bracketed by a hash on the way in and a hash on the way out.

Customerholds keysJobMarket · escrowon-chainProvider agentDocker · off-chainJobMarket · settleon-chainTreasuryon-chainStakershold keysoff-chain executionspecHash inresultHash outFig. 1 · settlement path, one job
JobMarketloading
Treasuryloading
ProviderStakingloading
ComputeRegistryloading
Tokenloading
NetworkRobinhood Chain · chainId 4663
Ready when you are

Put the machine to work.

One command checks Docker, registers your node, posts collateral and starts taking jobs.

PROVIDER_PRIVATE_KEY=0x… npm run joinProvide compute