Skip to content

Commit 0fc668f

Browse files
665-Enhance CMD Database Init (#680)
* cmd: put init db only where is needed * cmd: add commad to generate proof of ownership * cmd: add readme rollback * cmd: fixing remove node reference func
1 parent bea56e9 commit 0fc668f

File tree

8 files changed

+310
-197
lines changed

8 files changed

+310
-197
lines changed

cmd/main.go

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,18 @@
11
package main
22

33
import (
4-
"log"
5-
"os"
6-
"path/filepath"
7-
"strings"
8-
"time"
9-
10-
"github.com/zoobc/zoobc-core/cmd/signature"
11-
124
"github.com/spf13/cobra"
13-
"github.com/spf13/viper"
145
"github.com/zoobc/zoobc-core/cmd/account"
156
"github.com/zoobc/zoobc-core/cmd/block"
167
"github.com/zoobc/zoobc-core/cmd/genesisblock"
8+
"github.com/zoobc/zoobc-core/cmd/noderegistry"
179
"github.com/zoobc/zoobc-core/cmd/parser"
1810
"github.com/zoobc/zoobc-core/cmd/rollback"
11+
"github.com/zoobc/zoobc-core/cmd/signature"
1912
"github.com/zoobc/zoobc-core/cmd/transaction"
20-
"github.com/zoobc/zoobc-core/common/database"
21-
"github.com/zoobc/zoobc-core/common/util"
2213
)
2314

24-
var (
25-
dbPath, dbName string
26-
configPath = "./resource"
27-
sqliteDbInstance database.SqliteDBInstance
28-
)
29-
30-
func init() {
31-
dir, _ := os.Getwd()
32-
if strings.Contains(dir, "cmd") {
33-
configPath = "../resource"
34-
}
35-
36-
if err := util.LoadConfig(configPath, "config", "toml"); err != nil {
37-
panic(err)
38-
}
39-
40-
dbName = viper.GetString("dbName")
41-
dbPath = viper.GetString("dbPath")
42-
if strings.Contains(dir, "cmd") {
43-
dbPath = filepath.Join("../", viper.GetString("dbPath"))
44-
}
45-
}
4615
func main() {
47-
4816
var (
4917
rootCmd *cobra.Command
5018
generateCmd = &cobra.Command{
@@ -57,28 +25,20 @@ func main() {
5725
}
5826
)
5927

60-
sqliteDbInstance = database.NewSqliteDB()
61-
if err := sqliteDbInstance.InitializeDB(dbPath, dbName); err != nil {
62-
log.Fatalln("InitializeDB err: ", err.Error())
63-
}
64-
sqliteDB, err := sqliteDbInstance.OpenDB(dbPath, dbName, 10, 10, 20*time.Minute)
65-
if err != nil {
66-
log.Fatalln("OpenDB err: ", err.Error())
67-
}
68-
6928
rootCmd = &cobra.Command{
7029
Use: "zoobc",
7130
Short: "CLI app for zoobc core",
7231
Long: "Commandline Tools for zoobc core",
7332
}
7433
rootCmd.AddCommand(generateCmd)
7534
rootCmd.AddCommand(genesisblock.Commands())
76-
rootCmd.AddCommand(rollback.Commands(sqliteDB))
35+
rootCmd.AddCommand(rollback.Commands())
7736
rootCmd.AddCommand(parserCmd)
7837
rootCmd.AddCommand(signature.Commands())
7938
generateCmd.AddCommand(account.Commands())
80-
generateCmd.AddCommand(transaction.Commands(sqliteDB))
39+
generateCmd.AddCommand(transaction.Commands())
8140
generateCmd.AddCommand(block.Commands())
41+
generateCmd.AddCommand(noderegistry.Commands())
8242
parserCmd.AddCommand(parser.Commands())
8343
_ = rootCmd.Execute()
8444

cmd/noderegistry/cmd.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package noderegistry
2+
3+
import (
4+
"encoding/hex"
5+
"fmt"
6+
7+
"github.com/spf13/cobra"
8+
"github.com/zoobc/zoobc-core/common/chaintype"
9+
"github.com/zoobc/zoobc-core/common/constant"
10+
"github.com/zoobc/zoobc-core/common/crypto"
11+
"github.com/zoobc/zoobc-core/common/database"
12+
"github.com/zoobc/zoobc-core/common/model"
13+
"github.com/zoobc/zoobc-core/common/query"
14+
"github.com/zoobc/zoobc-core/common/util"
15+
)
16+
17+
var (
18+
/*
19+
Generate Proof of Ownership Node Registry Command
20+
*/
21+
generateProofOfOwnerShipCmd = &cobra.Command{
22+
Use: "poow",
23+
Short: "geneate proof of ownership for node registry transaction",
24+
Long: `geneate proof of ownership for transaction related with node registry.
25+
For example: register node transaction, update node transaction & claim node transaction`,
26+
}
27+
)
28+
29+
func init() {
30+
generateProofOfOwnerShipCmd.Flags().StringVar(&outputType, "output-type", "hex", "defines the type of the output to be generated [\"hex\", \"bytes\"]")
31+
generateProofOfOwnerShipCmd.Flags().StringVar(&nodeOwnerAccountAddress, "node-owner-account-address", "", "Account address of the owner of the node")
32+
generateProofOfOwnerShipCmd.Flags().StringVar(&nodeSeed, "node-seed", "", "Private key of the node")
33+
generateProofOfOwnerShipCmd.Flags().StringVar(&databasePath, "db-node-path", "../resource", "Database path of node, make sure to download the database from node or run this command on node")
34+
generateProofOfOwnerShipCmd.Flags().StringVar(&databaseName, "db-node-name", "zoobc.db", "Database name of node, make sure to download the database from node or run this command on node")
35+
}
36+
37+
// Commands will return proof of owner ship cmd
38+
func Commands() *cobra.Command {
39+
generateProofOfOwnerShipCmd.Run = GenerateProofOfOwnerShip
40+
return generateProofOfOwnerShipCmd
41+
}
42+
43+
// GenerateProofOfOwnerShip for generate Proof of ownership node registry
44+
func GenerateProofOfOwnerShip(*cobra.Command, []string) {
45+
var (
46+
poow = GetProofOfOwnerShip(
47+
databasePath,
48+
databaseName,
49+
nodeOwnerAccountAddress,
50+
nodeSeed)
51+
poowBytes = util.GetProofOfOwnershipBytes(poow)
52+
)
53+
54+
switch outputType {
55+
case "hex":
56+
fmt.Printf("Proof Of Owner Ship Hex:\n%v\n", hex.EncodeToString(poowBytes))
57+
case "bytes":
58+
fmt.Printf("Proof Of Owner Ship Bytes:\n%v\n", poowBytes)
59+
default:
60+
panic("Invalid Output type")
61+
}
62+
}
63+
64+
// GetProofOfOwnerShip will reuturn proof of ownership basd on provided nodeOwnerAccountAddress & nodeSeed in a DB
65+
func GetProofOfOwnerShip(
66+
dbPath, dbname, nodeOwnerAccountAddress, nodeSeed string,
67+
) *model.ProofOfOwnership {
68+
var (
69+
sqliteDbInstance = database.NewSqliteDB()
70+
sqliteDB, err = sqliteDbInstance.OpenDB(
71+
databasePath,
72+
databaseName,
73+
constant.SQLMaxOpenConnetion,
74+
constant.SQLMaxIdleConnections,
75+
constant.SQLMaxConnectionLifetime,
76+
)
77+
)
78+
if err != nil {
79+
panic(fmt.Sprintf("OpenDB err: %s", err.Error()))
80+
}
81+
lastBlock, err := util.GetLastBlock(query.NewQueryExecutor(sqliteDB), query.NewBlockQuery(chaintype.GetChainType(0)))
82+
if err != nil {
83+
panic(err)
84+
}
85+
poowMessage := &model.ProofOfOwnershipMessage{
86+
AccountAddress: nodeOwnerAccountAddress,
87+
BlockHash: lastBlock.BlockHash,
88+
BlockHeight: lastBlock.Height,
89+
}
90+
91+
poownMessageBytes := util.GetProofOfOwnershipMessageBytes(poowMessage)
92+
signature := (&crypto.Signature{}).SignByNode(
93+
poownMessageBytes,
94+
nodeSeed)
95+
96+
return &model.ProofOfOwnership{
97+
MessageBytes: poownMessageBytes,
98+
Signature: signature,
99+
}
100+
}

cmd/noderegistry/const.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package noderegistry
2+
3+
var (
4+
// Proof Of Ownership
5+
outputType string
6+
nodeSeed string
7+
databasePath string
8+
databaseName string
9+
nodeOwnerAccountAddress string
10+
)

cmd/readme.md

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,39 +39,38 @@ go run main.go generate transaction send-money --escrow true --approver-address
3939
```
4040

4141
### Transaction Register Node
42-
43-
```
44-
go run main.go generate transaction register-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --node-address "127.0.0.1" --locked-balance 1000000000
42+
```bash
43+
go run main.go generate transaction register-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --node-address "127.0.0.1:8001" --locked-balance 1000000000 --poow-hex "7233537248687a792d35726c71475f644f473258626a504263574f68445552495070465267675254732d327458d880d3d1e6d68a8afeaa2c030ce50b7562fca7b7cb2ddac419c6e2ee33e0a7030000004d4e8d33954aa3deee656de56289e77d17ba29baff32da82147500e354ceaacf6cdafd6437a1037f243574dbeb2b81f52dd459ae8f0ee2ce4cbc272f832"
4544
```
4645

4746
### Transaction Update Node Registration
4847

49-
```
50-
go run main.go generate transaction update-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --node-address "127.0.0.1" --locked-balance 10050000000000
48+
```bash
49+
go run main.go generate transaction update-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --node-address "127.0.0.1:8001" --locked-balance 10050000000000 --poow-hex "7233537248687a792d35726c71475f644f473258626a504263574f68445552495070465267675254732d327458d880d3d1e6d68a8afeaa2c030ce50b7562fca7b7cb2ddac419c6e2ee33e0a7030000004d4e8d33954aa3deee656de56289e77d17ba29baff32da82147500e354ceaacf6cdafd6437a1037f243574dbeb2b81f52dd459ae8f0ee2ce4cbc272f832"
5150
```
5251

5352
### Transaction Claim Node
5453

55-
```
56-
go run main.go generate transaction claim-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --recipient VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM
54+
```bash
55+
go run main.go generate transaction claim-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness" --recipient "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --poow-hex "7233537248687a792d35726c71475f644f473258626a504263574f68445552495070465267675254732d327458d880d3d1e6d68a8afeaa2c030ce50b7562fca7b7cb2ddac419c6e2ee33e0a7030000004d4e8d33954aa3deee656de56289e77d17ba29baff32da82147500e354ceaacf6cdafd6437a1037f243574dbeb2b81f52dd459ae8f0ee2ce4cbc272f832"
5756
```
5857

5958
### Transaction Remove Node
6059

61-
```
60+
```bash
6261
go run main.go generate transaction remove-node --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-seed "sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness"
6362
```
6463

6564
### Transaction Set Account Dataset
6665

67-
```
68-
go run main.go generate transaction set-account-dataset --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --recipient VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --property "Member" --value "Welcome to the jungle"
66+
```bash
67+
go run main.go generate transaction set-account-dataset --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --recipient "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --property "Member" --value "Welcome to the jungle"
6968
```
7069

7170
### Transaction Remove Account Dataset
7271

73-
```
74-
go run main.go generate transaction remove-account-dataset --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --recipient VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM --property "Member" --value "Good Boy"
72+
```bash
73+
go run main.go generate transaction remove-account-dataset --timestamp 1257894000 --sender-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --recipient "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --property "Member" --value "Good Boy"
7574
```
7675

7776
### Transaction Escrow Approval
@@ -81,7 +80,7 @@ go run main.go generate transaction remove-account-dataset --timestamp 125789400
8180

8281
### Block Generating Fake Blocks
8382

84-
```
83+
```bash
8584
go run main.go generate block fake-blocks --numberOfBlocks=1000 --blocksmithSecretPhrase='sprinkled sneak species pork outpost thrift unwind cheesy vexingly dizzy neurology neatness' --out='../resource/zoobc.db'
8685
```
8786

@@ -112,7 +111,7 @@ ofiness deviation starved"
112111

113112
### Account Generating multisig
114113
```bash
115-
go run main.go generate account multisig --addresses BCZnSfqpP5tqFQlMTYkDeBVFWnbyVK7vLr5ORFpTjgtN --addresses BCZD_VxfO2S9aziIL3cn_cXW7uPDVPOrnXuP98GEAUC7 --addresses BCZKLvgUYZ1KKx-jtF9KoJskjVPvB9jpIjfzzI6zDW0J —-min-sigs=2 --nonce=3
114+
go run main.go generate account multisig --addresses "BCZnSfqpP5tqFQlMTYkDeBVFWnbyVK7vLr5ORFpTjgtN" --addresses "BCZD_VxfO2S9aziIL3cn_cXW7uPDVPOrnXuP98GEAUC7" --addresses "BCZKLvgUYZ1KKx-jtF9KoJskjVPvB9jpIjfzzI6zDW0J" —-min-sigs=2 --nonce=3
116115
```
117116

118117
### Account Generate with spesific signature type
@@ -123,7 +122,7 @@ go run main.go generate account random --signature-type 1
123122
go run main.go genesis generate
124123
outputs cmd/genesis.go.new and cmd/cluster_config.json
125124

126-
```
125+
```bash
127126

128127
### Genesis Generate From cmd/genesisblock/preRegisteredNodes.json and resource/zoobc.db
129128

@@ -132,7 +131,7 @@ outputs cmd/genesis.go.new and cmd/cluster_config.json
132131
go run main.go genesis generate -w
133132
outputs cmd/genesis.go.new and cmd/cluster_config.json
134133

135-
```
134+
```bash
136135

137136
### Genesis Generate From cmd/genesisblock/preRegisteredNodes.json and resource/zoobc.db, plus n random nodes registrations
138137

@@ -144,3 +143,14 @@ outputs cmd/genesis.go.new and cmd/cluster_config.json
144143
```
145144
146145
```
146+
147+
### Generate Proof of Ownership Node Registry
148+
```bash
149+
go run main.go generate poow --node-seed "concur vocalist rotten busload gap quote stinging undiluted surfer goofiness deviation starved" --node-owner-account-address "VZvYd80p5S-rxSNQmMZwYXC7LyAzBmcfcj4MUUAdudWM" --db-node-path "../resource" --db-node-name "zoobc.db"
150+
--output-type "hex"
151+
```
152+
153+
### Rollback Blockchain State
154+
```bash
155+
go run main.go rollback blockchain --to-height 10 --db-path "../resource" --db-name "zoobc.db"
156+
```

cmd/rollback/rollback.go

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ package rollback
22

33
import (
44
"database/sql"
5-
"errors"
65
"fmt"
7-
"time"
86

97
"github.com/spf13/cobra"
108
"github.com/zoobc/zoobc-core/common/chaintype"
9+
"github.com/zoobc/zoobc-core/common/constant"
1110
"github.com/zoobc/zoobc-core/common/database"
1211
"github.com/zoobc/zoobc-core/common/model"
1312
"github.com/zoobc/zoobc-core/common/query"
1413
)
1514

1615
type (
16+
// RunCommand represent of output function from rollback commands
1717
RunCommand func(ccmd *cobra.Command, args []string)
1818
)
1919

@@ -45,35 +45,26 @@ will call all existing rollback query and show the last status of database after
4545
func init() {
4646
// Rollback Blockchain flag
4747
rollbackBlockChainCmd.Flags().Uint32Var(&wantedBlockHeight, "to-height", 0, "Block height state wanted after rollback")
48-
rollbackBlockChainCmd.Flags().StringVar(&dBPath, "db-path", "", "path of DB blockchain wanted to rollback")
49-
rollbackBlockChainCmd.Flags().StringVar(&dBName, "db-name", "", "name of DB blockchain wanted to rollback")
48+
rollbackBlockChainCmd.Flags().StringVar(&dBPath, "db-path", "../resource", "path of DB blockchain wanted to rollback")
49+
rollbackBlockChainCmd.Flags().StringVar(&dBName, "db-name", "zoobc.db", "name of DB blockchain wanted to rollback")
5050
}
5151

52-
func Commands(sqliteDB *sql.DB) *cobra.Command {
53-
rollbackBlockChainCmd.Run = rollbackBlockChain(sqliteDB)
52+
// Commands return Instance of rollback command
53+
func Commands() *cobra.Command {
54+
rollbackBlockChainCmd.Run = rollbackBlockChain()
5455
rollbackCmd.AddCommand(rollbackBlockChainCmd)
5556
return rollbackCmd
5657
}
5758

5859
// RollbackBlockChain func to run rollback to all
59-
func rollbackBlockChain(defaultDB *sql.DB) RunCommand {
60+
func rollbackBlockChain() RunCommand {
6061
var (
61-
err error
62-
dB = defaultDB
6362
chaintypeRollback = chaintype.GetChainType(0)
63+
dB, err = getSqliteDB(dBPath, dBName)
6464
)
65-
66-
// checking DB path and DB name flag, making sure both must use or both of them must default
67-
if (dBPath == "" && dBName != "") || (dBPath != "" && dBName == "") {
68-
panic(errors.New("please set both db-path and db-name"))
69-
}
70-
71-
if dBPath != "" && dBName != "" {
72-
dB, err = getSqliteDB(dBPath, dBName)
73-
if err != nil {
74-
fmt.Println("Failed get Db")
75-
panic(err)
76-
}
65+
if err != nil {
66+
fmt.Println("Failed get Db")
67+
panic(err)
7768
}
7869

7970
return func(ccmd *cobra.Command, args []string) {
@@ -131,7 +122,13 @@ func getSqliteDB(dbPath, dbName string) (*sql.DB, error) {
131122
if err := sqliteDbInstance.InitializeDB(dbPath, dbName); err != nil {
132123
return nil, err
133124
}
134-
sqliteDB, err := sqliteDbInstance.OpenDB(dbPath, dbName, 10, 10, 20*time.Minute)
125+
sqliteDB, err := sqliteDbInstance.OpenDB(
126+
dbPath,
127+
dbName,
128+
constant.SQLMaxOpenConnetion,
129+
constant.SQLMaxIdleConnections,
130+
constant.SQLMaxConnectionLifetime,
131+
)
135132
if err != nil {
136133
return nil, err
137134
}

0 commit comments

Comments
 (0)