Skip to content

Commit

Permalink
Add bootstrap nodes for faster peer discovery
Browse files Browse the repository at this point in the history
  • Loading branch information
hayzamjs committed Dec 6, 2021
1 parent b80ed9f commit dc76183
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 3 deletions.
2 changes: 1 addition & 1 deletion example/example.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ int main() {

std::cout << "Stopping IPFS node" << std::endl;
std::cout << IPFSStopNode() << std::endl;
}
}
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ require (
github.com/ipfs/go-ipfs-config v0.16.0 // indirect
github.com/ipfs/go-ipfs-files v0.0.8 // indirect
github.com/ipfs/interface-go-ipfs-core v0.5.1 // indirect
github.com/libp2p/go-libp2p-core v0.9.0 // indirect
github.com/multiformats/go-multiaddr v0.4.0 // indirect
)
26 changes: 24 additions & 2 deletions src/constants/constants.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package constants

const (
Lib_version = "v2.0.0"
Lib_version = "v2.2.0"
Lib_name = "libipfs"
Lib_usage = "A C-Style library implemented in Go for using IPFS in C++/C."
DefaultRepoPath = ".libipfs-repo"
Expand All @@ -25,4 +25,26 @@ var DefaultServerFilters = []string{
"/ip6/2001:db8::/ipcidr/32",
"/ip6/fc00::/ipcidr/7",
"/ip6/fe80::/ipcidr/10",
}
}

var BootstrapNodes = []string{
// IPFS Bootstrapper nodes.
"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",

// IPFS Cluster Pinning nodes
"/ip4/138.201.67.219/tcp/4001/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
"/ip4/138.201.67.219/udp/4001/quic/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
"/ip4/138.201.67.220/tcp/4001/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
"/ip4/138.201.67.220/udp/4001/quic/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
"/ip4/138.201.68.74/tcp/4001/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
"/ip4/138.201.68.74/udp/4001/quic/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
"/ip4/94.130.135.167/tcp/4001/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",
"/ip4/94.130.135.167/udp/4001/quic/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",

// Scala IPFS nodes
"/ip4/135.181.166.154/tcp/4001/p2p/12D3KooWNKiAPbXoxjeNs5zVkHCCerYcUd1GShtETYtsc4W4qUYq",
"/ip4/135.181.166.154/udp/4010/quic/p2p/12D3KooWNKiAPbXoxjeNs5zVkHCCerYcUd1GShtETYtsc4W4qUYq",
}
34 changes: 34 additions & 0 deletions src/ipfs/ipfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,59 @@ import (
"context"
"path/filepath"
"io/ioutil"
"sync"

"github.com/ipfs/go-ipfs/plugin/loader"
"github.com/ipfs/go-ipfs/repo/fsrepo"
"github.com/ipfs/go-ipfs/core"
"github.com/ipfs/go-ipfs/core/coreapi"
"github.com/scala-network/libipfs/src/constants"
"github.com/scala-network/libipfs/src/utils"
"github.com/libp2p/go-libp2p-core/peer"

files "github.com/ipfs/go-ipfs-files"
icore "github.com/ipfs/interface-go-ipfs-core"
icorepath "github.com/ipfs/interface-go-ipfs-core/path"
config "github.com/ipfs/go-ipfs-config"
libp2p "github.com/ipfs/go-ipfs/core/node/libp2p"
options "github.com/ipfs/interface-go-ipfs-core/options"
ma "github.com/multiformats/go-multiaddr"
)

var ipfsCoreAll *core.IpfsNode
var ipfsApiAll icore.CoreAPI
var ctxAll context.Context

func connectToPeers(ctx context.Context, ipfs icore.CoreAPI, peers []string) (error) {
var wg sync.WaitGroup
peerInfos := make(map[peer.ID]*peer.AddrInfo, len(peers))
for _, addrStr := range peers {
addr, err := ma.NewMultiaddr(addrStr)
if err != nil {
return err
}
pii, err := peer.AddrInfoFromP2pAddr(addr)
if err != nil {
return err
}
pi, ok := peerInfos[pii.ID]
if !ok {
pi = &peer.AddrInfo{ID: pii.ID}
peerInfos[pi.ID] = pi
}
pi.Addrs = append(pi.Addrs, pii.Addrs...)
}

wg.Add(len(peerInfos))
for _, peerInfo := range peerInfos {
go func(peerInfo *peer.AddrInfo) {
defer wg.Done()
}(peerInfo)
}
wg.Wait()
return nil
}

func createRepo(ctx context.Context, dataPath string, P2PPort int) (string, error) {
repoPath := dataPath

Expand Down Expand Up @@ -141,6 +174,7 @@ func Start(dataPath string, P2PPort int) (error) {
var err error
ctxAll = context.Background()
ipfsCoreAll, ipfsApiAll, err = spawnIpfsNode(ctxAll, dataPath, P2PPort)
err = connectToPeers(ctxAll, ipfsApiAll, constants.BootstrapNodes)

if err != nil {
return err
Expand Down

0 comments on commit dc76183

Please sign in to comment.