Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unknown import path encoding/binary when adding package #820

Open
schollz opened this issue May 15, 2023 · 2 comments
Open

unknown import path encoding/binary when adding package #820

schollz opened this issue May 15, 2023 · 2 comments
Labels
📦 🤖 gnovm Issues or PRs gnovm related 🧾 package/realm Tag used for new Realms or Packages. 🌱 feature New update to Gno

Comments

@schollz
Copy link
Contributor

schollz commented May 15, 2023

Adding a package that uses encoding/binary throws an error

Description

I've made a very simple base64 test.

gno.land/p/demo/b64/b64.go:

package b64

import (
	"encoding/base64"
)

func B64() (data string) {
	data = base64.StdEncoding.EncodeToString([]byte("hello, world"))
	return
}

and a test:

package b64

import (
	"testing"
)

func TestB64(t *testing.T) {
	data := B64()
	if data != "aGVsbG8sIHdvcmxk" {
		t.Errorf("%s", data)
	}
}

The basic tests show no errors:

$ gno test --verbose examples/gno.land/p/demo/b64
=== RUN   TestB64
--- PASS: TestB64 (0.00s)
ok      ./examples/gno.land/p/demo/b64  3.31s
$ go run ./gnovm/cmd/gno precompile --verbose ./examples/gno.land/p/demo/b64          
examples/gno.land/p/demo/b64/b64.gno
examples/gno.land/p/demo/b64/b64_test.gno
$ go run ./gnovm/cmd/gno build --verbose ./examples/gno.land/p/demo/b64
./examples/gno.land/p/demo/b64

However, adding this as a package to a running server results in an unknown import path encoding/binary error (using #806 to get more errors):

cat password | gnokey maketx addpkg --pkgpath "gno.land/p/demo/b64" --pkgdir "examples/gno.land/p/demo/b64" --deposit 100000000ugnot --gas-fee 1000000ugnot --gas-wanted 5000000 --broadcast --chainid dev --remote localhost:26657 --insecure-password-stdin=true  zzkey1
Enter password.
--= Error =--
Data: internal error
Msg Traces:
    0  /home/zns/Documents/gno-main/tm2/pkg/crypto/keys/client/addpkg.go:211 - deliver transaction failed: log:recovered: encoding/base64/base64.gno:6: unknown import path encoding/binary
stack:
goroutine 45 [running]:
runtime/debug.Stack()
        /usr/local/go/src/runtime/debug/stack.go:24 +0x65
github.com/gnolang/gno/tm2/pkg/sdk.(*BaseApp).runTx.func1()
        /home/zns/Documents/gno-main/tm2/pkg/sdk/baseapp.go:743 +0x2cd
panic({0xca2ac0, 0xc006c870c0})
        /usr/local/go/src/runtime/panic.go:884 +0x213
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow.func1()
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2851 +0x19c
panic({0xca2ac0, 0xc006c870c0})
        /usr/local/go/src/runtime/panic.go:884 +0x213
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow.func1()
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2854 +0x2d2
panic({0xc23a60, 0xc008f7d5d0})
        /usr/local/go/src/runtime/panic.go:884 +0x213
github.com/gnolang/gno/gnovm/pkg/gnolang.tryPredefine({0xfa7458, 0xc00025e3f0}, {0xfa4eb8, 0xc0005d0dc0}, {0xf9f6d0, 0xc00c282800?})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2969 +0x1779
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow2({0xfa7458, 0xc00025e3f0}, {0xfa4eb8?, 0xc0005d0dc0}, {0xf9f6d0, 0xc00c282800?}, 0x423165?)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2870 +0x125
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow({0xfa7458, 0xc00025e3f0}, {0xfa4eb8, 0xc0005d0dc0}, {0xf9f6d0, 0xc00c282800})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2859 +0x149
github.com/gnolang/gno/gnovm/pkg/gnolang.PredefineFileSet({0xfa7458, 0xc00025e3f0}, 0xc004df98c0, 0xc0001a3038)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:38 +0x6c5
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).runFiles(0xc00c74b320, {0xc00d343630, 0x1, 0x1})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:411 +0x291
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunFiles(...)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:377
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunMemPackage(0xc00c74b320, 0xc00bb7ed40, 0x1)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:234 +0x216
github.com/gnolang/gno/tm2/pkg/sdk/vm.(*VMKeeper).initBuiltinPackagesAndTypes.func1({0xc00bba7ad1, 0xf})
        /home/zns/Documents/gno-main/tm2/pkg/sdk/vm/builtins.go:35 +0x20c
github.com/gnolang/gno/gnovm/pkg/gnolang.(*defaultStore).GetPackage(0xc00025e3f0, {0xc00bba7ad1, 0xf}, 0xd8?)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/store.go:162 +0x1e2
github.com/gnolang/gno/gnovm/pkg/gnolang.tryPredefine({0xfa7458, 0xc00025e3f0}, {0xfa4eb8, 0xc0051ba2c0}, {0xf9f6d0, 0xc0064eec80?})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2967 +0x15f
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow2({0xfa7458, 0xc00025e3f0}, {0xfa4eb8?, 0xc0051ba2c0}, {0xf9f6d0, 0xc0064eec80?}, 0x4508b2?)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2870 +0x125
github.com/gnolang/gno/gnovm/pkg/gnolang.predefineNow({0xfa7458, 0xc00025e3f0}, {0xfa4eb8, 0xc0051ba2c0}, {0xf9f6d0, 0xc0064eec80})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:2859 +0x149
github.com/gnolang/gno/gnovm/pkg/gnolang.PredefineFileSet({0xfa7458, 0xc00025e3f0}, 0xc0051bb600, 0xc00549ff08)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/preprocess.go:38 +0x6c5
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).runFiles(0xc00c74ad80, {0xc00d342920, 0x1, 0x1})
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:411 +0x291
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunFiles(...)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:377
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunMemPackage(0xc00c74ad80, 0xc00bb7e240, 0x1)
        /home/zns/Documents/gno-main/gnovm/pkg/gnolang/machine.go:234 +0x216
github.com/gnolang/gno/tm2/pkg/sdk/vm.(*VMKeeper).AddPackage(_, {{0xf96ac8, 0xc00ba4bef0}, 0x2, {0xf966c0, 0xc008320040}, {0xf96c50, 0xc006330f20}, {0xc00d256cbd, 0x3}, ...}, ...)
        /home/zns/Documents/gno-main/tm2/pkg/sdk/vm/keeper.go:180 +0x88a
github.com/gnolang/gno/tm2/pkg/sdk/vm.vmHandler.handleMsgAddPackage({_}, {{0xf96ac8, 0xc00ba4bef0}, 0x2, {0xf966c0, 0xc008320040}, {0xf96c50, 0xc006330f20}, {0xc00d256cbd, 0x3}, ...}, ...)
        /home/zns/Documents/gno-main/tm2/pkg/sdk/vm/handler.go:46 +0x2a5
github.com/gnolang/gno/tm2/pkg/sdk/vm.vmHandler.Process({_}, {{0xf96ac8, 0xc00ba4bef0}, 0x2, {0xf966c0, 0xc008320040}, {0xf96c50, 0xc006330f20}, {0xc00d256cbd, 0x3}, ...}, ...)
        /home/zns/Documents/gno-main/tm2/pkg/sdk/vm/handler.go:27 +0x205
github.com/gnolang/gno/tm2/pkg/sdk.(*BaseApp).runMsgs(_, {{0xf96ac8, 0xc00ba4bef0}, 0x2, {0xf966c0, 0xc008320040}, {0xf96c50, 0xc006330f20}, {0xc00d256cbd, 0x3}, ...}, ...)
        /home/zns/Documents/gno-main/tm2/pkg/sdk/baseapp.go:644 +0x2ed
github.com/gnolang/gno/tm2/pkg/sdk.(*BaseApp).runTx(0xc000236100, 0x2, {0xc00438d400, 0x243, _}, {{0xc005a41460, 0x1, 0x1}, {0x4c4b40, {{0xc00bb8f4a7, ...}, ...}}, ...})
        /home/zns/Documents/gno-main/tm2/pkg/sdk/baseapp.go:823 +0x965
github.com/gnolang/gno/tm2/pkg/sdk.(*BaseApp).DeliverTx(0x0?, {{}, {0xc00438d400?, 0x0?, 0x0?}})
        /home/zns/Documents/gno-main/tm2/pkg/sdk/baseapp.go:580 +0x17d
github.com/gnolang/gno/tm2/pkg/bft/abci/client.(*localClient).DeliverTxAsync(0xc00163c420, {{}, {0xc00438d400, 0x243, 0x243}})
        /home/zns/Documents/gno-main/tm2/pkg/bft/abci/client/local_client.go:82 +0xfc
github.com/gnolang/gno/tm2/pkg/bft/proxy.(*appConnConsensus).DeliverTxAsync(0x0?, {{}, {0xc00438d400?, 0x0?, 0x0?}})
        /home/zns/Documents/gno-main/tm2/pkg/bft/proxy/app_conn.go:73 +0x26
github.com/gnolang/gno/tm2/pkg/bft/state.execBlockOnProxyApp({0xf97928, 0xc007558900}, {0xf99ff0, 0xc001936610}, 0xc001e78ea0, {0xf9f8b0, 0xc000014050})
        /home/zns/Documents/gno-main/tm2/pkg/bft/state/execution.go:253 +0x5aa
github.com/gnolang/gno/tm2/pkg/bft/state.(*BlockExecutor).ApplyBlock(_, {{0xd3881d, 0xb}, {0xd3881d, 0xb}, {0x0, 0x0}, {0xc00ce8413d, 0x3}, 0x8, ...}, ...)
        /home/zns/Documents/gno-main/tm2/pkg/bft/state/execution.go:102 +0x115
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).finalizeCommit(0xc00d273200, 0x9)
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1347 +0x97e
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).tryFinalizeCommit(0xc00d273200, 0x9)
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1275 +0x313
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).enterCommit.func1()
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1221 +0x97
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).enterCommit(0xc00d273200, 0x9, 0x0)
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1252 +0xb03
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).addVote(0xc00d273200, 0xc00823af00, {0x0, 0x0})
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1637 +0x913
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).tryAddVote(0xc00d273200, 0xf?, {0x0?, 0x0?})
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:1483 +0x27
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).handleMsg(0xc00d273200, {{0xf90280, 0xc00d342420}, {0x0, 0x0}})
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:691 +0x318
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).receiveRoutine(0xc00d273200, 0x0)
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:650 +0x42c
created by github.com/gnolang/gno/tm2/pkg/bft/consensus.(*ConsensusState).OnStart
        /home/zns/Documents/gno-main/tm2/pkg/bft/consensus/state.go:344 +0x4af

--= /Error =--
➜  gno-main git:(base64) ✗ 

I can see no encoding/binary .gno package, so this error makes sense. However, it is curious to me that the tests/precompiling/building worked and it only failed at the package adding phase.

In any case, I'll start digging into this and track my progress with this issue.

@schollz
Copy link
Contributor Author

schollz commented May 15, 2023

I found a solution - the following binary.gno can be added: master...schollz:gno:feat/binary-encoding. There is a PR open for this already: #816, so I won't create a new PR.

@ajnavarro ajnavarro added 🌱 feature New update to Gno 🧾 package/realm Tag used for new Realms or Packages. 📦 🤖 gnovm Issues or PRs gnovm related labels May 15, 2023
@thehowl
Copy link
Member

thehowl commented May 17, 2023

I can see no encoding/binary .gno package, so this error makes sense. However, it is curious to me that the tests/precompiling/building worked and it only failed at the package adding phase.

When you run gno test, you're not just using the stdlibs as defined in the gnovm/stdlibs/ directory , but additionally all the imports in gnovm/tests/imports.go. So also packages like fmt, os, math, crypto/rand, encoding/binary... confusing, I know. That's one of the main reasons behind #814 .

@moul moul added this to the 🌟 main.gno.land (wanted) milestone Sep 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
📦 🤖 gnovm Issues or PRs gnovm related 🧾 package/realm Tag used for new Realms or Packages. 🌱 feature New update to Gno
Projects
Status: 🌟 Wanted for Launch
Development

No branches or pull requests

4 participants