forked from cerc-io/plugeth
Moved seeding and moved manifest
This commit is contained in:
parent
5a0bae1dae
commit
afe83af219
@ -116,16 +116,6 @@ func (s *State) Copy() *State {
|
|||||||
return NewState(s.trie.Copy())
|
return NewState(s.trie.Copy())
|
||||||
}
|
}
|
||||||
|
|
||||||
type ObjType byte
|
|
||||||
|
|
||||||
const (
|
|
||||||
NilTy ObjType = iota
|
|
||||||
AccountTy
|
|
||||||
ContractTy
|
|
||||||
|
|
||||||
UnknownTy
|
|
||||||
)
|
|
||||||
|
|
||||||
// Updates any given state object
|
// Updates any given state object
|
||||||
func (s *State) UpdateStateObject(object *StateObject) {
|
func (s *State) UpdateStateObject(object *StateObject) {
|
||||||
addr := object.Address()
|
addr := object.Address()
|
||||||
@ -145,3 +135,40 @@ func (s *State) Put(key, object []byte) {
|
|||||||
func (s *State) Root() interface{} {
|
func (s *State) Root() interface{} {
|
||||||
return s.trie.Root
|
return s.trie.Root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Object manifest
|
||||||
|
//
|
||||||
|
// The object manifest is used to keep changes to the state so we can keep track of the changes
|
||||||
|
// that occurred during a state transitioning phase.
|
||||||
|
type Manifest struct {
|
||||||
|
// XXX These will be handy in the future. Not important for now.
|
||||||
|
objectAddresses map[string]bool
|
||||||
|
storageAddresses map[string]map[string]bool
|
||||||
|
|
||||||
|
objectChanges map[string]*StateObject
|
||||||
|
storageChanges map[string]map[string]*big.Int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewManifest() *Manifest {
|
||||||
|
m := &Manifest{objectAddresses: make(map[string]bool), storageAddresses: make(map[string]map[string]bool)}
|
||||||
|
m.Reset()
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Manifest) Reset() {
|
||||||
|
m.objectChanges = make(map[string]*StateObject)
|
||||||
|
m.storageChanges = make(map[string]map[string]*big.Int)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Manifest) AddObjectChange(stateObject *StateObject) {
|
||||||
|
m.objectChanges[string(stateObject.Address())] = stateObject
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Manifest) AddStorageChange(stateObject *StateObject, storageAddr []byte, storage *big.Int) {
|
||||||
|
if m.storageChanges[string(stateObject.Address())] == nil {
|
||||||
|
m.storageChanges[string(stateObject.Address())] = make(map[string]*big.Int)
|
||||||
|
}
|
||||||
|
|
||||||
|
m.storageChanges[string(stateObject.Address())][string(storageAddr)] = storage
|
||||||
|
}
|
||||||
|
@ -331,36 +331,3 @@ func (sm *StateManager) notifyChanges() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Manifest struct {
|
|
||||||
// XXX These will be handy in the future. Not important for now.
|
|
||||||
objectAddresses map[string]bool
|
|
||||||
storageAddresses map[string]map[string]bool
|
|
||||||
|
|
||||||
objectChanges map[string]*StateObject
|
|
||||||
storageChanges map[string]map[string]*big.Int
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewManifest() *Manifest {
|
|
||||||
m := &Manifest{objectAddresses: make(map[string]bool), storageAddresses: make(map[string]map[string]bool)}
|
|
||||||
m.Reset()
|
|
||||||
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manifest) Reset() {
|
|
||||||
m.objectChanges = make(map[string]*StateObject)
|
|
||||||
m.storageChanges = make(map[string]map[string]*big.Int)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manifest) AddObjectChange(stateObject *StateObject) {
|
|
||||||
m.objectChanges[string(stateObject.Address())] = stateObject
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manifest) AddStorageChange(stateObject *StateObject, storageAddr []byte, storage *big.Int) {
|
|
||||||
if m.storageChanges[string(stateObject.Address())] == nil {
|
|
||||||
m.storageChanges[string(stateObject.Address())] = make(map[string]*big.Int)
|
|
||||||
}
|
|
||||||
|
|
||||||
m.storageChanges[string(stateObject.Address())][string(storageAddr)] = storage
|
|
||||||
}
|
|
||||||
|
84
ethereum.go
84
ethereum.go
@ -253,7 +253,7 @@ func (s *Ethereum) ReapDeadPeerHandler() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start the ethereum
|
// Start the ethereum
|
||||||
func (s *Ethereum) Start() {
|
func (s *Ethereum) Start(seed bool) {
|
||||||
// Bind to addr and port
|
// Bind to addr and port
|
||||||
ln, err := net.Listen("tcp", ":"+s.Port)
|
ln, err := net.Listen("tcp", ":"+s.Port)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -272,47 +272,51 @@ func (s *Ethereum) Start() {
|
|||||||
// Start the reaping processes
|
// Start the reaping processes
|
||||||
go s.ReapDeadPeerHandler()
|
go s.ReapDeadPeerHandler()
|
||||||
|
|
||||||
if ethutil.Config.Seed {
|
if seed {
|
||||||
ethutil.Config.Log.Debugln("Seeding")
|
s.Seed()
|
||||||
// DNS Bootstrapping
|
}
|
||||||
_, nodes, err := net.LookupSRV("eth", "tcp", "ethereum.org")
|
}
|
||||||
if err == nil {
|
|
||||||
peers := []string{}
|
|
||||||
// Iterate SRV nodes
|
|
||||||
for _, n := range nodes {
|
|
||||||
target := n.Target
|
|
||||||
port := strconv.Itoa(int(n.Port))
|
|
||||||
// Resolve target to ip (Go returns list, so may resolve to multiple ips?)
|
|
||||||
addr, err := net.LookupHost(target)
|
|
||||||
if err == nil {
|
|
||||||
for _, a := range addr {
|
|
||||||
// Build string out of SRV port and Resolved IP
|
|
||||||
peer := net.JoinHostPort(a, port)
|
|
||||||
log.Println("Found DNS Bootstrap Peer:", peer)
|
|
||||||
peers = append(peers, peer)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Println("Couldn't resolve :", target)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Connect to Peer list
|
|
||||||
s.ProcessPeerList(peers)
|
|
||||||
} else {
|
|
||||||
// Fallback to servers.poc3.txt
|
|
||||||
resp, err := http.Get("http://www.ethereum.org/servers.poc3.txt")
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Fetching seed failed:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Reading seed failed:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
s.ConnectToPeer(string(body))
|
func (s *Ethereum) Seed() {
|
||||||
|
ethutil.Config.Log.Debugln("Seeding")
|
||||||
|
// DNS Bootstrapping
|
||||||
|
_, nodes, err := net.LookupSRV("eth", "tcp", "ethereum.org")
|
||||||
|
if err == nil {
|
||||||
|
peers := []string{}
|
||||||
|
// Iterate SRV nodes
|
||||||
|
for _, n := range nodes {
|
||||||
|
target := n.Target
|
||||||
|
port := strconv.Itoa(int(n.Port))
|
||||||
|
// Resolve target to ip (Go returns list, so may resolve to multiple ips?)
|
||||||
|
addr, err := net.LookupHost(target)
|
||||||
|
if err == nil {
|
||||||
|
for _, a := range addr {
|
||||||
|
// Build string out of SRV port and Resolved IP
|
||||||
|
peer := net.JoinHostPort(a, port)
|
||||||
|
log.Println("Found DNS Bootstrap Peer:", peer)
|
||||||
|
peers = append(peers, peer)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Println("Couldn't resolve :", target)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// Connect to Peer list
|
||||||
|
s.ProcessPeerList(peers)
|
||||||
|
} else {
|
||||||
|
// Fallback to servers.poc3.txt
|
||||||
|
resp, err := http.Get("http://www.ethereum.org/servers.poc3.txt")
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Fetching seed failed:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Reading seed failed:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.ConnectToPeer(string(body))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ type config struct {
|
|||||||
Ver string
|
Ver string
|
||||||
ClientString string
|
ClientString string
|
||||||
Pubkey []byte
|
Pubkey []byte
|
||||||
Seed bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var Config *config
|
var Config *config
|
||||||
|
Loading…
Reference in New Issue
Block a user