Browse Source

Add reverse peer assignment

pull/9/head
garritfra 5 years ago
parent
commit
dd345185b5
  1. 12
      core/Blockchain.go
  2. 21
      server/webserver.go

12
core/Blockchain.go

@ -1,6 +1,7 @@
package core package core
import ( import (
"bytes"
"encoding/json" "encoding/json"
"log" "log"
"net/http" "net/http"
@ -10,6 +11,7 @@ import (
// Blockchain struct // Blockchain struct
type Blockchain struct { type Blockchain struct {
Hostname string
Blocks []Block Blocks []Block
PendingTransactions []Transaction PendingTransactions []Transaction
Peers []string Peers []string
@ -38,10 +40,10 @@ func (bc *Blockchain) MineBlock() Block {
} }
// NewBlockchain creates a new Blockchain // NewBlockchain creates a new Blockchain
func NewBlockchain() Blockchain { func NewBlockchain(hostname string) Blockchain {
log.Print("Creating Blockchain...") log.Print("Creating Blockchain...")
blockchain := Blockchain{Blocks: make([]Block, 0), PendingTransactions: make([]Transaction, 0), Peers: make([]string, 0)} blockchain := Blockchain{Hostname: hostname, Blocks: make([]Block, 0), PendingTransactions: make([]Transaction, 0), Peers: make([]string, 0)}
// Mine Genesis Block // Mine Genesis Block
blockchain.MineBlock() blockchain.MineBlock()
@ -77,6 +79,12 @@ func (bc *Blockchain) AddPeer(peer string) (resp *http.Response, err error) {
// Add Peer, if it is not already in the list // Add Peer, if it is not already in the list
if !contains(bc.Peers, peer) { if !contains(bc.Peers, peer) {
bc.Peers = append(bc.Peers, peer) bc.Peers = append(bc.Peers, peer)
var body []string
data, _ := json.Marshal(append(body, bc.Hostname))
log.Println("request http://" + peer + "/add_peers")
http.Post("http://"+peer+"/add_peers", "application/json", bytes.NewBuffer(data))
} }
return resp, nil return resp, nil
} }

21
server/webserver.go

@ -4,7 +4,9 @@ import (
"encoding/gob" "encoding/gob"
"encoding/json" "encoding/json"
"log" "log"
"net"
"net/http" "net/http"
"os"
"github.com/garritfra/blockchain-project/core" "github.com/garritfra/blockchain-project/core"
) )
@ -17,7 +19,7 @@ func ServeHTTP(port string) {
gob.Register(core.Transaction{}) gob.Register(core.Transaction{})
gob.Register(core.Blockchain{}) gob.Register(core.Blockchain{})
blockchain = core.NewBlockchain() blockchain = core.NewBlockchain(getHostAddress() + port)
registerRouteHandlers() registerRouteHandlers()
@ -27,6 +29,23 @@ func ServeHTTP(port string) {
} }
} }
func getHostAddress() string {
addrs, err := net.InterfaceAddrs()
if err != nil {
os.Stderr.WriteString("Oops: " + err.Error() + "\n")
os.Exit(1)
}
for _, a := range addrs {
if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
return ipnet.IP.String()
}
}
}
return ""
}
func registerRouteHandlers() { func registerRouteHandlers() {
http.HandleFunc("/", handleListBlocks) http.HandleFunc("/", handleListBlocks)
http.HandleFunc("/mine_block", handleMineBlock) http.HandleFunc("/mine_block", handleMineBlock)

Loading…
Cancel
Save