1package position23import (4 "gno.land/p/gnoswap/gnsmath/v1"5 u256 "gno.land/p/gnoswap/uint256/v1"6 ufmt "gno.land/p/nt/ufmt/v0"7 pl "gno.land/r/gnoswap/pool"8)910type AddLiquidityParams struct {11 poolKey string // poolPath of the pool which has the position12 tickLower int32 // lower end of the tick range for the position13 tickUpper int32 // upper end of the tick range for the position14 amount0Desired *u256.Uint // desired amount of token0 to be minted15 amount1Desired *u256.Uint // desired amount of token1 to be minted16 amount0Min *u256.Uint // minimum amount of token0 to be minted17 amount1Min *u256.Uint // minimum amount of token1 to be minted18 caller address // address to call the function19}2021// addLiquidity calculates liquidity amounts and mints position tokens to a pool.22func (p *positionV1) addLiquidity(_ int, rlm realm, params AddLiquidityParams) (*u256.Uint, *u256.Uint, *u256.Uint) {23 sqrtPriceX96String, err := pl.GetSlot0SqrtPriceX96(params.poolKey)24 if err != nil {25 panic(err)26 }27 sqrtPriceX96 := u256.MustFromDecimal(sqrtPriceX96String)28 sqrtRatioAX96 := gnsmath.TickMathGetSqrtRatioAtTick(params.tickLower)29 sqrtRatioBX96 := gnsmath.TickMathGetSqrtRatioAtTick(params.tickUpper)3031 liquidity := gnsmath.GetLiquidityForAmounts(32 sqrtPriceX96,33 sqrtRatioAX96,34 sqrtRatioBX96,35 params.amount0Desired,36 params.amount1Desired,37 )3839 token0, token1, fee := splitOf(params.poolKey)40 amount0Str, amount1Str := pl.Mint(41 cross(rlm),42 token0,43 token1,44 fee,45 params.tickLower,46 params.tickUpper,47 liquidity.ToString(),48 params.caller,49 )5051 amount0 := u256.MustFromDecimal(amount0Str)52 amount1 := u256.MustFromDecimal(amount1Str)5354 amount0Cond := amount0.Gte(params.amount0Min)55 amount1Cond := amount1.Gte(params.amount1Min)5657 if !(amount0Cond && amount1Cond) {58 panic(newErrorWithDetail(59 errSlippage,60 ufmt.Sprintf(61 "Price Slippage Check(amount0(%s) >= amount0Min(%s), amount1(%s) >= amount1Min(%s))",62 amount0Str, params.amount0Min.ToString(), amount1Str, params.amount1Min.ToString()),63 ))64 }6566 return liquidity, amount0, amount167}68NewPositionV1(positionStore interface {GetPosition func(uint64) (gno.land/r/gnoswap/position.Position, bool); GetPositionNextID func() uint64; GetPositions func() *gno.land/p/nt/bptree/v0.BPTree; HasPosition func(uint64) bool; HasPositionNextIDStoreKey func() bool; HasPositionsStoreKey func() bool; RemovePosition func(int, .uverse.realm, uint64) .uverse.error; SetPosition func(int, .uverse.realm, uint64, gno.land/r/gnoswap/position.Position) .uverse.error; SetPositionNextID func(int, .uverse.realm, uint64) .uverse.error; SetPositions func(int, .uverse.realm, *gno.land/p/nt/bptree/v0.BPTree) .uverse.error}, accessor interface {Approve func(int, .uverse.realm, .uverse.address, gno.land/p/nt/grc721/v0.TokenID) .uverse.error; Burn func(int, .uverse.realm, gno.land/p/nt/grc721/v0.TokenID); Exists func(gno.land/p/nt/grc721/v0.TokenID) bool; Mint func(int, .uverse.realm, .uverse.address, gno.land/p/nt/grc721/v0.TokenID) gno.land/p/nt/grc721/v0.TokenID; OwnerOf func(gno.land/p/nt/grc721/v0.TokenID) (.uverse.address, .uverse.error); TotalSupply func() int64}) interface {CollectFee func(int, .uverse.realm, uint64) (uint64, string, string, string, string, string); DecreaseLiquidity func(int, .uverse.realm, uint64, string, string, string, int64) (uint64, string, string, string, string, string, string); GetPositionFeeGrowthInside0LastX128 func(uint64) (string, .uverse.error); GetPositionFeeGrowthInside1LastX128 func(uint64) (string, .uverse.error); GetPositionFeeGrowthInsideLastX128 func(uint64) (string, string, .uverse.error); GetPositionLiquidity func(uint64) (string, .uverse.error); GetPositionOperator func(uint64) (.uverse.address, .uverse.error); GetPositionOwner func(uint64) (.uverse.address, .uverse.error); GetPositionPoolKey func(uint64) (string, .uverse.error); GetPositionTickLower func(uint64) (int32, .uverse.error); GetPositionTickUpper func(uint64) (int32, .uverse.error); GetPositionTicks func(uint64) (int32, int32, .uverse.error); GetPositionTokenBalances func(uint64) (int64, int64, .uverse.error); GetPositionTokensOwed func(uint64) (int64, int64, .uverse.error); GetPositionTokensOwed0 func(uint64) (int64, .uverse.error); GetPositionTokensOwed1 func(uint64) (int64, .uverse.error); GetPositions func() *gno.land/p/nt/bptree/rotree/v0.ReadOnlyTree; GetUnclaimedFee func(uint64) (*gno.land/p/gnoswap/uint256/v1.Uint, *gno.land/p/gnoswap/uint256/v1.Uint, .uverse.error); IncreaseLiquidity func(int, .uverse.realm, uint64, string, string, string, string, int64) (uint64, string, string, string, string); IsBurned func(uint64) (bool, .uverse.error); IsInRange func(uint64) (bool, .uverse.error); Mint func(int, .uverse.realm, string, string, uint32, int32, int32, string, string, string, string, int64, .uverse.address, string) (uint64, string, string, string); Render func(string) string; Reposition func(int, .uverse.realm, uint64, int32, int32, string, string, string, string, int64) (uint64, string, int32, int32, string, string); SetPositionOperator func(int, .uverse.realm, uint64, .uverse.address)}
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
Render unavailable
rate limit exceeded — the render query is served by the Gnoland archive RPC.
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.