1package padv3
2
3// Protocol parameters.
4// Defaults are compile-time constants; GraduationThreshold and ListFeeGns also have
5// live copies set in Init and adjustable by protocol via SetGraduationThreshold /
6// SetListFeeGns (see memepad.gno). Bond create fee is owned by the bond realm.
7
8const (
9 // Token economics
10 TotalSupply int64 = 1_000_000_000
11 CurveSupply int64 = 800_000_000 // sold on bonding curve
12 // PoolSeed is legacy. Graduation sizes LP tokens to curve spot
13 // (raised * VirtualToken / VirtualUgnot); unsold remainder = LeftoverTokens.
14 PoolSeed int64 = 200_000_000
15
16 // Virtual constant-product seed (Pump-style).
17 // Max net raise when selling full CurveSupply:
18 // R = VirtualUgnot0 * CurveSupply / (VirtualToken0 - CurveSupply)
19 // Mainnet: VU0≈102.375e9 + VT0≈1.073e9 => max raise ≈300k GNOT so20 // DefaultGraduationThreshold 300_000 GNOT is reachable before sold-out.21 VirtualUgnot0 int64 = 102_375_071_625 // mainnet: max raise ≥ 300k GNOT22 VirtualToken0 int64 = 1_073_000_191 // virtual token side
23
24 // Default graduation raise (ugnot). Live value starts here in Init;
25 // protocol may call SetGraduationThreshold afterward.
26 GraduationThreshold int64 = 300_000_000_000 // 300_000 GNOT (SetGraduationThreshold later)27
28 // Fees: 1.20% total. Of the fee: 40% creator, 40% protocol, 20% LP/k remainder.
29 FeeBPS int64 = 120
30 CreatorFeeShareBPS int64 = 4000
31 ProtocolFeeShareBPS int64 = 4000
32
33 // Fallback create bond for unit tests / if bond realm unavailable.
34 // Production pad uses createbond.CurrentBondUgnot() (see bond package).
35 // Sapphire normal bond = 2 GNOT; promo ~ $20 in ugnot set on bond.StartPromo.
36 CreateBondUgnot int64 = 150_000_000 // 150 GNOT fallback; live = bond realm
37 BondRefundBuyers int = 5
38 BondRefundMinRaised int64 = 5_000_000 // >=5 GNOT raised
39 BondRefundMaxHeights int64 = 100_000
40
41 // Anti-snipe: first N heights, max cumulative tokens per address (BPS of TotalSupply).
42 AntiSnipeHeights int64 = 20
43 AntiSnipeMaxBuyBPS int64 = 500 // 5% per address in window
44
45 // Status
46 StatusCurve = 0
47 StatusGraduated = 1
48
49 // Trade history ring buffer.
50 MaxTradeHistory = 128
51 // Trade sides stored in history
52 TradeSideBuy = 0
53 TradeSideSell = 1
54 TradeSideOpen = 2 // initial listing mark
55
56 DenomUgnot = "ugnot"
57
58 // --- Gnoswap auto-list (Sapphire) ---
59 // Curve collateral is WUGNOT (Buy TransferFrom). At graduate, pad already holds
60 // raised WUGNOT for LP - no realm self-wrap needed.
61 // CreatePool fee is fixed in GNS (typically 100e6 = 100 GNS):
62 // Fee = pre-funded GNS on pad OR surplus WUGNOT (fees retained) ExactOut -> GNS
63 GnoswapFeeTier uint32 = 3000 // 0.3% meme tier
64 GnoswapTickSpacing int32 = 60
65 GnoswapMinTick int32 = -887272
66 GnoswapMaxTick int32 = 887272
67 // Max WUGNOT used as ExactOut maxIn for fee buy (ceiling / slippage).
68 // Prefer pre-funding >=100 GNS on pad so LP depth stays = raised.
69 GnoswapMaxFeeWugnot int64 = 1_500_000_000 // 1500 GNOT
70
71 // Create-time GNS list fee escrow (padv20+).
72 // Creator must Transfer >= ListFeeGns free GNS to pad before Create.
73 // Locked per-launch until Gnoswap list consumes it, or ClaimListFee refunds creator.
74 // Matches typical gnspool.GetPoolCreationFee() (100 GNS, 6 decimals).
75 ListFeeGns int64 = 100_000_000
76)
77AdenaPathOf(id string) string
AdminInfo() string
Allowance(id string, owner string, spender string) 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}, id string, spender string, amount int64)
BalanceOf(id string, owner string) int64
Buy(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}, id string, amountWugnot int64, minTokensOut int64) int64
ClaimCreatorFees(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}, id string) int64
ClaimListFee(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}, id string) int64
ClaimProtocolFees(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
ClaimWugnot(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
ConfirmZdexList(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}, id string, poolId string)
Create(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, uri string) string
CreateBondRequired() int64
CreateWithVenue(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, uri string, venueId string) string
DefaultListVenue() string
FeeInfo() string
FreeGns() string
FreeWugnot() string
GetCreatorFees(id string) int64
GetPool(id string) (ugnot int64, token int64)
GetRaised(id string) int64
GetStatus(id string) int
GnoswapListedOf(id string) bool
GnoswapNoteOf(id string) string
GnoswapPoolPathOf(id string) string
Graduate(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}, id string)
GraduationThresholdLive() int64
GRC20Bank(id string) *gno.land/p/nt/grc20/v0.Token
Init(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})
IsProtocol(addr string) bool
LaunchCount() int
LaunchInfo(id string) string
ListBuyers(id string) string
ListedOf(id string) bool
ListFeeRequired() int64
ListFeeRequiredFor(venueId string) int64
ListIDs() string
ListNeed(id string) string
ListNeedFor(id string, venueId string) string
ListNoteOf(id string) string
ListPoolPathOf(id string) string
ListSeedReleasedOf(id string) bool
ListVenueOf(id string) string
ListVenues() string
PadAddress() string
ParamsInfo() string
PointsEnabled() bool
PreferredVenueOf(id string) string
PrepaidBalance(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
PrepaidOf(addr string) int64
ProtocolAddress() string
ProtocolBondFees() int64
ProtocolFees() int64
ProtocolFeesPaid() int64
PushProtocolFees(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
ReleaseListSeed(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}, id string)
RemainingRaiseUgnot(id string) int64
Render(path string) string
ReservedUgnot() int64
ResolveSymbol(symbol string) string
RetryList(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}, id string, venueId string) bool
RetryListGnoswap(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}, id string) bool
Sell(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}, id string, tokensIn int64, minWugnotOut int64) int64
SetDefaultListVenue(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}, venueId string)
SetGraduationThreshold(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}, ugnot int64)
SetListFeeGns(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}, gns int64)
SetListVenue(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}, id string, label string, enabled bool, feeAssetHint string)
SetPointsEnabled(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}, on bool)
SetPreferredVenue(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}, id string, venueId string)
SwapBuy(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}, id string, amountWugnot int64, minTokensOut int64) int64
SwapSell(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}, id string, tokensIn int64, minWugnotOut int64) int64
TokenIDOf(id string) string
TradeCount(id string) int
TradeHistory(id string) string
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}, id string, to 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}, id string, from string, to string, amount int64)
TransferProtocol(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}, newAddr string)
WithdrawProtocolUgnot(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}, amount int64) int64
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.