Gno.land
| 1 | package community_pool |
| 2 | |
| 3 | import ( |
| 4 | "chain" |
| 5 | "strconv" |
| 6 | |
| 7 | prbac "gno.land/p/gnoswap/rbac/v1" |
| 8 | |
| 9 | "gno.land/r/gnoswap/access/v1" |
| 10 | "gno.land/r/gnoswap/common" |
| 11 | "gno.land/r/gnoswap/halt/v1" |
| 12 | ) |
| 13 | |
| 14 | // GetBalanceOf returns the community pool's balance for a registered token. |
| 15 | // |
| 16 | // Parameters: |
| 17 | // - tokenPath: registry key/path of the token contract whose balance is queried |
| 18 | // |
| 19 | // Returns: |
| 20 | // - balance: token units held by the configured community-pool address, or 0 when validation fails |
| 21 | // - err: nil when tokenPath is valid and registered; non-nil for an invalid or unregistered tokenPath |
| 22 | func GetBalanceOf(tokenPath string) (int64, error) { |
| 23 | communityPoolAddr := access.MustGetAddress(prbac.ROLE_COMMUNITY_POOL.String()) |
| 24 | |
| 25 | if err := common.IsRegistered(tokenPath); err != nil { |
| 26 | return 0, err |
| 27 | } |
| 28 | |
| 29 | return common.BalanceOf(tokenPath, communityPoolAddr), nil |
| 30 | } |
| 31 | |
| 32 | // TransferToken transfers token units from the community pool to an address. |
| 33 | // |
| 34 | // Parameters: |
| 35 | // - cur: current realm context; callers use cross(cur) when crossing into this realm |
| 36 | // - tokenPath: registry key/path of the registered token to transfer |
| 37 | // - to: recipient address for the token units |
| 38 | // - amount: number of token units to transfer; transfer failure panics through the safe wrapper |
| 39 | // |
| 40 | // Only callable by admin or governance while withdrawals are not halted. |
| 41 | // Governance is the recommended normal route. While governance is not yet |
| 42 | // mature, admin access is retained for emergency-only use as an operational |
| 43 | // policy, not a contract-enforced condition. Admin calls do not require an |
| 44 | // approved proposal; emergency status is not checked and admin access does |
| 45 | // not expire automatically. |
| 46 | func TransferToken(cur realm, tokenPath string, to address, amount int64) { |
| 47 | halt.AssertIsNotHaltedWithdraw() |
| 48 | |
| 49 | prevRealm := cur.Previous() |
| 50 | caller := prevRealm.Address() |
| 51 | access.AssertIsAdminOrGovernance(caller) |
| 52 | |
| 53 | common.SafeGRC20Transfer(0, cur, tokenPath, to, amount) |
| 54 | |
| 55 | chain.Emit( |
| 56 | "TransferToken", |
| 57 | "prevAddr", caller.String(), |
| 58 | "prevRealm", prevRealm.PkgPath(), |
| 59 | "tokenPath", tokenPath, |
| 60 | "to", to.String(), |
| 61 | "amount", strconv.FormatInt(amount, 10), |
| 62 | ) |
| 63 | } |
| Function | Parameters |
|---|---|
| GetBalanceOf | (tokenPath string) |
| TransferToken | (tokenPath string, to string, amount int64) |
| Render | (path string) |
Gnoswap Community Pool
The community treasury holds tokens for ecosystem funding. Balances are queried per token; this page does not report a total treasury value.
Transfers
Transfers require the admin or governance role and are blocked when withdrawals are halted.
| Restriction | Enabled | | --- | --- | | Withdrawals halted | false |
Transfer authorities
| Role | Address | | --- | --- | | admin | g1qvtuwyxcwezfqu3fp56pr5krgfjjyumeeecmzg | | governance | g109hw2sc704c2vnxy2y89vjyqluvzra8rhp4l8w |
| Function | Caller | Age |
|---|
None