← Back to Realms

Realm

gno.land/r/gnoswap/position/v1

Overview

Realm Path
gno.land/r/gnoswap/position/v1
Exported Functions
1
State Entries
29
Source Files
16
Total Package Entries
61

Exported Functions

1 exported function

State

29 state entries

Source Code

FILES
assert.gno
go
1package position
2
3import (
4	"errors"
5	"time"
6
7	u256 "gno.land/p/gnoswap/uint256/v1"
8	ufmt "gno.land/p/nt/ufmt/v0"
9
10	prbac "gno.land/p/gnoswap/rbac/v1"
11	"gno.land/r/gnoswap/access/v1"
12)
13
14// assertIsNotExpired panics if the deadline is expired.
15func assertIsNotExpired(deadline int64) {
16	now := time.Now().Unix()
17
18	if now > deadline {
19		panic(makeErrorWithDetails(
20			errExpired,
21			ufmt.Sprintf("transaction too old, now(%d) > deadline(%d)", now, deadline),
22		))
23	}
24}
25
26// assertValidNumberString panics if the input string does not represent a valid integer.
27func assertValidNumberString(input string) {
28	if len(input) == 0 {
29		panic(newErrorWithDetail(errInvalidInput, "input is empty"))
30	}
31
32	bytes := []byte(input)
33	for i, b := range bytes {
34		if i == 0 && b == '-' {
35			continue // Allow if the first character is a negative sign (-)
36		}
37		if b < '0' || b > '9' {
38			panic(newErrorWithDetail(
39				errInvalidInput,
40				ufmt.Sprintf("input string : %s", input)))
41		}
42	}
43}
44
45// assertValidLiquidityAmount panics if the liquidity amount is zero.
46func assertValidLiquidityAmount(liquidity string) {
47	if u256.MustFromDecimal(liquidity).IsZero() {
48		panic(newErrorWithDetail(
49			errZeroLiquidity,
50			ufmt.Sprintf("liquidity amount must be greater than 0, got %s", liquidity),
51		))
52	}
53}
54
55// assertExistsPosition panics if the position does not exist.
56func assertExistsPosition(p *positionV1, positionId uint64) {
57	if !p.exists(positionId) {
58		panic(newErrorWithDetail(
59			errPositionDoesNotExist,
60			ufmt.Sprintf("position with position ID(%d) doesn't exist", positionId),
61		))
62	}
63}
64
65// assertIsOwnerForToken panics if caller is not the owner of the position.
66func assertIsOwnerForToken(p *positionV1, positionId uint64, caller address) {
67	assertExistsPosition(p, positionId)
68
69	if !p.isOwner(positionId, caller) {
70		panic(newErrorWithDetail(
71			errNoPermission,
72			ufmt.Sprintf("caller(%s) is not owner of positionId(%d)", caller, positionId),
73		))
74	}
75}
76
77// assertIsOwnerOrOperatorForToken panics if caller is not the owner or operator of the position.
78func assertIsOwnerOrOperatorForToken(p *positionV1, positionId uint64, caller address) {
79	assertExistsPosition(p, positionId)
80
81	if !p.isOwnerOrOperator(positionId, caller) {
82		panic(newErrorWithDetail(
83			errNoPermission,
84			ufmt.Sprintf("caller(%s) is not owner or approved operator of positionId(%d)", caller, positionId),
85		))
86	}
87}
88
89// assertEqualsAddress panics if addresses are invalid or not equal.
90func assertEqualsAddress(prevAddr, otherAddr address) {
91	access.AssertIsValidAddress(prevAddr)
92	access.AssertIsValidAddress(otherAddr)
93
94	if prevAddr != otherAddr {
95		panic(newErrorWithDetail(
96			errInvalidAddress,
97			ufmt.Sprintf("(%s, %s)", prevAddr, otherAddr),
98		))
99	}
100}
101
102// assertValidOperatorAddress validates operator address.
103// Empty address is allowed (for operator removal), but non-empty addresses must be valid.
104func assertValidOperatorAddress(operator address) {
105	if operator != address("") && !operator.IsValid() {
106		panic(newErrorWithDetail(errInvalidAddress, ufmt.Sprintf("operator(%s)", operator)))
107	}
108}
109
110// assertIsNotMintToStaker panics if the mintTo address is staker.
111func assertIsNotMintToStaker(mintTo address) {
112	stakerAddr := access.MustGetAddress(prbac.ROLE_STAKER.String())
113	if mintTo == stakerAddr {
114		panic(errors.New(errCannotMintToStaker))
115	}
116}
117

Raw Package Data

Raw JSON data