From b14b12eef4ea2cf364035a610f65c1e8871e9cef Mon Sep 17 00:00:00 2001 From: n3wbie Date: Tue, 21 Jan 2025 20:10:51 +0900 Subject: [PATCH 1/4] refactor: remove unnecessary function from gns --- contract/r/gnoswap/gns/gns.gno | 44 ++++------- contract/r/gnoswap/gns/gns_test.gno | 113 ++++------------------------ 2 files changed, 27 insertions(+), 130 deletions(-) diff --git a/contract/r/gnoswap/gns/gns.gno b/contract/r/gnoswap/gns/gns.gno index 8dff35b4..c2eeb6ea 100644 --- a/contract/r/gnoswap/gns/gns.gno +++ b/contract/r/gnoswap/gns/gns.gno @@ -49,37 +49,10 @@ func init() { burnAmount = uint64(0) } -func GetName() string { - return Token.GetName() -} - -func GetSymbol() string { - return Token.GetSymbol() -} - -func GetDecimals() uint { - return Token.GetDecimals() -} - func TotalSupply() uint64 { return Token.TotalSupply() } -func KnownAccounts() int { - return Token.KnownAccounts() -} - -func BalanceOfAddress(owner std.Address) uint64 { - common.AssertValidAddr(owner) - return Token.BalanceOf(owner) -} - -func AllowanceOfAddress(owner, spender std.Address) uint64 { - common.AssertValidAddr(owner) - common.AssertValidAddr(spender) - return Token.Allowance(owner, spender) -} - func BalanceOf(owner std.Address) uint64 { return UserTeller.BalanceOf(owner) } @@ -88,10 +61,7 @@ func Allowance(owner, spender std.Address) uint64 { return UserTeller.Allowance(owner, spender) } -func SpendAllowance(owner, spender std.Address, amount uint64) { - checkErr(privateLedger.SpendAllowance(owner, spender, amount)) -} - +func MintGns(address std.Address) uint64 { func MintGns(address std.Address) uint64 { lastGNSMintedHeight := GetLastMintedHeight() currentHeight := std.GetHeight() @@ -116,6 +86,7 @@ func MintGns(address std.Address) uint64 { // mint calculated amount to address err := privateLedger.Mint(address, amountToMint) + err := privateLedger.Mint(address, amountToMint) if err != nil { panic(err.Error()) } @@ -134,9 +105,11 @@ func MintGns(address std.Address) uint64 { return amountToMint } +func Burn(from std.Address, amount uint64) { func Burn(from std.Address, amount uint64) { owner.AssertCallerIsOwner() checkErr(privateLedger.Burn(from, amount)) + checkErr(privateLedger.Burn(from, amount)) burnAmount += amount @@ -147,19 +120,26 @@ func Burn(from std.Address, amount uint64) { "prevRealm", prevPkgPath, "burnedBlockHeight", formatInt(std.GetHeight()), "burnFrom", from.String(), + "burnFrom", from.String(), "burnedGNSAmount", formatUint(amount), "accumBurnedGNSAmount", formatUint(GetBurnAmount()), ) } +func Transfer(to std.Address, amount uint64) { + checkErr(UserTeller.Transfer(to, amount)) func Transfer(to std.Address, amount uint64) { checkErr(UserTeller.Transfer(to, amount)) } +func Approve(spender std.Address, amount uint64) { + checkErr(UserTeller.Approve(spender, amount)) func Approve(spender std.Address, amount uint64) { checkErr(UserTeller.Approve(spender, amount)) } +func TransferFrom(from, to std.Address, amount uint64) { + checkErr(UserTeller.TransferFrom(from, to, amount)) func TransferFrom(from, to std.Address, amount uint64) { checkErr(UserTeller.TransferFrom(from, to, amount)) } @@ -172,6 +152,8 @@ func Render(path string) string { case path == "": return Token.RenderHome() case c == 2 && parts[0] == "balance": + owner := std.Address(parts[1]) + balance := UserTeller.BalanceOf(owner) owner := std.Address(parts[1]) balance := UserTeller.BalanceOf(owner) return ufmt.Sprintf("%d\n", balance) diff --git a/contract/r/gnoswap/gns/gns_test.gno b/contract/r/gnoswap/gns/gns_test.gno index 0cc34c74..f1635323 100644 --- a/contract/r/gnoswap/gns/gns_test.gno +++ b/contract/r/gnoswap/gns/gns_test.gno @@ -27,114 +27,15 @@ var ( bob = testutils.TestAddress("bob") ) -func TestGetName(t *testing.T) { - uassert.Equal(t, "Gnoswap", GetName()) -} - -func TestGetSymbol(t *testing.T) { - uassert.Equal(t, "GNS", GetSymbol()) -} - -func TestGetDecimals(t *testing.T) { - uassert.Equal(t, uint(6), GetDecimals()) -} - func TestTotalSupply(t *testing.T) { uassert.Equal(t, INITIAL_MINT_AMOUNT, TotalSupply()) } -func TestKnownAccounts(t *testing.T) { - uassert.Equal(t, int(1), KnownAccounts()) -} - -func TestBalanceOfAddress(t *testing.T) { - t.Run( - "should return balance of address", - func(t *testing.T) { - uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOfAddress(consts.ADMIN)) - }, - ) - t.Run( - "should panic if address is not valid", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "[GNOSWAP-COMMON-005] invalid address || 0xabcdefg", func() { - BalanceOfAddress("0xabcdefg") - }) - }, - ) -} - -func TestAllowanceOfAddress(t *testing.T) { - t.Run( - "should return allowance of address", - func(t *testing.T) { - uassert.Equal(t, uint64(0), AllowanceOfAddress(consts.ADMIN, alice)) - - std.TestSetOrigCaller(consts.ADMIN) - Approve(alice, uint64(123)) - uassert.Equal(t, uint64(123), AllowanceOfAddress(consts.ADMIN, alice)) - }, - ) - t.Run( - "should panic if address is not valid", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "[GNOSWAP-COMMON-005] invalid address || 0xabcdefg", func() { - AllowanceOfAddress("0xabcdefg", alice) - }) - }, - ) - t.Run( - "should panic if spender is not valid", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "[GNOSWAP-COMMON-005] invalid address || 0xabcdefg", func() { - AllowanceOfAddress(consts.ADMIN, "0xabcdefg") - }) - }, - ) -} - func TestBalanceOf(t *testing.T) { uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOf(consts.ADMIN)) } -func TestSpendAllowance(t *testing.T) { - t.Run( - "should spend allowance", - func(t *testing.T) { - std.TestSetOrigCaller(consts.ADMIN) - Approve(alice, uint64(123)) - - SpendAllowance(consts.ADMIN, alice, uint64(23)) - uassert.Equal(t, uint64(100), Allowance(consts.ADMIN, alice)) - }, - ) - t.Run( - "should panic if address is not valid", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "invalid address", func() { - SpendAllowance("0xabcdefg", alice, uint64(123)) - }) - }, - ) - t.Run( - "should panic if spender is not valid", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "invalid address", func() { - SpendAllowance(consts.ADMIN, "0xabcdefg", uint64(123)) - }) - }, - ) - t.Run( - "should panic if allowance is not enough", - func(t *testing.T) { - uassert.PanicsWithMessage(t, "insufficient allowance", func() { - SpendAllowance(consts.ADMIN, alice, uint64(123)) - }) - }, - ) -} - func TestAssertTooManyEmission(t *testing.T) { tests := []struct { name string @@ -289,18 +190,21 @@ func TestGrc20Methods(t *testing.T) { name: "BalanceOf(admin)", fn: func() { uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOf(consts.ADMIN)) + uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOf(consts.ADMIN)) }, }, { name: "BalanceOf(alice)", fn: func() { uassert.Equal(t, uint64(0), BalanceOf(alice)) + uassert.Equal(t, uint64(0), BalanceOf(alice)) }, }, { name: "Allowance(admin, alice)", fn: func() { uassert.Equal(t, uint64(0), Allowance(consts.ADMIN, alice)) + uassert.Equal(t, uint64(0), Allowance(consts.ADMIN, alice)) }, }, { @@ -308,6 +212,7 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(emissionRealm) MintGns(consts.ADMIN) + MintGns(consts.ADMIN) }, }, { @@ -315,6 +220,7 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSkipHeights(1) MintGns(consts.ADMIN) + MintGns(consts.ADMIN) }, shouldPanic: true, panicMsg: `caller(g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm) has no permission`, @@ -324,12 +230,14 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Burn(consts.ADMIN, uint64(1)) + Burn(consts.ADMIN, uint64(1)) }, }, { name: "Burn without permission should panic", fn: func() { Burn(consts.ADMIN, uint64(1)) + Burn(consts.ADMIN, uint64(1)) }, shouldPanic: true, panicMsg: `ownable: caller is not owner`, @@ -339,6 +247,7 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Transfer(alice, uint64(1)) + Transfer(alice, uint64(1)) }, }, { @@ -346,6 +255,7 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(std.NewUserRealm(alice)) Transfer(bob, uint64(1)) + Transfer(bob, uint64(1)) }, shouldPanic: true, panicMsg: `insufficient balance`, @@ -355,6 +265,7 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Transfer(consts.ADMIN, uint64(1)) + Transfer(consts.ADMIN, uint64(1)) }, shouldPanic: true, panicMsg: `cannot send transfer to self`, @@ -365,10 +276,12 @@ func TestGrc20Methods(t *testing.T) { // approve first std.TestSetRealm(adminRealm) Approve(alice, uint64(1)) + Approve(alice, uint64(1)) // alice transfer admin's balance to bob std.TestSetRealm(std.NewUserRealm(alice)) TransferFrom(consts.ADMIN, bob, uint64(1)) + TransferFrom(consts.ADMIN, bob, uint64(1)) }, }, { @@ -376,9 +289,11 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Approve(alice, uint64(1)) + Approve(alice, uint64(1)) std.TestSetRealm(std.NewUserRealm(alice)) TransferFrom(consts.ADMIN, bob, uint64(2)) + TransferFrom(consts.ADMIN, bob, uint64(2)) }, shouldPanic: true, panicMsg: `insufficient allowance`, From 7da7be0431c97345f8ceac72497902b9f440dd74 Mon Sep 17 00:00:00 2001 From: n3wbie Date: Wed, 22 Jan 2025 19:11:54 +0900 Subject: [PATCH 2/4] fix: conflict --- contract/r/gnoswap/gns/gns.gno | 8 -------- contract/r/gnoswap/gns/gns_test.gno | 14 -------------- 2 files changed, 22 deletions(-) diff --git a/contract/r/gnoswap/gns/gns.gno b/contract/r/gnoswap/gns/gns.gno index c2eeb6ea..19e48927 100644 --- a/contract/r/gnoswap/gns/gns.gno +++ b/contract/r/gnoswap/gns/gns.gno @@ -61,7 +61,6 @@ func Allowance(owner, spender std.Address) uint64 { return UserTeller.Allowance(owner, spender) } -func MintGns(address std.Address) uint64 { func MintGns(address std.Address) uint64 { lastGNSMintedHeight := GetLastMintedHeight() currentHeight := std.GetHeight() @@ -105,7 +104,6 @@ func MintGns(address std.Address) uint64 { return amountToMint } -func Burn(from std.Address, amount uint64) { func Burn(from std.Address, amount uint64) { owner.AssertCallerIsOwner() checkErr(privateLedger.Burn(from, amount)) @@ -126,20 +124,14 @@ func Burn(from std.Address, amount uint64) { ) } -func Transfer(to std.Address, amount uint64) { - checkErr(UserTeller.Transfer(to, amount)) func Transfer(to std.Address, amount uint64) { checkErr(UserTeller.Transfer(to, amount)) } -func Approve(spender std.Address, amount uint64) { - checkErr(UserTeller.Approve(spender, amount)) func Approve(spender std.Address, amount uint64) { checkErr(UserTeller.Approve(spender, amount)) } -func TransferFrom(from, to std.Address, amount uint64) { - checkErr(UserTeller.TransferFrom(from, to, amount)) func TransferFrom(from, to std.Address, amount uint64) { checkErr(UserTeller.TransferFrom(from, to, amount)) } diff --git a/contract/r/gnoswap/gns/gns_test.gno b/contract/r/gnoswap/gns/gns_test.gno index f1635323..8ef46530 100644 --- a/contract/r/gnoswap/gns/gns_test.gno +++ b/contract/r/gnoswap/gns/gns_test.gno @@ -190,21 +190,18 @@ func TestGrc20Methods(t *testing.T) { name: "BalanceOf(admin)", fn: func() { uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOf(consts.ADMIN)) - uassert.Equal(t, INITIAL_MINT_AMOUNT, BalanceOf(consts.ADMIN)) }, }, { name: "BalanceOf(alice)", fn: func() { uassert.Equal(t, uint64(0), BalanceOf(alice)) - uassert.Equal(t, uint64(0), BalanceOf(alice)) }, }, { name: "Allowance(admin, alice)", fn: func() { uassert.Equal(t, uint64(0), Allowance(consts.ADMIN, alice)) - uassert.Equal(t, uint64(0), Allowance(consts.ADMIN, alice)) }, }, { @@ -212,7 +209,6 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(emissionRealm) MintGns(consts.ADMIN) - MintGns(consts.ADMIN) }, }, { @@ -220,7 +216,6 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSkipHeights(1) MintGns(consts.ADMIN) - MintGns(consts.ADMIN) }, shouldPanic: true, panicMsg: `caller(g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm) has no permission`, @@ -230,14 +225,12 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Burn(consts.ADMIN, uint64(1)) - Burn(consts.ADMIN, uint64(1)) }, }, { name: "Burn without permission should panic", fn: func() { Burn(consts.ADMIN, uint64(1)) - Burn(consts.ADMIN, uint64(1)) }, shouldPanic: true, panicMsg: `ownable: caller is not owner`, @@ -247,7 +240,6 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Transfer(alice, uint64(1)) - Transfer(alice, uint64(1)) }, }, { @@ -255,7 +247,6 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(std.NewUserRealm(alice)) Transfer(bob, uint64(1)) - Transfer(bob, uint64(1)) }, shouldPanic: true, panicMsg: `insufficient balance`, @@ -265,7 +256,6 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Transfer(consts.ADMIN, uint64(1)) - Transfer(consts.ADMIN, uint64(1)) }, shouldPanic: true, panicMsg: `cannot send transfer to self`, @@ -276,12 +266,10 @@ func TestGrc20Methods(t *testing.T) { // approve first std.TestSetRealm(adminRealm) Approve(alice, uint64(1)) - Approve(alice, uint64(1)) // alice transfer admin's balance to bob std.TestSetRealm(std.NewUserRealm(alice)) TransferFrom(consts.ADMIN, bob, uint64(1)) - TransferFrom(consts.ADMIN, bob, uint64(1)) }, }, { @@ -289,11 +277,9 @@ func TestGrc20Methods(t *testing.T) { fn: func() { std.TestSetRealm(adminRealm) Approve(alice, uint64(1)) - Approve(alice, uint64(1)) std.TestSetRealm(std.NewUserRealm(alice)) TransferFrom(consts.ADMIN, bob, uint64(2)) - TransferFrom(consts.ADMIN, bob, uint64(2)) }, shouldPanic: true, panicMsg: `insufficient allowance`, From f99edd5ab19bb7c16bd3d75362b3fc1785afca0d Mon Sep 17 00:00:00 2001 From: n3wbie Date: Wed, 22 Jan 2025 19:13:12 +0900 Subject: [PATCH 3/4] fix: conflict --- contract/r/gnoswap/gns/gns.gno | 5 ----- 1 file changed, 5 deletions(-) diff --git a/contract/r/gnoswap/gns/gns.gno b/contract/r/gnoswap/gns/gns.gno index 19e48927..9cce126c 100644 --- a/contract/r/gnoswap/gns/gns.gno +++ b/contract/r/gnoswap/gns/gns.gno @@ -85,7 +85,6 @@ func MintGns(address std.Address) uint64 { // mint calculated amount to address err := privateLedger.Mint(address, amountToMint) - err := privateLedger.Mint(address, amountToMint) if err != nil { panic(err.Error()) } @@ -107,7 +106,6 @@ func MintGns(address std.Address) uint64 { func Burn(from std.Address, amount uint64) { owner.AssertCallerIsOwner() checkErr(privateLedger.Burn(from, amount)) - checkErr(privateLedger.Burn(from, amount)) burnAmount += amount @@ -118,7 +116,6 @@ func Burn(from std.Address, amount uint64) { "prevRealm", prevPkgPath, "burnedBlockHeight", formatInt(std.GetHeight()), "burnFrom", from.String(), - "burnFrom", from.String(), "burnedGNSAmount", formatUint(amount), "accumBurnedGNSAmount", formatUint(GetBurnAmount()), ) @@ -144,8 +141,6 @@ func Render(path string) string { case path == "": return Token.RenderHome() case c == 2 && parts[0] == "balance": - owner := std.Address(parts[1]) - balance := UserTeller.BalanceOf(owner) owner := std.Address(parts[1]) balance := UserTeller.BalanceOf(owner) return ufmt.Sprintf("%d\n", balance) From cdd4a7b6c851fc81641b929ce335e224d87d8d0b Mon Sep 17 00:00:00 2001 From: n3wbie Date: Wed, 22 Jan 2025 19:42:03 +0900 Subject: [PATCH 4/4] use: Token object if possible --- contract/r/gnoswap/gns/gns.gno | 22 +++++++++++++++++++--- contract/r/gnoswap/gns/gns_test.gno | 17 ++++++++++++++++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/contract/r/gnoswap/gns/gns.gno b/contract/r/gnoswap/gns/gns.gno index 9cce126c..c3069176 100644 --- a/contract/r/gnoswap/gns/gns.gno +++ b/contract/r/gnoswap/gns/gns.gno @@ -53,12 +53,28 @@ func TotalSupply() uint64 { return Token.TotalSupply() } +func GetName() string { + return Token.GetName() +} + +func GetSymbol() string { + return Token.GetSymbol() +} + +func GetDecimals() uint { + return Token.GetDecimals() +} + +func KnownAccounts() int { + return Token.KnownAccounts() +} + func BalanceOf(owner std.Address) uint64 { - return UserTeller.BalanceOf(owner) + return Token.BalanceOf(owner) } func Allowance(owner, spender std.Address) uint64 { - return UserTeller.Allowance(owner, spender) + return Token.Allowance(owner, spender) } func MintGns(address std.Address) uint64 { @@ -142,7 +158,7 @@ func Render(path string) string { return Token.RenderHome() case c == 2 && parts[0] == "balance": owner := std.Address(parts[1]) - balance := UserTeller.BalanceOf(owner) + balance := Token.BalanceOf(owner) return ufmt.Sprintf("%d\n", balance) default: return "404\n" diff --git a/contract/r/gnoswap/gns/gns_test.gno b/contract/r/gnoswap/gns/gns_test.gno index 8ef46530..7937d959 100644 --- a/contract/r/gnoswap/gns/gns_test.gno +++ b/contract/r/gnoswap/gns/gns_test.gno @@ -27,8 +27,23 @@ var ( bob = testutils.TestAddress("bob") ) -func TestTotalSupply(t *testing.T) { +func TestGetName(t *testing.T) { + uassert.Equal(t, "Gnoswap", GetName()) +} +func TestGetSymbol(t *testing.T) { + uassert.Equal(t, "GNS", GetSymbol()) +} + +func TestGetDecimals(t *testing.T) { + uassert.Equal(t, uint(6), GetDecimals()) +} + +func TestKnownAccounts(t *testing.T) { + uassert.Equal(t, int(1), KnownAccounts()) +} + +func TestTotalSupply(t *testing.T) { uassert.Equal(t, INITIAL_MINT_AMOUNT, TotalSupply()) }