Skip to content

Commit 026d4cc

Browse files
r3v4s0xTopaz
authored and
0xTopaz
committed
GSW-1968 feat: check emission is caller or not (#435)
* feat: add check logic for caller is emission or not * fix: remove deprecated require from gno.mod
1 parent 96538fc commit 026d4cc

File tree

3 files changed

+162
-21
lines changed

3 files changed

+162
-21
lines changed

_deploy/r/gnoswap/common/access.gno

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ import (
77
"gno.land/r/gnoswap/v1/consts"
88
)
99

10+
const (
11+
ErrNoPermission = "caller(%s) has no permission"
12+
)
13+
1014
func AssertCaller(caller, addr std.Address) error {
1115
if caller != addr {
12-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
16+
return ufmt.Errorf(ErrNoPermission, caller.String())
1317
}
1418
return nil
1519
}
@@ -23,56 +27,65 @@ func SatisfyCond(cond bool) error {
2327

2428
func AdminOnly(caller std.Address) error {
2529
if caller != consts.ADMIN {
26-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
30+
return ufmt.Errorf(ErrNoPermission, caller.String())
2731
}
2832
return nil
2933
}
3034

3135
func GovernanceOnly(caller std.Address) error {
3236
if caller != consts.GOV_GOVERNANCE_ADDR {
33-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
37+
return ufmt.Errorf(ErrNoPermission, caller.String())
3438
}
3539
return nil
3640
}
3741

3842
func GovStakerOnly(caller std.Address) error {
3943
if caller != consts.GOV_STAKER_ADDR {
40-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
44+
return ufmt.Errorf(ErrNoPermission, caller.String())
4145
}
4246
return nil
4347
}
4448

4549
func RouterOnly(caller std.Address) error {
4650
if caller != consts.ROUTER_ADDR {
47-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
51+
return ufmt.Errorf(ErrNoPermission, caller.String())
4852
}
4953
return nil
5054
}
5155

5256
func PositionOnly(caller std.Address) error {
5357
if caller != consts.POSITION_ADDR {
54-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
58+
return ufmt.Errorf(ErrNoPermission, caller.String())
5559
}
5660
return nil
5761
}
5862

5963
func StakerOnly(caller std.Address) error {
6064
if caller != consts.STAKER_ADDR {
61-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
65+
return ufmt.Errorf(ErrNoPermission, caller.String())
6266
}
6367
return nil
6468
}
6569

66-
func TokenRegisterOnly(caller std.Address) error {
67-
if caller != consts.TOKEN_REGISTER {
68-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
70+
func LaunchpadOnly(caller std.Address) error {
71+
if caller != consts.LAUNCHPAD_ADDR {
72+
return ufmt.Errorf(ErrNoPermission, caller.String())
6973
}
7074
return nil
7175
}
7276

73-
func LaunchpadOnly(caller std.Address) error {
74-
if caller != consts.LAUNCHPAD_ADDR {
75-
return ufmt.Errorf("caller(%s) has no permission", caller.String())
77+
func EmissionOnly(caller std.Address) error {
78+
if caller != consts.EMISSION_ADDR {
79+
return ufmt.Errorf(ErrNoPermission, caller.String())
80+
}
81+
return nil
82+
}
83+
84+
// DEPRECATED
85+
// TODO: remove after r/grc20reg is applied for all contracts
86+
func TokenRegisterOnly(caller std.Address) error {
87+
if caller != consts.TOKEN_REGISTER {
88+
return ufmt.Errorf(ErrNoPermission, caller.String())
7689
}
7790
return nil
7891
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package common
2+
3+
import (
4+
"std"
5+
"testing"
6+
7+
"gno.land/p/demo/testutils"
8+
"gno.land/p/demo/uassert"
9+
10+
"gno.land/r/gnoswap/v1/consts"
11+
)
12+
13+
var (
14+
addr01 = testutils.TestAddress("addr01")
15+
addr02 = testutils.TestAddress("addr02")
16+
)
17+
18+
func TestAssertCaller(t *testing.T) {
19+
t.Run("same caller", func(t *testing.T) {
20+
uassert.NoError(t, AssertCaller(addr01, addr01))
21+
})
22+
23+
t.Run("different caller", func(t *testing.T) {
24+
uassert.Error(t, AssertCaller(addr01, addr02))
25+
})
26+
}
27+
28+
func TestSatisfyCond(t *testing.T) {
29+
t.Run("true", func(t *testing.T) {
30+
uassert.NoError(t, SatisfyCond(true))
31+
})
32+
33+
t.Run("false", func(t *testing.T) {
34+
uassert.Error(t, SatisfyCond(false))
35+
})
36+
}
37+
38+
func TestAdminOnly(t *testing.T) {
39+
t.Run("caller is admin", func(t *testing.T) {
40+
uassert.NoError(t, AdminOnly(consts.ADMIN))
41+
})
42+
43+
t.Run("caller is not admin", func(t *testing.T) {
44+
uassert.Error(t, AdminOnly(addr01))
45+
})
46+
}
47+
48+
func TestGovernanceOnly(t *testing.T) {
49+
t.Run("caller is governance", func(t *testing.T) {
50+
uassert.NoError(t, GovernanceOnly(consts.GOV_GOVERNANCE_ADDR))
51+
})
52+
53+
t.Run("caller is not governance", func(t *testing.T) {
54+
uassert.Error(t, GovernanceOnly(addr01))
55+
})
56+
}
57+
58+
func TestGovStakerOnly(t *testing.T) {
59+
t.Run("caller is gov staker", func(t *testing.T) {
60+
uassert.NoError(t, GovStakerOnly(consts.GOV_STAKER_ADDR))
61+
})
62+
63+
t.Run("caller is not gov staker", func(t *testing.T) {
64+
uassert.Error(t, GovStakerOnly(addr01))
65+
})
66+
}
67+
68+
func TestRouterOnly(t *testing.T) {
69+
t.Run("caller is router", func(t *testing.T) {
70+
uassert.NoError(t, RouterOnly(consts.ROUTER_ADDR))
71+
})
72+
73+
t.Run("caller is not router", func(t *testing.T) {
74+
uassert.Error(t, RouterOnly(addr01))
75+
})
76+
}
77+
78+
func TestPositionOnly(t *testing.T) {
79+
t.Run("caller is position", func(t *testing.T) {
80+
uassert.NoError(t, PositionOnly(consts.POSITION_ADDR))
81+
})
82+
83+
t.Run("caller is not position", func(t *testing.T) {
84+
uassert.Error(t, PositionOnly(addr01))
85+
})
86+
}
87+
88+
func TestStakerOnly(t *testing.T) {
89+
t.Run("caller is staker", func(t *testing.T) {
90+
uassert.NoError(t, StakerOnly(consts.STAKER_ADDR))
91+
})
92+
93+
t.Run("caller is not staker", func(t *testing.T) {
94+
uassert.Error(t, StakerOnly(addr01))
95+
})
96+
}
97+
98+
func TestLaunchpadOnly(t *testing.T) {
99+
t.Run("caller is launchpad", func(t *testing.T) {
100+
uassert.NoError(t, LaunchpadOnly(consts.LAUNCHPAD_ADDR))
101+
})
102+
103+
t.Run("caller is not launchpad", func(t *testing.T) {
104+
uassert.Error(t, LaunchpadOnly(addr01))
105+
})
106+
}
107+
108+
func TestEmissionOnly(t *testing.T) {
109+
t.Run("caller is emission", func(t *testing.T) {
110+
uassert.NoError(t, EmissionOnly(consts.EMISSION_ADDR))
111+
})
112+
113+
t.Run("caller is not emission", func(t *testing.T) {
114+
uassert.Error(t, EmissionOnly(addr01))
115+
})
116+
}
117+
118+
func TestTokenRegisterOnly(t *testing.T) {
119+
t.Run("caller is token register", func(t *testing.T) {
120+
uassert.NoError(t, TokenRegisterOnly(consts.TOKEN_REGISTER))
121+
})
122+
123+
t.Run("caller is not token register", func(t *testing.T) {
124+
uassert.Error(t, TokenRegisterOnly(addr01))
125+
})
126+
}
127+
128+
func TestUserOnly(t *testing.T) {
129+
t.Run("caller is user", func(t *testing.T) {
130+
uassert.NoError(t, UserOnly(std.NewUserRealm(addr01)))
131+
})
132+
133+
t.Run("caller is not user", func(t *testing.T) {
134+
uassert.Error(t, UserOnly(std.NewCodeRealm("gno.land/r/realm")))
135+
})
136+
}

_deploy/r/gnoswap/common/gno.mod

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1 @@
11
module gno.land/r/gnoswap/v1/common
2-
3-
require (
4-
gno.land/p/demo/ufmt v0.0.0-latest
5-
gno.land/p/gnoswap/int256 v0.0.0-latest
6-
gno.land/p/gnoswap/pool v0.0.0-latest
7-
gno.land/p/gnoswap/uint256 v0.0.0-latest
8-
gno.land/r/gnoswap/v1/consts v0.0.0-latest
9-
)

0 commit comments

Comments
 (0)