Kind Realm (renderable)
Name v1
Namespace gnoswap / common
Exported functions 1
Module gno.land/r/gnoswap/common/v1
gno 0.9 instance.gno gno
⧉
1 package common 2 3 import ( 4 "errors" 5 6 "gno.land/p/nt/grc20/v0" 7 "gno.land/p/nt/ufmt/v0" 8 NewCommonV1 () interface {Allowance func(string, .uverse.address, .uverse.address) int64; Approve func(int, .uverse.realm, string, .uverse.address, int64) .uverse.error; BalanceOf func(string, .uverse.address) int64; IsRegistered func(string) .uverse.error; Render func(string) string; TotalSupply func(string) int64; Transfer func(int, .uverse.realm, string, .uverse.address, int64) .uverse.error; TransferFrom func(int, .uverse.realm, string, .uverse.address, .uverse.address, int64) .uverse.error; ValidateNotHandleNativeCoin func() .uverse.error; ValidateRegistered func(...string) .uverse.error}
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
Render unavailable
rate limit exceeded — the render query is served by the Gnoland archive RPC.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.
"gno.land/r/gnoswap/common"
9 "gno.land/r/nt/grc20reg/v0"
10 )
11
12 // commonV1 executes token operations against gno.land/r/nt/grc20reg/v0.
13 type commonV1 struct {}
14
15 // NewCommonV1 returns the common implementation backed by the registered GRC20
16 // token registry.
17 //
18 // Returns:
19 // - implementation: new ICommon implementation instance
20 func NewCommonV1() common.ICommon {
21 return &commonV1{}
22 }
23
24 // IsRegistered verifies that tokenKey is valid and resolves to a registered
25 // GRC20 token.
26 //
27 // Parameters:
28 // - tokenKey: registry key identifying the token, including its realm path and symbol
29 //
30 // Returns:
31 // - error: nil when the key is valid and registered; an error when validation
32 // fails or no token is registered under the key
33 func (c *commonV1) IsRegistered(tokenKey string ) error {
34 if err := validateTokenKey(tokenKey); err != nil {
35 return err
36 }
37
38 if grc20reg.Get(tokenKey) == nil {
39 return ufmt.Errorf( "token(%s) is not registered" , tokenKey)
40 }
41
42 return nil
43 }
44
45 // ValidateRegistered verifies every supplied token key before a multi-token
46 // operation proceeds.
47 //
48 // Parameters:
49 // - tokenKeys: token registry keys that must all be valid and registered
50 //
51 // Returns:
52 // - error: nil when every key is registered; an error identifying the first
53 // key that is invalid or unregistered otherwise
54 func (c *commonV1) ValidateRegistered(tokenKeys ...string) error {
55 for _, tokenKey := range tokenKeys {
56 if err := c.IsRegistered(tokenKey); err != nil {
57 return errors.New(newErrorWithDetail(
58 errNotRegistered,
59 ufmt.Sprintf( "token(%s)" , tokenKey),
60 ))
61 }
62 }
63
64 return nil
65 }
66
67 // TotalSupply returns the total supply recorded for a registered token.
68 //
69 // Parameters:
70 // - tokenKey: registry key of the token to inspect
71 //
72 // Returns:
73 // - supply: token total supply; panics when tokenKey is invalid or unregistered
74 func (c *commonV1) TotalSupply(tokenKey string ) int64 {
75 return c.mustGetToken(tokenKey).TotalSupply()
76 }
77
78 // BalanceOf returns the token balance held by addr.
79 //
80 // Parameters:
81 // - tokenKey: registry key of the token to inspect
82 // - addr: address whose token balance is queried
83 //
84 // Returns:
85 // - balance: amount of tokenKey held by addr; panics when tokenKey is invalid
86 // or unregistered
87 func (c *commonV1) BalanceOf(tokenKey string , addr address) int64 {
88 return c.mustGetToken(tokenKey).BalanceOf(addr)
89 }
90
91 // Allowance returns the amount that spender may transfer from owner.
92 //
93 // Parameters:
94 // - tokenKey: registry key of the token to inspect
95 // - owner: address that granted the allowance
96 // - spender: address authorized to spend from owner
97 //
98 // Returns:
99 // - allowance: remaining token amount spender may transfer; panics when
100 // tokenKey is invalid or unregistered
101 func (c *commonV1) Allowance(tokenKey string , owner, spender address) int64 {
102 return c.mustGetToken(tokenKey).Allowance(owner, spender)
103 }
104
105 // Transfer moves amount of a registered token to to using a teller bound to rlm.
106 //
107 // Parameters:
108 // - _: realm-call discriminator; callers pass 0
109 // - rlm: propagated realm context used to bind the token teller and forwarded
110 // for the token actor's realm validation
111 // - tokenKey: registry key of the token to transfer
112 // - to: recipient address
113 // - amount: number of token units to transfer
114 //
115 // Returns:
116 // - error: nil after a successful transfer; the token teller's validation or
117 // transfer error otherwise
118 func (c *commonV1) Transfer(_ int , rlm realm, tokenKey string , to address, amount int64 ) error {
119 return c.getTokenTeller( 0 , rlm, tokenKey).Transfer( 0 , rlm, to, amount)
120 }
121
122 // TransferFrom moves amount of a registered token from from to to using the
123 // allowance/authorization associated with the calling realm.
124 //
125 // Parameters:
126 // - _: realm-call discriminator; callers pass 0
127 // - rlm: propagated realm context used to bind the token teller and forwarded
128 // for the token actor's realm validation
129 // - tokenKey: registry key of the token to transfer
130 // - from: address whose token balance is debited
131 // - to: recipient address
132 // - amount: number of token units to transfer
133 //
134 // Returns:
135 // - error: nil after a successful transfer; the token teller's validation,
136 // allowance, or balance error otherwise
137 func (c *commonV1) TransferFrom(_ int , rlm realm, tokenKey string , from, to address, amount int64 ) error {
138 return c.getTokenTeller( 0 , rlm, tokenKey).TransferFrom( 0 , rlm, from, to, amount)
139 }
140
141 // Approve sets amount as the allowance that spender may use from the caller.
142 //
143 // Parameters:
144 // - _: realm-call discriminator; callers pass 0
145 // - rlm: propagated realm context used to bind the token teller and forwarded
146 // for the token actor's realm validation
147 // - tokenKey: registry key of the token to approve
148 // - spender: address authorized to spend
149 // - amount: maximum number of token units spender may transfer
150 //
151 // Returns:
152 // - error: nil after the allowance is stored; the token teller's validation
153 // error otherwise
154 func (c *commonV1) Approve(_ int , rlm realm, tokenKey string , spender address, amount int64 ) error {
155 return c.getTokenTeller( 0 , rlm, tokenKey).Approve( 0 , rlm, spender, amount)
156 }
157
158 func (c *commonV1) mustGetToken(tokenKey string ) *grc20.Token {
159 if err := validateTokenKey(tokenKey); err != nil {
160 panic(err.Error())
161 }
162
163 token := grc20reg.Get(tokenKey)
164 if token == nil {
165 panic(newErrorWithDetail(errNotRegistered, ufmt.Sprintf( "unknown token(%s)" , tokenKey)))
166 }
167
168 return token
169 }
170
171 // getTokenTeller binds the token actor to rlm. This is a same-realm borrow,
172 // so rlm stays current and the actor is the calling realm.
173 func (c *commonV1) getTokenTeller(_ int , rlm realm, tokenKey string ) grc20.Teller {
174 return c.mustGetToken(tokenKey).RealmTeller( 0 , rlm)
175 }
176