From 871d8b637058430560a340af0499e8c1af6353a4 Mon Sep 17 00:00:00 2001 From: moul <94029+moul@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:13:47 -0400 Subject: [PATCH 1/7] chore: add contract-contract interation with ownership example Signed-off-by: moul <94029+moul@users.noreply.github.com> --- .../gnoland/testdata/contract-contract.txtar | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 gno.land/cmd/gnoland/testdata/contract-contract.txtar diff --git a/gno.land/cmd/gnoland/testdata/contract-contract.txtar b/gno.land/cmd/gnoland/testdata/contract-contract.txtar new file mode 100644 index 00000000000..9f64057e33e --- /dev/null +++ b/gno.land/cmd/gnoland/testdata/contract-contract.txtar @@ -0,0 +1,61 @@ +# test for add package + +## start a new node +gnoland start + +gnokey maketx addpkg -pkgdir $WORK/ownership -pkgpath gno.land/r/ownership -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 +gnokey maketx addpkg -pkgdir $WORK/registry -pkgpath gno.land/r/registry -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 +gnokey maketx addpkg -pkgdir $WORK/app -pkgpath gno.land/r/app -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 + +gnokey maketx call -pkgpath gno.land/r/registry -func Invoke -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 + +-- registry/registry.gno -- +package registry + +import "std" +import "gno.land/r/ownership" + +type callback func() string + +var cb callback + +func Register(newCb callback) { + cb = newCb +} + +func Invoke() string { + output := "" + output += "registry.Addr=" + std.CurrentRealm().Addr().String() + "\n" + output += "registry.PrevRealm=" + std.PrevRealm().Addr().String() + "\n" + output += "registry.ownership.PrevRealm=" + ownership.PrevRealm().Addr().String() + "\n" + output += cb() + return output +} + +-- app/app.gno -- +package app + +import "gno.land/r/registry" +import "gno.land/r/ownership" +import "std" + +func init() { + registry.Register(MyImplementation) +} + +func MyImplementation() string { + output := "" + output += "app.Addr=" + std.CurrentRealm().Addr().String() + "\n" + output += "app.PrevRealm=" + std.PrevRealm().Addr().String() + "\n" + output += "app.ownership.PrevRealm=" + ownership.PrevRealm().Addr().String() + "\n" + return output +} + +-- ownership/ownership.gno -- +package ownership + +import "std" + +func PrevRealm() std.Realm { + return std.PrevRealm() +} From 28febc1e3e9243a994c5459a1b36894cc3001d84 Mon Sep 17 00:00:00 2001 From: moul <94029+moul@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:41:19 -0400 Subject: [PATCH 2/7] chore: add grc20-registry example Signed-off-by: moul <94029+moul@users.noreply.github.com> --- .../gnoland/testdata/contract-contract.txtar | 15 +++-- .../cmd/gnoland/testdata/grc20-registry.txtar | 62 +++++++++++++++++++ 2 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 gno.land/cmd/gnoland/testdata/grc20-registry.txtar diff --git a/gno.land/cmd/gnoland/testdata/contract-contract.txtar b/gno.land/cmd/gnoland/testdata/contract-contract.txtar index 9f64057e33e..c3929475f8e 100644 --- a/gno.land/cmd/gnoland/testdata/contract-contract.txtar +++ b/gno.land/cmd/gnoland/testdata/contract-contract.txtar @@ -16,19 +16,21 @@ import "std" import "gno.land/r/ownership" type callback func() string +type callback2 func() func() std.Realm var cb callback +var cb2 callback2 -func Register(newCb callback) { - cb = newCb -} +func Register(newCb callback) { cb = newCb } +func Register2(newCb callback2) { cb2 = newCb } func Invoke() string { output := "" output += "registry.Addr=" + std.CurrentRealm().Addr().String() + "\n" output += "registry.PrevRealm=" + std.PrevRealm().Addr().String() + "\n" output += "registry.ownership.PrevRealm=" + ownership.PrevRealm().Addr().String() + "\n" - output += cb() + output += cb()+"\n" + output += "cb2=" + cb2()().Addr().String() + "\n" return output } @@ -41,6 +43,7 @@ import "std" func init() { registry.Register(MyImplementation) + registry.Register2(MyImplementation2) } func MyImplementation() string { @@ -51,6 +54,10 @@ func MyImplementation() string { return output } +func MyImplementation2() func() std.Realm { + return ownership.PrevRealm +} + -- ownership/ownership.gno -- package ownership diff --git a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar new file mode 100644 index 00000000000..49deb1a8323 --- /dev/null +++ b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar @@ -0,0 +1,62 @@ +# test for add package + +## start a new node +gnoland start + +# add registry +gnokey maketx addpkg -pkgdir $WORK/registry -pkgpath gno.land/r/registry -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 + +# we call Transfer with foo20, before it's registered +gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 +stdout 'not found' + +# add foo20, and foo20wrapper +gnokey maketx addpkg -pkgdir $WORK/foo20 -pkgpath gno.land/r/foo20 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 +gnokey maketx addpkg -pkgdir $WORK/foo20wrapper -pkgpath gno.land/r/foo20wrapper -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 + +# we call Transfer with foo20, after it's registered +gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 +stdout 'same address, success!' + +-- registry/registry.gno -- +package registry + +import "std" + +type transferCb func(to std.Address, amount uint64) string +type pair struct {name string; cb transferCb} +var registry = []pair{} +func Register(name string, cb transferCb) { registry = append(registry, pair{name: name, cb: cb}) } +func TransferByName(name string, to string, amount uint64) string { + for _, pair := range registry { + if pair.name == name { + if std.CurrentRealm().Addr().String() == pair.cb(std.Address(to), amount) { + return "same address, success!" + } else { + return "invalid address, ownership issue :(" + } + return "registry=" + std.CurrentRealm().Addr().String() + " " + pair.cb(std.Address(to), amount) + } + } + return "not found" +} + +-- foo20wrapper/foo20wrapper.gno -- +package foo20wrapper + +import "gno.land/r/registry" +import "gno.land/r/foo20" + +func init() { + registry.Register("foo20", foo20.Transfer) +} + +-- foo20/foo20.gno -- +package foo20 + +import "std" + +func Transfer(to std.Address, amount uint64) string { + println("transfer from=" + std.PrevRealm().Addr().String() + " to=" + to.String() + " some-amount") + return std.PrevRealm().Addr().String() +} From eddc7acce377ce7e03818a33b3e27f21e6bb2ff2 Mon Sep 17 00:00:00 2001 From: moul <94029+moul@users.noreply.github.com> Date: Thu, 19 Oct 2023 20:43:07 -0400 Subject: [PATCH 3/7] chore: fixup Signed-off-by: moul <94029+moul@users.noreply.github.com> --- .../gnoland/testdata/contract-contract.txtar | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 gno.land/cmd/gnoland/testdata/contract-contract.txtar diff --git a/gno.land/cmd/gnoland/testdata/contract-contract.txtar b/gno.land/cmd/gnoland/testdata/contract-contract.txtar deleted file mode 100644 index c3929475f8e..00000000000 --- a/gno.land/cmd/gnoland/testdata/contract-contract.txtar +++ /dev/null @@ -1,68 +0,0 @@ -# test for add package - -## start a new node -gnoland start - -gnokey maketx addpkg -pkgdir $WORK/ownership -pkgpath gno.land/r/ownership -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 -gnokey maketx addpkg -pkgdir $WORK/registry -pkgpath gno.land/r/registry -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 -gnokey maketx addpkg -pkgdir $WORK/app -pkgpath gno.land/r/app -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 - -gnokey maketx call -pkgpath gno.land/r/registry -func Invoke -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1 - --- registry/registry.gno -- -package registry - -import "std" -import "gno.land/r/ownership" - -type callback func() string -type callback2 func() func() std.Realm - -var cb callback -var cb2 callback2 - -func Register(newCb callback) { cb = newCb } -func Register2(newCb callback2) { cb2 = newCb } - -func Invoke() string { - output := "" - output += "registry.Addr=" + std.CurrentRealm().Addr().String() + "\n" - output += "registry.PrevRealm=" + std.PrevRealm().Addr().String() + "\n" - output += "registry.ownership.PrevRealm=" + ownership.PrevRealm().Addr().String() + "\n" - output += cb()+"\n" - output += "cb2=" + cb2()().Addr().String() + "\n" - return output -} - --- app/app.gno -- -package app - -import "gno.land/r/registry" -import "gno.land/r/ownership" -import "std" - -func init() { - registry.Register(MyImplementation) - registry.Register2(MyImplementation2) -} - -func MyImplementation() string { - output := "" - output += "app.Addr=" + std.CurrentRealm().Addr().String() + "\n" - output += "app.PrevRealm=" + std.PrevRealm().Addr().String() + "\n" - output += "app.ownership.PrevRealm=" + ownership.PrevRealm().Addr().String() + "\n" - return output -} - -func MyImplementation2() func() std.Realm { - return ownership.PrevRealm -} - --- ownership/ownership.gno -- -package ownership - -import "std" - -func PrevRealm() std.Realm { - return std.PrevRealm() -} From cfd7f0d39cd4a80a8bc2a9573703bb17747af04f Mon Sep 17 00:00:00 2001 From: Manfred Touron <94029+moul@users.noreply.github.com> Date: Wed, 29 Nov 2023 09:56:00 +0100 Subject: [PATCH 4/7] Update gno.land/cmd/gnoland/testdata/grc20-registry.txtar --- gno.land/cmd/gnoland/testdata/grc20-registry.txtar | 1 - 1 file changed, 1 deletion(-) diff --git a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar index 49deb1a8323..ac02341dbb1 100644 --- a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar +++ b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar @@ -35,7 +35,6 @@ func TransferByName(name string, to string, amount uint64) string { } else { return "invalid address, ownership issue :(" } - return "registry=" + std.CurrentRealm().Addr().String() + " " + pair.cb(std.Address(to), amount) } } return "not found" From be2987dac9a8146aa241d237098a50d668e6ac11 Mon Sep 17 00:00:00 2001 From: Manfred Touron <94029+moul@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:36:37 +0100 Subject: [PATCH 5/7] Update gno.land/cmd/gnoland/testdata/grc20-registry.txtar Co-authored-by: Hariom Verma --- gno.land/cmd/gnoland/testdata/grc20-registry.txtar | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar index ac02341dbb1..c9e86f6f815 100644 --- a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar +++ b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar @@ -1,4 +1,4 @@ -# test for add package +# example for contract-contract interation with ownership ## start a new node gnoland start From 23ce8c83fad164ec8467b9b35082f756164c5e3a Mon Sep 17 00:00:00 2001 From: Manfred Touron <94029+moul@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:37:03 +0100 Subject: [PATCH 6/7] Update gno.land/cmd/gnoland/testdata/grc20-registry.txtar Co-authored-by: Hariom Verma --- gno.land/cmd/gnoland/testdata/grc20-registry.txtar | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar index c9e86f6f815..4ffa1db6f67 100644 --- a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar +++ b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar @@ -24,7 +24,10 @@ package registry import "std" type transferCb func(to std.Address, amount uint64) string -type pair struct {name string; cb transferCb} +type pair struct { + name string + cb transferCb +} var registry = []pair{} func Register(name string, cb transferCb) { registry = append(registry, pair{name: name, cb: cb}) } func TransferByName(name string, to string, amount uint64) string { From ffcdf3c197a6d3d27652ff9ef7a602f98d983452 Mon Sep 17 00:00:00 2001 From: Manfred Touron <94029+moul@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:38:02 +0100 Subject: [PATCH 7/7] Update gno.land/cmd/gnoland/testdata/grc20-registry.txtar Co-authored-by: Hariom Verma --- gno.land/cmd/gnoland/testdata/grc20-registry.txtar | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar index 4ffa1db6f67..224125deb30 100644 --- a/gno.land/cmd/gnoland/testdata/grc20-registry.txtar +++ b/gno.land/cmd/gnoland/testdata/grc20-registry.txtar @@ -32,13 +32,13 @@ var registry = []pair{} func Register(name string, cb transferCb) { registry = append(registry, pair{name: name, cb: cb}) } func TransferByName(name string, to string, amount uint64) string { for _, pair := range registry { - if pair.name == name { - if std.CurrentRealm().Addr().String() == pair.cb(std.Address(to), amount) { - return "same address, success!" - } else { - return "invalid address, ownership issue :(" - } + if pair.name != name { + continue } + if std.CurrentRealm().Addr().String() != pair.cb(std.Address(to), amount) { + return "invalid address, ownership issue :(" + } + return "same address, success!" } return "not found" }