router source realm
Package router provides swap routing and execution across GnoSwap liquidity pools.
Package router provides swap routing and execution across GnoSwap liquidity pools.
The router handles token swaps with multi-hop routing, slippage protection, and automatic GNOT wrapping/unwrapping. It supports both exact input and exact output swap modes with deadline validation.
Key features: - Multi-hop routing across up to 3 pools - Quote distribution for optimal execution - Native GNOT handling with automatic wrap/unwrap - Slippage protection via min/max amounts - Router fee (0.15%) on all swaps - Deadline enforcement to prevent stale transactions
The router acts as a proxy to version-specific implementations, currently routing to v1 for all swap operations.
1
12
func DrySwapRoute
ActionDrySwapRoute simulates a swap route without executing it.
Parameters:
- inputToken: path of input token
- outputToken: path of output token
- specifiedAmount: specified amount for the swap
- swapTypeStr: swap type string ("ExactIn" or "ExactOut")
- strRouteArr: encoded route array
- quoteArr: encoded quote array
- tokenAmountLimit: token amount limit
Returns:
- string: estimated input amount
- string: estimated output amount
- bool: success status
func ExactInSingleSwapRoute
crossing Action1func 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 with exact input amount.
Parameters:
- inputToken: path of input token
- outputToken: path of output token
- amountIn: exact input amount
- routeArr: encoded route
- amountOutMin: minimum output amount
- sqrtPriceLimitX96: price limit for the swap
- deadline: transaction deadline
- referrer: referrer address for reward tracking
Returns:
- string: actual input amount
- string: actual output amount
func ExactInSwapRoute
crossing Action1func 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 with exact input amount.
Parameters:
- inputToken: path of input token
- outputToken: path of output token
- amountIn: exact input amount
- routeArr: encoded route array
- quoteArr: encoded quote array
- amountOutMin: minimum output amount
- deadline: transaction deadline
- referrer: referrer address for reward tracking
Returns:
- string: actual input amount
- string: actual output amount
func ExactOutSingleSwapRoute
crossing Action1func 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 with exact output amount.
Parameters:
- inputToken: path of input token
- outputToken: path of output token
- amountOut: exact output amount
- routeArr: encoded route
- amountInMax: maximum input amount
- sqrtPriceLimitX96: price limit for the swap
- deadline: transaction deadline
- referrer: referrer address for reward tracking
Returns:
- string: actual input amount
- string: actual output amount
func ExactOutSwapRoute
crossing Action1func 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 with exact output amount.
Parameters:
- inputToken: path of input token
- outputToken: path of output token
- amountOut: exact output amount
- routeArr: encoded route array
- quoteArr: encoded quote array
- amountInMax: maximum input amount
- deadline: transaction deadline
- referrer: referrer address for reward tracking
Returns:
- string: actual input amount
- string: actual output amount
func GetImplementationPackagePath
ActionGetImplementationPackagePath returns the package path of the currently active implementation.
func GetSwapFee
ActionGetSwapFee returns the current swap fee rate.
func RegisterInitializer
crossing Action1func RegisterInitializer(cur realm, initializer func(_ int, rlm realm, routerStore IRouterStore) IRouter)RegisterInitializer registers a new router implementation version. This function is called by each version (v1, v2, etc.) during initialization to register their implementation with the proxy system.
The initializer function creates a new instance of the implementation using the provided routerStore interface.
Security: Only contracts within the domain path can register initializers. Each package path can only register once to prevent duplicate registrations.
func SetSwapFee
crossing ActionSetSwapFee sets the swap fee rate.
Parameters:
- fee: new swap fee in basis points
func SwapCallback
crossing Action1func SwapCallback(cur realm, token0Path string, token1Path string, amount0Delta int64, amount1Delta int64, payer address) errorSwapCallback is called by pools to transfer tokens during a swap.
func UpgradeImpl
crossing ActionUpgradeImpl switches the active router implementation to a different version. This function allows seamless upgrades from one version to another without data migration or downtime.
Security: Only admin or governance can perform upgrades. The new implementation must have been previously registered via RegisterInitializer.
func NewRouterStore
ActionNewRouterStore creates a new router store instance with the provided KV store. This function is used by the upgrade system to create storage instances for each implementation.
3
type IRouter
interface 1type IRouter interface {
2 ExactInSwapRoute(_ int, rlm realm, inputToken string, outputToken string, amountIn string, routeArr string, quoteArr string, amountOutMin string, deadline int64, referrer string) (string, string)
3 ExactInSingleSwapRoute(_ int, rlm realm, inputToken string, outputToken string, amountIn string, routeArr string, amountOutMin string, sqrtPriceLimitX96 string, deadline int64, referrer string) (string, string)
4
5 ExactOutSwapRoute(_ int, rlm realm, inputToken string, outputToken string, amountOut string, routeArr string, quoteArr string, amountInMax string, deadline int64, referrer string) (string, string)
6 ExactOutSingleSwapRoute(_ int, rlm realm, inputToken string, outputToken string, amountOut string, routeArr string, amountInMax string, sqrtPriceLimitX96 string, deadline int64, referrer string) (string, string)
7
8 DrySwapRoute(inputToken, outputToken, specifiedAmount, swapTypeStr, strRouteArr, quoteArr, tokenAmountLimit string) (string, string, bool)
9 SwapCallback(_ int, rlm realm, token0Path string, token1Path string, amount0Delta int64, amount1Delta int64, payer address) error
10
11 GetSwapFee() uint64
12 SetSwapFee(_ int, rlm realm, fee uint64)
13}