Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

router package

Overview

Package router provides swap routing and execution across GnoSwap liquidity pools.

Router domain proxy for single-hop and multi-hop exact-in, exact-out, and dry-route operations.

Live exact-in and exact-out calls validate a deadline and the corresponding amount limit (minimum output or maximum input). DrySwapRoute is a read-only quote path with no deadline or token transfer.

The router fee is charged on output tokens. It defaults to 15 bps (0.15%) and is configurable by admin/governance from 0 through 1000 bps (0–10%); the current rate is fixed for each individual execution.

The router acts as a proxy to version-specific implementations, currently routing to v1 for all swap operations.

Functions

DrySwapRoute

func DrySwapRoute( inputToken, outputToken string, specifiedAmount string, swapTypeStr string, strRouteArr, quoteArr string, tokenAmountLimit string, ) (string, string, error)

DrySwapRoute simulates a swap route without changing state.

Parameters:

  • inputToken: input token path
  • outputToken: output token path
  • specifiedAmount: exact input or output amount
  • swapTypeStr: `EXACT_IN` or `EXACT_OUT`
  • strRouteArr: encoded route
  • quoteArr: encoded quotes
  • tokenAmountLimit: minimum output or maximum input amount

Returns:

  • amountIn: estimated input amount
  • amountOut: estimated output amount
  • err: non-nil when route validation or simulation fails

Params

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.DrySwapRoute(,,,,,,)"

Result

ExactInSingleSwapRoute

func ExactInSingleSwapRoute(cur realm, inputToken string, outputToken string, amountIn string, routeArr string, amountOutMin string, sqrtPriceLimitX96 string, deadline int64, referrer string) (string, string)

ExactInSingleSwapRoute executes a single-hop swap for an exact input amount.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • inputToken: input token path
  • outputToken: output token path
  • amountIn: exact input amount
  • routeArr: encoded route
  • amountOutMin: minimum output amount
  • sqrtPriceLimitX96: Q64.96 price limit
  • deadline: transaction deadline
  • referrer: referral address

Returns:

  • amountIn: input amount consumed (a nonzero price limit may stop early)
  • amountOut: net output amount delivered after the router fee

Halt check: reverts while the Router halt scope is active.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactInSingleSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactInSingleSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

ExactInSwapRoute

func ExactInSwapRoute(cur realm, inputToken string, outputToken string, amountIn string, routeArr string, quoteArr string, amountOutMin string, deadline int64, referrer string) (string, string)

ExactInSwapRoute executes a multi-hop swap for an exact input amount.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • inputToken: input token path
  • outputToken: output token path
  • amountIn: exact input amount
  • routeArr: encoded route
  • quoteArr: encoded quotes
  • amountOutMin: minimum output amount
  • deadline: transaction deadline
  • referrer: referral address

Returns:

  • amountIn: input amount consumed
  • amountOut: net output amount delivered after the router fee

Halt check: reverts while the Router halt scope is active.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactInSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactInSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

ExactOutSingleSwapRoute

func ExactOutSingleSwapRoute(cur realm, inputToken string, outputToken string, amountOut string, routeArr string, amountInMax string, sqrtPriceLimitX96 string, deadline int64, referrer string) (string, string)

ExactOutSingleSwapRoute executes a single-hop swap for a requested post-fee output target.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • inputToken: input token path
  • outputToken: output token path
  • amountOut: requested net output target
  • routeArr: encoded route
  • amountInMax: maximum input amount
  • sqrtPriceLimitX96: Q64.96 price limit
  • deadline: transaction deadline
  • referrer: referral address

Returns:

  • amountIn: input amount consumed (a nonzero price limit may stop early)
  • amountOut: net output delivered after the router fee; it may be below the requested target when the limit is reached

Halt check: reverts while the Router halt scope is active.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactOutSingleSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactOutSingleSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

ExactOutSwapRoute

func ExactOutSwapRoute(cur realm, inputToken string, outputToken string, amountOut string, routeArr string, quoteArr string, amountInMax string, deadline int64, referrer string) (string, string)

ExactOutSwapRoute executes a multi-hop swap for a requested post-fee output target.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • inputToken: input token path
  • outputToken: output token path
  • amountOut: requested net output target
  • routeArr: encoded route
  • quoteArr: encoded quotes
  • amountInMax: maximum input amount
  • deadline: transaction deadline
  • referrer: referral address

Returns:

  • amountIn: input amount consumed
  • amountOut: net output delivered after the router fee

Halt check: reverts while the Router halt scope is active.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactOutSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "ExactOutSwapRoute" -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

GetImplementationPackagePath

func GetImplementationPackagePath() string

GetImplementationPackagePath returns the package path of the currently active implementation.

Returns:

  • packagePath: package path of the active implementation

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.GetImplementationPackagePath()"

Result

GetPendingProtocolFees

func GetPendingProtocolFees() map[string]int64

GetPendingProtocolFees returns a copy of uncollected protocol fees by token.

Returns:

  • fees: pending protocol fee amount keyed by token path

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.GetPendingProtocolFees()"

Result

GetSwapFee

func GetSwapFee() uint64

GetSwapFee returns the current router fee rate.

Returns:

  • fee: fee rate in basis points

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.GetSwapFee()"

Result

RegisterInitializer

func RegisterInitializer(cur realm, initializer func(_ int, rlm realm, routerStore IRouterStore) IRouter)

RegisterInitializer registers a new router implementation version. Each implementation package calls it during initialization before it can be selected.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • initializer: callback that receives the propagated realm context and router store, then constructs the IRouter implementation

Param

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "RegisterInitializer" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "RegisterInitializer" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

Render

func Render(path string) string

Render delegates web rendering to the active implementation.

Param

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.Render()"

Result

SetSwapFee

func SetSwapFee(cur realm, fee uint64)

SetSwapFee sets the router fee rate.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • fee: fee rate in basis points

Halt check: reverts while the Router or ProtocolFee halt scope is active.

Param

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "SetSwapFee" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "SetSwapFee" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

SwapCallback

func SwapCallback(cur realm, token0Path string, token1Path string, amount0Delta int64, amount1Delta int64, payer address) error

SwapCallback transfers amounts owed by a pool during a swap.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • token0Path: token0 path
  • token1Path: token1 path
  • amount0Delta: token0 amount owed to or by the pool
  • amount1Delta: token1 amount owed to or by the pool
  • payer: address that supplies positive deltas

Returns:

  • err: non-nil when payment validation or transfer fails

Halt check: reverts while the Router halt scope is active.

Params

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "SwapCallback" -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "SwapCallback" -args $'' -args $'' -args $'' -args $'' -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

UpgradeImpl

func UpgradeImpl(cur realm, packagePath string)

UpgradeImpl switches the active router implementation to a different registered version.

Parameters:

  • cur: current realm context; callers use cross(cur) when crossing into this realm
  • packagePath: package path of the previously registered implementation to activate

Param

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "UpgradeImpl" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "gnoland-1" -remote "http://127.0.0.1:26657" ADDRESSgnokey query -remote "http://127.0.0.1:26657" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/gnoswap/router" -func "UpgradeImpl" -args $'' -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "gnoland-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "http://127.0.0.1:26657" call.tx
  

NewRouterStore

func NewRouterStore(kvStore store.KVStore) IRouterStore

NewRouterStore creates a router store backed by the provided KV store.

Parameters:

  • kvStore: persistent key-value store used for router fee and pending-fee data

Returns:

  • routerStore: router storage implementation using kvStore

Param

Command

gnokey query vm/qeval -remote "http://127.0.0.1:26657" -data "gno.land/r/gnoswap/router.NewRouterStore()"

Result