Skip to content

Commit

Permalink
chore: add contract-contract interation with ownership example (gnola…
Browse files Browse the repository at this point in the history
…ng#1262)

Addresses
gnoswap-labs#7 (comment)

CI is red -> related/depends on gnolang#1241, gnolang#1249 (cc @gfanton).

```console
$ go test -v . -run TestTestdata/grc20-registry
=== RUN   TestTestdata
=== RUN   TestTestdata/grc20-registry
=== PAUSE TestTestdata/grc20-registry
=== CONT  TestTestdata/grc20-registry
transfer from=g1sqt92sa06ugh8nlt98kyghw83qy84paf4csyh6 to=g123456789 some-amount
    testscript.go:534: WORK=$WORK
        PATH=/nix/store/xl220d87dlnq05kiz1pjqa9snhlvr1rs-go-1.20.8/share/go/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/moul/bin:/Users/moul/.nix-profile/bin:/etc/profiles/per-user/moul/bin:/run/current-system/sw/bin:/nix/var/nix/profiles/default/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/moul/.local/bin:/Users/moul/.local/share/node_modules/bin:/Users/moul/go/bin:/Users/moul/.local/share/rust/cargo/bin:/Users/moul/.local/share/rust/rustup/bin:/Users/moul/.config/zsh/plugins/p10k-config
        GOTRACEBACK=system
        HOME=/no-home
        TMPDIR=$WORK/.tmp
        devnull=/dev/null
        /=/
        :=:
        $=$
        GOCOVERDIR=
        exe=
        USER_SEED_test1=source bonus chronic canvas draft south burst lottery vacant surface solve popular case indicate oppose farm nothing bullet exhibit title speed wink action roast
        USER_ADDR_test1=g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5
        GNOROOT=/Users/moul/go/src/github.com/gnolang/gno
        GNOHOME=/var/folders/22/d9yt75bd2wv9sl3dm_lx85x80000gn/T/TestTestdata1289631443/001/gno
        
        # test for add package
        ## start a new node (1.390s)
        > gnoland start
        [stdout]
        node started successfully
        
        # add registry (0.466s)
        > gnokey maketx addpkg -pkgdir $WORK/registry -pkgpath gno.land/r/registry -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
        [stdout]
        
        OK!
        GAS WANTED: 2000000
        GAS USED:   274024
        
        [stderr]
        Enter password.
        
        # we call Transfer with foo20, before it's registered (0.454s)
        > 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" string)
        OK!
        GAS WANTED: 2000000
        GAS USED:   73759
        
        [stderr]
        Enter password.
        
        > stdout 'not found'
        # add foo20, and foo20wrapper (0.936s)
        > gnokey maketx addpkg -pkgdir $WORK/foo20 -pkgpath gno.land/r/foo20 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
        [stdout]
        
        OK!
        GAS WANTED: 2000000
        GAS USED:   196098
        
        [stderr]
        Enter password.
        
        > gnokey maketx addpkg -pkgdir $WORK/foo20wrapper -pkgpath gno.land/r/foo20wrapper -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
        [stdout]
        
        OK!
        GAS WANTED: 2000000
        GAS USED:   276276
        
        [stderr]
        Enter password.
        
        # we call Transfer with foo20, after it's registered (0.464s)
        > 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!" string)
        OK!
        GAS WANTED: 2000000
        GAS USED:   132948
        
        [stderr]
        Enter password.
        
        > stdout 'same address, success!'
        PASS
        
--- PASS: TestTestdata (0.01s)
    --- PASS: TestTestdata/grc20-registry (4.09s)
PASS
ok  	github.com/gnolang/gno/gno.land/cmd/gnoland	(cached)
```

---------

Signed-off-by: moul <94029+moul@users.noreply.github.com>
Co-authored-by: Guilhem Fanton <8671905+gfanton@users.noreply.github.com>
Co-authored-by: Hariom Verma <hariom18599@gmail.com>
  • Loading branch information
3 people committed Jan 18, 2024
1 parent 6123f01 commit 1467f12
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions gno.land/cmd/gnoland/testdata/grc20-registry.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# example for contract-contract interation with ownership

## 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 {
continue
}
if std.CurrentRealm().Addr().String() != pair.cb(std.Address(to), amount) {
return "invalid address, ownership issue :("
}
return "same address, success!"
}
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()
}

0 comments on commit 1467f12

Please sign in to comment.