Skip to content

Instantly share code, notes, and snippets.

@mcdee
Created April 10, 2018 12:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcdee/333d7dc2f7a721fe029c2bd48716f933 to your computer and use it in GitHub Desktop.
Save mcdee/333d7dc2f7a721fe029c2bd48716f933 to your computer and use it in GitHub Desktop.
// Copyright © 2018 Weald Technology Trading
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
p2pcrypto "github.com/libp2p/go-libp2p-crypto"
p2ppeer "github.com/libp2p/go-libp2p-peer"
p2ppeerstore "github.com/libp2p/go-libp2p-peerstore"
p2pswarm "github.com/libp2p/go-libp2p-swarm"
p2pbasic "github.com/libp2p/go-libp2p/p2p/host/basic"
p2pmultiaddr "github.com/multiformats/go-multiaddr"
)
func main() {
// Create a keypair
priv, pub, err := p2pcrypto.GenerateKeyPair(p2pcrypto.Secp256k1, 256)
if err != nil {
panic(err)
}
// Use public key to create our node's Id
pid, err := p2ppeer.IDFromPublicKey(pub)
if err != nil {
panic(err)
}
listen, err := p2pmultiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/15432")
if err != nil {
panic(err)
}
peerStore := p2ppeerstore.NewPeerstore()
peerStore.AddPrivKey(pid, priv)
peerStore.AddPubKey(pid, pub)
network, err := p2pswarm.NewNetwork(context.Background(), []p2pmultiaddr.Multiaddr{listen}, pid, peerStore, nil)
if err != nil {
panic(err)
}
hostOpts := &p2pbasic.HostOpts{}
host, err := p2pbasic.NewHost(context.Background(), network, hostOpts)
if err != nil {
panic(err)
}
fmt.Printf("Node ID is %s\n", p2ppeer.IDB58Encode(host.ID()))
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
for {
select {
case killSignal := <-interrupt:
if killSignal == os.Interrupt {
fmt.Println("Interrupted")
}
fmt.Println("Shutting down")
return
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment