Search Apps Documentation Source Content File Folder Download Copy

token.gno

1.20 Kb ยท 45 lines
 1package grc20
 2
 3import (
 4	"std"
 5)
 6
 7// token implements the Token interface.
 8//
 9// It is generated with Banker.Token().
10// It can safely be exposed publicly.
11type token struct {
12	banker *Banker
13}
14
15// var _ Token = (*token)(nil)
16func (t *token) GetName() string     { return t.banker.name }
17func (t *token) GetSymbol() string   { return t.banker.symbol }
18func (t *token) GetDecimals() uint   { return t.banker.decimals }
19func (t *token) TotalSupply() uint64 { return t.banker.totalSupply }
20
21func (t *token) BalanceOf(owner std.Address) uint64 {
22	return t.banker.BalanceOf(owner)
23}
24
25func (t *token) Transfer(to std.Address, amount uint64) error {
26	caller := std.PrevRealm().Addr()
27	return t.banker.Transfer(caller, to, amount)
28}
29
30func (t *token) Allowance(owner, spender std.Address) uint64 {
31	return t.banker.Allowance(owner, spender)
32}
33
34func (t *token) Approve(spender std.Address, amount uint64) error {
35	caller := std.PrevRealm().Addr()
36	return t.banker.Approve(caller, spender, amount)
37}
38
39func (t *token) TransferFrom(from, to std.Address, amount uint64) error {
40	spender := std.PrevRealm().Addr()
41	if err := t.banker.SpendAllowance(from, spender, amount); err != nil {
42		return err
43	}
44	return t.banker.Transfer(from, to, amount)
45}