From defd114fd361efe968aa7b67a51bdb90f1e68c70 Mon Sep 17 00:00:00 2001 From: AstaFrode Date: Wed, 14 Jun 2023 16:20:10 +0800 Subject: [PATCH 1/2] update reconnectChainSDK --- chain/chain.go | 54 +++++++++++++++++++++++++++++++++++++---------- chain/fileBank.go | 2 +- config/config.go | 2 +- 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/chain/chain.go b/chain/chain.go index 15c33a2..2381f08 100644 --- a/chain/chain.go +++ b/chain/chain.go @@ -109,11 +109,10 @@ func (c *ChainSDK) Reconnect() error { c.api.Client.Close() } c.api = nil - c.api, err = reconnectChainSDK(c.rpcAddr) - if err != nil { - return err - } - c.metadata, err = c.api.RPC.State.GetMetadataLatest() + c.metadata = nil + c.runtimeVersion = nil + c.keyEvents = nil + c.api, c.metadata, c.runtimeVersion, c.keyEvents, c.genesisHash, err = reconnectChainSDK(c.rpcAddr) if err != nil { return err } @@ -164,18 +163,51 @@ func (c *ChainSDK) Verify(msg []byte, sig []byte) (bool, error) { return signature.Verify(msg, sig, c.keyring.URI) } -func reconnectChainSDK(rpcAddr []string) (*gsrpc.SubstrateAPI, error) { +func reconnectChainSDK(rpcs []string) ( + *gsrpc.SubstrateAPI, + *types.Metadata, + *types.RuntimeVersion, + types.StorageKey, + types.Hash, + error, +) { var err error var api *gsrpc.SubstrateAPI + defer log.SetOutput(os.Stdout) log.SetOutput(io.Discard) - for i := 0; i < len(rpcAddr); i++ { - api, err = gsrpc.NewSubstrateAPI(rpcAddr[i]) - if err == nil { - return api, nil + for i := 0; i < len(rpcs); i++ { + api, err = gsrpc.NewSubstrateAPI(rpcs[i]) + if err != nil { + continue } } - return api, err + if api == nil { + return nil, nil, nil, nil, types.Hash{}, pattern.ERR_RPC_CONNECTION + } + var metadata *types.Metadata + var runtimeVer *types.RuntimeVersion + var keyEvents types.StorageKey + var genesisHash types.Hash + + metadata, err = api.RPC.State.GetMetadataLatest() + if err != nil { + return nil, nil, nil, nil, types.Hash{}, pattern.ERR_RPC_CONNECTION + } + genesisHash, err = api.RPC.Chain.GetBlockHash(0) + if err != nil { + return nil, nil, nil, nil, types.Hash{}, pattern.ERR_RPC_CONNECTION + } + runtimeVer, err = api.RPC.State.GetRuntimeVersionLatest() + if err != nil { + return nil, nil, nil, nil, types.Hash{}, pattern.ERR_RPC_CONNECTION + } + keyEvents, err = types.CreateStorageKey(metadata, pattern.SYSTEM, pattern.EVENTS, nil) + if err != nil { + return nil, nil, nil, nil, types.Hash{}, pattern.ERR_RPC_CONNECTION + } + + return api, metadata, runtimeVer, keyEvents, genesisHash, err } func createPrefixedKey(pallet, method string) []byte { diff --git a/chain/fileBank.go b/chain/fileBank.go index 167da61..7a1044a 100644 --- a/chain/fileBank.go +++ b/chain/fileBank.go @@ -932,7 +932,7 @@ func (c *ChainSDK) ReplaceIdleFiles(roothash []pattern.FileHash) (string, []patt } err = types.EventRecordsRaw(*h).DecodeEventRecords(c.metadata, &events) if err != nil || len(events.FileBank_ReplaceFiller) > 0 { - return txhash, events.FileBank_ReplaceFiller[0].Filler_list, nil + return txhash, nil, nil } return txhash, nil, errors.New(pattern.ERR_Failed) } diff --git a/config/config.go b/config/config.go index ba05f11..d60fd78 100644 --- a/config/config.go +++ b/config/config.go @@ -40,7 +40,7 @@ func (cfg *Config) NewSDK(roleName string) (sdk.SDK, error) { if roleName != CharacterName_Bucket && roleName != CharacterName_Deoss && roleName != CharacterName_Client { - return nil, fmt.Errorf("invalid character name") + return nil, fmt.Errorf("invalid role name") } return chain.NewChainSDK(roleName, cfg.Rpc, cfg.Mnemonic, cfg.Timeout) } From ebc353ee6b4907fd293b9c918363bc2942ebf76a Mon Sep 17 00:00:00 2001 From: AstaFrode Date: Wed, 14 Jun 2023 16:23:02 +0800 Subject: [PATCH 2/2] update utils --- core/utils/hash.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core/utils/hash.go b/core/utils/hash.go index 04c0ec7..d45f985 100644 --- a/core/utils/hash.go +++ b/core/utils/hash.go @@ -60,3 +60,24 @@ func CalcMD5(data string) ([]byte, error) { m := md5.Sum([]byte(data)) return m[:], nil } + +// CalcPathSHA256 is used to calculate the sha256 value +// of a file with a given path. +func CalcPathSHA256Bytes(fpath string) ([]byte, error) { + f, err := os.Open(fpath) + if err != nil { + return nil, err + } + defer f.Close() + return CalcFileSHA256Bytes(f) +} + +// CalcFileSHA256 is used to calculate the sha256 value +// of the file type. +func CalcFileSHA256Bytes(f *os.File) ([]byte, error) { + h := sha256.New() + if _, err := io.Copy(h, f); err != nil { + return nil, err + } + return h.Sum(nil), nil +}