Search code examples
goipfs

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


I’m getting an 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/[email protected]/core/bootstrap/bootstrap.go:118 +0xab
github.com/ipfs/kubo/core/bootstrap.Bootstrap.func1({0x18cbd58?, 0xc0006226c0?})
        /home/axel/go/pkg/mod/github.com/ipfs/[email protected]/core/bootstrap/bootstrap.go:89 +0xdc
github.com/jbenet/goprocess.(*process).Go.func1()
        /home/axel/go/pkg/mod/github.com/jbenet/[email protected]/impl-mutex.go:134 +0x36
created by github.com/jbenet/goprocess.(*process).Go
        /home/axel/go/pkg/mod/github.com/jbenet/[email protected]/impl-mutex.go:133 +0x238
exit status 2

Solution

  • I was able to get some help by a contributor on GitHub, here is his answer:

    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.

    by https://github.com/aschmahmann