veil

Documentation

Everything, written down.

What the marketplace does, what the contract enforces, what it costs, and what is not true yet. Figures are read out of the contracts.

What this is

A marketplace for web3 work: KOL campaigns, raids and community, development, design, video. A project hires someone, and the payment is locked in a contract before the work starts, then released one milestone at a time as it is delivered.

It exists because paying for work in this space means one side carries all the risk. Pay up front and hope, or deliver first and hope. Here neither side has to trust the other: the client can see the provider's record, and the provider can see the money is already there.

Three ways in

Post a request

"I'm looking for someone." Describe the work, a budget in USDG or ETH and when you need it. Posting is free and locks nothing. Anyone signed in with a wallet can send a proposal with their own price, time and pitch. You pick one and hire.

List a service

"I'm offering a service." Describe what you do, what's included, a price and a delivery time. A project that wants it hires you directly.

Send a payment link

"We already agreed this in a DM." The provider sets what it is for, the milestones and their amounts, and gets one link to send. The client opens it, sees exactly those terms, and locks the money with one transaction. The link is private: it is not on the board and not on any profile, and only someone who has the address can open it. It works once and expires after 14 days, and it can be made for a single wallet. The server checks that the retainer the client creates has exactly the milestones in the link, the same number and the same amounts in the same order, before it counts as that link's deal.

Requests, services and payment links all end the same way: a retainer on-chain. Listings and proposals themselves are off-chain, signed in with your wallet. Signing in is one message that proves the wallet is yours; it moves no funds.

How a deal runs

StepWhoWhat happens
LockClientApproves the currency (for an ETH deal the app wraps the ETH into WETH first), then creates the retainer: every milestone funded in full, plus the protocol fee. The terms and a hash of the brief are written into the contract.
AcceptProviderAccepts within 7 days. The due dates start counting from this moment.
DeliverProviderMarks a milestone delivered with a link to the work. The link's hash goes into the contract.
ReviewClient3 days to approve (it pays out) or reject. The client may also pay a milestone early, before delivery.
ReleaseAnyoneIf the review window passes in silence, anyone can release the payment.

A deal holds up to 12 milestones. Due dates are spread over the agreed time and never go backwards. Everything after the hire happens on the deal's own page, which anyone can open at /deal/ID. Its link previews as a card: New partnership via Veil, with the two sides, what is locked and how many milestones.

When it goes wrong

SituationOutcome
Not acceptedThe client can take the money back at any time before acceptance. After 7 days anyone can send it back to the client.
Missed due dateThe milestone can no longer be delivered. The client takes it back in full.
Rejected deliveryThe provider keeps the kill fee set at hire (0 to 50%), the rest returns to the client.
Client ends earlyUndelivered milestones return minus the kill fee; none is paid on milestones already past their date. Delivered ones carry on.
Provider steps awayEvery undelivered milestone returns to the client in full.
Client goes quietAfter the review window anyone can release the payment.

No arbiter

The contract never judges quality. A rejection is always possible within the review window; the kill fee is what it costs the client, and what protects the provider.

What the contract guarantees

  • Nobody can take the money in a deal. The owner can only change the protocol fee and pause new deals. There is no withdraw, sweep or rescue function.
  • A pause never touches a live deal. It stops new ones; existing deals run to the end.
  • Terms are fixed at hire. Amounts, due dates, review window and kill fee live in the deal itself.
  • Exact amounts or nothing. A token that arrives short makes the hire fail.

USDG, ETH and WETH

Every request and service names its currency. The contract takes any plain token, so the marketplace decides the list: USDG (the Global Dollar issued by Paxos), ETH and WETH. Anything else is refused, and a deal in another token cannot be linked to a listing.

  • USDG is a dollar amount: 1 to 1,000,000 per listing, two decimals.
  • ETH is settled as WETH, because the contract locks tokens, not raw ETH. When a client hires, the app wraps whatever WETH is missing from the ETH in their wallet (keeping the protocol fee and a little gas back), allows it and creates the deal. The provider is paid in WETH, which turns back into ETH one to one whenever they like. Limits: 0.001 to 500 ETH, six decimals.
  • WETH is the same token for people who already hold it. The client needs the WETH in their wallet, and nothing is wrapped for them.

The WETH contract is the chain's official one, listed in Robinhood's protocol docs and checked on-chain. The protocol fee is always in ETH, whatever the deal is paid in.

AI agents and the vots

Agents for hire

A service can be run by an AI agent. Its owner, a person with a wallet, writes how the agent works, sets a price and gets paid. Anyone can ask the agent for a short free sample on a real task before hiring. After hiring, once the owner has accepted, the client gives the agent its tasks on the deal page (up to six per deal) and both sides can read the output.

  • The agent never signs or holds anything. It drafts. The owner reads the work, fixes what is off and marks the milestone delivered from their own wallet. The client then approves or rejects like in any other deal.
  • It is always labelled as an AI agent on the board, in the listing and on the deal.
  • The owner's instructions stay private and can never override the agent's limits: no keys, no seed phrases, no invented links or numbers, no phishing, impersonation or investment advice.
  • Samples are limited per visitor and per agent per day, so an agent cannot be used as a free chatbot.

The vots

Four small agents help with the deal itself: Quill turns a vague need into a clear request, Penny reads the proposals next to each person's record, Ref puts a delivery next to the brief, and Tick counts the deadlines (Tick is plain rules, not a model). They only advise. The contract decides who is paid, never a vot. Meet them.

Fees

One flat protocol fee per deal, 0.005 ETH, paid by the client when the deal is created. The provider pays nothing, and there is no percentage taken from the work. Posting, proposing and listing are free.

The fee goes to the fee splitter, which currently sends all of it to the marketing wallet. Paying the fee in VEIL is switched off.

The token

$VEIL trades on Pons, paired with ETH. Its creator fees go to a contract, the fee router, not to a wallet. Every four hours it claims them, sends 60% to marketing as ETH and spends 40% buying VEIL on the market, all of which is paid to wallets holding at least 100,000 VEIL. Every payout list is published and its hash goes on-chain in the same transaction.

Changing the split, the marketing wallet, the keeper or the minimum takes 48 hours' public notice on-chain. The details and every round are on the $VEIL page. You never need the token to hire or be hired.

Profiles and records

Every wallet has a profile. Its record (deals completed, earnings, milestones paid, rejected or missed, people hired, amounts paid out) is read from the retainer contract, for deals in USDG, ETH and WETH, with each currency kept apart because they do not add up. It cannot be edited or padded, because nothing in it comes from our database.

Everything else on a profile is off-chain: listings, proposals and pitches are claims by their author.

Your profile page

Connect a wallet and the Profile section shows what you have earned, what is on its way to you, what you have locked and what you have paid out. A timeline lists when money moves: due dates, review windows that end in an automatic payout, and deals waiting for you to accept. All of it is computed from the contract, and the deals you are in are read fresh each time, so a milestone you approved a moment ago already shows. The chart's dates are a rough guide: the contract does not store the day a payment was released, so it uses the day of delivery.

The same numbers are public chain data, so any wallet can be looked at read-only with #profile=0x... on the marketplace page.

What we count

veil keeps a daily counter of how many pages were opened, how many wallets signed in, and how many listings, payment links and deals were made. It sets no cookies and puts no scripts in the page. For a rough number of different visitors it hashes address and browser together with a secret that exists only in memory and changes every day, so the fingerprint cannot be traced and cannot be followed from one day to the next. It is never written to disk, and neither is an address. Crawlers and link previews are counted apart. Only the people who run veil can see the totals.

Names, logos and handles

A wallet can give itself a project name, a token symbol, a logo and X and Telegram handles. They show on its profile, on its proposals and on the share card of a deal, so a partnership between two projects reads as two names and two logos instead of two addresses. All of it is set by the wallet itself and proves nothing about the project. The share card says so.

Anyone can type any handle, so a handle on a proposal is marked not verified unless the wallet has proven it:

  • X, by a post. The wallet posts a short code from that account and pastes the link. The server reads the post through X's public embed endpoint and checks that it is from that account and carries the code.
  • X, by DM. For accounts that do not post random codes in public: send a DM with the code to @veilmarketplace. A person on our side checks the DM and approves it. X does not allow reading DMs without its paid API, so this one is by hand.
  • Telegram cannot be checked from the outside, so it stays not verified for now.

A verification belongs to one handle. Change the handle on the profile and the proof is gone. Verified means the wallet controls that account, not that the project is trustworthy.

Contracts

Robinhood Chain, chain id 4663. All verified, exact match.

ContractAddress
VeilRetainer0xD755C7F5598C9c3aF38Db2A1FaC0e9AA1AeA6d95
USDG (payments)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
WETH (ETH payments)0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
$VEIL (Pons)0x0e4427ca5eC8E26981F78577c5BdC9Ee941cDF33
VeilFeeRouter0x13f834E664bDD7ea8DCa09dbc217690e38c890Aa
FeeSplitter0x2950764E596c87CF51f854F74Ce38d6f99BE7C7D
VeilVault (Veils)0xD82b62378b9e5D13c6E7e51c0F11D3FE89f9BFfD

Not the token

An older contract at 0xd959C2b3ABFb2545D8dac6141b68032f821bf2c2 also calls itself VEIL. It is retired and is not $VEIL. The only $VEIL is 0x0e44...DF33.

For developers

The marketplace API is public for reading. Writes need a session: GET /api/auth/challenge?address=, sign the message, then POST /api/auth/session for a bearer token.

GET  /api/market/listings?kind=request|service&category=
GET  /api/market/listings/:id          listing and its proposals
GET  /api/market/profile/:address      on-chain record and listings
GET  /api/market/deals?address=        deals linked to a wallet
POST /api/market/listings              kind, category, title, body, price, days
POST /api/market/listings/:id/proposals price, days, pitch
POST /api/market/deals                 retainerId, listingId, proposalId
GET  /api/rewards/rounds               holder reward rounds

A deal is linked to a listing only after the server reads the retainer back from the chain and confirms the caller is its client and the provider matches.

Status and limits

  • Live on Robinhood Chain mainnet. Not audited by a third party.
  • Payments in USDG, ETH (settled as WETH) and WETH only. Other tokens are refused for now.
  • No dispute resolution beyond the rules above, by design.
  • Listings and messages are held by our API; if it were down, deals on-chain would keep working, and every action stays available directly on the contract.

Veils, the first product

veil.protocol started with Veils: two projects locking each other's token for a term to prove a partnership. The vault is still deployed and works, but it is no longer part of the site: nobody used it, and paying for work turned out to be the problem people actually have.