github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/grc/grc777/igrc777.gno (about) 1 package grc777 2 3 import ( 4 "std" 5 6 "gno.land/p/demo/grc/exts" 7 ) 8 9 // TODO: use big.Int or a custom uint64 instead of uint64 10 11 type IGRC777 interface { 12 exts.TokenMetadata 13 14 // Returns the smallest part of the token that is not divisible. This 15 // means all token operations (creation, movement and destruction) must 16 // have amounts that are a multiple of this number. 17 // 18 // For most token contracts, this value will equal 1. 19 Granularity() (granularity uint64) 20 21 // Returns the amount of tokens in existence. 22 TotalSupply() (supply uint64) 23 24 // Returns the amount of tokens owned by an account (`owner`). 25 BalanceOf(address std.Address) uint64 26 27 // Moves `amount` tokens from the caller's account to `recipient`. 28 // 29 // If send or receive hooks are registered for the caller and `recipient`, 30 // the corresponding functions will be called with `data` and empty 31 // `operatorData`. See {IERC777Sender} and {IERC777Recipient}. 32 // 33 // Emits a {Sent} event. 34 // 35 // Requirements 36 // 37 // - the caller must have at least `amount` tokens. 38 // - `recipient` cannot be the zero address. 39 // - if `recipient` is a contract, it must implement the {IERC777Recipient} 40 // interface. 41 Send(recipient std.Address, amount uint64, data []byte) 42 43 // Destroys `amount` tokens from the caller's account, reducing the 44 // total supply. 45 // 46 // If a send hook is registered for the caller, the corresponding function 47 // will be called with `data` and empty `operatorData`. See {IERC777Sender}. 48 // 49 // Emits a {Burned} event. 50 // 51 // Requirements 52 // 53 // - the caller must have at least `amount` tokens. 54 Burn(amount uint64, data []byte) 55 56 // Returns true if an account is an operator of `tokenHolder`. 57 // Operators can send and burn tokens on behalf of their owners. All 58 // accounts are their own operator. 59 // 60 // See {operatorSend} and {operatorBurn}. 61 IsOperatorFor(operator, tokenHolder std.Address) bool 62 63 // Make an account an operator of the caller. 64 // 65 // See {isOperatorFor}. 66 // 67 // Emits an {AuthorizedOperator} event. 68 // 69 // Requirements 70 // 71 // - `operator` cannot be calling address. 72 AuthorizeOperator(operator std.Address) 73 74 // Revoke an account's operator status for the caller. 75 // 76 // See {isOperatorFor} and {defaultOperators}. 77 // 78 // Emits a {RevokedOperator} event. 79 // 80 // Requirements 81 // 82 // - `operator` cannot be calling address. 83 RevokeOperator(operators std.Address) 84 85 // Returns the list of default operators. These accounts are operators 86 // for all token holders, even if {authorizeOperator} was never called on 87 // them. 88 // 89 // This list is immutable, but individual holders may revoke these via 90 // {revokeOperator}, in which case {isOperatorFor} will return false. 91 DefaultOperators() []std.Address 92 93 // Moves `amount` tokens from `sender` to `recipient`. The caller must 94 // be an operator of `sender`. 95 // 96 // If send or receive hooks are registered for `sender` and `recipient`, 97 // the corresponding functions will be called with `data` and 98 // `operatorData`. See {IERC777Sender} and {IERC777Recipient}. 99 // 100 // Emits a {Sent} event. 101 // 102 // Requirements 103 // 104 // - `sender` cannot be the zero address. 105 // - `sender` must have at least `amount` tokens. 106 // - the caller must be an operator for `sender`. 107 // - `recipient` cannot be the zero address. 108 // - if `recipient` is a contract, it must implement the {IERC777Recipient} 109 // interface. 110 OperatorSend(sender, recipient std.Address, amount uint64, data, operatorData []byte) 111 112 // Destroys `amount` tokens from `account`, reducing the total supply. 113 // The caller must be an operator of `account`. 114 // 115 // If a send hook is registered for `account`, the corresponding function 116 // will be called with `data` and `operatorData`. See {IERC777Sender}. 117 // 118 // Emits a {Burned} event. 119 // 120 // Requirements 121 // 122 // - `account` cannot be the zero address. 123 // - `account` must have at least `amount` tokens. 124 // - the caller must be an operator for `account`. 125 OperatorBurn(account std.Address, amount uint64, data, operatorData []byte) 126 } 127 128 // Emitted when `amount` tokens are created by `operator` and assigned to `to`. 129 // 130 // Note that some additional user `data` and `operatorData` can be logged in the event. 131 type MintedEvent struct { 132 Operator std.Address 133 To std.Address 134 Amount uint64 135 Data []byte 136 OperatorData []byte 137 } 138 139 // Emitted when `operator` destroys `amount` tokens from `account`. 140 // 141 // Note that some additional user `data` and `operatorData` can be logged in the event. 142 type BurnedEvent struct { 143 Operator std.Address 144 From std.Address 145 Amount uint64 146 Data []byte 147 OperatorData []byte 148 } 149 150 // Emitted when `operator` is made operator for `tokenHolder` 151 type AuthorizedOperatorEvent struct { 152 Operator std.Address 153 TokenHolder std.Address 154 } 155 156 // Emitted when `operator` is revoked its operator status for `tokenHolder`. 157 type RevokedOperatorEvent struct { 158 Operator std.Address 159 TokenHolder std.Address 160 } 161 162 type SentEvent struct { 163 Operator std.Address 164 From std.Address 165 To std.Address 166 Amount uint64 167 Data []byte 168 OperatorData []byte 169 }