Gully Offerwall
On this page
Live
Live on testnet at offers.gullychain.xyz. Campaign checkout through Gully Pay is rolling out: until the Offerwall store is connected, the dashboard shows "Gully Pay checkout is not set up yet" instead of a payment link.
The Offerwall is a marketplace on top of Quests. Advertisers (games, protocols, Gully's own apps) fund offers such as "reach level 5", "bridge to GullyChain" or "follow on X". Players complete them and earn glUSD on web and PC, or points on mobile. Publishers show the wall on their site or in their game and earn a share of every completion.
| Site, dashboard, widget | offers.gullychain.xyz |
| Integration guide | offers.gullychain.xyz/integrate |
| Sign-in | Gully ID (client gully-offerwall), open to everyone |
| Payments | Gully Pay hosted checkout (USD), webhook checkout.session.completed |
| Public stats | GET https://offers.gullychain.xyz/v1/stats (completions and glUSD paid per hour, last 24 h) |
| Health | GET https://offers.gullychain.xyz/healthz |
#How a campaign runs
- Create the offer in the dashboard: type (game milestone by postback, on-chain action, social), reward, number of completions, end date. The quote shows the reward, the publisher share and the fees before you pay.
- Pay with Gully Pay. Gully Pay confirms the payment with a signed webhook; the API checks the amount and dedupes the event.
- Escrowed on Quests. The operator calls
OfferwallManager.open, which pulls the budget in glUSD and creates the quest on the QuestRegistry with the manager as its creator. - Players complete it. Completions are attested by the Offerwall's own
AttestedVerifier; crypto rewards are claimed on the registry, points go to the publisher's callback. - Unspent budget returns. At the end, or when you cancel,
releasesends everything the campaign no longer needs back to your Gully Chain account. Refunds can never get stuck in the manager.
Fees: the Quests protocol fee (5%) and the Offerwall service fee (10%). Publishers earn 25% of the reward of every completion on their placement.
#Add the wall to a site or web game
Create a placement in the dashboard (list the origins allowed to frame it), then paste its snippet:
<div id="gully-offerwall"></div>
<script src="https://offers.gullychain.xyz/widget/offerwall.js"
data-placement="pk_…" data-target="#gully-offerwall" async></script>The frame is served from offers.gullychain.xyz with Content-Security-Policy: frame-ancestors limited to your placement's origins; every other Offerwall page refuses to be framed. Options: data-mode="modal" with GullyOfferwall.open(), data-theme to override the kit colours. iOS and Android placements never show crypto actions: players earn points instead.
#Report game events (postbacks)
Game milestones are reported by your server, never by the client:
POST https://offers.gullychain.xyz/v1/postback
X-Gully-Key: pbk_…
X-Gully-Timestamp: <unix seconds, ±300 s>
X-Gully-Nonce: <16-64 chars, never reused>
X-Gully-Signature: hex HMAC-SHA256(secret, timestamp + "." + nonce + "." + rawBody)
{ "clickId": "clk_…", "event": "level_reached", "value": 5 }Unity games use the Offerwall module of the Gully Game SDK (GullyOfferwallClient), with a Nakama postback hook. Points rewards arrive at your placement's callback URL, signed with your placement secret sk_…; grant once per completionId.
#Contracts (GullyChain Testnet, 485590)
| Contract | Address |
|---|---|
| OfferwallManager (campaign budgets, publisher shares, refunds) | 0xD6a8c4151a7ED9865a540D20BDD42073DC9c74Bf |
| AttestedVerifier (the Offerwall's attester, allowed on the QuestRegistry) | 0x68bcaA36c3c2fA4cF6c7D51A2Ac21abfFDF93338 |
| QuestRegistry (Gully Quests) | 0xE3E57e15A9973281A8de2B3bedd512BE8C3813Bb |
| Operator (hot key: opens, tops up, settles, releases; moves money only along those paths) | 0x4366C5dBEcA628A97A3965470507A1fa38D4783D |
The service and the operator wallet are on the status board (opens in a new tab).