Skip to content

Commit

Permalink
working network launches
Browse files Browse the repository at this point in the history
  • Loading branch information
otherview committed May 6, 2024
1 parent 7d2167a commit 4a62898
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 214 deletions.
4 changes: 1 addition & 3 deletions environments/local/local.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"os"
"path/filepath"
"strings"

"github.com/vechain/networkhub/environments"
"github.com/vechain/networkhub/network"
Expand Down Expand Up @@ -47,10 +46,9 @@ func (l *Local) StartNetwork() error {
for _, node := range l.networkCfg.Nodes {
enodes = append(enodes, node.Enode)
}
enodeString := strings.Join(enodes, ",")

for _, nodeCfg := range l.networkCfg.Nodes {
localNode := NewLocalNode(nodeCfg, enodeString)
localNode := NewLocalNode(nodeCfg, enodes)
if err := localNode.Start(); err != nil {
return fmt.Errorf("unable to start node - %w", err)
}
Expand Down
26 changes: 20 additions & 6 deletions environments/local/local_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"os"
"os/exec"
"path/filepath"
"strconv"
"strings"
"time"

"github.com/vechain/networkhub/network/node"
Expand All @@ -15,10 +17,10 @@ import (
type Node struct {
nodeCfg *node.Node
cmdExec *exec.Cmd
enodes string
enodes []string
}

func NewLocalNode(nodeCfg *node.Node, enodes string) *Node {
func NewLocalNode(nodeCfg *node.Node, enodes []string) *Node {
return &Node{
nodeCfg: nodeCfg,
enodes: enodes,
Expand All @@ -35,7 +37,7 @@ func (n *Node) Start() error {
}

// write keys to disk
if n.nodeCfg.Type == "masterNode" && n.nodeCfg.Key != "" {
if n.nodeCfg.Key != "" {
err := os.WriteFile(filepath.Join(n.nodeCfg.ConfigDir, "master.key"), []byte(n.nodeCfg.Key), 0644)
if err != nil {
return fmt.Errorf("failed to write master key file - %w", err)
Expand All @@ -48,12 +50,19 @@ func (n *Node) Start() error {
if err != nil {
return fmt.Errorf("unable to marshal genesis - %w", err)
}

err = os.WriteFile(genesisPath, genesisBytes, 0644)
err = os.WriteFile(genesisPath, genesisBytes, 0777)
if err != nil {
return fmt.Errorf("failed to write genesis file - %w", err)
}

cleanEnode := []string{} // todo theres a clever way of doing this
for _, enode := range n.enodes {
if n.nodeCfg.Enode != enode {
cleanEnode = append(cleanEnode, enode)
}
}
enodeString := strings.Join(cleanEnode, ",")

cmd := &exec.Cmd{
Path: n.nodeCfg.ExecArtifact,
Args: []string{
Expand All @@ -64,12 +73,17 @@ func (n *Node) Start() error {
"--api-addr", n.nodeCfg.APIAddr,
"--api-cors", n.nodeCfg.APICORS,
"--p2p-port", fmt.Sprintf("%d", n.nodeCfg.P2PListenPort),
"--bootnode", n.enodes,
"--bootnode", enodeString,
},
Stdout: os.Stdout, // Directing stdout to the same stdout of the Go program
Stderr: os.Stderr, // Directing stderr to the same stderr of the Go program
}

if n.nodeCfg.Verbosity != 0 {
cmd.Args = append(cmd.Args, "--verbosity", strconv.Itoa(n.nodeCfg.Verbosity))
}

fmt.Println(cmd)
// Start the command and check for errors
if err := cmd.Start(); err != nil {
return fmt.Errorf("failed to start thor command: %w", err)
Expand Down
190 changes: 22 additions & 168 deletions environments/local/local_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,9 @@ import (
"github.com/vechain/networkhub/utils/datagen"
)

var networkJSON = `{
"id": "local_test",
"nodes": [
{
"id": "node1",
"execArtifact": "/Users/pedro/go/src/github.com/vechain/thor/bin/thor",
"p2pListenPort": 8081,
"apiAddr": "127.0.0.1:8181",
"apiCORS": "*",
"type": "masterNode",
"key": "01a4107bfb7d5141ec519e75788c34295741a1eefbfe460320efd2ada944071e",
"enode": "enode://2ac08a2c35f090e5c47fe99bb0b2956d5b3366c61a83ef30719d393b5984227f4a5bb35b42fef94c3c03c1797ddd97546bb6eeb627b040c4c8dd554b4289024d@127.0.0.1:8081",
"genesis": {
var genesis = `{
"launchTime": 1703180212,
"gasLimit": 10000000,
"extraData": "My custom VeChain",
"forkConfig": {
"VIP191": 0,
"ETH_CONST": 0,
Expand Down Expand Up @@ -94,7 +81,20 @@ var networkJSON = `{
}
]
}
}
}`
var networkJSON = fmt.Sprintf(`{
"id": "local_test",
"nodes": [
{
"id": "node1",
"execArtifact": "/Users/pedro/go/src/github.com/vechain/thor/bin/thor",
"p2pListenPort": 8081,
"apiAddr": "127.0.0.1:8181",
"apiCORS": "*",
"type": "masterNode",
"key": "01a4107bfb7d5141ec519e75788c34295741a1eefbfe460320efd2ada944071e",
"enode": "enode://2ac08a2c35f090e5c47fe99bb0b2956d5b3366c61a83ef30719d393b5984227f4a5bb35b42fef94c3c03c1797ddd97546bb6eeb627b040c4c8dd554b4289024d@127.0.0.1:8081",
"genesis": %s
},
{
"id": "node2",
Expand All @@ -105,76 +105,7 @@ var networkJSON = `{
"type": "masterNode",
"key": "7072249b800ddac1d29a3cd06468cc1a917cbcd110dde358a905d03dad51748d",
"enode": "enode://ca36cbb2e9ad0ed582350ee04f49408f4fa409a8ca39982a34e4d5bb82418c45f3fd74bc4861f5aaecd986f1697f28010e1f6af7fadf08c6f529188752f47bee@127.0.0.1:8082",
"genesis": {
"launchTime": 1703180212,
"gasLimit": 10000000,
"extraData": "My custom VeChain",
"forkConfig": {
"VIP191": 0,
"ETH_CONST": 0,
"BLOCKLIST": 0,
"ETH_IST": 0,
"VIP214": 0,
"FINALITY": 0
},
"accounts": [
{
"address": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": 0,
"code": "0x6060604052600256",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
},
{
"address": "0x61fF580B63D3845934610222245C116E013717ec",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"address": "0x327931085B4cCbCE0baABb5a5E1C678707C51d90",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"address": "0x084E48c8AE79656D7e27368AE5317b5c2D6a7497",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"authority": [
{
"masterAddress": "0x61fF580B63D3845934610222245C116E013717ec",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x000000000000000068747470733a2f2f636f6e6e65782e76656368612e696e2f"
},
{
"masterAddress": "0x327931085B4cCbCE0baABb5a5E1C678707C51d90",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x000000000000000068747470733a2f2f656e762e7665636861696e2e6f72672f"
},
{
"masterAddress": "0x084E48c8AE79656D7e27368AE5317b5c2D6a7497",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x0000000000000068747470733a2f2f617070732e7665636861696e2e6f72672f"
}
],
"params": {
"rewardRatio": 300000000000000000,
"baseGasPrice": 1000000000000000,
"proposerEndorsement": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"executorAddress": "0x0000000000000000000000004578656375746f72"
},
"executor": {
"approvers": [
{
"address": "0x199b836d8a57365baccd4f371c1fabb7be77d389",
"identity": "0x00000000000067656e6572616c20707572706f736520626c6f636b636861696e"
}
]
}
}
"genesis": %s
},
{
"id": "node3",
Expand All @@ -185,88 +116,18 @@ var networkJSON = `{
"type": "masterNode",
"key": "c55455943bf026dc44fcf189e8765eb0587c94e66029d580bae795386c0b737a",
"enode": "enode://2d5b5f39e906dd717d721e3f039326e55163697e99e0a9998193eddfbb42e21a457ab877c355ee89c2bdf2562c86f6946b1e98119e945c091cab1a5ded8ca027@127.0.0.1:8083",
"genesis": {
"launchTime": 1703180212,
"gasLimit": 10000000,
"extraData": "My custom VeChain",
"forkConfig": {
"VIP191": 0,
"ETH_CONST": 0,
"BLOCKLIST": 0,
"ETH_IST": 0,
"VIP214": 0,
"FINALITY": 0
},
"accounts": [
{
"address": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": 0,
"code": "0x6060604052600256",
"storage": {
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000002"
}
},
{
"address": "0x61fF580B63D3845934610222245C116E013717ec",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"address": "0x327931085B4cCbCE0baABb5a5E1C678707C51d90",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
{
"address": "0x084E48c8AE79656D7e27368AE5317b5c2D6a7497",
"balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"energy": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"authority": [
{
"masterAddress": "0x61fF580B63D3845934610222245C116E013717ec",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x000000000000000068747470733a2f2f636f6e6e65782e76656368612e696e2f"
},
{
"masterAddress": "0x327931085B4cCbCE0baABb5a5E1C678707C51d90",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x000000000000000068747470733a2f2f656e762e7665636861696e2e6f72672f"
},
{
"masterAddress": "0x084E48c8AE79656D7e27368AE5317b5c2D6a7497",
"endorsorAddress": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
"identity": "0x0000000000000068747470733a2f2f617070732e7665636861696e2e6f72672f"
}
],
"params": {
"rewardRatio": 300000000000000000,
"baseGasPrice": 1000000000000000,
"proposerEndorsement": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"executorAddress": "0x0000000000000000000000004578656375746f72"
},
"executor": {
"approvers": [
{
"address": "0x199b836d8a57365baccd4f371c1fabb7be77d389",
"identity": "0x00000000000067656e6572616c20707572706f736520626c6f636b636861696e"
}
]
}
}
"genesis": %s
}
]
}`
}`, genesis, genesis, genesis)

func TestLocal(t *testing.T) {
//t.Skip()
t.Skip()
networkCfg, err := network.NewNetwork(
network.WithJSON(networkJSON),
)
require.NoError(t, err)

fmt.Println(networkCfg)
localEnv := NewLocalEnv()
_, err = localEnv.LoadConfig(networkCfg)
require.NoError(t, err)
Expand All @@ -281,12 +142,13 @@ func TestLocal(t *testing.T) {

fmt.Println(account)

time.Sleep(time.Minute)
err = localEnv.StopNetwork()
require.NoError(t, err)
}

func TestSixNodeLocal(t *testing.T) {
//t.Skip()
t.Skip()
sixNodeJson, err := json.Marshal(preset.LocalSixNodesNetwork)
require.NoError(t, err)

Expand All @@ -295,22 +157,14 @@ func TestSixNodeLocal(t *testing.T) {
)
require.NoError(t, err)

fmt.Println(networkCfg)
localEnv := NewLocalEnv()
_, err = localEnv.LoadConfig(networkCfg)
require.NoError(t, err)

err = localEnv.StartNetwork()
require.NoError(t, err)

time.Sleep(30 * time.Second)
c := client.NewClient("http://" + networkCfg.Nodes[0].APIAddr)
account, err := c.GetAccount(datagen.RandAccount().Address)
require.NoError(t, err)

fmt.Println(account)

time.Sleep(time.Hour)
time.Sleep(5 * time.Minute)
err = localEnv.StopNetwork()
require.NoError(t, err)
}
5 changes: 3 additions & 2 deletions network/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package node
import "github.com/vechain/thor/v2/genesis"

const (
MasterNode = "MasterNode"
RegularNode = "RegularNode"
MasterNode = "masterNode"
RegularNode = "regularNode"
)

type Node struct {
Expand All @@ -19,4 +19,5 @@ type Node struct {
Key string `json:"key"`
Enode string `json:"enode"`
ExecArtifact string `json:"execArtifact"` // used to determine the executing version of the node ( path, dockerImage, etc)
Verbosity int `json:"verbosity"`
}
Loading

0 comments on commit 4a62898

Please sign in to comment.