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
import (
"bytes"
"encoding/json"
"log"
"net/http"
@ -10,6 +11,7 @@ import (
// Blockchain struct
type Blockchain struct {
Hostname string
Blocks []Block
PendingTransactions []Transaction
Peers []string
@ -38,10 +40,10 @@ func (bc *Blockchain) MineBlock() Block {
}
// NewBlockchain creates a new Blockchain
func NewBlockchain() Blockchain {
func NewBlockchain(hostname string) 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
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
if !contains(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
}

21
server/webserver.go

@ -4,7 +4,9 @@ import (
"encoding/gob"
"encoding/json"
"log"
"net"
"net/http"
"os"
"github.com/garritfra/blockchain-project/core"
)
@ -17,7 +19,7 @@ func ServeHTTP(port string) {
gob.Register(core.Transaction{})
gob.Register(core.Blockchain{})
blockchain = core.NewBlockchain()
blockchain = core.NewBlockchain(getHostAddress() + port)
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() {
http.HandleFunc("/", handleListBlocks)
http.HandleFunc("/mine_block", handleMineBlock)

Loading…
Cancel
Save