From 14a83f2d558724120bdba6534c3515d70277f254 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Thu, 23 Jan 2025 18:16:15 +0100 Subject: [PATCH 1/6] feat: ownable2step realm --- .../r/0xtekgrinder/ownable2step/errors.gno | 10 ++ .../r/0xtekgrinder/ownable2step/gno.mod | 1 + .../r/0xtekgrinder/ownable2step/ownable.gno | 99 ++++++++++++ .../ownable2step/ownable_test.gno | 149 ++++++++++++++++++ 4 files changed, 259 insertions(+) create mode 100644 examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno create mode 100644 examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod create mode 100644 examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno create mode 100644 examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno new file mode 100644 index 00000000000..f581b6d2759 --- /dev/null +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno @@ -0,0 +1,10 @@ +package ownable2step + +import "errors" + +var ( + ErrNoPendingOwner = errors.New("ownable2step: no pending owner") + ErrUnauthorized = errors.New("ownable2step: caller is not owner") + ErrPendingUnauthorized = errors.New("ownable2step: caller is not pending owner") + ErrInvalidAddress = errors.New("ownable2step: new owner address is invalid") +) \ No newline at end of file diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod b/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod new file mode 100644 index 00000000000..d265f9e30b7 --- /dev/null +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod @@ -0,0 +1 @@ +module gno.land/r/0xtekgrinder/ownable2step diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno new file mode 100644 index 00000000000..4b5776e43e2 --- /dev/null +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno @@ -0,0 +1,99 @@ +package ownable2step + +import ( + "std" + "fmt" +) + +const OwnershipTransferEvent = "OwnershipTransfer" + +// Ownable2Step is a two-step ownership transfer contract +// It allows the current owner to set a new owner and the new owner will need to accept the ownership before it is transferred +type Ownable2Step struct { + owner std.Address + pendingOwner std.Address +} + +func New() *Ownable2Step { + return &Ownable2Step{ + owner: std.PrevRealm().Addr(), + pendingOwner: "", + } +} + +func NewWithAddress(addr std.Address) *Ownable2Step { + return &Ownable2Step{ + owner: addr, + pendingOwner: "", + } +} + +// TransferOwnership initiate the transfer of the ownership to a new address by setting the PendingOwner +func (o *Ownable2Step) TransferOwnership(newOwner std.Address) error { + if !o.CallerIsOwner() { + return ErrUnauthorized + } + if !newOwner.IsValid() { + return ErrInvalidAddress + } + + o.pendingOwner = newOwner + return nil +} + +// AcceptOwnership accepts the pending ownership transfer +func (o *Ownable2Step) AcceptOwnership() error { + if o.pendingOwner.String() == "" { + return ErrNoPendingOwner + } + if std.PrevRealm().Addr() != o.pendingOwner { + return ErrPendingUnauthorized + } + + o.owner = o.pendingOwner + o.pendingOwner = "" + + return nil +} + +// DropOwnership removes the owner, effectively disabling any owner-related actions +// Top-level usage: disables all only-owner actions/functions, +// Embedded usage: behaves like a burn functionality, removing the owner from the struct +func (o *Ownable2Step) DropOwnership() error { + if !o.CallerIsOwner() { + return ErrUnauthorized + } + + prevOwner := o.owner + o.owner = "" + + std.Emit( + OwnershipTransferEvent, + "from", prevOwner.String(), + "to", "", + ) + + return nil +} + +// Owner returns the owner address from Ownable +func (o *Ownable2Step) Owner() std.Address { + return o.owner +} + +// PendingOwner returns the pending owner address from Ownable2Step +func (o *Ownable2Step) PendingOwner() std.Address { + return o.pendingOwner +} + +// CallerIsOwner checks if the caller of the function is the Realm's owner +func (o *Ownable2Step) CallerIsOwner() bool { + return std.PrevRealm().Addr() == o.owner +} + +// AssertCallerIsOwner panics if the caller is not the owner +func (o *Ownable2Step) AssertCallerIsOwner() { + if std.PrevRealm().Addr() != o.owner { + panic(ErrUnauthorized) + } +} diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno new file mode 100644 index 00000000000..e6f022f22d0 --- /dev/null +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno @@ -0,0 +1,149 @@ +package ownable2step + +import ( + "std" + "testing" + "fmt" + + "gno.land/p/demo/testutils" + "gno.land/p/demo/uassert" + "gno.land/p/demo/urequire" +) + +var ( + alice = testutils.TestAddress("alice") + bob = testutils.TestAddress("bob") +) + +func TestNew(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + got := o.Owner() + pendingOwner := o.PendingOwner() + + uassert.Equal(t, got, alice) + uassert.Equal(t, pendingOwner.String(), "") +} + +func TestNewWithAddress(t *testing.T) { + o := NewWithAddress(alice) + + got := o.Owner() + pendingOwner := o.PendingOwner() + + uassert.Equal(t, got, alice) + uassert.Equal(t, pendingOwner.String(), "") +} + +func TestInitiateTransferOwnership(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.TransferOwnership(bob) + urequire.NoError(t, err) + + owner := o.Owner() + pendingOwner := o.PendingOwner() + + uassert.Equal(t, owner, alice) + uassert.Equal(t, pendingOwner, bob) +} + +func TestTransferOwnership(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.TransferOwnership(bob) + urequire.NoError(t, err) + + owner := o.Owner() + pendingOwner := o.PendingOwner() + + uassert.Equal(t, owner, alice) + uassert.Equal(t, pendingOwner, bob) + + std.TestSetRealm(std.NewUserRealm(bob)) + + err = o.AcceptOwnership() + urequire.NoError(t, err) + + owner = o.Owner() + pendingOwner = o.PendingOwner() + + uassert.Equal(t, owner, bob) + uassert.Equal(t, pendingOwner.String(), "") +} + +func TestCallerIsOwner(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + unauthorizedCaller := bob + + std.TestSetRealm(std.NewUserRealm(unauthorizedCaller)) + + uassert.False(t, o.CallerIsOwner()) +} + +func TestDropOwnership(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.DropOwnership() + urequire.NoError(t, err, "DropOwnership failed") + + owner := o.Owner() + uassert.Empty(t, owner, "owner should be empty") +} + +// Errors + +func TestErrUnauthorized(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + std.TestSetRealm(std.NewUserRealm(bob)) + + uassert.ErrorContains(t, o.TransferOwnership(alice), ErrUnauthorized.Error()) + uassert.ErrorContains(t, o.DropOwnership(), ErrUnauthorized.Error()) +} + +func TestErrInvalidAddress(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.TransferOwnership("") + uassert.ErrorContains(t, err, ErrInvalidAddress.Error()) + + err = o.TransferOwnership("10000000001000000000100000000010000000001000000000") + uassert.ErrorContains(t, err, ErrInvalidAddress.Error()) +} + +func TestErrNoPendingOwner(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.AcceptOwnership() + uassert.ErrorContains(t, err, ErrNoPendingOwner.Error()) +} + +func TestErrPendingUnauthorized(t *testing.T) { + std.TestSetRealm(std.NewUserRealm(alice)) + + o := New() + + err := o.TransferOwnership(bob) + urequire.NoError(t, err) + + std.TestSetRealm(std.NewUserRealm(alice)) + + err = o.AcceptOwnership() + uassert.ErrorContains(t, err, ErrPendingUnauthorized.Error()) +} From d76cc9d266d8a3d3adfb2899d30214577ee421c8 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Thu, 23 Jan 2025 18:36:11 +0100 Subject: [PATCH 2/6] style: format ownable2step --- .../r/0xtekgrinder/ownable2step/errors.gno | 10 +-- .../r/0xtekgrinder/ownable2step/ownable.gno | 69 +++++++++---------- .../ownable2step/ownable_test.gno | 53 +++++++------- 3 files changed, 65 insertions(+), 67 deletions(-) diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno index f581b6d2759..6d91c9eb24b 100644 --- a/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno @@ -3,8 +3,8 @@ package ownable2step import "errors" var ( - ErrNoPendingOwner = errors.New("ownable2step: no pending owner") - ErrUnauthorized = errors.New("ownable2step: caller is not owner") - ErrPendingUnauthorized = errors.New("ownable2step: caller is not pending owner") - ErrInvalidAddress = errors.New("ownable2step: new owner address is invalid") -) \ No newline at end of file + ErrNoPendingOwner = errors.New("ownable2step: no pending owner") + ErrUnauthorized = errors.New("ownable2step: caller is not owner") + ErrPendingUnauthorized = errors.New("ownable2step: caller is not pending owner") + ErrInvalidAddress = errors.New("ownable2step: new owner address is invalid") +) diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno index 4b5776e43e2..74c8872719d 100644 --- a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno @@ -1,8 +1,7 @@ package ownable2step import ( - "std" - "fmt" + "std" ) const OwnershipTransferEvent = "OwnershipTransfer" @@ -10,57 +9,57 @@ const OwnershipTransferEvent = "OwnershipTransfer" // Ownable2Step is a two-step ownership transfer contract // It allows the current owner to set a new owner and the new owner will need to accept the ownership before it is transferred type Ownable2Step struct { - owner std.Address - pendingOwner std.Address + owner std.Address + pendingOwner std.Address } func New() *Ownable2Step { - return &Ownable2Step{ - owner: std.PrevRealm().Addr(), - pendingOwner: "", - } + return &Ownable2Step{ + owner: std.PrevRealm().Addr(), + pendingOwner: "", + } } func NewWithAddress(addr std.Address) *Ownable2Step { - return &Ownable2Step{ - owner: addr, - pendingOwner: "", - } + return &Ownable2Step{ + owner: addr, + pendingOwner: "", + } } // TransferOwnership initiate the transfer of the ownership to a new address by setting the PendingOwner func (o *Ownable2Step) TransferOwnership(newOwner std.Address) error { - if !o.CallerIsOwner() { - return ErrUnauthorized - } - if !newOwner.IsValid() { - return ErrInvalidAddress - } - - o.pendingOwner = newOwner - return nil + if !o.CallerIsOwner() { + return ErrUnauthorized + } + if !newOwner.IsValid() { + return ErrInvalidAddress + } + + o.pendingOwner = newOwner + return nil } // AcceptOwnership accepts the pending ownership transfer func (o *Ownable2Step) AcceptOwnership() error { - if o.pendingOwner.String() == "" { - return ErrNoPendingOwner - } - if std.PrevRealm().Addr() != o.pendingOwner { - return ErrPendingUnauthorized - } + if o.pendingOwner.String() == "" { + return ErrNoPendingOwner + } + if std.PrevRealm().Addr() != o.pendingOwner { + return ErrPendingUnauthorized + } - o.owner = o.pendingOwner - o.pendingOwner = "" + o.owner = o.pendingOwner + o.pendingOwner = "" - return nil + return nil } // DropOwnership removes the owner, effectively disabling any owner-related actions // Top-level usage: disables all only-owner actions/functions, // Embedded usage: behaves like a burn functionality, removing the owner from the struct func (o *Ownable2Step) DropOwnership() error { - if !o.CallerIsOwner() { + if !o.CallerIsOwner() { return ErrUnauthorized } @@ -78,22 +77,22 @@ func (o *Ownable2Step) DropOwnership() error { // Owner returns the owner address from Ownable func (o *Ownable2Step) Owner() std.Address { - return o.owner + return o.owner } // PendingOwner returns the pending owner address from Ownable2Step func (o *Ownable2Step) PendingOwner() std.Address { - return o.pendingOwner + return o.pendingOwner } // CallerIsOwner checks if the caller of the function is the Realm's owner func (o *Ownable2Step) CallerIsOwner() bool { - return std.PrevRealm().Addr() == o.owner + return std.PrevRealm().Addr() == o.owner } // AssertCallerIsOwner panics if the caller is not the owner func (o *Ownable2Step) AssertCallerIsOwner() { - if std.PrevRealm().Addr() != o.owner { + if std.PrevRealm().Addr() != o.owner { panic(ErrUnauthorized) } } diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno index e6f022f22d0..3866ed9706e 100644 --- a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno +++ b/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno @@ -3,7 +3,6 @@ package ownable2step import ( "std" "testing" - "fmt" "gno.land/p/demo/testutils" "gno.land/p/demo/uassert" @@ -20,20 +19,20 @@ func TestNew(t *testing.T) { o := New() got := o.Owner() - pendingOwner := o.PendingOwner() + pendingOwner := o.PendingOwner() uassert.Equal(t, got, alice) - uassert.Equal(t, pendingOwner.String(), "") + uassert.Equal(t, pendingOwner.String(), "") } func TestNewWithAddress(t *testing.T) { o := NewWithAddress(alice) got := o.Owner() - pendingOwner := o.PendingOwner() + pendingOwner := o.PendingOwner() uassert.Equal(t, got, alice) - uassert.Equal(t, pendingOwner.String(), "") + uassert.Equal(t, pendingOwner.String(), "") } func TestInitiateTransferOwnership(t *testing.T) { @@ -45,9 +44,9 @@ func TestInitiateTransferOwnership(t *testing.T) { urequire.NoError(t, err) owner := o.Owner() - pendingOwner := o.PendingOwner() + pendingOwner := o.PendingOwner() - uassert.Equal(t, owner, alice) + uassert.Equal(t, owner, alice) uassert.Equal(t, pendingOwner, bob) } @@ -60,21 +59,21 @@ func TestTransferOwnership(t *testing.T) { urequire.NoError(t, err) owner := o.Owner() - pendingOwner := o.PendingOwner() + pendingOwner := o.PendingOwner() - uassert.Equal(t, owner, alice) + uassert.Equal(t, owner, alice) uassert.Equal(t, pendingOwner, bob) - std.TestSetRealm(std.NewUserRealm(bob)) + std.TestSetRealm(std.NewUserRealm(bob)) - err = o.AcceptOwnership() - urequire.NoError(t, err) + err = o.AcceptOwnership() + urequire.NoError(t, err) - owner = o.Owner() - pendingOwner = o.PendingOwner() + owner = o.Owner() + pendingOwner = o.PendingOwner() - uassert.Equal(t, owner, bob) - uassert.Equal(t, pendingOwner.String(), "") + uassert.Equal(t, owner, bob) + uassert.Equal(t, pendingOwner.String(), "") } func TestCallerIsOwner(t *testing.T) { @@ -126,24 +125,24 @@ func TestErrInvalidAddress(t *testing.T) { } func TestErrNoPendingOwner(t *testing.T) { - std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetRealm(std.NewUserRealm(alice)) - o := New() + o := New() - err := o.AcceptOwnership() - uassert.ErrorContains(t, err, ErrNoPendingOwner.Error()) + err := o.AcceptOwnership() + uassert.ErrorContains(t, err, ErrNoPendingOwner.Error()) } func TestErrPendingUnauthorized(t *testing.T) { - std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetRealm(std.NewUserRealm(alice)) - o := New() + o := New() - err := o.TransferOwnership(bob) - urequire.NoError(t, err) + err := o.TransferOwnership(bob) + urequire.NoError(t, err) - std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetRealm(std.NewUserRealm(alice)) - err = o.AcceptOwnership() - uassert.ErrorContains(t, err, ErrPendingUnauthorized.Error()) + err = o.AcceptOwnership() + uassert.ErrorContains(t, err, ErrPendingUnauthorized.Error()) } From aa960df719968bc76a3cc5494640054be006e765 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Fri, 31 Jan 2025 00:44:30 +0100 Subject: [PATCH 3/6] refactor: move ownable2step into packages + rename 0xtekgrinder to oxtekgrinder --- .../{r/0xtekgrinder => p/oxtekgrinder}/ownable2step/errors.gno | 0 examples/gno.land/p/oxtekgrinder/ownable2step/gno.mod | 1 + .../{r/0xtekgrinder => p/oxtekgrinder}/ownable2step/ownable.gno | 0 .../oxtekgrinder}/ownable2step/ownable_test.gno | 0 examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod | 1 - 5 files changed, 1 insertion(+), 1 deletion(-) rename examples/gno.land/{r/0xtekgrinder => p/oxtekgrinder}/ownable2step/errors.gno (100%) create mode 100644 examples/gno.land/p/oxtekgrinder/ownable2step/gno.mod rename examples/gno.land/{r/0xtekgrinder => p/oxtekgrinder}/ownable2step/ownable.gno (100%) rename examples/gno.land/{r/0xtekgrinder => p/oxtekgrinder}/ownable2step/ownable_test.gno (100%) delete mode 100644 examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/errors.gno similarity index 100% rename from examples/gno.land/r/0xtekgrinder/ownable2step/errors.gno rename to examples/gno.land/p/oxtekgrinder/ownable2step/errors.gno diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/gno.mod b/examples/gno.land/p/oxtekgrinder/ownable2step/gno.mod new file mode 100644 index 00000000000..0132a03418c --- /dev/null +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/gno.mod @@ -0,0 +1 @@ +module gno.land/p/oxtekgrinder/ownable2step diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno similarity index 100% rename from examples/gno.land/r/0xtekgrinder/ownable2step/ownable.gno rename to examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno similarity index 100% rename from examples/gno.land/r/0xtekgrinder/ownable2step/ownable_test.gno rename to examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno diff --git a/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod b/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod deleted file mode 100644 index d265f9e30b7..00000000000 --- a/examples/gno.land/r/0xtekgrinder/ownable2step/gno.mod +++ /dev/null @@ -1 +0,0 @@ -module gno.land/r/0xtekgrinder/ownable2step From 076594a378c9e11bc0ed9fe5fd8da2dc30c30491 Mon Sep 17 00:00:00 2001 From: Leon Hudak <33522493+leohhhn@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:27:11 +0100 Subject: [PATCH 4/6] Update examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno --- examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno index 74c8872719d..43afa1cd141 100644 --- a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno @@ -6,7 +6,7 @@ import ( const OwnershipTransferEvent = "OwnershipTransfer" -// Ownable2Step is a two-step ownership transfer contract +// Ownable2Step is a two-step ownership transfer package // It allows the current owner to set a new owner and the new owner will need to accept the ownership before it is transferred type Ownable2Step struct { owner std.Address From d0c6c9c8b7db3ff8f18410a4e607d9867ceb7a34 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Fri, 31 Jan 2025 13:05:41 +0100 Subject: [PATCH 5/6] fix: correct tests of ownable2step --- .../gno.land/p/oxtekgrinder/ownable2step/ownable.gno | 2 ++ .../p/oxtekgrinder/ownable2step/ownable_test.gno | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno index 43afa1cd141..76fc1f31050 100644 --- a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno @@ -2,6 +2,7 @@ package ownable2step import ( "std" + "fmt" ) const OwnershipTransferEvent = "OwnershipTransfer" @@ -14,6 +15,7 @@ type Ownable2Step struct { } func New() *Ownable2Step { + fmt.Println("std.PrevRealm().Addr()", std.PrevRealm().Addr()) return &Ownable2Step{ owner: std.PrevRealm().Addr(), pendingOwner: "", diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno index 3866ed9706e..1b6ac6b30f2 100644 --- a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno @@ -3,6 +3,7 @@ package ownable2step import ( "std" "testing" + "fmt" "gno.land/p/demo/testutils" "gno.land/p/demo/uassert" @@ -16,6 +17,7 @@ var ( func TestNew(t *testing.T) { std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetOrigCaller(alice) o := New() got := o.Owner() @@ -37,6 +39,7 @@ func TestNewWithAddress(t *testing.T) { func TestInitiateTransferOwnership(t *testing.T) { std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetOrigCaller(alice) o := New() @@ -52,6 +55,7 @@ func TestInitiateTransferOwnership(t *testing.T) { func TestTransferOwnership(t *testing.T) { std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetOrigCaller(alice) o := New() @@ -65,6 +69,7 @@ func TestTransferOwnership(t *testing.T) { uassert.Equal(t, pendingOwner, bob) std.TestSetRealm(std.NewUserRealm(bob)) + std.TestSetOrigCaller(bob) err = o.AcceptOwnership() urequire.NoError(t, err) @@ -78,11 +83,13 @@ func TestTransferOwnership(t *testing.T) { func TestCallerIsOwner(t *testing.T) { std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetOrigCaller(alice) o := New() unauthorizedCaller := bob std.TestSetRealm(std.NewUserRealm(unauthorizedCaller)) + std.TestSetOrigCaller(unauthorizedCaller) uassert.False(t, o.CallerIsOwner()) } @@ -103,10 +110,12 @@ func TestDropOwnership(t *testing.T) { func TestErrUnauthorized(t *testing.T) { std.TestSetRealm(std.NewUserRealm(alice)) + std.TestSetOrigCaller(alice) o := New() std.TestSetRealm(std.NewUserRealm(bob)) + std.TestSetOrigCaller(bob) uassert.ErrorContains(t, o.TransferOwnership(alice), ErrUnauthorized.Error()) uassert.ErrorContains(t, o.DropOwnership(), ErrUnauthorized.Error()) From 34527841e576a1c2e19ee17f902ca903b8c578b1 Mon Sep 17 00:00:00 2001 From: 0xtekgrinder <0xtekgrinder@protonmail.com> Date: Fri, 31 Jan 2025 13:27:56 +0100 Subject: [PATCH 6/6] fix: remove fmt dependency --- examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno | 2 -- examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno | 1 - 2 files changed, 3 deletions(-) diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno index 76fc1f31050..43afa1cd141 100644 --- a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable.gno @@ -2,7 +2,6 @@ package ownable2step import ( "std" - "fmt" ) const OwnershipTransferEvent = "OwnershipTransfer" @@ -15,7 +14,6 @@ type Ownable2Step struct { } func New() *Ownable2Step { - fmt.Println("std.PrevRealm().Addr()", std.PrevRealm().Addr()) return &Ownable2Step{ owner: std.PrevRealm().Addr(), pendingOwner: "", diff --git a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno index 1b6ac6b30f2..4cca03b6ef5 100644 --- a/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno +++ b/examples/gno.land/p/oxtekgrinder/ownable2step/ownable_test.gno @@ -3,7 +3,6 @@ package ownable2step import ( "std" "testing" - "fmt" "gno.land/p/demo/testutils" "gno.land/p/demo/uassert"