You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kubo v0.20.0调用IpfsNode.Bootstrap触发空指针解引用求助

Kubo v0.20.0调用IpfsNode.Bootstrap触发空指针panic问题

使用Kubo v0.20.0时,调用IpfsNode.Bootstrap方法出现invalid memory address或nil pointer dereference错误,推测bootstrapRound过程中触发了panic,想确认是代码问题还是Kubo的Bug。

复现代码

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) // 触发空指针引用错误
    fmt.Println("THIS LINE WILL NOT PRINT")
    if err != nil {
        panic(err)
    }
}

完整错误信息

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

问题原因及修复

这是代码配置问题,不是Kubo的Bug。

默认初始化的core.BuildCfg是离线模式,不会启动P2P网络相关的核心组件(比如Host、Peerstore),而Bootstrap操作需要依赖这些组件来连接对等节点,导致bootstrapRound函数中访问了未初始化的nil对象,触发空指针panic。

修复方法:将BuildCfg的Online字段设为true,让节点以在线模式启动,自动初始化必要的网络组件:

func main() {
    ctx := context.Background()
    // 启用在线模式,初始化网络相关组件
    conf := core.BuildCfg{Online: true}
    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)
    fmt.Println("现在可以正常执行到这里")
    if err != nil {
        panic(err)
    }
}

内容的提问来源于stack exchange,提问作者AxelG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:30:15