Loading Preparing the Explorer shell…
Skip to content Realm detail
zdex gno.land/r/g1mv0052e7r6s09f5t9xsqf00nj3tqsgt9dg52jr/zdex/v2
Indexed deployment identity with independently loaded latest RPC source, functions, and Render.
Indexed deployment
Identity
Package path gno.land/r/g1mv0052e7r6s09f5t9xsqf00nj3tqsgt9dg52jr/zdex/v2
Deployed (UTC) 6 Sept 2026, 08:36:10 admin.gno book.gno gnomod.toml launch.gno math.gno points.gno pool.gno query.gno render.gno state.gno swap.gno token.gno types.gno upgrade.gno util.gno package zdex
import (
"chain"
"gno.land/p/nt/ufmt/v0"
)
// protoVersion is this realm generation. Gno packages are immutable:
// v2 is this path. A later /v3 ships as a new package; LP here stays.
// Admin points NextPkg / SetModule at the successor.
const protoVersion = "2"
const (
modSwap = "swap"
modLP = "lp"
modCreate = "create"
modBook = "book"
modPoints = "points"
modQuote = "quote"
modAdmin = "admin"
)
const defaultCaps = "swap;lp;create;book;points;quote;feeShare;noStakeLp"
var nextPkg string
func validModule(name string) bool {
return name == modSwap || name == modLP || name == modCreate ||
name == modBook || name == modPoints || name == modQuote || name == modAdmin
}
func moduleNames() []string {
return []string{modSwap, modLP, modCreate, modBook, modPoints, modQuote, modAdmin}
}
// Version is the ABI generation of this hub. v1 freeze: SwapExactIn,
// AddLiquidity, CreatePool, book, and points keep their names.
func Version() string {
return protoVersion
}
// Caps is a semicolon-separated capability list so UIs feature-gate
// without coupling to a package path. Missing Caps on an older realm
// means the client should fall back to probing individual queries.
func Caps() string {
return defaultCaps
}
// ThisPkg is the path of this hub realm.
func ThisPkg() string {
return thisPkg()
}
// NextPkg is empty until admin points this generation at a successor.
// Liquidity and open orders stay in this package; the UI may switch
// new flow to NextPkg without rewriting swap/LP/points clients.
func NextPkg() string {
return nextPkg
}
func SetNextPkg(cur realm, path string) {
mustOwner(cur)
nextPkg = path
chain.Emit("NextPkg", "path", path)
}
// ModuleOf returns the package that currently owns a surface.
// Unmapped names resolve to this hub so a v2 book can move alone.
func ModuleOf(name string) string {
if !validModule(name) {
return thisPkg()
}
v := modules.Get(name)
if v == nil {
return thisPkg()
}
s, ok := v.(string)
if !ok || s == "" {
return thisPkg()
}
return s
}
func SetModule(cur realm, name, pkg string) {
mustOwner(cur)
require(validModule(name), "zdex: unknown module")
if pkg == "" {
modules.Remove(name)
} else {
modules.Set(name, pkg)
}
chain.Emit("SetModule", "name", name, "pkg", pkg)
}
// Modules is one surface per line: name;pkg
func Modules() string {
out := ""
for _, n := range moduleNames() {
line := n + ";" + ModuleOf(n)
if out != "" {
out += "\n"
}
out += line
}
return out
}
// HubSnapshot is a single-line UI record:
// version;thisPkg;nextPkg;caps (caps may contain further semicolons)
func HubSnapshot() string {
return ufmt.Sprintf("%s;%s;%s;%s", Version(), thisPkg(), nextPkg, Caps())
}
Latest RPC state
Exported functions 2026-09-10T07:28:38.071Z SetPaused(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, v bool) ProposeAdmin(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, next string) AcceptAdmin(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}) TransferAdmin(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, next string) Admin() string RealmAddr() string PendingAdmin() string Paused() bool CollectFees(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string) (int64, int64) PlaceBid(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, giveU int64, wantAmt int64, expireH int64, allOrNone bool) uint64 PlaceAsk(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, giveT int64, wantU int64, expireH int64, allOrNone bool) uint64 Latest RPC state · Realm Render 2026-09-10T07:28:37.903Z
zdex v2
GNOT-native AMM generation 2. Two-sided pools, native ugnot (no wrap), escrow limit orders.
Swap fee 0.30% default (tiers 0.05% / 0.30% / 1.00%). Protocol ~1/6 of the fee.
Version: 2
Package: gno.land/r/g1mv0052e7r6s09f5t9xsqf00nj3tqsgt9dg52jr/zdex/v2
Pools: 1
Open orders: 0
Admin: g1mv0052e7r6s09f5t9xsqf00nj3tqsgt9dg52jr
Pools
| Pair | ugnot | token | virtual | fee | launch |
|---|---:|---:|---:|---:|---|
| ZDEX | 300000000 | 300000000000 | 0 | 30 bps | no |
Swap
Create a pool
Two-sided ugnot/GRC20. Min 1 GNOT . Fee tiers 5 / 30 / 100 bps. Protocol takes ~1/6 of the swap fee; the rest stays as LP.
Order book
FillOrder(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, orderID uint64, giveAmt int64) (int64, int64)
CancelOrder(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, orderID uint64)
OrderCount() int
Launch(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, name string, symbol string, decimals int64, totalSupply int64, creatorKeepBps int64, virtualUgnot int64, vestBlocks int64, lockBlocks int64, snipeBlocks int64, snipeMaxBps int64) string
ClaimVest(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, symbol string) int64
VestingOf(symbol string, owner string) (int64, int64, int64)
MulDiv(a int64, b int64, d int64) int64
Sqrt(n int64) int64
MulDivCeil(a int64, b int64, d int64) int64
AmountOut(amountIn int64, reserveIn int64, virtualIn int64, reserveOut int64, virtualOut int64, feeBps int64) int64
AmountIn(amountOut int64, reserveIn int64, virtualIn int64, reserveOut int64, virtualOut int64, feeBps int64) int64
HarvestPoints(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string) int64
ClaimFeeShare(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}) int64
PointsOf(owner string) (int64, int64, int64)
ClaimableFeeShare(owner string) int64
EpochInfo() (int64, int64, int64, int64, int64, int64, int64)
SetEpochBlocks(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, n int64)
SetFeeShareBps(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, bps int64)
CreatePool(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, tokenKey string, symbol string, amountU int64, amountT int64, feeBps int64) string
AddLiquidity(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, amountU int64, maxToken int64, minLP int64) int64
RemoveLiquidity(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, lp int64, minU int64, minT int64) (int64, int64)
PoolInfo(poolID string) (int64, int64, int64, int64, int64)
PositionOf(poolID string, owner string) int64
PoolCount() int
Height() int64
PoolList() string
PoolSnapshot(poolID string) string
OrderList() string
PointsSnapshot(owner string) string
EpochSnapshot() string
TokenCatalog() string
LookupToken(ref string) string
Render(path string) string
Quote(poolID string, tokenIn string, amountIn int64) int64
QuoteIn(poolID string, tokenOut string, amountOut int64) int64
SwapExactIn(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, tokenIn string, amountIn int64, minOut int64, maxHeight int64) int64
SwapExactOut(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, poolID string, tokenOut string, amountOut int64, maxIn int64, maxHeight int64) int64
SpotPrice(poolID string) int64
Transfer(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, symbol string, to string, amount int64)
Approve(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, symbol string, spender string, amount int64)
TransferFrom(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, symbol string, from string, to string, amount int64)
BalanceOf(symbol string, owner string) int64
TotalSupply(symbol string) int64
TokenKey(symbol string) string
Version() string
Caps() string
ThisPkg() string
NextPkg() string
SetNextPkg(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, path string)
ModuleOf(name string) string
SetModule(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, name string, pkg string)
Modules() string
HubSnapshot() string