Live#…
Reading the chain…
Integrate

Integrate with Gully Chain

Gully Core contracts, embeds and oEmbed, the share API, and Gully ID one-tap approvals with the Gully Wallet SDK. Everything here is live on testnet unless it says otherwise.

On this page: Gully Core · Embeds and oEmbed · Share API · Gully ID one-tap and Wallet SDK

Gully Core contracts

Live on testnet

The 44 Gully Core contracts are deployed on GullyChain Testnet (2026-10-29, version 1.0.0-testnet) and verified on Sourcify. Launches in the app (app.gullychain.xyz/launch), swaps, token pages and analytics run on Gully Core; you can also call the contracts directly.

Gully Core is the chain's own launchpad and DEX core: one shared Vault with concentrated-liquidity (CL) and Bin pool managers, a UniversalRouter, one-transaction launches with the launch liquidity locked forever, launchpads and DEXes as clones (GullyCorePadFactory), range orders and DCA. Deployed through CreateX 0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed; governance and protocol fees go to the testnet governance Safe. It reuses WETH9, USDC.e and Permit2 from the contracts table. Design and fee model: Gully Core in the docs.

Gully Core contracts on GullyChain Testnet
ContractAddress
Governance
Safe L2 1.4.1 proxy (governance Safe)0xC5526E28B5cDe3C5962A224896804a499d5bb240
GullyCoreTunerGate0xED0C799f0fe1BfDf85E9298BF6383d0526331Cd0
Core
Vault0x90c882D9C307c2bF7E961bC279b0929f92997dD4
CLPoolManager0x6D0721230b6beD4bc9eeb65E200B6f90c2C9aEE6
BinPoolManager0x4255B0B14F3dd4e2350954Da78707E3fA6c94E2B
CLPoolManagerOwner0xAC57987b453533e3D67881026dA5CA271A7c7438
BinPoolManagerOwner0xF8b4B5b1444fC2843BcA72b56d094a947b63654a
Periphery
CLPositionDescriptorOffChain0x8504aD36c38D34b31B431169530eC56340e1dF5f
CLPositionManager0x337c8E7B40132B677db2b99445EbC6B3835fd7A4
BinPositionManager0xC1EEF3aaf142dffDe6551a557E9700DB12817719
CLQuoter0xAFFd2FcE14990C624aDf076C479a098Fa37b35eb
BinQuoter0x4206Bb61C793027EcfB2d56e91Be78a5ba3b0BDB
MixedQuoter0x8b9F914e7a6CF966D6826dAC965499E43a91e55F
TickLens0x46B2C141271f676c1bdd1174BB05120e48990e64
Router
UniversalRouter0xb6ab6f0D23c769329DB4b3CFB947fDe3a9e797A5
Fees
GullyCoreProtocolFeeControllerV20x241F54124d43A6c921c5f6e8D2915b6a1DD94592
GullyCoreProtocolFeeControllerV40x31bC6C47df76225f3A3172A239B9BB485224b847
Registries
GullyCoreRegistry0x352e2881Ae34bCcF8e6bB3BC38dC0Ffe9e99Aa2a
GullyCoreLaunchRegistry0x232B22f21cF12Db740df21DE09915eC7F6e61039
Launchpad
GullyCoreLPLocker0x0Ca509787bf2C6a241761586d02885b9719aca5f
LaunchTokenFactory0xC36E33Ef98Bf83d4D3A016dBa32822303f30cCB8
GullyCoreBinLPLocker0x444719a68d039639655EDC943F1826cC2835c5a5
LaunchGuardHook0xAc79571DB68bF84012Ea986d25Bd09c6de6d4935
BinLaunchGuardHook0x01c7F3E6d9715FB5240b666ef963C61138694Cab
LaunchLegs0xE3e49aF19f2ed8Dfe8F0380e70796e7Bd69Cf777
LaunchpadKitV20xd46543Fcb42878868eBA0C62ea1F7801a357B12D
GullyCorePadFactory0x2D7dcdfC94C014f64E5F23b7A3E79df759183080
GullyCoreSplitFactory0x6e38c46A7f836896E635c28afE98b022f93D01df
GullyCorePositionLock0x7b63b4C482E23C423ED65a8648358C5417703Ea3
GullyCoreTokenLock0x593a98b20A78538432571cb90704A234fa9D7ED5
GullyCoreMultisend0x0D13fC3102079CBA6c2629c8de003DD3cB333bc4
GullyCoreDropFactory0x3259f54374e4970c908112c1682F000612d5D422
GullyCoreLaunchAndBuy0x3A447F552146Aa05262fd98603C9B1394267ce5B
Hooks
GullyCoreDynamicFeeHook0xB2Fc45D22683beC1e72Ec5D316d910294551bA00
GullyCoreBinDynamicFeeHook0x8664b12e10a5A1FE86c47481333Bf56894b68BBd
GullyCoreDexHook0x26F5e7144dBe0ADB6767D7889b79e50693d50E5D
GullyCoreOracleHook0xA8F9049ec5a0b8D4451a3915606ac83278798eB9
RevShareHook0xFcf532aFA09F822BC5c89f7a004CBd4d0BDCBf1c
GullyCoreLiquidityRewardsHook0xb6E700a7fdC274f85E521A49159503d54E23fE4e
Orders
GullyCoreFillRouter0x7577aEcB9862a7a6022Dcf1D3a3623ED91EdD9c6
GullyCoreRangeOrders0x66a92Db09eB576bb90C0d1C209AeB160bAdE91E9
GullyCoreDCA0x5D39079CE27819682613b67D3EB13D88B3A1146F
Vaults
GullyCoreVaultFactory0xDB61faBF2B15654edB01c25E162ae579f729407F
GullyCoreManagedVault0xe0Dc3211294F5e00677051B00816015934cCD835

Every address with its verification status and ABI link is also in contracts.json and llms-contracts.txt.

Embeds and oEmbed

Every track, video, Short and live stream in the app has an embeddable player at https://app.gullychain.xyz/embed/<kind>/<id> (kinds track, video, short, live). The player loads only its own script, runs no trackers and may be framed by any site; paid titles show a button that opens the app.

HTML
<iframe src="https://app.gullychain.xyz/embed/video/VIDEO_ID" width="640" height="360"
  style="border:0;border-radius:12px;max-width:100%"
  allow="autoplay; encrypted-media; fullscreen; picture-in-picture"
  allowfullscreen loading="lazy" title="My film on Gully Chain"></iframe>

Sizes: track 100% x 152, video and live 640 x 360, short 360 x 640.

oEmbed

Resolve any app or share link to an embed. CORS is open, only format=json is supported, and maxwidth / maxheight size the player and thumbnail. Tracks answer type: "rich", videos, Shorts and live streams type: "video" with the iframe in html, everything else type: "link" with the card as thumbnail_url. Unknown URLs answer 404. App and share pages also announce the endpoint with <link rel="alternate" type="application/json+oembed">.

https://app.gullychain.xyz/oembed?url=https://app.gullychain.xyz/watch/VIDEO_ID&maxwidth=600
Shell
curl -s "https://app.gullychain.xyz/oembed?url=https://app.gullychain.xyz/watch/VIDEO_ID"
# {"version":"1.0","provider_name":"Gully Chain","type":"video","width":640,"height":360,
#  "html":"<iframe src=\"https://app.gullychain.xyz/embed/video/VIDEO_ID\" ...>","thumbnail_url":"https://app.gullychain.xyz/s/video/VIDEO_ID.png", ...}

Creator guide: Share and embed.

Share API

Share links have the form https://app.gullychain.xyz/s/<kind>/<id>: link-preview bots get Open Graph and Twitter cards, people are sent on to the app. Kinds include track, video, short, live, p (profile, by .gully label), post, t (token or launch) and quest. Add ?r=<referral> and utm_* parameters to attribute visits.

EndpointWhat it returns
GET https://app.gullychain.xyz/s/<kind>/<id>.pngThe 1200 x 630 link-preview card
GET https://app.gullychain.xyz/s/<kind>/<id>.story.pngThe 1080 x 1920 story image
GET https://social.gullychain.xyz/v1/share/counts?kind=&id={shares, visits, byNetwork, visitsBySource} for one item
POST https://social.gullychain.xyz/v1/share/eventCounts a share from your own button: body {"kind", "id", "network"}, rate limited (120 an hour per IP)

Networks for share/event: native, copy, x, facebook, whatsapp, telegram, instagram, tiktok, imessage, sms, story, embed, qr, other.

Shell
curl -s "https://social.gullychain.xyz/v1/share/counts?kind=video&id=VIDEO_ID"
curl -s -X POST https://social.gullychain.xyz/v1/share/event -H 'content-type: application/json' \
  -d '{"kind":"video","id":"VIDEO_ID","network":"x"}'

Gully ID one-tap and the Gully Wallet SDK

Use Sign in with Gully (OpenID Connect) for identity, and the Gully Wallet SDK for on-chain actions. Load one script and you get window.gully, an EIP-1193 provider that is also announced over EIP-6963 as "Gully Wallet", plus a <gully-wallet-pill> account button. Every request opens a small approval window on gullyid.xyz; the server never holds a user key.

HTML
<script src="https://gullyid.xyz/wallet.js"></script>
<gully-wallet-pill></gully-wallet-pill>
<script>
  const [account] = await GullyWallet.connect()        // eth_requestAccounts
  // approve + swap in one approval: EIP-5792 batch, sponsored when the paymaster agrees
  const { id } = await window.gully.request({
    method: 'wallet_sendCalls',
    params: [{ version: '2.0.0', chainId: '0x768d6', from: account, calls: [approveCall, swapCall] }],
  })
  await window.gully.request({ method: 'wallet_getCallsStatus', params: [id] })
</script>

Also supported: eth_sendTransaction, personal_sign and eth_signTypedData_v4 (verify them as ERC-1271, or ERC-6492 before the account is deployed; viem's verifyMessage and verifyTypedData handle both), wallet_switchEthereumChain, wallet_getCapabilities (paymaster service and atomic batches on 0x768d6). Helpers on GullyWallet: connect(), disconnect(), state(), balances(), send(), swap(), receive(), open(path). An ES module build is at https://gullyid.xyz/wallet.mjs.

Approval tiers

TierWhatHow the user approves
No promptFree Gully actions: quest check-ins and claiming rewards (0-value calls to allowlisted Gully contracts)Nothing
One tapUSDC.e tips, small Gully Swap swaps from USDC.e, pay-per-view unlocks and membership renewals for the user, under your app's daily limit, to recipients paid beforeOne button ("Tip $1 to @maya")
PasskeyOver the limit, a first payment to a new recipient, launching a coin, bridging, ETH, contracts not on the allowlist, unpriced callsFull review and the passkey
Always passkeySecurity changes: recovery, devices, the root key, raising the limitThe passkey; the session key cannot express these

The daily limit is $25 by default, counted in USDC.e and adjustable per app from $0 to $250 by the user. The session key is a non-extractable P-256 key on the Gully ID origin, installed once with the passkey, valid for 7 days and limited to 100 operations per app per UTC day. On chain it is one Kernel v3.3 permission: CallPolicy (the allowlist, never the account itself), TimestampPolicy (expiry) and GullySessionPolicy 0xFDEB7b7715200dBc94A058BA1254b863c08D070E (the per-day spend and op caps), with signatures disabled so it can never sign ERC-1271 messages. Pricing fails closed: anything the wallet cannot price needs the passkey. Pass capabilities: { gully: { intent: 'tip' } } to wallet_sendCalls for the one-tap sheet wording. Users see their limits and today's spend, and revoke apps, in Gully ID under Me, Connected apps. eth_sign and eth_signTransaction are refused (a smart account has no raw key).

Full guide: gullyid.xyz/developers/wallet-sdk (opens in a new tab). Accounts, bundler and paymaster: Accounts and passkeys.