diff --git a/__local/grc20_tokens/grc20reg/approve_transferfrom.txtar b/__local/grc20_tokens/grc20reg/approve_transferfrom.txtar new file mode 100644 index 000000000..ff43ac448 --- /dev/null +++ b/__local/grc20_tokens/grc20reg/approve_transferfrom.txtar @@ -0,0 +1,53 @@ +loadpkg gno.land/p/demo/users + +loadpkg gno.land/r/demo/foo20 +loadpkg gno.land/r/demo/grc20reg + +loadpkg gno.land/r/demo/reg $WORK/reg + +## start a new node +gnoland start + +## faucet +# gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Faucet -gas-fee 1ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1 + +## print reg addr +gnokey maketx call -pkgpath gno.land/r/demo/reg -func RelamAddr -gas-fee 1ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1 +stdout 'g19tlskvga928es8ug2empargp0teul03apzjud9' + +## approve +gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Approve -args 'g19tlskvga928es8ug2empargp0teul03apzjud9' -args '100' -gas-fee 1ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1 + +## transfer from +gnokey maketx call -pkgpath gno.land/r/demo/reg -func TransferFromWithReg -gas-fee 1ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1 +stdout '' + +-- reg/reg.gno -- +package reg + +import ( + "std" + + "gno.land/r/demo/grc20reg" +) + +func RelamAddr() string { + addr := std.CurrentRealm().Addr().String() + return addr +} + +func TransferFromWithReg() { + caller := std.PrevRealm().Addr() + curr := std.CurrentRealm().Addr() + + + // using import + // foo20.TransferFrom(uCaller, uCurr, uint64(100)) + + // using grc20reg + fooTokenGetter := grc20reg.Get("gno.land/r/demo/foo20") + fooToken := fooTokenGetter() + userTeller := fooToken.CallerTeller() + + userTeller.TransferFrom(caller, curr, uint64(100)) +} \ No newline at end of file diff --git a/__local/grc20_tokens/onbloc/bar/bar.gno b/__local/grc20_tokens/onbloc/bar/bar.gno index c759395b3..d3d998e8a 100644 --- a/__local/grc20_tokens/onbloc/bar/bar.gno +++ b/__local/grc20_tokens/onbloc/bar/bar.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Bar", "BAR", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Bar", "BAR", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/__local/grc20_tokens/onbloc/bar/gno.mod b/__local/grc20_tokens/onbloc/bar/gno.mod index 8ed87d516..4e18b2676 100644 --- a/__local/grc20_tokens/onbloc/bar/gno.mod +++ b/__local/grc20_tokens/onbloc/bar/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/baz/baz.gno b/__local/grc20_tokens/onbloc/baz/baz.gno index ad003225c..c1dbdca1e 100644 --- a/__local/grc20_tokens/onbloc/baz/baz.gno +++ b/__local/grc20_tokens/onbloc/baz/baz.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Baz", "BAZ", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Baz", "BAZ", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/__local/grc20_tokens/onbloc/baz/gno.mod b/__local/grc20_tokens/onbloc/baz/gno.mod index 6d1b8cd2c..05230b44d 100644 --- a/__local/grc20_tokens/onbloc/baz/gno.mod +++ b/__local/grc20_tokens/onbloc/baz/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/foo/foo.gno b/__local/grc20_tokens/onbloc/foo/foo.gno index 54451f3d4..e99ee1d95 100644 --- a/__local/grc20_tokens/onbloc/foo/foo.gno +++ b/__local/grc20_tokens/onbloc/foo/foo.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Baz", "BAZ", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Foo", "FOO", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/__local/grc20_tokens/onbloc/foo/gno.mod b/__local/grc20_tokens/onbloc/foo/gno.mod index bdd7de698..42e302af2 100644 --- a/__local/grc20_tokens/onbloc/foo/gno.mod +++ b/__local/grc20_tokens/onbloc/foo/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/obl/gno.mod b/__local/grc20_tokens/onbloc/obl/gno.mod index a45fb79bb..ffdeb5df8 100644 --- a/__local/grc20_tokens/onbloc/obl/gno.mod +++ b/__local/grc20_tokens/onbloc/obl/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/obl/obl.gno b/__local/grc20_tokens/onbloc/obl/obl.gno index 890debb65..976cc088a 100644 --- a/__local/grc20_tokens/onbloc/obl/obl.gno +++ b/__local/grc20_tokens/onbloc/obl/obl.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Obl", "OBL", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Obl", "OBL", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/__local/grc20_tokens/onbloc/qux/gno.mod b/__local/grc20_tokens/onbloc/qux/gno.mod index 8e74cede7..1528a0331 100644 --- a/__local/grc20_tokens/onbloc/qux/gno.mod +++ b/__local/grc20_tokens/onbloc/qux/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/qux/qux.gno b/__local/grc20_tokens/onbloc/qux/qux.gno index 49585a9c5..29aaec1b6 100644 --- a/__local/grc20_tokens/onbloc/qux/qux.gno +++ b/__local/grc20_tokens/onbloc/qux/qux.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Qux", "QUX", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Qux", "QUX", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/__local/grc20_tokens/onbloc/usdc/gno.mod b/__local/grc20_tokens/onbloc/usdc/gno.mod index 25836f4de..13d6b5cbe 100644 --- a/__local/grc20_tokens/onbloc/usdc/gno.mod +++ b/__local/grc20_tokens/onbloc/usdc/gno.mod @@ -6,4 +6,5 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest ) diff --git a/__local/grc20_tokens/onbloc/usdc/usdc.gno b/__local/grc20_tokens/onbloc/usdc/usdc.gno index cd1db0df2..c0469bd1f 100644 --- a/__local/grc20_tokens/onbloc/usdc/usdc.gno +++ b/__local/grc20_tokens/onbloc/usdc/usdc.gno @@ -7,54 +7,58 @@ import ( "gno.land/p/demo/ownable" "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" ) var ( - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + Token, privateLedger = grc20.NewToken("Usd Coin", "USDC", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Usd Coin", "USDC", 6) - ledger.Mint(admin.Owner(), 100_000_000_000_000) + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Burn(from pusers.AddressOrName, amount uint64) { - admin.AssertCallerIsOwner() + owner.AssertCallerIsOwner() fromAddr := users.Resolve(from) - checkErr(ledger.Burn(fromAddr, amount)) + checkErr(privateLedger.Burn(fromAddr, amount)) } func Render(path string) string { @@ -63,11 +67,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/_deploy/r/gnoswap/gns/gno.mod b/_deploy/r/gnoswap/gns/gno.mod index 7963234e4..8c541067d 100644 --- a/_deploy/r/gnoswap/gns/gno.mod +++ b/_deploy/r/gnoswap/gns/gno.mod @@ -7,6 +7,7 @@ require ( gno.land/p/demo/ufmt v0.0.0-latest gno.land/p/demo/users v0.0.0-latest gno.land/r/demo/users v0.0.0-latest + gno.land/r/demo/grc20reg v0.0.0-latest gno.land/r/gnoswap/v1/common v0.0.0-latest gno.land/r/gnoswap/v1/consts v0.0.0-latest ) diff --git a/_deploy/r/gnoswap/gns/gns.gno b/_deploy/r/gnoswap/gns/gns.gno index cfe319271..327ffb448 100644 --- a/_deploy/r/gnoswap/gns/gns.gno +++ b/_deploy/r/gnoswap/gns/gns.gno @@ -9,6 +9,7 @@ import ( "gno.land/p/demo/ufmt" pusers "gno.land/p/demo/users" + "gno.land/r/demo/grc20reg" "gno.land/r/demo/users" "gno.land/r/gnoswap/v1/common" @@ -18,22 +19,20 @@ import ( const MAXIMUM_SUPPLY = uint64(1_000_000_000_000_000) // 1B var ( - banker *grc20.Teller - admin *ownable.Ownable - token *grc20.Token - ledger *grc20.PrivateLedger + lastMintedHeight int64 + amountToEmission uint64 ) var ( - lastMintedHeight int64 - amountToEmission uint64 + Token, privateLedger = grc20.NewToken("Gnoswap", "GNS", 6) + UserTeller = Token.CallerTeller() + owner = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN ) func init() { - admin = ownable.NewWithAddress("g17290cwvmrapvp869xfnhhawa8sm9edpufzat7d") // ADMIN - token, ledger = grc20.NewToken("Gnoswap", "GNS", 6) - - ledger.Mint(admin.Owner(), 100_000_000_000_000) // 100_000_000 GNS ≈ 0.1B + privateLedger.Mint(owner.Owner(), 100_000_000_000_000) // 100_000_000 GNS ≈ 0.1B + getter := func() *grc20.Token { return Token } + grc20reg.Register(getter, "") amountToEmission = MAXIMUM_SUPPLY - uint64(100_000_000_000_000) @@ -42,41 +41,39 @@ func init() { func GetAmountToEmission() uint64 { return amountToEmission } -func TotalSupply() uint64 { return token.TotalSupply() } +func TotalSupply() uint64 { + return UserTeller.TotalSupply() +} -func TotalMinted() uint64 { return token.TotalSupply() - uint64(100_000_000_000_000) } +func TotalMinted() uint64 { + return UserTeller.TotalSupply() - uint64(100_000_000_000_000) +} func BalanceOf(owner pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) - return token.BalanceOf(ownerAddr) + return UserTeller.BalanceOf(ownerAddr) } func Allowance(owner, spender pusers.AddressOrName) uint64 { ownerAddr := users.Resolve(owner) spenderAddr := users.Resolve(spender) - return token.Allowance(ownerAddr, spenderAddr) + return UserTeller.Allowance(ownerAddr, spenderAddr) } func Transfer(to pusers.AddressOrName, amount uint64) { - common.IsHalted() - toAddr := users.Resolve(to) - checkErr(token.CallerTeller().Transfer(toAddr, amount)) + checkErr(UserTeller.Transfer(toAddr, amount)) } func Approve(spender pusers.AddressOrName, amount uint64) { - common.IsHalted() - spenderAddr := users.Resolve(spender) - checkErr(token.CallerTeller().Approve(spenderAddr, amount)) + checkErr(UserTeller.Approve(spenderAddr, amount)) } func TransferFrom(from, to pusers.AddressOrName, amount uint64) { - common.IsHalted() - fromAddr := users.Resolve(from) toAddr := users.Resolve(to) - checkErr(token.CallerTeller().TransferFrom(fromAddr, toAddr, amount)) + checkErr(UserTeller.TransferFrom(fromAddr, toAddr, amount)) } func Render(path string) string { @@ -85,11 +82,11 @@ func Render(path string) string { switch { case path == "": - return token.RenderHome() + return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := pusers.AddressOrName(parts[1]) ownerAddr := users.Resolve(owner) - balance := token.BalanceOf(ownerAddr) + balance := UserTeller.BalanceOf(ownerAddr) return ufmt.Sprintf("%d\n", balance) default: return "404\n" @@ -146,7 +143,7 @@ func Mint(address pusers.AddressOrName) uint64 { } } - err := ledger.Mint(users.Resolve(address), amountToMint) + err := privateLedger.Mint(users.Resolve(address), amountToMint) if err != nil { panic(err.Error()) } @@ -156,6 +153,12 @@ func Mint(address pusers.AddressOrName) uint64 { return amountToMint } +func Burn(from pusers.AddressOrName, amount uint64) { + owner.AssertCallerIsOwner() + fromAddr := users.Resolve(from) + checkErr(privateLedger.Burn(fromAddr, amount)) +} + func checkAndHandleIfLastBlockOfHalvingYear(height int64, amount uint64) uint64 { year := GetHalvingYearByHeight(height) lastBlock := halvingYearBlock[year]