Kubo, invalid memory address or nil pointer dereference from IpfsNode.Bootstrap

I’m getting a invalid memory address or nil pointer dereference from IpfsNode.Bootstrap
I assume that there is some panic in bootstrap Round, but am I doing something wrong here?
Or is there a bug?
I’m using kubo v0.20.0
here is my code:

package main

import (
	"context"
	"fmt"

	"github.com/ipfs/kubo/config"
	"github.com/ipfs/kubo/core"
	"github.com/ipfs/kubo/core/bootstrap"
)

func main() {
	ctx := context.Background()
	conf := core.BuildCfg{}
	node, err := core.NewNode(ctx, &conf)
	if err != nil {
		panic(err)
	}
	peers, err := config.DefaultBootstrapPeers()
	if err != nil {
		panic(err)
	}
	bs_conf := bootstrap.BootstrapConfigWithPeers(peers)
	err = node.Bootstrap(bs_conf) // this gets nil pointer dereference
	fmt.Println("THIS LINE WILL NOT PRINT")
	if err != nil {
		panic(err)
	}
}

The full error is:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0xee49eb]

goroutine 69 [running]:
github.com/ipfs/kubo/core/bootstrap.bootstrapRound({0x18bf1d8?, 0xc0000b05f0?}, {0x0, 0x0}, {0x0?, 0x0?, 0x0?, 0xc0006240c0?})
        /home/axel/go/pkg/mod/github.com/ipfs/kubo@v0.20.0/core/bootstrap/bootstrap.go:118 +0xab
github.com/ipfs/kubo/core/bootstrap.Bootstrap.func1({0x18cbd58?, 0xc0006226c0?})
        /home/axel/go/pkg/mod/github.com/ipfs/kubo@v0.20.0/core/bootstrap/bootstrap.go:89 +0xdc
github.com/jbenet/goprocess.(*process).Go.func1()
        /home/axel/go/pkg/mod/github.com/jbenet/goprocess@v0.1.4/impl-mutex.go:134 +0x36
created by github.com/jbenet/goprocess.(*process).Go
        /home/axel/go/pkg/mod/github.com/jbenet/goprocess@v0.1.4/impl-mutex.go:133 +0x238
exit status 2
1 Like

can you fmt.Println(bs_conf) before calling node.Bootstrap ?

2 Likes

sure, that prints:

{4 30s 10s 0x112b700}
1 Like

@Jorropo Do you know what might be wrong here? bug?

Thx for openning the issue, someone else is gonna look at it. I don’t have time right now sorry.

Okay, thanks any way

1 Like

@axel

Your issue seems to be that you use conf := core.BuildCfg{} which will set BulidCfg.Offline to false which means that you will not have a libp2p node instantiated with which to bootstrap which then gives you a null reference exception since you’re trying to bootstrap using a non-existent libp2p networking host.

If you set Offline to true it won’t panic anymore since the host will start.


That being said I’m not sure exactly what you’re trying to do and maybe using kubo as a library does enough of the job for you. However, you might be better suited to using something like GitHub - ipfs/boxo: A reference library for building IPFS applications and implementations. if you’re planning on building a custom IPFS application in Go.

There’s a relatively recent doc describing some of the tradeoffs a developer might make in deciding how to move from Kubo to something similar, but more configurable in kubo/customizing.md at master · ipfs/kubo · GitHub.

1 Like

Okay! Thank you so much @adin !! I will check that out.

I’m working on an ipfs cid crawler, I have found the crawler for the DHT,
but that gave me peers, so now I need to get all CIDs from all those peers.
But any ways, I will check boxo out. Thanks!