diff --git a/examples/bootstrapping-railing/Readme.md b/examples/bootstrapping-railing/Readme.md new file mode 100644 index 0000000000..3da0e5823f --- /dev/null +++ b/examples/bootstrapping-railing/Readme.md @@ -0,0 +1,9 @@ +# Bootstrapping example with bootstrapping nodes + +This is an example that shows how to connect to a list of bootstrapping nodes. + +## Run the example + +1. Run `make` and `make deps` in the main directory +2. Run `go build` in this directory to build the executable +3. Run `./bootstrapping-railing` in this directory in order to start the programm \ No newline at end of file diff --git a/examples/bootstrapping-railing/railing.go b/examples/bootstrapping-railing/railing.go new file mode 100644 index 0000000000..28573de7c8 --- /dev/null +++ b/examples/bootstrapping-railing/railing.go @@ -0,0 +1,73 @@ +package main + +import ( + "context" + "fmt" + + libp2p "github.com/libp2p/go-libp2p" + ipfsaddr "github.com/ipfs/go-ipfs-addr" + peerstore "github.com/libp2p/go-libp2p-peerstore" +) + +// The bootstrapping nodes are just long running nodes with a static IP address. +// That means you can easily have your own bootstrapping nodes. Everything you need is +// a server with a static IP address. +var bootstrapPeers = []string{ + "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", + "/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64", + "/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z", + "/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM", + "/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm", + "/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu", + "/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd", + "/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3", + "/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx", +} + +// This example show's you how you can connect to a list of bootstrapping nodes. +func main() { + + ctx := context.Background() + + // Create the host + host, err := libp2p.New(ctx, libp2p.Defaults) + if err != nil { + panic(err) + } + + c := make(chan struct{}) + + // Loop through the bootstrapping peer list and connect to them + for _, addr := range bootstrapPeers { + + // Parse the string to an address + iAddr, err := ipfsaddr.ParseString(addr) + if err != nil { + panic(err) + } + + // Get peer info from multiaddress + pInfo, err := peerstore.InfoFromP2pAddr(iAddr.Multiaddr()) + if err != nil { + panic(err) + } + + go func() { + // Connect to the peer by it's peer info + if err := host.Connect(ctx, *pInfo); err != nil { + fmt.Println("failed to connect to peer: ", err) + return + } + + fmt.Println("connected to peer: ", pInfo.ID.String()) + + c <- struct{}{} + }() + + } + + for i := 0; i < 3; i++ { + <-c + } + +} diff --git a/package.json b/package.json index d2d817b90b..ce8fa9af15 100644 --- a/package.json +++ b/package.json @@ -293,6 +293,12 @@ "hash": "QmcBWojPoNh4qm7zvv4qiepvCnnc7ALS9qcp7TNwwxT1gT", "name": "go.uuid", "version": "1.1.0" + }, + { + "author": "why", + "hash": "QmQViVWBHbU6HmYjXcdNq7tVASCNgdg64ZGcauuDkLCivW", + "name": "go-ipfs-addr", + "version": "0.1.7" } ], "gxVersion": "0.4.0",