From 966c450316dfd4970e98ca0ac690f5d30e254e76 Mon Sep 17 00:00:00 2001 From: Jayash Satolia Date: Sun, 29 Dec 2024 00:50:07 +0530 Subject: [PATCH 01/11] Fix --- .../blobbercore/handler/auth_ticket.go | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/auth_ticket.go b/code/go/0chain.net/blobbercore/handler/auth_ticket.go index 89032880c..0a9c12a55 100644 --- a/code/go/0chain.net/blobbercore/handler/auth_ticket.go +++ b/code/go/0chain.net/blobbercore/handler/auth_ticket.go @@ -2,6 +2,7 @@ package handler import ( "context" + "fmt" "github.com/0chain/blobber/code/go/0chain.net/core/node" "github.com/0chain/common/core/common" "net/http" @@ -19,24 +20,27 @@ type AuthTicketResponse struct { // // parameters: // -// +name: Zbox-Signature -// in: header -// type: string -// description: Digital signature to verify that the sender is 0box service. -// +name: client_id -// type: string -// in: query -// description: Client ID is used as a payload to the token generated. The token represents a signed version of this string by the blobber's private key. +// +name: Zbox-Signature +// in: header +// type: string +// description: Digital signature to verify that the sender is 0box service. +// +name: client_id +// type: string +// in: query +// description: Client ID is used as a payload to the token generated. The token represents a signed version of this string by the blobber's private key. // // responses: -// 200: AuthTicketResponse +// +// 200: AuthTicketResponse func GenerateAuthTicket(ctx context.Context, r *http.Request) (interface{}, error) { clientID := r.URL.Query().Get("client_id") if clientID == "" { return nil, common.NewError("missing_client_id", "client_id is required") } - signature, err := node.Self.Sign(clientID) + round := r.URL.Query().Get("round") + + signature, err := node.Self.Sign(fmt.Sprintf("%s_%s", clientID, round)) if err != nil { return nil, common.NewError("signature_failed", "signature failed") } From 9d48039102df3f411fdf5326b2ad70062f1e6884 Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Wed, 1 Jan 2025 21:50:22 +0100 Subject: [PATCH 02/11] feature: added raw key file param --- code/go/0chain.net/blobber/flags.go | 2 ++ code/go/0chain.net/blobber/node.go | 31 +++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/code/go/0chain.net/blobber/flags.go b/code/go/0chain.net/blobber/flags.go index 745942fb8..83537bc25 100644 --- a/code/go/0chain.net/blobber/flags.go +++ b/code/go/0chain.net/blobber/flags.go @@ -8,6 +8,7 @@ import ( var ( deploymentMode int keysFile string + keysFileRaw string mountPoint string metadataDB string logDir string @@ -24,6 +25,7 @@ var ( func init() { flag.IntVar(&deploymentMode, "deployment_mode", 2, "deployment mode: 0=dev,1=test, 2=mainnet") flag.StringVar(&keysFile, "keys_file", "", "keys_file") + flag.StringVar(&keysFileRaw, "keys_file_raw", "", "keys_file_raw") flag.StringVar(&mountPoint, "files_dir", "", "Mounted partition where all files will be stored") flag.StringVar(&metadataDB, "db_dir", "", "db_dir") flag.StringVar(&logDir, "log_dir", "", "log_dir") diff --git a/code/go/0chain.net/blobber/node.go b/code/go/0chain.net/blobber/node.go index 6b1a2b06b..50bfdca30 100644 --- a/code/go/0chain.net/blobber/node.go +++ b/code/go/0chain.net/blobber/node.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "errors" "fmt" "os" @@ -18,15 +19,23 @@ var publicKey, privateKey string func setupNode() error { fmt.Println("> setup blobber") - err := readKeysFromAws() - if err != nil { - err = readKeysFromFile(&keysFile) + var err error + + if keysFileRaw != "" { + err = readKeysFromString(&keysFileRaw) + + fmt.Println("using blobber keys from local string") + } else { + err = readKeysFromAws() if err != nil { - panic(err) + err = readKeysFromFile(&keysFile) + if err != nil { + panic(err) + } + fmt.Println("using blobber keys from local") + } else { + fmt.Println("using blobber keys from aws") } - fmt.Println("using blobber keys from local") - } else { - fmt.Println("using blobber keys from aws") } node.Self.SetKeys(publicKey, privateKey) @@ -72,6 +81,12 @@ func readKeysFromAws() error { return nil } +func readKeysFromString(keyFileRaw *string) error { + publicKey, privateKey, _, _ = encryption.ReadKeys( + bytes.NewBufferString(*keyFileRaw)) + return nil +} + func readKeysFromFile(keysFile *string) error { reader, err := os.Open(*keysFile) if err != nil { @@ -80,4 +95,4 @@ func readKeysFromFile(keysFile *string) error { defer reader.Close() publicKey, privateKey, _, _ = encryption.ReadKeys(reader) return nil -} \ No newline at end of file +} From 5c0538561054ab0d1d60d9aedbe321c5889685a0 Mon Sep 17 00:00:00 2001 From: Jayash Satolia Date: Sun, 5 Jan 2025 20:33:05 +0530 Subject: [PATCH 03/11] Fix auth ticket message --- code/go/0chain.net/blobbercore/handler/auth_ticket.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/go/0chain.net/blobbercore/handler/auth_ticket.go b/code/go/0chain.net/blobbercore/handler/auth_ticket.go index 0a9c12a55..c33db62d6 100644 --- a/code/go/0chain.net/blobbercore/handler/auth_ticket.go +++ b/code/go/0chain.net/blobbercore/handler/auth_ticket.go @@ -3,6 +3,7 @@ package handler import ( "context" "fmt" + "github.com/0chain/blobber/code/go/0chain.net/core/encryption" "github.com/0chain/blobber/code/go/0chain.net/core/node" "github.com/0chain/common/core/common" "net/http" @@ -40,7 +41,7 @@ func GenerateAuthTicket(ctx context.Context, r *http.Request) (interface{}, erro round := r.URL.Query().Get("round") - signature, err := node.Self.Sign(fmt.Sprintf("%s_%s", clientID, round)) + signature, err := node.Self.Sign(encryption.Hash(fmt.Sprintf("%s_%s", clientID, round))) if err != nil { return nil, common.NewError("signature_failed", "signature failed") } From d9fe4fb8df8db0e0e065f65905cf11a085c6fd31 Mon Sep 17 00:00:00 2001 From: Jayash Satolia Date: Mon, 6 Jan 2025 20:10:59 +0530 Subject: [PATCH 04/11] Fix hardfork backward compatibility --- code/go/0chain.net/blobbercore/handler/auth_ticket.go | 10 +++++++++- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/auth_ticket.go b/code/go/0chain.net/blobbercore/handler/auth_ticket.go index c33db62d6..91d7b9e5c 100644 --- a/code/go/0chain.net/blobbercore/handler/auth_ticket.go +++ b/code/go/0chain.net/blobbercore/handler/auth_ticket.go @@ -6,6 +6,7 @@ import ( "github.com/0chain/blobber/code/go/0chain.net/core/encryption" "github.com/0chain/blobber/code/go/0chain.net/core/node" "github.com/0chain/common/core/common" + "github.com/0chain/gosdk/zcncore" "net/http" ) @@ -34,6 +35,7 @@ type AuthTicketResponse struct { // // 200: AuthTicketResponse func GenerateAuthTicket(ctx context.Context, r *http.Request) (interface{}, error) { + clientID := r.URL.Query().Get("client_id") if clientID == "" { return nil, common.NewError("missing_client_id", "client_id is required") @@ -41,7 +43,13 @@ func GenerateAuthTicket(ctx context.Context, r *http.Request) (interface{}, erro round := r.URL.Query().Get("round") - signature, err := node.Self.Sign(encryption.Hash(fmt.Sprintf("%s_%s", clientID, round))) + payload := encryption.Hash(fmt.Sprintf("%s_%s", clientID, round)) + + if isActivated, err := zcncore.IsHardforkActivated("hermes"); err != nil || !isActivated { + payload = clientID + } + + signature, err := node.Self.Sign(payload) if err != nil { return nil, common.NewError("signature_failed", "signature failed") } diff --git a/go.mod b/go.mod index 1910ed238..4917b26a6 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.22.5 require ( github.com/0chain/errors v1.0.3 - github.com/0chain/gosdk v1.18.15 + github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8 github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/didip/tollbooth/v6 v6.1.2 github.com/go-openapi/runtime v0.26.0 diff --git a/go.sum b/go.sum index b6f2abfff..367d95057 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/0chain/common v1.18.3 h1:42dYOv2KyMTSanuS67iDtfv+ErbSRqR8NJ3MG72MwaI= github.com/0chain/common v1.18.3/go.mod h1:Lapu2Tj7z5Sm4r+X141e7vsz4NDODTEypeElYAP3iSw= github.com/0chain/errors v1.0.3 h1:QQZPFxTfnMcRdt32DXbzRQIfGWmBsKoEdszKQDb0rRM= github.com/0chain/errors v1.0.3/go.mod h1:xymD6nVgrbgttWwkpSCfLLEJbFO6iHGQwk/yeSuYkIc= -github.com/0chain/gosdk v1.18.15 h1:jujBBRAv2xendebjdoC6nMmoVl5w+uhDrKBqokIvxKI= -github.com/0chain/gosdk v1.18.15/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= +github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8 h1:AOnuHlQAshxR/S21omuvOw3n+21ksaZsa4ZYyyLuI/Y= +github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= From d08a6bcce13c6e60ab34b74befda2b6202530d68 Mon Sep 17 00:00:00 2001 From: Jayash Satolia Date: Mon, 6 Jan 2025 20:30:20 +0530 Subject: [PATCH 05/11] Fix --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4917b26a6..fee3f48cc 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.22.5 require ( github.com/0chain/errors v1.0.3 - github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8 + github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/didip/tollbooth/v6 v6.1.2 github.com/go-openapi/runtime v0.26.0 diff --git a/go.sum b/go.sum index 367d95057..ba1ea225c 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/0chain/common v1.18.3 h1:42dYOv2KyMTSanuS67iDtfv+ErbSRqR8NJ3MG72MwaI= github.com/0chain/common v1.18.3/go.mod h1:Lapu2Tj7z5Sm4r+X141e7vsz4NDODTEypeElYAP3iSw= github.com/0chain/errors v1.0.3 h1:QQZPFxTfnMcRdt32DXbzRQIfGWmBsKoEdszKQDb0rRM= github.com/0chain/errors v1.0.3/go.mod h1:xymD6nVgrbgttWwkpSCfLLEJbFO6iHGQwk/yeSuYkIc= -github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8 h1:AOnuHlQAshxR/S21omuvOw3n+21ksaZsa4ZYyyLuI/Y= -github.com/0chain/gosdk v1.18.18-0.20250106143646-0d88122d4ba8/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= +github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c h1:OhtnsZKkWJpUzzDJdsPpBeOv5qhksPbQ1QL2exxsQgY= +github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= From 5e76c29d4c47c5359b02a43df94fed641b158915 Mon Sep 17 00:00:00 2001 From: dabasov Date: Mon, 13 Jan 2025 17:05:09 +0200 Subject: [PATCH 06/11] updated gosdk --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index fee3f48cc..049c5178c 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.22.5 require ( github.com/0chain/errors v1.0.3 - github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c + github.com/0chain/gosdk v1.19.0-RC0 github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/didip/tollbooth/v6 v6.1.2 github.com/go-openapi/runtime v0.26.0 diff --git a/go.sum b/go.sum index ba1ea225c..d140ee9d9 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/0chain/common v1.18.3 h1:42dYOv2KyMTSanuS67iDtfv+ErbSRqR8NJ3MG72MwaI= github.com/0chain/common v1.18.3/go.mod h1:Lapu2Tj7z5Sm4r+X141e7vsz4NDODTEypeElYAP3iSw= github.com/0chain/errors v1.0.3 h1:QQZPFxTfnMcRdt32DXbzRQIfGWmBsKoEdszKQDb0rRM= github.com/0chain/errors v1.0.3/go.mod h1:xymD6nVgrbgttWwkpSCfLLEJbFO6iHGQwk/yeSuYkIc= -github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c h1:OhtnsZKkWJpUzzDJdsPpBeOv5qhksPbQ1QL2exxsQgY= -github.com/0chain/gosdk v1.18.18-0.20250106145917-0f4cb303af5c/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= +github.com/0chain/gosdk v1.19.0-RC0 h1:PhHsvfEBJw9ofEFGWKqJ7UID7qMfl1LrWl2GyhIxjqE= +github.com/0chain/gosdk v1.19.0-RC0/go.mod h1:8unFy9Dx2YyPKMYPDGR3MFhUEymbAfQcRDm9bobVLGw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= From f460553f9eee8aea136da011c8eb201a6b3a0450 Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Wed, 15 Jan 2025 21:15:42 +0100 Subject: [PATCH 07/11] feature: added split key option --- code/go/0chain.net/blobber/flags.go | 30 ++++++++++--------- code/go/0chain.net/blobber/node.go | 2 +- code/go/0chain.net/core/node/self_node.go | 4 ++- code/go/0chain.net/validator/main.go | 2 +- .../validatorcore/storage/models_test.go | 2 +- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/code/go/0chain.net/blobber/flags.go b/code/go/0chain.net/blobber/flags.go index 83537bc25..c39164d35 100644 --- a/code/go/0chain.net/blobber/flags.go +++ b/code/go/0chain.net/blobber/flags.go @@ -6,26 +6,28 @@ import ( ) var ( - deploymentMode int - keysFile string - keysFileRaw string - mountPoint string - metadataDB string - logDir string - httpPort int - hostname string - configDir string - grpcPort int - httpsPort int - httpsKeyFile string - httpsCertFile string - hostUrl string + deploymentMode int + keysFile string + keysFileRaw string + keysFileIsSplit bool + mountPoint string + metadataDB string + logDir string + httpPort int + hostname string + configDir string + grpcPort int + httpsPort int + httpsKeyFile string + httpsCertFile string + hostUrl string ) func init() { flag.IntVar(&deploymentMode, "deployment_mode", 2, "deployment mode: 0=dev,1=test, 2=mainnet") flag.StringVar(&keysFile, "keys_file", "", "keys_file") flag.StringVar(&keysFileRaw, "keys_file_raw", "", "keys_file_raw") + flag.BoolVar(&keysFileIsSplit, "keys_file_is_split", false, "keys_file_is_split") flag.StringVar(&mountPoint, "files_dir", "", "Mounted partition where all files will be stored") flag.StringVar(&metadataDB, "db_dir", "", "db_dir") flag.StringVar(&logDir, "log_dir", "", "log_dir") diff --git a/code/go/0chain.net/blobber/node.go b/code/go/0chain.net/blobber/node.go index 50bfdca30..adc20a772 100644 --- a/code/go/0chain.net/blobber/node.go +++ b/code/go/0chain.net/blobber/node.go @@ -38,7 +38,7 @@ func setupNode() error { } } - node.Self.SetKeys(publicKey, privateKey) + node.Self.SetKeys(publicKey, privateKey, keysFileIsSplit) if node.Self.ID == "" { return errors.New("node definition for self node doesn't exist") } else { diff --git a/code/go/0chain.net/core/node/self_node.go b/code/go/0chain.net/core/node/self_node.go index c58692f59..af16a0282 100644 --- a/code/go/0chain.net/core/node/self_node.go +++ b/code/go/0chain.net/core/node/self_node.go @@ -4,6 +4,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "github.com/0chain/blobber/code/go/0chain.net/core/common" "github.com/0chain/blobber/code/go/0chain.net/core/config" "github.com/0chain/gosdk/core/zcncrypto" @@ -19,7 +20,7 @@ type SelfNode struct { } /*SetKeys - setter */ -func (sn *SelfNode) SetKeys(publicKey, privateKey string) { +func (sn *SelfNode) SetKeys(publicKey, privateKey string, isSplit bool) { publicKeyBytes, err := hex.DecodeString(publicKey) if err != nil { panic(err) @@ -31,6 +32,7 @@ func (sn *SelfNode) SetKeys(publicKey, privateKey string) { sn.wallet.Keys[0].PublicKey = publicKey sn.wallet.Keys[0].PrivateKey = privateKey sn.wallet.Version = zcncrypto.CryptoVersion + sn.wallet.IsSplit = isSplit sn.PublicKey = publicKey sn.ID = sn.wallet.ClientID diff --git a/code/go/0chain.net/validator/main.go b/code/go/0chain.net/validator/main.go index 6d9ac2c3a..6f4b42a37 100644 --- a/code/go/0chain.net/validator/main.go +++ b/code/go/0chain.net/validator/main.go @@ -107,7 +107,7 @@ func main() { fmt.Println("using validator keys from aws") } - node.Self.SetKeys(publicKey, privateKey) + node.Self.SetKeys(publicKey, privateKey, false) if len(*hostUrl) > 0 { node.Self.URL = *hostUrl diff --git a/code/go/0chain.net/validatorcore/storage/models_test.go b/code/go/0chain.net/validatorcore/storage/models_test.go index 149bd1928..46cdf4450 100644 --- a/code/go/0chain.net/validatorcore/storage/models_test.go +++ b/code/go/0chain.net/validatorcore/storage/models_test.go @@ -659,6 +659,6 @@ func setupModelsTest(t *testing.T) error { return err } - node.Self.SetKeys(wallet.Keys[0].PublicKey, wallet.Keys[0].PrivateKey) + node.Self.SetKeys(wallet.Keys[0].PublicKey, wallet.Keys[0].PrivateKey, false) return nil } From 6c4ff11e5aa37d93d5be00954ceea542c2151b68 Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Thu, 16 Jan 2025 01:51:25 +0100 Subject: [PATCH 08/11] fix: fixed bugs --- code/go/0chain.net/blobber/zcn.go | 4 ++++ code/go/0chain.net/core/chain/entity.go | 1 + config/0chain_blobber.yaml | 2 ++ 3 files changed, 7 insertions(+) diff --git a/code/go/0chain.net/blobber/zcn.go b/code/go/0chain.net/blobber/zcn.go index 31a7f9122..301ed43fd 100644 --- a/code/go/0chain.net/blobber/zcn.go +++ b/code/go/0chain.net/blobber/zcn.go @@ -103,6 +103,10 @@ func setupServerChain() error { return err } + if node.Self.GetWallet().IsSplit { + zcncore.RegisterZauthServer(serverChain.ZauthServer) + } + fmt.Print(" [OK]\n") return nil } diff --git a/code/go/0chain.net/core/chain/entity.go b/code/go/0chain.net/core/chain/entity.go index 28a71904b..0c3adf562 100644 --- a/code/go/0chain.net/core/chain/entity.go +++ b/code/go/0chain.net/core/chain/entity.go @@ -51,6 +51,7 @@ func NewChainFromConfig() *Chain { chain.ID = common.ToKey(config.Configuration.ChainID) chain.OwnerID = viper.GetString("server_chain.owner") chain.BlockWorker = viper.GetString("block_worker") + chain.ZauthServer = viper.GetString("zauth_server") return chain } diff --git a/config/0chain_blobber.yaml b/config/0chain_blobber.yaml index c7864e651..d277d6cb2 100755 --- a/config/0chain_blobber.yaml +++ b/config/0chain_blobber.yaml @@ -45,6 +45,8 @@ min_confirmation: 10 block_worker: https://dev.0chain.net/dns +zauth_server: https://zauth.dev.0chain.net/ + rate_limiters: # Rate limiters will use this duration to clean unused token buckets. # If it is 0 then token will expire in 10 years. From fddb26b05113c92e9bf03f7a5f25010ddacb7f19 Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Thu, 16 Jan 2025 10:57:11 +0100 Subject: [PATCH 09/11] fix: changed arguments --- code/go/0chain.net/blobber/flags.go | 34 +++++++++++++++-------------- code/go/0chain.net/blobber/node.go | 6 +++-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/code/go/0chain.net/blobber/flags.go b/code/go/0chain.net/blobber/flags.go index c39164d35..400e933eb 100644 --- a/code/go/0chain.net/blobber/flags.go +++ b/code/go/0chain.net/blobber/flags.go @@ -6,27 +6,29 @@ import ( ) var ( - deploymentMode int - keysFile string - keysFileRaw string - keysFileIsSplit bool - mountPoint string - metadataDB string - logDir string - httpPort int - hostname string - configDir string - grpcPort int - httpsPort int - httpsKeyFile string - httpsCertFile string - hostUrl string + deploymentMode int + keysFile string + keysFilePublicKey string + keysFilePrivateKey string + keysFileIsSplit bool + mountPoint string + metadataDB string + logDir string + httpPort int + hostname string + configDir string + grpcPort int + httpsPort int + httpsKeyFile string + httpsCertFile string + hostUrl string ) func init() { flag.IntVar(&deploymentMode, "deployment_mode", 2, "deployment mode: 0=dev,1=test, 2=mainnet") flag.StringVar(&keysFile, "keys_file", "", "keys_file") - flag.StringVar(&keysFileRaw, "keys_file_raw", "", "keys_file_raw") + flag.StringVar(&keysFilePublicKey, "keys_file_public_key", "", "keys_file_public_key") + flag.StringVar(&keysFilePrivateKey, "keys_file_private_key", "", "keys_file_private_key") flag.BoolVar(&keysFileIsSplit, "keys_file_is_split", false, "keys_file_is_split") flag.StringVar(&mountPoint, "files_dir", "", "Mounted partition where all files will be stored") flag.StringVar(&metadataDB, "db_dir", "", "db_dir") diff --git a/code/go/0chain.net/blobber/node.go b/code/go/0chain.net/blobber/node.go index adc20a772..7e4dc44dc 100644 --- a/code/go/0chain.net/blobber/node.go +++ b/code/go/0chain.net/blobber/node.go @@ -21,8 +21,9 @@ func setupNode() error { var err error - if keysFileRaw != "" { - err = readKeysFromString(&keysFileRaw) + if keysFilePrivateKey != "" || keysFilePublicKey != "" { + privateKey = keysFilePrivateKey + publicKey = keysFilePublicKey fmt.Println("using blobber keys from local string") } else { @@ -39,6 +40,7 @@ func setupNode() error { } node.Self.SetKeys(publicKey, privateKey, keysFileIsSplit) + if node.Self.ID == "" { return errors.New("node definition for self node doesn't exist") } else { From a410da3b53182ed3bfe4f04f1211824be641d316 Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Thu, 16 Jan 2025 11:27:33 +0100 Subject: [PATCH 10/11] feature: added client key arg option --- code/go/0chain.net/blobber/flags.go | 2 ++ code/go/0chain.net/blobber/node.go | 8 ++++++-- code/go/0chain.net/core/node/self_node.go | 15 +++++++++++++-- code/go/0chain.net/validator/main.go | 2 +- .../validatorcore/storage/models_test.go | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/code/go/0chain.net/blobber/flags.go b/code/go/0chain.net/blobber/flags.go index 400e933eb..052c328ee 100644 --- a/code/go/0chain.net/blobber/flags.go +++ b/code/go/0chain.net/blobber/flags.go @@ -10,6 +10,7 @@ var ( keysFile string keysFilePublicKey string keysFilePrivateKey string + keysFileClientKey string keysFileIsSplit bool mountPoint string metadataDB string @@ -29,6 +30,7 @@ func init() { flag.StringVar(&keysFile, "keys_file", "", "keys_file") flag.StringVar(&keysFilePublicKey, "keys_file_public_key", "", "keys_file_public_key") flag.StringVar(&keysFilePrivateKey, "keys_file_private_key", "", "keys_file_private_key") + flag.StringVar(&keysFileClientKey, "keys_file_client_key", "", "keys_file_client_key") flag.BoolVar(&keysFileIsSplit, "keys_file_is_split", false, "keys_file_is_split") flag.StringVar(&mountPoint, "files_dir", "", "Mounted partition where all files will be stored") flag.StringVar(&metadataDB, "db_dir", "", "db_dir") diff --git a/code/go/0chain.net/blobber/node.go b/code/go/0chain.net/blobber/node.go index 7e4dc44dc..27e1d2091 100644 --- a/code/go/0chain.net/blobber/node.go +++ b/code/go/0chain.net/blobber/node.go @@ -14,7 +14,7 @@ import ( "go.uber.org/zap" ) -var publicKey, privateKey string +var clientKey, publicKey, privateKey string func setupNode() error { fmt.Println("> setup blobber") @@ -25,6 +25,10 @@ func setupNode() error { privateKey = keysFilePrivateKey publicKey = keysFilePublicKey + if keysFileIsSplit { + clientKey = keysFileClientKey + } + fmt.Println("using blobber keys from local string") } else { err = readKeysFromAws() @@ -39,7 +43,7 @@ func setupNode() error { } } - node.Self.SetKeys(publicKey, privateKey, keysFileIsSplit) + node.Self.SetKeys(clientKey, publicKey, privateKey, keysFileIsSplit) if node.Self.ID == "" { return errors.New("node definition for self node doesn't exist") diff --git a/code/go/0chain.net/core/node/self_node.go b/code/go/0chain.net/core/node/self_node.go index af16a0282..bcbba76b3 100644 --- a/code/go/0chain.net/core/node/self_node.go +++ b/code/go/0chain.net/core/node/self_node.go @@ -20,11 +20,22 @@ type SelfNode struct { } /*SetKeys - setter */ -func (sn *SelfNode) SetKeys(publicKey, privateKey string, isSplit bool) { - publicKeyBytes, err := hex.DecodeString(publicKey) +func (sn *SelfNode) SetKeys(clientKey, publicKey, privateKey string, isSplit bool) { + var ( + publicKeyBytes []byte + err error + ) + + if isSplit { + publicKeyBytes, err = hex.DecodeString(clientKey) + } else { + publicKeyBytes, err = hex.DecodeString(publicKey) + } + if err != nil { panic(err) } + sn.wallet = &zcncrypto.Wallet{} sn.wallet.ClientID = Hash(publicKeyBytes) sn.wallet.ClientKey = publicKey diff --git a/code/go/0chain.net/validator/main.go b/code/go/0chain.net/validator/main.go index 6f4b42a37..b34ee63ed 100644 --- a/code/go/0chain.net/validator/main.go +++ b/code/go/0chain.net/validator/main.go @@ -107,7 +107,7 @@ func main() { fmt.Println("using validator keys from aws") } - node.Self.SetKeys(publicKey, privateKey, false) + node.Self.SetKeys("", publicKey, privateKey, false) if len(*hostUrl) > 0 { node.Self.URL = *hostUrl diff --git a/code/go/0chain.net/validatorcore/storage/models_test.go b/code/go/0chain.net/validatorcore/storage/models_test.go index 46cdf4450..f7140d310 100644 --- a/code/go/0chain.net/validatorcore/storage/models_test.go +++ b/code/go/0chain.net/validatorcore/storage/models_test.go @@ -659,6 +659,6 @@ func setupModelsTest(t *testing.T) error { return err } - node.Self.SetKeys(wallet.Keys[0].PublicKey, wallet.Keys[0].PrivateKey, false) + node.Self.SetKeys("", wallet.Keys[0].PublicKey, wallet.Keys[0].PrivateKey, false) return nil } From cd3007d3d792dc92328189b2d43ec262680081ec Mon Sep 17 00:00:00 2001 From: Yaroslav Svitlytskyi Date: Thu, 16 Jan 2025 14:08:54 +0100 Subject: [PATCH 11/11] fix: fixed public key management when split key mode is enabled --- .../go/0chain.net/blobbercore/handler/protocol.go | 3 ++- code/go/0chain.net/core/node/self_node.go | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/code/go/0chain.net/blobbercore/handler/protocol.go b/code/go/0chain.net/blobbercore/handler/protocol.go index 9bd7384d6..34b788fe8 100644 --- a/code/go/0chain.net/blobbercore/handler/protocol.go +++ b/code/go/0chain.net/blobbercore/handler/protocol.go @@ -3,9 +3,10 @@ package handler import ( "context" "errors" + "sync" + "github.com/0chain/gosdk/core/client" coreTxn "github.com/0chain/gosdk/core/transaction" - "sync" "github.com/0chain/blobber/code/go/0chain.net/blobbercore/allocation" "github.com/0chain/blobber/code/go/0chain.net/blobbercore/config" diff --git a/code/go/0chain.net/core/node/self_node.go b/code/go/0chain.net/core/node/self_node.go index bcbba76b3..ea75baf41 100644 --- a/code/go/0chain.net/core/node/self_node.go +++ b/code/go/0chain.net/core/node/self_node.go @@ -38,14 +38,25 @@ func (sn *SelfNode) SetKeys(clientKey, publicKey, privateKey string, isSplit boo sn.wallet = &zcncrypto.Wallet{} sn.wallet.ClientID = Hash(publicKeyBytes) - sn.wallet.ClientKey = publicKey + + if isSplit { + sn.wallet.ClientKey = clientKey + } else { + sn.wallet.ClientKey = publicKey + } + sn.wallet.Keys = make([]zcncrypto.KeyPair, 1) sn.wallet.Keys[0].PublicKey = publicKey sn.wallet.Keys[0].PrivateKey = privateKey sn.wallet.Version = zcncrypto.CryptoVersion sn.wallet.IsSplit = isSplit - sn.PublicKey = publicKey + if isSplit { + sn.PublicKey = clientKey + } else { + sn.PublicKey = publicKey + } + sn.ID = sn.wallet.ClientID }