← Back to Realms

Realm

gno.land/r/gnoswap/router/v1

Overview

Realm Path
gno.land/r/gnoswap/router/v1
Exported Functions
7
State Entries
69
Source Files
20
Total Package Entries
114

Exported Functions

7 exported functions

State

69 state entries

Source Code

FILES
assert.gno
go
1package router
2
3import (
4	"errors"
5	"strings"
6	"time"
7
8	ufmt "gno.land/p/nt/ufmt/v0"
9
10	u256 "gno.land/p/gnoswap/uint256/v1"
11
12	"gno.land/r/gnoswap/pool"
13
14	"gno.land/r/gnoswap/common"
15)
16
17// assertIsNotExpired ensures the transaction deadline has not passed.
18func assertIsNotExpired(deadline int64) {
19	now := time.Now().Unix()
20
21	if now > deadline {
22		panic(makeErrorWithDetails(
23			errExpired,
24			ufmt.Sprintf("transaction too old, now(%d) > deadline(%d)", now, deadline),
25		))
26	}
27}
28
29func assertSingleSwap(p *SingleSwapParams) {
30	if p.tokenIn == p.tokenOut {
31		panic(errors.New(errSameTokenSwap))
32	}
33
34	common.MustRegistered(p.tokenIn, p.tokenOut)
35}
36
37func assertIsValidSqrtPriceLimitX96(sqrtPriceLimitX96 string) {
38	if sqrtPriceLimitX96 == "" {
39		panic(makeErrorWithDetails(
40			errInvalidInput,
41			ufmt.Sprintf("invalid sqrtPriceLimitX96: %s", sqrtPriceLimitX96),
42		))
43	}
44
45	_, err := u256.FromDecimal(sqrtPriceLimitX96)
46	if err != nil {
47		panic(makeErrorWithDetails(
48			errInvalidInput,
49			ufmt.Sprintf("invalid sqrtPriceLimitX96: %s", sqrtPriceLimitX96),
50		))
51	}
52}
53
54func assertIsValidSingleSwapRouteArrPath(routePaths, inputToken, outputToken string) {
55	if routePaths == "" {
56		panic(makeErrorWithDetails(
57			errInvalidInput,
58			ufmt.Sprintf("invalid route: %s", routePaths),
59		))
60	}
61
62	if strings.Count(routePaths, ",") > 0 {
63		panic(makeErrorWithDetails(
64			errInvalidInput,
65			ufmt.Sprintf("invalid routePaths: %s", routePaths),
66		))
67	}
68
69	if strings.Count(routePaths, POOL_SEPARATOR) > 0 {
70		panic(makeErrorWithDetails(
71			errInvalidInput,
72			ufmt.Sprintf("invalid routePaths: %s", routePaths),
73		))
74	}
75
76	assertIsValidRoutePaths(routePaths, inputToken, outputToken)
77}
78
79func assertIsValidRoutePaths(routePaths, inputToken, outputToken string) {
80	err := validateRoutePaths(routePaths, inputToken, outputToken)
81	if err != nil {
82		panic(err)
83	}
84}
85
86func assertIsExistsPools(routePathArr string) {
87	poolPaths, err := parsePoolPathsByRoutePathArr(routePathArr)
88	if err != nil {
89		panic(err)
90	}
91
92	for _, poolPath := range poolPaths {
93		if !pool.ExistsPoolPath(poolPath) {
94			panic(makeErrorWithDetails(
95				errInvalidInput,
96				ufmt.Sprintf("pool does not exist: %s", poolPath),
97			))
98		}
99	}
100}
101
102func assertIsRouterImplementation(caller address) {
103	if caller != routerImplAddr {
104		panic(makeErrorWithDetails(
105			errUnAuthorizedCaller,
106			ufmt.Sprintf("caller %s is not router implementation(%s)", caller, routerImplAddr),
107		))
108	}
109}
110
111// assertHopFullyConsumed reverts when an exact-in hop consumed less input than specified.
112func assertHopFullyConsumed(hopIndex int, specifiedAmount, consumedAmount int64) {
113	err := validateHopFullyConsumed(hopIndex, specifiedAmount, consumedAmount)
114	if err != nil {
115		panic(err)
116	}
117}
118
119func validateHopFullyConsumed(hopIndex int, specifiedAmount, consumedAmount int64) error {
120	if consumedAmount != specifiedAmount {
121		return makeErrorWithDetails(
122			errInsufficientLiquidity,
123			ufmt.Sprintf("partial fill on hop(%d): requested=%d, consumed=%d", hopIndex, specifiedAmount, consumedAmount),
124		)
125	}
126
127	return nil
128}
129

Raw Package Data

Raw JSON data